Iptables的增删改查

来源:互联网 发布:sql存储过程脚本 编辑:程序博客网 时间:2024/05/18 04:56

Linux下IP tables的四张表:

Filter 负责过滤功能,防火墙,内核模块:iptables_filter

Raw 关闭nat表上启用的链接追踪机制:iptables_raw

Mangle 拆解报文,做出修改,并重新封装的功能:iptables_mangle

Nat network address translation 网络地址转换功能:iptables_nat

而每张表下面有不同链表:

Filter:

Chain INPUT (policy ACCEPT)

Chain FORWARD (policyACCEPT)

Chain OUTPUT (policyACCEPT)

Raw:

Chain PREROUTING (policyACCEPT)

Chain OUTPUT (policy ACCEPT)

Mangle:

Chain PREROUTING (policyACCEPT)

Chain INPUT (policy ACCEPT)

Chain FORWARD (policy ACCEPT)

Chain OUTPUT (policy ACCEPT)

Chain POSTROUTING (policyACCEPT)

Nat:

Chain PREROUTING (policyACCEPT)

Chain POSTROUTING (policyACCEPT)

Chain OUTPUT(policy ACCEPT)

查:

1.      查看对应表的所有规则,”-t” 表示指定要操作的表,省略“–t 表名” 的时候,默认表示操作filter表,”-L” 表示列出规则,即查看规则

iptables -t 表名 –L

2.      查看制定表的指定链中的规则

iptables -t 表名 -L链名

3.      查看指定表的所有规则,并且显示更详细的信息,”-v” 表示verbose,表示详细的使用时会显示出”计数器”的信息,可以合并简写为”iptables –t 表名-vL”

iptables -t 表名 -v -L

4.      表示查看表的所有规则,并且再显示规则的时候,不对规则中的IP或者端口进行名称反解,”-n” 选项表示不解析IP地址

iptables -t 表名 -n -L

5.      表示查看表的所有规则,并且显示行号,” –line-number”可以简写为” –line”是两条横杠。

iptables –line-number –t 表名 L

6.      表示查看表中的所有规则,并且显示更详细的信息(-v),不过,计数器中的信息显示为精确的计数值,而不是显示为经过可读优化的计数值,”-x” 选项表示显示计数器的精确值

iptables –t 表名 –v –x –L

7.      在实际使用的过程中,短的选项都是可以合并的,如下所示:

iptables --line -t filter –nvxL

产看某张表中的某条链

iptables --line -t filter -nvxL INPUT


增:

1.       先使用下面的这条指令来进行添加:

Iptables –t filter –I INPUT –s192.168.75.129 –j DROP

这条指令表示丢弃来自192.168.75.129的所有数据包。其中”-I”表示“插入” ,那么“INPUT”就表示INPUT链表, “-s”表示指定源地址,“-j”表示讲要执行的动作,“DROP”表示执行的动作为丢弃。

“-j”后面所对应的动作有:

DROP 丢弃数据包,这个没有返回不会有任何提示

ACCEPT允许通过

REJECT拒绝数据包通过,这个会有返回说明拒绝

2.       链表中的执行顺序:

执行三条指令:”-A”表示在末尾追加,“-I”表示在插入的同时,是在前头插入

第一条指令:Iptables –t filter –I INPUT –s 192.168.75.129 –j DROP

第二条指令:Iptables –t filter –A INPUT –s 192.168.75.129 –j ACCEPT

第三条指令:Iptables –t filter –I INPUT –s 192.168.75.129 –j ACCEPT


通过实验得出的上图结果表示:

在执行第三条指令之前,如果使用”-A”在末尾追加的即使是放行,也不会生效,因为它的上面有一条DROP丢弃的规则存在,iptables是从上向下依次执行的,而到了DROP的规则处,数据包已经全部丢弃了,所以不会匹配到第三条规则。那么使用“-I”在前面插入,就优先执行这一条,所以就又可以通行了。

3.      在指定位置插入规则:

在查看规则的时候可以用“iptables --line -L”这样就可以看到规则前面的序号:


那么如果在指定的位置插入规则呢?其实按这个序号来的,看如下指令:

iptables -I INPUT 2 -s 192.168.75.20 -j ACCEPT


这样就插入进去了。


删:

使用“iptables –t表名 –F链表名”可以清空表名内的链表名下的所有规则

         删除规则有两种方式:

                   第一:根据规则的序号去进行删除

                   第二:根据具体的匹配条件与动作去进行删除

1.      根据规则的序号去进行删除:

iptables –D INPUT 3  (省略-t默认表示操作filter)

就可以把上图中的DROP的那条规则给删除掉:


2.      根据具体的匹配条件与动作去进行删除:

iptables –D INPUT –s 192.168.75.20 –j ACCEPT

再次进行查看:



改:

如果是改可以使用”-R”的选项来进行更改,但是改的话,建议在改的时候只更改需要更改的选项,其他的选项还是原样敲出来。否则万一你只是改动作的话,而你的-s源地址匹配条件又没有指定,在这种情况下,系统会自动默认为0.0.0.0/0即全网段。那么一旦发生事故则不可估量。最好的办法是删除一条规则,在原来的位置重新添加。

iptables -R INPUT 3 -s 192.168.75.122 -j ACCEPT

其中的3表示序号。

当然还可以更改链表里面的默认规则:


iptables -t filter -P FORWARD DROP


保存:

在默认情况下,我们对防火墙所做的更改,都是临时的,一旦在防火墙重启或者重启机器后,配置都会丢失,所以在配置完成以后,我们还需要对我们所做的配置进行保存。

centos6centos7中的保存的方式会有不同:

Centos6中:

service iptables save

而保存的路径为:/etc/sysconfig/iptables

Centos7中:

           因为在centos7中已经弃用了iptables的功能,转而使用firewall。不过可以通过yum源来安装iptablesiptables-services(iptables一般系统默认已经安装过了,所以只用安装iptabels-services就可以了,而规则存放的路径同样在:/etc/sysconfig/iptables的文件中。)

下面是安装iptables-services的步骤:

#配置好yum源以后安装iptables-service

# yuminstall -y iptables-services

#停止firewalld

#systemctl stop firewalld

#禁止firewalld自动启动

#systemctl disable firewalld

#启动iptables

#systemctl start iptables

#iptables设置为开机自动启动,以后即可通过iptables-service控制iptables服务

#systemctl enable iptables

这种配置只用在centos7中配置一次即可.



参考文献:http://www.zsythink.net/archives/1517