Iptables防火墙配置详解

iptables防火墙配置详解

iptables简介

iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表

(1)filter表负责过滤数据包,包括的规则链有,input,output和forward;

(2)nat表则涉及到网络地址转换,包括的规则链有,prerouting,postrouting和output;

(3)mangle表则主要应用在修改数据包内容上,用来做流量整形的,默认的规则链有:INPUT,OUTPUT,NAT,POSTROUTING,PREROUTING;

input匹配目的IP是本机的数据包

forward匹配流经本机的数据包

prerouting用来修改目的地址用来做DNAT

postrouting用来修改源地址用来做SNAT。

iptables主要参数

-A 向规则链中添加一条规则,默认被添加到末尾

-T指定要操作的表,默认是filter

-D从规则链中删除规则,可以指定序号或者匹配的规则来删除

-R进行规则替换

-I插入一条规则,默认被插入到首部

-F清空所选的链,重启后恢复

-N新建用户自定义的规则链

-X删除用户自定义的规则链

-p用来指定协议可以是tcp,udp,icmp等也可以是数字的协议号

-s指定源地址

-d指定目的地址

-i进入接口

-o流出接口

-j采取的动作,accept,drop,snat,dnat,masquerade

--sport源端口

--dport目的端口,端口必须和协议一起来配合使用

注意:所有链名必须大写表名必须小写动作必须大写匹配必须小写


iptable配置实例

iptable基本操作

iptables -L 列出iptables规则

iptables -F 清除iptables内置规则

iptables -X 清除iptables自定义规则

设定默认规则

在iptables规则中没有匹配到规则则使用默认规则进行处理

iptables -P INPUT DROP

iptables -P OUTPUT ACCEPT

iptables -P FORWARD DROP

[root@linux ~]# iptables [-t nat] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]

参数:

-P :定义政策( Policy )。注意,这个 P 为大写啊!

ACCEPT :该封包可接受

DROP :该封包直接丢弃,不会让 client 端知道为何被丢弃。

范例:将本机的 INPUT 设定为 DROP ,其它设定为 ACCEPT

[root@linux ~]# iptables -P INPUT DROP

[root@linux ~]# iptables -P OUTPUT ACCEPT

[root@linux ~]# iptables -P FORWARD ACCEPT

[root@linux ~]# iptables -L -n

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain INPUT (policy DROP)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

# 由于 INPUT 设定为 DROP 而又尚未有任何规则,所以上面的输出结果显示:

配置SSH规则

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT 

如果你把OUTPUT 设置成DROP,就需要加上这个规则,否则SSH还是不能登录,因为SSH服务职能进不能出。

只允许192.168.0.3的机器进行SSH连接

iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT

如果要允许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.

允许loopback回环通信

IPTABLES -A INPUT -i lo -p all -j ACCEPT   IPTABLES -A OUTPUT -o lo -p all -j ACCEPT

目的地址转换,映射内部地址

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dprot 81 -j DNAT --to 192.168.0.2:80 iptables -t nat -A PREROUTING -i ppp0 -p tcp --dprot 81 -j DNAT --to 192.168.0.1-192.168.0.10

源地址转换,隐藏内部地址

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1   iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10

地址伪装,动态ip的NAT

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

masquerade和snat的主要区别在于,snat是把源地址转换为固定的IP地址或者是地址池而masquerade在adsl等方式拨号上网时候非常有用,因为是拨号上网所以网卡的外网IP经常变化,这样在进行地址转换的时候就要在每次都要修改转换策略里面的ip,使用masquerade就很好的解决了这个问题,他会自己去探测外网卡获得的ip地址然后自动进行地址转换,这样就算外网获得的ip经常变化也不用人工干预了。

开启转发功能

iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT 只允许已建连接及相关链接对内转发   ptables -A FORWARD -i eth1 -o eh0 -j ACCEPT 允许对外转发

过滤某个MAC

iptables -A FORWARD -m mac --mac -source MAC地址 -j DROP

报文经过路由后,数据包中原有的MAC信息会被替换,所以在路由后的iptables中使用mac匹配没有意义。

数据包整流

iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s -j ACCEPT   iptables -A FORWARD -d 192.168.0.1 -j DROP

多端口匹配

用以一次匹配多个端口

iptables -A INPUT -p tcp -m muliport --dport s 21,22,25,80,110 -j ACCEPT

丢弃非法连接

iptables -A INPUT -m state --state INVALID -j DROP   iptables -A OUTPUT -m state --state INVALID -j DROP   iptables-A FORWARD -m state --state INVALID -j DROP

存储于恢复iptables规则

iptables-save > somefile   iptables-restore < somefile




iptables的基本语法规则参考:

1、查看现有的iptables规则:

sudo iptables -L

2、允许已建立的连接接收数据:

sudo ptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

3、开放常见端口22

sudo iptables -A INPUT -p tcp -i eth0 --dport ssh(22) -j ACCEPT   
sudo iptables -A INPUT -p tcp -i eth0 --dport telnet(23) -j ACCEPT   
sudo iptables -A INPUT -p tcp -i eth0 --dport www(80) -j ACCEPT

4、对每一个报文,iptables依次测试每一条规则,看报文于规则是否相匹配。一旦找到一条匹配的规则, 就根据此规则中指定的行动,对报文进行处置,而对后面的规则不再进行测试。因此,如果我们在规则表的 末尾添加一条规则,让iptables丢弃所有报

sudo iptables -A INPUT -j DROP

5、仍有一个问题,就是环回接口也被阻断了。刚才添加DROP规则的时候其实就可以使用-i eth0来解决这一

问题。然而我们也可以为环回接口添加一条新规则来解决这个问题。但是不能将新规则追加到末尾,因为前

一条规则已经把所有报文都丢弃了,而应该把它插到DROP规则前面,即规则表中第五行的位置(即DROP之前)

iptables -I INPUT 5 -i lo -j ACCEPT

6、sudo iptables -L -v查看详细详细

7、iptables-save > /etc/iptables.up.rules(保存当前iptables的设置)

可以vi编辑 /etc/iptables.up.rules

编辑后 iptables-restore < /etc/iptables.up.rules

8、这样设置的iptables每次开机后就失效了,开机自动配置

a. iptables-save > /etc/iptables.up.rules   
b. vi /etc/network/interfaces(最后-s 手动选择截图区域或者窗口两行为我们自己所加的)   auto eth0   iface eth0 inet dhcp   pre-up iptables-restore < /etc/iptables.up.rules   post-down iptables-restore < /etc/iptables.down.rules

9、清楚iptables规则

sudo iptables -F   

10、丢弃所有来自127.0.0.1的ICMP包(eg:ping)

sudo iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP

11、有时一个包太大,不可能适合所有线路。这样的话,包会被分成片,然后当作多个包发送。最终重组这些分片来重建整个包

sudo iptables -A OUTPUT -f -d 192.168.1.1 -j DROP(丢弃任何发往192.168.1.1的分片)

12、有时只允许单向的TCP连接会很有用。例如,你可能会允许连接到外部WWW服务器,但不会允许来自那个服务器的连接。 最简单的举动可能是阻止来自那个服务器的包,可惜,TCP连接需要包双向传送(才能正常工作)。

解决办法是,只阻挡那些用来请求连接的包。这些包称为SYN包(OK,从技术上说,它们的SYN标志被设置,而没有设置RST和ACK标志,不过我们简单的称为SYN包)。通过只阻止这种包,我们就可以阻止来自那些地方的连接企图。'--syn'标志是这样用的:只对指定了TCP协议的规则有效。例如,指定来自192.168.1.1的连接请求。

sudo iptables -A INPUT -p TCP -s 192.168.1.1 --syn

书写规则:

iptables [-t table] command CHAIN [NUM ]   match criteria -j TARGET

CHAIN:  对链进行的操作

            -N:new     新建一条链

            -X          删除一条用户自定义链(空链)

            -F:flush   清空一条链,默认清空表中所有链

            -Z:zero    清空计数器,

iptables中每条规则默认有两个计数器,用于记录本条规则所匹配到的数据包的个数和本条规则所匹配到的数据包的总大小

            -P:policy  定义链的默认处理策略

            -E  重命名链

