6.4 Linux防火墙的语法

对于数据报而言,有以下几个流向:

PREROUTING→FORWARD→POSTROUTING

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

PREROUTING→INPUT→本机OUTPUT→POSTROUTING

如果留意可能会发现,数据报的两种主要流向其实也是后面iptables的两种工作模式:一是用作NAT路由器,另一种是用作主机防火墙,所以对应地要在iptables的规则链上做文章(工作中多用于主机防火墙,大家也可以将学习的重心放在这点上)。更为详细的iptables数据流入和流出流程,建议参考图6-6。

阅读 ‧ 电子书库

图6-6 iptables数据包流入和流出详细流程图

iptables会根据不同的数据处理包处理功能使用不同的规则表。它包括如下3个表:filter、nat和mangle。

·filter是默认的表,包含真正的防火墙过滤规则。内建的规则链包括:INPUT、OUTPUT和FORWARD。

·nat表包含源、目的地址及端口转换使用的规则,内建的规则链包括PERROUTING、OUTPUT和POSTROUTING。

·mangle表包含用于设置特殊的数据包路由标志的规则。随后filter表中的规则会检查这些标志。内建的规则链包括:PREROUTING、INPUT、FORWARD、POSTROUTING和OUTPUT。

表中对应的相关规则链的功能如下。

·INPUT链:当一个数据包由内核中的路由计算确定为本地的Linux系统后,它会通过INPUT链的检查。

·OUTPUT链:保留给系统自身生成的数据包。

·FORWARD链:经过Linux系统路由的数据包(即当iptables防火墙用于连接两个网络时,两个网络之间的数据包必须流经该防火墙)。

·PREROUTING链:用于修改目的地址(DNAT)。

·POSTROUTING链:用于修改源地址(SNAT)。

iptables详细语法如下所示:

iptables [-t表名

] <-A| I |D |R > 链名

[规则编号

] [-i | o 网卡名称

] [-p 协议类型

] [-s 源

IP地址

| 源子网

][--sport 源端口号

] [-d 目标

IP地址

| 目标子网

][--dport 目标端口号

] <-j 动作

>

阅读 ‧ 电子书库

注意

此语法规则详细,逻辑清晰,推荐记忆此语法格式。在刚开始写iptables规则时就应该养成良好的习惯,用此语法格式来规范脚本,这对以后的工作会大有帮助。

下面是关于语法的详细说明。

(1)定义默认策略

作用:当数据包不符合链中任意一条规则时,iptables将根据该链预先定义的默认策略来处理数据包。

默认策略的定义格式为:

iptables [-t 表名

] <-P> <链名

> <动作

>

参数说明如下:

[-t 表名

]

指将默认策略应用于哪个表,可以使用filter、nat和mangle,如果没有指定使用哪个表,iptables就默认使用filter表。

<-P>

定义默认策略。

<链名

>

指将默认策略应用于哪个链,可以使用INPUT、OUTPUT、FORWARD、PREROUTING和POSTROUTING。

<动作

>

处理数据包的动作,可以使用ACCEPT(接受数据包)和DROP(丢弃数据包)。

(2)查看iptables规则

查看iptables规则的命令格式为:

iptables [-t 表名

] <-L> [链名

]

参数说明如下:

[-t 表名

]

指查看哪个表的规则列表,表名可以使用filter、nat和mangle,如果没有指定使用哪个表,iptables就默认查看filter表的规则列表。

<-L>

查看指定表和指定链的规则列表。

[链名

]

指查看指定表中哪个链的规则列表,可以使用INPUT、OUTPUT、FORWARD、PREROUTING和POSTROUTING,如果不指明哪个链,则将查看某个表中所有链的规则列表。

(3)增加、插入、删除、替换iptables规则

参数说明如下:

[-t表名

]

定义将默认策略应用于哪个表,可以使用filter、nat和mangle,如果没有指定使用哪个表,iptables就默认使用filter表。

-A

新增加一条规则,该规则将会增加到规则列表的最后一行,该参数不能使用规则编号。

-I

插入一条规则,原本该位置上的规则将会往后顺序移动,如果没有指定规则编号,则在第一条规则前插入。

-D

从规则列表中删除一条规则,可以输入要删除的完整规则,或者直接指定规则编号加以删除。

-R

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

<链名

>

指定查看表中哪个链的规则列表,可以使用INPUT、OUTPUT、FORWARD、PREROUTING和POSTROUTING。

[规则编号

]

规则编号在插入、删除和替换规则时使用,编号是按照规则列表的顺序排列的,规则列表中第一条规则的编号为1。

[-i | o网卡名称

]

i是指定数据包从哪块网卡进入,o是指定数据包从哪块网卡输出。网卡名称可以使用ppp0、eth0和eth1等。

[-p协议类型

]

可以指定规则应用的协议,包含TCP、UDP和ICMP等。

[-s源

IP地址

|源子网

]

-s后面接源主机的IP地址或子网地址。

[--sport源端口号

]

--sport后面接数据包的IP源端口号。

[-d目标

IP地址

|目标子网

]

-d后面接目标主机的IP地址或子网地址。

[--dport目标端口号

]

--dport后面接数据包的IP目标端口号。

<-j动作

>

下面是处理数据包的动作,以及各个动作的详细说明。

·ACCEPT:接收数据包。

·DROP:丢弃数据包。

·REDIRECT:将数据包重新转向到本机或另一台主机的某一个端口,通常实现透明代理或对外开放内网的某些服务。

·REJECT:拦截该数据封包,并发回封包通知对方。

·SNAT:源地址转换,即改变数据包的源地址。例如:将局域网的IP(10.0.0.1/24)转化为广域网的IP(203.93.236.141/24),在NAT表的POSTROUTING链上进行该动作。

·DNAT:目标地址转换,即改变数据包的目标地址。例如:将广域网的IP(203.93.236.141/24)转化为局域网的IP(10.0.0.1/24),在NAT表的PREROUTING链上进行该动作。

·MASQUERADE:IP伪装,即常说的NAT技术,MASQUERADE只能用于ADSL等拨号上网的IP伪装,也就是主机的IP是由ISP动态分配的,如果主机的IP地址是静态固定的,就要使用SNAT。

·LOG:日志功能,将符合规则的数据包的相关信息记录在日志中,以便管理员的分析和排错。

(4)清除规则和计数器

在新建规则时,往往需要清除原有的旧规则,以免它们影响新设定的规则。如果规则比较多,逐条删除就会十分麻烦,这时可以使用iptables提供的清除规则参数达到快速删除所有的规则的目的。

定义参数的格式为:

iptables [-t 表名

] <-F | Z>

参数说明如下:

[-t表名

]

指定将默认策略应用于哪个表,可以使用filter、nat和mangle,如果没有指定使用哪个表,iptables就默认使用filter表。

-F

通过如下命令删除指定表中的所有规则。

-Z

将指定表中的数据包计数器和流量计数器归零。