如何使用netfilter/iptables构建防火墙
基本概念
典型的防火墙设置有两个网卡:一个流入,一个流出。iptables读取流入和流出数据包的报头,将它们与规则集(Ruleset)相比较,将可接受的数据包从一个网卡转发至另一个网卡,对被拒绝的数据包,可以丢弃或按照所定义的方式来处理。
通过向防火墙提供有关对来自某个源地址、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。通过使用iptables系统提供的特殊命令iptables建立这些规则,并将其添加到内核空间特定信息包过滤表内的链中。关于添加、去除、编辑规则的命令,一般语法如下:
iptables [-t table] command [match] [target]
1.表(table)
[-t table]选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有三个可用的表选项:filter、nat和mangle。该选项不是必需的,如果未指定,则filter作为缺省表。各表实现的功能如表1所示。
表1 三种表实现的功能
2.命令(command)
command部分是iptables命令最重要的部分。它告诉iptables命令要做什么,例如插入规则、将规则添加到链的末尾或删除规则。表2是最常用的一些命令及例子。
表2 命令的功能和样例
3.匹配(match)
iptables命令的可选match部分指定信息包与规则匹配所应具有的特征(如源地址、目的地址、协议等)。匹配分为通用匹配和特定于协议的匹配两大类。这里将介绍可用于采用任何协议的信息包的通用匹配。表3是一些重要且常用的通用匹配及示例说明。
表3 通用匹配及示例说明
4.目标(target)
目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。表4是常用的一些目标及示例说明。
除表4外,还有许多用于建立高级规则的其它目标,如LOG、REDIRECT、MARK、MIRROR和MASQUERADE等。
表4 目标及示例说明
iptables -t [table]:指定表 -A CHAIN :附加一条规则,在链的尾部添加。 -I CHAIN [num]:在指定位置添加。 -D CHAIN [num]:删除指定链,第num条规则。 -R CHAIN [num]:替换指定的规则。 -F [CHAIN]: 清空指定链的规则,如果省略CHAIN,则清空这个表中的所有链的规则。 -P CHAIN:设定指定链的默认策略 -N:自定义一个新的空链 -X:删除一个自定义的空链 -Z:清空指定链中的所有规则计数器 -E:重新命名自定义链 -L:显示指定表中的所有规则 -n:以数字格式显示主机地址和端口号。 -v:显示详细信息; -vv:显示更详细信息。 -x:显示精确值 --line-numbers:显示规则号 这类匹配是通用的匹配,可以通过man查询或者查询在线文档获取更多信息 -s:指定源ip地址,-d:指定目的地址; -p{tcp|udp|icmp}:指定协议 -i eht0:指定数据报文流入的接口 -o eth0:指定数据报文流出的接口 -P 设置默认策略:iptables -P INPUT (DROP|ACCEPT) -F 清空规则链 -L 查看规则链 -A 在规则链的末尾加入新规则 -I num 在规则链的头部加入新规则 -D num 删除某一条规则 -s 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。 -d 匹配目标地址 -i 网卡名称 匹配从这块网卡流入的数据 -o 网卡名称 匹配从这块网卡流出的数据 -p 匹配协议,如tcp,udp,icmp --dport num 匹配目标端口号 --sport num 匹配来源端口号 ACCEPT :允许通过 DROP :拒绝 REJECT :拒绝的更彻底 DNAT :目标地址转换 SNAT :源地址转换 REDIRECT :端口重定向 MASQUERAND :地址伪装 LOG :记录日志