RULE:对规则进行的操作

       -A:append   追加,在链的最后加一条规则

       -I:insert  插入一条规则  一般使用-I CHAIN NUM 给规则加一个编号

       -R:replace 替换某条规则,规则被替换并不会改变顺序,必须要指定替换的规则编号:-R CHAIN NUM。

       -D:delete  删除一条规则,可以输入完整规则,或者直接指定标号加以删除:-D CHAIN NUM。

LIST:查看

    -L:list 列出链中的所有规则

辅助性子命令:-n  numeric 以数字的形式来显示地址,默认显示主机名称

-v  verbose 显示详细信息 ,支持-vv  -vvv格式,v越多,信息越详细。

-x  显示原有信息,不要做单位换算

--line-numbers  显示规则的行号

Match Creteria(匹配规则):

基本匹配

     -s,--src,--source  匹配数据包的源地址

     -d,--dst,--destination 匹配数据包的目标地址

     -i, 指定数据包的流入接口(逻辑接口)

     -o, 指定数据包的流出接口

     -p, 做协议匹配 protocol,(tcp|udp|icmp)

扩展匹配:对某一种功能的扩展

      隐含扩展 :对某一种协议的扩展

      -p tcp

        --sport 指定源端口

        --dport 指定目的端口

        --tcp-flags(SYN,ACK,FIN,PSH,URG,RST,ALL,NONE)指定TCP的标志位

         需要跟两个标志位列表,如:SYN,ACK,FIN,RST SYN 

第一个列表表示要检查的位,第二个列表表示第一个列表中出现的位必须为1,未出现的必须为0

--syn  只允许新连接

     -p  udp  无连接协议

         --sport   指定源端口

         --dport   指定目的端口

      -p  icmp

          --icmp-type  echo-request,8(ping出去,请求回应,) echo-reply,0(给予回应)

     显式扩展 :额外附加的更多的匹配规则,功能性地扩展

-m state   状态检测扩展

        NEW         用户发起一个全新的请求

        ESTABLISHED 对一个全新的请求进行回应

        RELATED   两个完整连接之间的相互关系,一个完整的连接,需要依赖于另一个完整的连接

        INVALID   无法识别的状态

-m multiport   --sports  22,80,443 指定多个源端口

                    --dports  22,80,443 指定多个目标端口

                    --ports    非连续端口

     -m connlimit   限定并发连接速率

             !--connlimit-above 5  高于五个将拒绝

     -m string   字符串匹配

             --algo bm|kmp 指定算法 

             --string pattern

     -m time  基于时间的匹配

        --timestart

        --timestop

        --days

-j  TARGET    处理动作

     ACCEPT    接受

     DROP      悄悄丢弃,请求端没有任何回应

     REJECT    明确拒绝

     SNAT      源地址转换

     DNAT      目标地址转换

     REDIRECT  端口重定向

     LOG       将访问记录下来

[root@server27 ~]# iptables -L -n

Chain INPUT (policy ACCEPT)

target     prot opt source               destination        

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

下面我们写两条规则:

只允许192.168.0.0网段的主机通过SSH访问该主机

允许本机通过SSH连接192.168.0.0网段的其他主机

[root@server27 ~]# iptables -A INPUT -s 192.168.0.0/24 -d 192.168.0.127 -p tcp --dport 22 -j ACCEPT

[root@server27 ~]# iptables -A OUTPUT -s 192.168.0.127 -d 192.168.0.0/24 -p tcp --sport 22 -j ACCEPT

[root@server27 ~]# iptables -L -n

Chain INPUT (policy ACCEPT)

target     prot opt source               destination        

ACCEPT     tcp  --  192.168.0.0/24       192.168.0.127       tcp dpt:22

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination        

ACCEPT     tcp  --  192.168.0.127        192.168.0.0/24      tcp spt:22

定义默认策略

[root@server27 ~]# iptables -t filter -P INPUT DROP

[root@server27 ~]# iptables -t filter -P OUTPUT DROP

PS:上面规则一定不要写错了,否则你将会把自己拒之门外。

