iptables学习笔记

摘要:
注意:对于centOS7最小化系统,没有内置iptables服务,因此需要手动安装。

前言:
学习iptables,需要知道它的工作原理,我们可以把它归纳成“三表五链”,其中“三表”分别为nat表、filter表以及raw表,“五链”为PREROUTING、FORWARD、POSTROUTING、INPUT、OUTPUT,至于他们到底怎么配置,有什么作用,请看下文。

特别注意:
对于centOS 7最小化系统而言,并没有自带iptables服务,需要手动安装。

目录
一、iptables原理
二、iptables常用参数
三、iptables规则的保存、备份与恢复
四、iptables的nat表应用
五、拓展学习


下面开始进入正题
一、iptables原理
  iptalbes工作流程:
    1.当启动服务时,会从/etc/sysconfig/iptables读取配置启动
    2.当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
    3.如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
    4.如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
iptables学习笔记第1张iptables学习笔记第2张
参考链接:http://www.cnblogs.com/bangerlee/archive/2013/02/27/2935422.html

关于“三表”:
    filter 这个表主要用于过滤包的,是系统预设的表,內建三个链:INPUT,OUTPUT以及FORWARD链的作用是在包刚刚到达防火墙时改变他的目的地址,如果需要的话,OUTPUT链改变本地产生的包的目的地址,POSTROUTING链在包就要离开防火墙之前改变其源地址
    nat 主要作用于修改数据包的TOS(Type Of Service,服务类型),TTL(Time Tolive ,生存周期)值以及为数据包设值MARK标记,以实现Qos(Quality of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。五个链:PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD
    raw 对报文设置一个标志,决定数据包是否被状态跟踪机制处理,只有两个链:OUTPUT,PREROUTING


二、iptables常用参数
  因为iptables配置默认是配置filter表,因此本小节只介绍filter表,不过以下参数对于nat、raw表依旧适用。

iptables -A 增加规则
iptables -D 删除规则
iptables -I 插入规则 
iptables -Z 计数器清零
iptables -F 清除当前规则,不能清除规则
iptables -P INPUT DROP 设定默认规则,不能用-F清除规则,只能用iptables -P ACCEPT才能恢复
iptables (-t nat) --line-number-nvL 查看nat表规则(带有ID号)
                  -t为需要配置的表,默认是filter表
  '-j' 跳转到相应的动作,常用有ACCEPT、DROP、REJECT         、MASQUERADE(伪装)
  '-s' 后面跟源地址
  '-d' 后面跟目的地址
  '-p' 后面跟协议,有tcp、udp、icmp等
  '--sport' 后面跟源端口号
  '--dport' 后面跟目的端口号
  '-i' 后面跟输入设备,如eth0
  '-o' 后面跟输出设备,如eth0
  
注意:上面所说的"""目的"(或者成为输入和输出)注意区分,对于INPUT链来说,源是对方,目的是本机,对于OUTPUT链来说则是反过来的,相信这么说你会明白的。如果还是不明白,请继续读一遍工作流程。


三、iptables规则的保存、备份与恢复

规则保存:service iptables save
规则备份:iptables-save > myipt.rule (备份)可以把防火墙规则保存到指定文件中
规则恢复:iptables-restore < myipt.rule (恢复)这样可以已保存到指定文件的规则
关闭服务:service iptables stop   注意:只要有规则的增加,就会自动开启服务

四、iptables的nat表应用
  路由器就是使用iptables的nat原理实现,举两个栗子

 Q1:假设你的机器上有两块网卡eth0,eth1,其中eth0的IP为192.168.10.11,eth1的IP为172.16.10.11,eth0连接了internet但是eth1没有连接,现在又另一台机器172.16.10.12和eth1是互通的,那么如何设置也能够让eth1的这台机器能够连接internet呢?
 解题思路:打开主机的地址转发功能——————>   echo "1"> /proc/sys/net/ipv4/ip_forward
 问题解析:/proc/sys/net/ipv4/ip_forward文件,默认是0。
意为禁止数据包的转发,因此如果把它里面的内容置为1,则允许数据包的转发,用于有一张以上的网卡。
重启服务器之后又会变为0,因此如果想自动执行,可以将该命令写入到脚本/etc/rc.d/rc.local中 A1:iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -o eth0 -j MASQUERADE
Q2:如何将本地80端口的请求转发到8080端口,当前主机ip为192.168.2.18
A2:iptables -t nat -I POSTROUTING -d 192.168.2.18 -p tcp --dport 80 -j DNAT --to 192.168.2.18:8080
    

五、拓展学习

  1.iptables支持时间控制用户的行为,如:指定工作日的8点到18点期间才能访问445端口
    iptables -A INPUT -p tcp --dport 445 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --timestop 18:00:00 -j ACCEPT
  2.iptables写一条规则,只同时允许443,80,1723,22,3306,11211,25,110,dns,ntp协议,其他端口拒绝,即多端口开放
    iptables -I INPUT -p tcp -m multiport --dport 443,80,1723,22,3306,11211,25,110,53,123 -j ACCEPT
    iptables -P INPUT -j DROP

免责声明:文章转载自《iptables学习笔记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇xss攻击方式以及防范介绍opencvconvertScaleAbs位深转化函数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

jq获取动态添加的行 并查找点击行同胞元素中的input值 遍历table中td下元素的值

1.非动态添加的行 获取同胞中的input输入值$("op-submit").click(function(event){ var text1 = $(event.currentTarget).parent().prev().find("input").val(); var text2 = $(event.currentTarget).p...

移动端解决input被输入法挡住的问题

有过移动端web开发经验的人应该都会遇到这个问题,一个input在页面最底部或者偏下的位置,输入时由于输入法的弹出,在部分浏览器下由于不会自动计算window的高度,导致input被输入法挡住。本文的解决方式是利用scrollTop来解决,在input获取焦点后,动态地设置body的高度并设置scrollTop到指定位置,这样可以保证input会滚动到输入...

模糊查询

js页面$('.layui-btn').click(function () { var inputVal = $('.layui-input').val() table.reload('bookReload', { url: '/stu/findStu' ,where: { stuname :...

python-输入

1. python2版本中 咱们在银行ATM机器前取钱时,肯定需要输入密码,对不? 那么怎样才能让程序知道咱们刚刚输入的是什么呢?? 大家应该知道了,如果要完成ATM机取钱这件事情,需要先从键盘中输入一个数据,然后用一个变量来保存,是不是很好理解啊 1.1 raw_input() 在Python中,获取键盘输入的数据的方法是采用 raw_input...

小程序表单回显

input中回显: 在需要回显数据的input中添加value属性,并传入需要的数据; 在其它标签中回显: 在测试input,view,text标签后发现,value属性在后两者中没有生效,如果需要回显的数据存在多个选项,可以使用自定义属性来设置和显示; 单个数据可以在JS初始数据data中先设置初始数据 -> 获取需要回显的数据 ->...

动态表单

最近需要做一个动态表单管理,因为以前没什么经验,所以自己做了一个小demo研究了一下,现将自己的整体思路再从头顺一下,也顺便记录一下这次的学习经验,呵呵 1、  首先,要想实现动态表单的管理,自己首先想到的是不就是执行sql语句对数据库表的字段进行增删改嘛,后来想想并不这么简单,因为要关乎到以后用户添加数据时表单的动态生成,以及还要生成动态的js表单验证,...