linux iptables


规则顺序

根据封包的规则”比对” 你预先定义的规则内容,若封包数据与规则内容相同则进行动作,否则就继续下一条规则的比对

当一个网络封包要进入到主机之前,会先经由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 主机要求数据的封包,主要就会透过filterINPUT 链来进行控管
  • 封包经由Linux 主机的转递,没有使用主机资源,而是向后端主机流动(路径B): 在路由判断之前进行封包表头的修订作业后,发现到封包主要是要透过防火墙而去后端,此时封包就会透过路径B 来跑动。也就是说,该封包的目标并非我们的Linux 本机。主要经过的链是filterFORWARD 以及natPOSTROUTING, PREROUTING
  • 封包由Linux 本机发送出去(路径C): 例如响应客户端的要求,或者是Linux 本机主动送出的封包,都是透过路径C 来跑的。先是透过路由判断, 决定了输出的路径后,再透过filterOUTPUT 链来传送的!当然,最终还是会经过natPOSTROUTING

规则详解

  • target:代表进行的动作, ACCEPT 是放行,而REJECT 则是拒绝,此外,尚有DROP (丢弃) 的项目!
  • prot:代表使用的封包协议,主要有tcp, udp 及icmp 三种封包格式;
  • opt:额外的选项说明
  • source :代表此规则是针对哪个『来源IP』进行限制
  • destination :代表此规则是针对哪个『目标IP』进行限制

对上面5条INPUT链的解释:

  1. 只要是封包状态为RELATED,ESTABLISHED 就予以接受
  2. 只要封包协议是icmp 类型的,就予以放行
  3. 无论任何来源(0.0.0.0/0) 且要去任何目标的封包,不论任何封包格式(prot 为all),通通都接受
  4. 只要是传给port 22 的主动式联机tcp 封包就接受
  5. 全部的封包信息通通拒绝

最有趣的应该是第3 条规则了,怎么会所有的封包信息都予以接受?如果都接受的话,那么后续的规则根本就不会有用嘛!其实那条规则是仅针对每部主机都有的内部循环测试网络(lo) 接口,如果没有列出接口,那么我们就很容易搞错

References

http://cn.linux.vbird.org/linux_server/0250simple_firewall.php


文章作者: 江湖义气
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 江湖义气 !
  目录