允许本机PING本网段任何主机

[root@server27 ~]# iptables -t filter -A OUTPUT -s 192.168.0.127 -d 0.0.0.0/0.0.0.0 -p icmp --icmp-type 8 -j ACCEPT   //**出去的数据包

[root@server27 ~]# iptables -t filter -A INPUT -s 0.0.0.0/0.0.0.0 -d 192.168.0.127 -p icmp --icmp-type 0 -j ACCEPT   //** 回来的数据包

[root@server27 ~]# ping 192.168.0.236 -c 4

PING 192.168.0.236 (192.168.0.236) 56(84) bytes of data.

64 bytes from 192.168.0.236: icmp_seq=1 ttl=64 time=0.242 ms

64 bytes from 192.168.0.236: icmp_seq=2 ttl=64 time=0.249 ms

64 bytes from 192.168.0.236: icmp_seq=3 ttl=64 time=0.437 ms

64 bytes from 192.168.0.236: icmp_seq=4 ttl=64 time=0.204 ms

允许本网段任何主机PING本机

[root@server27 ~]# iptables -t filter -A OUTPUT -s 192.168.0.127 -d 0.0.0.0/0.0.0.0 -p icmp --icmp-type 0 -j ACCEPT 

[root@server27 ~]# iptables -t filter -A INPUT -d 192.168.0.127 -s 0.0.0.0/0.0.0.0 -p icmp --icmp-type 8 -j ACCEPT

wps_clip_image-23079

PS:当目标网络指定为任意主机时,应该为0.0.0.0/0.0.0.0

凡是来自192.168.0.0/24网段的主机均使用一个自定义的新链

先开启http服务

自定义一条链,拒绝192.168.0.0/24网段的主机对http服务的访问

[root@server27 ~]# iptables -N attach-input

[root@server27 ~]# iptables -A attach-input -s 192.168.0.0/24 -d 192.168.0.127 -p tcp --dport 80 -j DROP

[root@server27 ~]# iptables -L -n

wps_clip_image-25333

此时,自定义链依旧无法使用,我们只能在固定链上做转发请求数据包到自定义链上,才能实现自定义链的功能。

[root@server27 ~]# iptables -A INPUT -s 192.168.0.0/24 -j attach-input

[root@server27 ~]# iptables -L -n

Chain INPUT (policy ACCEPT)

target     prot opt source               destination        

attach-input  all  --  192.168.0.0/24       0.0.0.0/0 

此时已经无法访问到网页。

将INPUT链删除之后,马上又可以访问了。

[root@server27 ~]# iptables -F INPUT

删除自定义链,先清空链,再清空规则

[root@server27 ~]# iptables -F attach-input

[root@server27 ~]# iptables -X attach-input

PS:每条规则都可以使用“!”取反。如: -s '!' 192.168.0.0/24,加单引号防止被识别成其他字符。

下面我们来实现显式扩展状态检测的功能:

先将默认策略置为DROP

[root@server27 ~]# iptables -P INPUT DROP

[root@server27 ~]# iptables -P OUTPUT DROP

[root@server27 ~]# iptables -P FORWARD DROP

[root@server27 ~]# iptables -A INPUT -d 192.168.0.127 -p tcp --dport 80 -j ACCEPT   //*进来的数据包

[root@server27 ~]# iptables -A OUTPUT -s 192.168.0.127 -p tcp --sport 80 -j ACCEPT  //*出去的数据包

但是这两条规则对于反弹式木马是无效的。

我们可以基于显式扩展写这样两条规则:

[root@server27 ~]# iptables -I INPUT 1 -d 192.168.0.127 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT   //**进来的数据包

[root@server27 ~]# iptables -I OUTPUT  -s 192.168.0.127 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT     //**出去的数据包

删除我们之前建立的那两条规则:

[root@server27 ~]# iptables -D INPUT 2

[root@server27 ~]# iptables -D OUTPUT 2

wps_clip_image-2080

此时,已经可以正常访问http服务。

我们试一下ftp服务:

先开启ftp服务

先建立这样四条规则,看看能不能达到效果,

