规则顺序
根据封包的规则”比对” 你预先定义的规则内容,若封包数据与规则内容相同则进行动作,否则就继续下一条规则的比对
当一个网络封包要进入到主机之前,会先经由NetFilter
进行检查,那就是iptables
的规则了。检查通过则接受(ACCEPT
) 进入本机取得资源,如果检查不通过,则可能予以丢弃(DROP
)
规则是有顺序的!例如当网络封包进入Rule 1 的比对时, 如果比对结果符合Rule 1 ,此时这个网络封包就会进行Action 1 的动作,而不会理会后续的Rule 2, Rule 3…. 等规则的分析了
如果所有的规则都不符合怎办?此时就会透过预设动作(封包政策, Policy
) 来决定这个封包的去向
table/chain
filter (过滤器)
主要跟进入Linux 本机的封包有关
INPUT
:主要与想要进入我们Linux 本机的封包有关;OUTPUT
:主要与我们Linux 本机所要送出的封包有关;FORWARD
:与Linux 本机比较没有关系, 他可以转递封包到后端的计算机中,与下列nat
相关性较高
nat (地址转换)
是Network Address Translation 的缩写, 这个表格主要在进行来源与目的之IP 或port 的转换,主要与Linux 主机后的局域网络内计算机较相关
PREROUTING
:在进行路由判断之前所要进行的规则(DNAT/REDIRECT)POSTROUTING
:在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)OUTPUT
:与发送出去的封包有关
mangle (破坏者)
主要是与特殊的封包的路由旗标有关
iptables 可以控制三种封包的流向:
- 封包进入Linux 主机使用资源(路径A): 在路由判断后确定是向Linux 主机要求数据的封包,主要就会透过
filter
的INPUT
链来进行控管 - 封包经由Linux 主机的转递,没有使用主机资源,而是向后端主机流动(路径B): 在路由判断之前进行封包表头的修订作业后,发现到封包主要是要透过防火墙而去后端,此时封包就会透过路径B 来跑动。也就是说,该封包的目标并非我们的Linux 本机。主要经过的链是
filter
的FORWARD
以及nat
的POSTROUTING
,PREROUTING
- 封包由Linux 本机发送出去(路径C): 例如响应客户端的要求,或者是Linux 本机主动送出的封包,都是透过路径C 来跑的。先是透过路由判断, 决定了输出的路径后,再透过
filter
的OUTPUT
链来传送的!当然,最终还是会经过nat
的POSTROUTING
链
规则详解
- target:代表进行的动作, ACCEPT 是放行,而REJECT 则是拒绝,此外,尚有DROP (丢弃) 的项目!
- prot:代表使用的封包协议,主要有tcp, udp 及icmp 三种封包格式;
- opt:额外的选项说明
- source :代表此规则是针对哪个『来源IP』进行限制
- destination :代表此规则是针对哪个『目标IP』进行限制
对上面5条INPUT链的解释:
- 只要是封包状态为RELATED,ESTABLISHED 就予以接受
- 只要封包协议是icmp 类型的,就予以放行
- 无论任何来源(0.0.0.0/0) 且要去任何目标的封包,不论任何封包格式(prot 为all),通通都接受
- 只要是传给port 22 的主动式联机tcp 封包就接受
- 全部的封包信息通通拒绝
最有趣的应该是第3 条规则了,怎么会所有的封包信息都予以接受?如果都接受的话,那么后续的规则根本就不会有用嘛!其实那条规则是仅针对每部主机都有的内部循环测试网络(lo) 接口,如果没有列出接口,那么我们就很容易搞错
References
http://cn.linux.vbird.org/linux_server/0250simple_firewall.php