iptables 处理经过的数据包的流程

iptables 处理经过的数据包的流程
iptables 处理经过的数据包的流程
iptables 利用表和链处理每个经过的数据包,具体流程(步骤)如下:
  • 数据包到达网络接口,比如 eth0。
  • 进入 raw 表的 PREROUTING 链,这个链的作用是在连接跟踪之前处理数据包。
  • 如果进行了连接跟踪,则进行处理。
  • 进入 mangle 表的 PREROUTING 链,在此可以修改数据包,比如 TOS 等。
  • 进入 nat 表的 PREROUTING 链,可以在此做 DNAT,但不做过滤。
  • 决定路由,看是交给本地主机还是转发给其它主机,即决定是否继续往内还是往外。
到了这里需要分两种不同的情况进行讨论了。
若数据包决定要转发给其它主机,这时候它会依次经过:
  • 进入 mangle 表的 FORWARD 链,这里是在第一次路由(即步骤 6)决定之后,在进行最后的路由决定之前,仍然可以对数据包进行某些修改。
  • 进入 filter 表的 FORWARD 链,这里可以对所有转发的数据包进行过滤。
  • 进入 mangle 表的 POSTROUTING 链,这里将完成了所有的路由决定,但数据包仍然在本地主机,还可以进行某些修改。
  • 进入 nat 表的 POSTROUTING 链,这里一般都是用来做 SNAT ,不在这里进行过滤。
  • 进入出去的网络接口,然后进行发送。
另一种情况是,数据包就是发给本地主机的,那么它会依次穿过:
  • 进入 mangle 表的 INPUT 链,这里是在第一次路由(即步骤 6)决定之后,在进行最后的路由决定之前,仍然可以对数据包进行某些修改。
  • 进入 filter 表的 INPUT 链,这里可以对流入的所有数据包进行过滤,无论它来自哪个网络接口。
  • 交给本地主机的应用程序进行处理。
  • 处理完毕后进行路由决定,看该往那里发出。
  • 进入 raw 表的 OUTPUT 链,这里是在连接跟踪处理本地的数据包之前。
  • 连接跟踪对本地的数据包进行处理。
  • 进入 mangle 表的 OUTPUT 链,这里可以修改数据包,但不做过滤。
  • 进入 nat 表的 OUTPUT 链,可以对防火墙自己发出的数据做 NAT 。
  • 再次进行路由决定。
  • 进入 filter 表的 OUTPUT 链,可以对本地出去的数据包进行过滤。
  • 进入 mangle 表的 POSTROUTING 链,同上一种情况的第 9 步。
  • 进入 nat 表的 POSTROUTING 链,同上一种情况的第 10 步。
  • 进入出去的网络接口,然后进行发送。
{{o.name}}


{{m.name}}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/103392.html

(0)
上一篇 2021年8月25日 10:12
下一篇 2021年8月25日 10:12

相关推荐

发表回复

登录后才能评论