[root@server27 ~]# iptables -A INPUT -d 192.168.0.127 -p tcp --dport 21 -j ACCEPT

[root@server27 ~]# iptables -A INPUT -d 192.168.0.127 -p tcp --dport 20 -j ACCEPT

[root@server27 ~]# iptables -A OUTPUT -s 192.168.0.127 -p tcp --sport 21 -j ACCEPT

[root@server27 ~]# iptables -A OUTPUT -s 192.168.0.127 -p tcp --sport 20 -j ACCEPT

客户端请求是被动模式,实验证明,我们仅仅开始21 20端口无法达到效果。这样我们就得用到状态检测的RELATED机制。

PS:要想实现FTP的访问需先手动加载额外的模块:ip_conntrack_ftp,ip_conntrack_tftp,ip_nat_ftp,,ip_nat_tftp(and others)

[root@server27 ~]# modprobe ip_conntrack_ftp

[root@server27 ~]# modprobe ip_nat_ftp

[root@server27 ~]# modprobe ip_nat_tftp

[root@server27 ~]# modprobe ip_conntrack_tftp

实现自动加载的功能:编辑/etc/sysconfig/iptables-config文件,在“IPTABLES_MODULES=”后面写上要添加的模块就可以了。

wps_clip_image-27471

[root@server27 ~]# iptables -A INPUT -d 192.168.0.127 -p tcp --dport 21 -j ACCEPT

[root@server27 ~]# iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT

[root@server27 ~]# iptables -A INPUT -d 192.168.0.127 -p tcp -m state --state RELATED -j ACCEPT

[root@server27 ~]# iptables -R OUTPUT 2 -m state --state ESTABLISHED,RELATED -j ACCEPT  //**修改上一条规则,增加RELATED状态

[root@server27 ~]# iptables -R INPUT 3 -d 192.168.0.127 -p tcp  -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT    //**修改INPUT第三条规则,增加NEW,ESTABLISHED状态

wps_clip_image-21860

此时ftp已经可以访问了,要保证所有的规则能够永久有效需要使用:service iptables save来保存。

基于字符串匹配的显式扩展功能:

[root@server27 ~]# iptables -A  INTPUT  -d 192.168.0.127  -p  tcp  --dport 80 -m string  --algo  kmp  --string  'qq.com'   -j  REJECT 

PS:iptables工作在OSI第三层,第四层。默认情况下,iptables无法限定第七层的应用程序,要想实现限制七层某些应用程序的功能,需要重编译内核,在内核上打上补丁 layer7。.

源地址换换和目标地址转换:

PS:源地址转换必须在POSTROUTING链上做。


    目标地址转换必须在PREROUTING链上做。

下面我们来实现源地址的功能:

我们假设这样一种场景:

wps_clip_image-31021

192.168.0.254是工作在外网的一台WEB服务器,中间的那台是企业里的NAT服务器,我们在上面添加iptables的规则,使其实现地址转换的功能,PC机是工作在企业内部。我们的最终目的是192.168.80.30这台计算机通过NAT服务器可以访问到192.168.0.254的WEB服务。

实验环境搭建:192.168.0.254  192.168.0.127使用虚拟机网卡的桥接功能;

              192.168.80.129  192.168.080.130使用虚拟机网卡的仅主机功能;

为PC机设置网关:

[root@station39 ~]# route add default gw 192.168.80.129

下面开始来配置NAT服务器:

首先要开启NAT服务器的内核路由功能:

