[iptables] 14. 常用套路

1/9/2021 iptableslinuxops

温馨提示

本文从理论到实践,系统地介绍 iptables。如果你想要从头开始了解 iptables,可以查看 iptables 系列文章

不知不觉,已经总结了 13 篇 iptables 文章。本文对前面文章的一些注意点进行总结,可以理解为对"常用套路"的总结。记住这些套路能起到事半功倍的效果。

阅读这篇文章之前,请确保已经阅读了之前的文章,否则有可能会不理解为什么要这样做。

# 套路

  1. 规则的顺序非常重要。
    • 如果报文已经被前面的规则匹配到,iptables 会对报文执行对应的动作,通常是 ACCEPT 或者 REJECT。报文被放行或拒绝以后,即使后面的规则也能匹配到刚才放行或拒绝的报文,也没有机会再对报文执行相应的动作(除非前面规则的动作为 LOG)。所以,针对相同服务的规则,更严格的规则应该放在前面
  2. 规则有多个匹配条件时,条件之间默认存在"与"的关系
    • 如果一条规则包含多个匹配条件,那么报文必须同时满足这个规则的所有匹配条件,才能被这条规则匹配到。
  3. 在不考虑 1 的情况下,应该将更容易/频繁被匹配到的规则放置在前面。
    • 比如,现有两条规则,分别针对 sshd 服务和 web 服务。假设一天之内有 20000 个请求访问 web 服务,有 200 个请求访问 sshd 服务。这时应该将针对 web 服务的规则放在前面,针对 sshd 的规则放在后面,因为访问 web 服务的请求频率更高。
      • 如果 sshd 的规则放在前面,报文访问 web 服务时,sshd 的规则也要地验证一遍,白白耗费资源。
      • 如果 web 服务的规则放在前面,访问 web 服务的频率更高,所以无用功会比较少。
    • 综上,在没有顺序要求的情况下,被匹配次数多的、匹配频率高的规则应该放在前面。
  4. 为担任网络防火墙的 iptables 主机配置规则时,应着重考虑方向性,双向都要考虑,从外到内,从内到外。
  5. 配置 iptables 白名单时,往往会将链的默认策略设置为 ACCEPT,通过在链的最后设置 REJECT 规则实现白名单机制,而不是将链的默认策略设置为 DROP。如果将链的默认策略设置为 DROP,当链的规则被清空时,管理员的请求也将会被 DROP 掉。

# 参考文献