温馨提示
本文从理论到实践,系统地介绍 iptables。如果你想要从头开始了解 iptables,可以查看 iptables 系列文章。
不知不觉,已经总结了 13 篇 iptables 文章。本文对前面文章的一些注意点进行总结,可以理解为对"常用套路"的总结。记住这些套路能起到事半功倍的效果。
阅读这篇文章之前,请确保已经阅读了之前的文章,否则有可能会不理解为什么要这样做。
# 套路
- 规则的顺序非常重要。
- 如果报文已经被前面的规则匹配到,iptables 会对报文执行对应的动作,通常是
ACCEPT
或者REJECT
。报文被放行或拒绝以后,即使后面的规则也能匹配到刚才放行或拒绝的报文,也没有机会再对报文执行相应的动作(除非前面规则的动作为LOG
)。所以,针对相同服务的规则,更严格的规则应该放在前面。
- 如果报文已经被前面的规则匹配到,iptables 会对报文执行对应的动作,通常是
- 规则有多个匹配条件时,条件之间默认存在"与"的关系
- 如果一条规则包含多个匹配条件,那么报文必须同时满足这个规则的所有匹配条件,才能被这条规则匹配到。
- 在不考虑 1 的情况下,应该将更容易/频繁被匹配到的规则放置在前面。
- 比如,现有两条规则,分别针对 sshd 服务和 web 服务。假设一天之内有 20000 个请求访问 web 服务,有 200 个请求访问 sshd 服务。这时应该将针对 web 服务的规则放在前面,针对 sshd 的规则放在后面,因为访问 web 服务的请求频率更高。
- 如果 sshd 的规则放在前面,报文访问 web 服务时,sshd 的规则也要地验证一遍,白白耗费资源。
- 如果 web 服务的规则放在前面,访问 web 服务的频率更高,所以无用功会比较少。
- 综上,在没有顺序要求的情况下,被匹配次数多的、匹配频率高的规则应该放在前面。
- 比如,现有两条规则,分别针对 sshd 服务和 web 服务。假设一天之内有 20000 个请求访问 web 服务,有 200 个请求访问 sshd 服务。这时应该将针对 web 服务的规则放在前面,针对 sshd 的规则放在后面,因为访问 web 服务的请求频率更高。
- 为担任网络防火墙的 iptables 主机配置规则时,应着重考虑方向性,双向都要考虑,从外到内,从内到外。
- 配置 iptables 白名单时,往往会将链的默认策略设置为
ACCEPT
,通过在链的最后设置REJECT
规则实现白名单机制,而不是将链的默认策略设置为DROP
。如果将链的默认策略设置为DROP
,当链的规则被清空时,管理员的请求也将会被DROP
掉。