[root@server27 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

[root@server27 ~]# cat /proc/sys/net/ipv4/ip_forward

1

设置规则:

[root@server27 ~]# iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -d 192.168.0.0/24 -j SNAT --to-source 192.168.0.127

[root@server27 ~]# iptables -t nat -L -n

Chain PREROUTING (policy ACCEPT)

target     prot opt source               destination        

Chain POSTROUTING (policy ACCEPT)

target     prot opt source               destination        

SNAT       all  --  192.168.80.0/24      192.168.0.0/24      to:192.168.0.127

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination        

OK,我们用192.168.80.130这台主机访问一下192.168.0.254,看,已经可以了!

wps_clip_image-20711

只需一条规则就可以搞定,很方便吧!

PS:如果我们使用路由功能来访问254这台主机的话,WEB服务器的访问日志将记录的访问地址是192.168.80.130,而如果我们使用地址转换的功能来访问的话,访问日志记录的访问地址则是192.168.0.127。.

一般我们上网的时候,所获得的IP都是动态的,怎么办?

做源地址转换的时候,还有一个小功能MASQUERADE(地址伪装),使用这个功能,我们不需要

指定目标地址,它会自动探测能够上互联网的地址,并自动将内网地址转换过来。缺陷:比较耗费资源。

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

接下来开始实现目标地址转换功能:

wps_clip_image-1256

场景:假设192.168.80网段为一个提供WEB服务的网站的内网,中间的为网站的NAT服务器,远端的客户端192.168.0.26想通过中间的NAT服务器来访问内部的192.168.80.130提供的WEB服务,这里就要用到目标地址转换了。

环境搭设:192.168.80.130  192.168.80.129使用虚拟机网卡的仅主机功能

           192.168.0.26  192.168.0.127使用虚拟机网卡的桥接功能

设置192.168.80.130的网关:

[root@station39 ~]# route add default gw 192.168.80.129

开始在NAT服务器上设置规则:

这里依然要打开内核的路由功能。

开始之前先将刚才做的源地址转换实验的规则给清除了

[root@server27 ~]# iptables -t nat -F

开始写规则:

[root@server27 ~]# iptables -t nat -A PREROUTING -s 192.168.0.0/24 -d 192.168.0.127 -p tcp --dport 80 -j DNAT --to-destination 192.168.80.130


[root@server27 ~]# iptables -t nat -L -n

Chain PREROUTING (policy ACCEPT)

target     prot opt source               destination        

DNAT       tcp  --  192.168.0.0/24       192.168.0.127       tcp dpt:80 to:192.168.80.130

Chain POSTROUTING (policy ACCEPT)

target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination      

OK!规则已经写好了,我们使用192.168.0.26来访问一下192.168.0.127试试,已经可以访问了,其实提供WEB服务的是192.168..80.130这台主机,这就是目标地址转换的功能。

wps_clip_image-27149

我们再查看一下192.168.80.130这台WEB服务器的访问日志:

wps_clip_image-24338

看,源地址并没有发生改变!只是访问的目标地址被转换到192.168.80.130上来了,这就是目标地址转换。

l7-filter 七层过滤,对内核打补丁之后,能够支持对应用层数据的过滤。

编译过程相对繁琐一些,也不是本文主要讲述内容,所以就不在此详细说明,有兴趣的朋友可以去网上查找相关教程。

编译完成并启用内核之后,就可以使用l7filter的过滤功能了。

我们添加这样两条规则:

[root@server27 ~]# iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -d 192.168.0.0/24 -j SNAT --to-source 192.168.0.127

[root@server27 ~]# iptables -t nat -A FORWARD -m layer7 --l7proto qq -j REJECT

这里就不再演示效果了。

保存iptables规则:

/etc/init.d/iptables save

service iptables save

保存位置:在/etc/sysconfig/iptables文件内:

# Generated by iptables-save v1.3.5 on Fri Mar  4 19:44:47 2011

*filter

:INPUT DROP [33:2399]

:FORWARD DROP [0:0]

:OUTPUT DROP [7:540]

-A INPUT -d 192.168.0.127 -p tcp -m tcp --dport 21 -j ACCEPT

-A INPUT -d 192.168.0.127 -p tcp -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

COMMIT

# Completed on Fri Mar  4 19:44:47 2011                    

指定规则保存位置:

iptables-save > /etc/sysconfig/iptables/iptables.20110307

生效保存的规则

iptables-restore < /etc/sysconfig/iptables/iptables.20110307

避免在远程连接写规则的时候一不小心自己被防火墙拒之门外,可以写一个小脚本:

#!/bin/bash

iptables -F

iptables -P  INPUT   ACCEPT

iptables -P  OUTPUT  ACCEPT

at now+10min


你可能感兴趣的:(iptables防火墙配置详解)