Linux iptables 的理解


和本机相关的链

  • INPUT:进入主机
  • OUTPUT:离开主机

和本机没有关系的链

  • PREROUTING:路有前
  • FORWARD:转发
  • POSTROUTING:路由后

  • filter 定义允许或者不允许的。
  • nat 定义地址转换的
  • mangle功能:修改报文原数据

对于 filter 来讲一般只能做在3个链上:INPUTFORWARDOUTPUT
对于nat来讲一般也只能做在3个链上:PREROUTINGOUTPUTPOSTROUTING
mangle则是5个链都可以做:PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING

怎么理解

上面的都是我收集到的网上流传的概念,还有什么逻辑图之类的,我就不放上来了。
关键点来了:我记不住啊!五个链三个表,各种流程控制,这谁受的住啊。
经过我的学习总结,我发现大部分时候我们的目标都比较明确,不会在所有的链或者表中走完。所以就分开学好了。

过滤操作

我们知道 filter 表主要在这三个链上:INPUTFORWARDOUTPUT
filter 表的主要作用是过滤。所以现在可以得出三种情况下会使用filter表:

  • 过滤进入本机的数据包——INPUT
  • 过滤转发的数据包——FORWARD
  • 过滤本机发出的数据包——OUTPUT

这么分析起来,是不是就简单明了了许多。

举个栗子

1.如果一台设备只允许ssh访问,我们可以在filter表的INPUT链中操作:

iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -j REJECT

2.如果不允许设备访问61.135.169.121这个ip地址,我们可以在filter表的OUTPUT链中操作:

iptables -t filter -A OUTPUT -d 61.135.169.121  -j REJECT

3.如果我们的设备是一台路由器,子网地址是172.22.0.0/24,我们子网里有一台设备172.22.0.5,
我们现在想断开它和路由器的连接:

iptables -t filter -A FORWARD -d 172.22.0.5  -j REJECT

未完待续

总结

首先要明确目标,把它们和iptables的链表对应起来,一步步实现