预计阅读本页时间:-
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
将指定表中的数据包计数器和流量计数器归零。