一、iptables/netfilter的基本介绍
iptables/netfilter是Linux主机上的一个防火墙软件组合,其中iptables是一个防火墙规则定义软件,netfilter是内核中的一个功能(规格实施模块),负责所编写的规则的生效使用。
netfilter将报文的流进流出路径分为五个链,所有的报文都必须流经这五个链中的其中几个。五个链分别是:
PREROUTING | 路由前,报文进入本机将要做路由分析之前流经的位置。 |
POSTROUTING | 路由后,报文已经路由分析完毕并将要发送(流出)的位置。 |
INPUT | 数据报文进入用户空间流经的位置。 |
OUTPUT | 数据报文流出用户空间流经的位置。 |
FORWARD | 作为转发报文流经的位置。 |
除了基本的五个链外,用户还可以根据需求创建自定义链,不过自定义链需要由上面的五个链调用才能生效。
为了便于管理,iptables提供了四个不同功能的表,根据表功能的不同,每个表提供不同的链,则定义在对应功能表的链上。
raw表 | 如果开启了连接追踪,可以使用此表对某种连接不做追踪,支持的链: POSTROUTING链 OUTPUT链 |
mangle表 | 可以对数据报文进行修改,支持的链: POSTROUTING链 PREROUTING链 OUTPUT链 INPUT链 FORWARD链 |
nat表 | 做IP地址转换,支持的链: PREROUTING链 POSTROUTING链 OUTPUT链 |
filter表 | 做过滤,支持的链: INPUT OUTPUT FORWARD |
iptables/netfilter可以将策略类型分为"通"、"堵"。"通"类型默认规则是拒绝,只有明确定义允许的报文才让其通过;"堵"类型默认规则是允许,只有明确定义拒绝的报文才阻塞。通堵类型正好相反。
iptables/netfilter是一个四层防火墙,所以只能对四层及以下(三层)进行匹配。例如源IP、目标IP、源端口、目标端口、ICMP类型。
二、iptables/netfilter的规则:
iptables的命令比较简单,man帮助也比较明晰,唯一需要注意的就是规则之间的关系,以及规则的排列顺序,一个防火墙的性能高低,有很大一部分取决于你的规则排序。规则排序一般遵从匹配范围小的优先,匹配几率高的优先。
iptables定义规则的方式大概是这种格式:
iptables [-t table] COMMAND chain CRETIRIA -j ACTION -t 表名:指定要操作的表 COMMAND:定义策略 chain:指定要操作的链 CRETIRIA:定义匹配的标准(分为多个标准) -j Target:策略进行的动作
1.COMMAND格式介绍:
新增规则: iptables [-t table] -A chain rule-specification 删除规则: iptables [-t table] -D chain rulenum 插入一条规则: iptables [-t table] -I chain [rulenum] rule-specification 替换一条规则: iptables [-t table] -R chain rulenum rule-specification 显示某规则的定义语法: iptables [-t table] -S [chain [rulenum]] 查看表、链中的规则(指定第几条): iptables [-t table] -L [chain [rulenum]] [options...] #options一般为-n和-v 清空表或链规则: iptables [-t table] -F [chain [rulenum]] [options...] 清空链的包计数器和字节计数器: iptables [-t table] -Z [chain] [options...] 定义默认进行的动作: iptables [-t table] -P chain target 创建一条自定义链: iptables [-t table] -N chain 删除一条自定义空链: iptables [-t table] -X [chain] 修改自定义链名字: iptables [-t table] -E old-chain-name new-chain-name
2.CRETIRIA格式介绍: