iptables
iptables的底层实现是netfilter,其架构是在整个网络流程的若干位置放置一些钩子,并在每个钩子上挂载一些处理函数进行处理。它作为一个通用的、抽象的框架,提供一整套hook函数的管理机制,是的数据包过滤、包处理(设置标志位、修改TTL)、地址伪装、网络地址转换、透明代理、访问控制、基于协议类型的链接跟踪,甚至带宽限速等功能成为可能。
-
5 chain
IP层的5个钩子点的位置,对应iptables就是5条内置链,分别是PREROUTING、POSTROUTING、INPUT、OUTPUT和FORWAR。支持用户自定义链。
- PREROUTING:可以在此处进行DNAT(destination NAT POSTROUTING,用于互联网访问局域网)
- POSTROUTING:可以在此处进行SNAT(source NAT POSTROUTING,用于局域网访问互联网)
- INPUT:处理输入本地进程的数据包
- OUTPUT:处理本地进程的输出数据包
- FORWARD:处理转发到其他机器/network namespace的数据包
-
5 table
优先级从高到低为:raw、mangle、nat、filter、security,不支持用户自定义表。
- filter表:用于控制到达某条链上的数据包是否继续放行、直接丢弃(drop)或拒绝(reject)
- nat标:用于修改数据包的源和目的地址
- mangle表:用于修改数据包的IP头信息
- raw表:iptables是有状态的,即iptables对数据包有链接追踪(connection tracking)机制,而raw是用来去除这种追踪机制的
- security表:用于在数据包上应用SELinux
不是每个链上都拥有这5个表:
- raw存在于PREROUTING和OUTPUT。对应输入和输出经过的第一条链。
- mangle存在于所有链中。
- nat(SNAT)存在于POSTROUTING和INPUT。
- nat(DNAT)存在于PREROUTING和OUTPUT。
- filter、security存在于FORWARD、INPUT、OUTPUT。
-
rule
iptables的表示所有规则的5个逻辑集合,一跳iptables规则包含两部分信息:匹配条件和动作。
匹配条件,即匹配数据包被这条iptables规则“捕获”的条件,例如协议类型、源IP、目的IP、源端口、目的端口、连接状态等。每条iptables规则允许多个匹配条件任意组合,从而实现多条件的匹配,多条件之间是逻辑与关系。
常见动作有:
- DROP:直接将数据包丢弃。应用场景:不让某个数据源意识到系统的存在,可以用来模拟宕机。
- REJECT:给客户端返回connection refused或destination unreachable报文,应用场景:不让某个数据源访问系统,提示这里没有想要的服务内容。
- QUEUE:将数据包放入用户空间的队列,供用户空间的程序处理。
- RETURN:跳出当前链,该链后续规则不再执行。
- ACCEPT:统一数据包通过,继续执行后续的规则。
- JUMP:跳转到其他用户自定义的链继续执行。
网友评论