iptables五表五链及对应实例
iptables是Linux系统上用于配置网络包过滤规则的工具,它使用表(tables)和链(chains)来组织规则。以下是iptables中的五表五链及其对应的实例说明:
五表
- filter表:默认表,用于过滤数据包,允许或拒绝数据包通过。它包含INPUT、OUTPUT和FORWARD三个链。
- nat表:用于网络地址转换(NAT),例如端口转发和地址转换。它包含PREROUTING、POSTROUTING和OUTPUT三个链。注意,虽然OUTPUT链在nat表中存在,但实际上在iptables中,OUTPUT链通常只用于filter表和mangle表。在nat表中,OUTPUT链很少使用,因为对于从本机发出的数据包,其源地址转换通常在路由选择之前就已经确定了。
- mangle表:用于修改数据包的各种属性,例如TTL(Time To Live)或TOS(Type of Service)字段。它也包含PREROUTING、POSTROUTING、INPUT、OUTPUT和FORWARD五个链。
- raw表:用于处理数据包的连接追踪,通常与mangle表结合使用来实现一些特殊功能。它包含PREROUTING和OUTPUT两个链。
- security表:用于强制访问控制(MAC)的网络安全策略(注:这实际上是IPsec功能的一部分,但在许多iptables实现中并不常用或并不直接支持)。security表并不常用,而且其具体的链和用法可能因不同的系统或iptables版本而有所不同。
五链
- INPUT链:处理进入本机的数据包。
- OUTPUT链:处理从本机发出的数据包。
- FORWARD链:处理需要本机转发的数据包(即本机作为路由器时)。
- PREROUTING链:在进行路由选择之前修改数据包,如DNAT(Destination NAT,目的网络地址转换)。
- POSTROUTING链:在进行路由选择之后修改数据包,如SNAT(Source NAT,源网络地址转换)。
实例
filter表实例
# 允许来自任何地方的SSH连接
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 拒绝来自192.168.1.0/24网络的所有输入流量
iptables -A INPUT -s 192.168.1.0/24 -j DROP
# 允许本地回环地址的流量
iptables -A INPUT -i lo -j ACCEPT
# 设置默认策略为拒绝所有输入流量
iptables -P INPUT DROP
nat表实例
# 将到达本机的80端口的流量转发到内部服务器192.168.1.100的8080端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
# 修改从本机发出的流量的源地址为1.2.3.4(需要内核支持及路由设置)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 1.2.3.4
mangle表实例
# 修改TTL值为64
iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN SYN -j TCPMSS --set-mss 1460
# 这是一个较为复杂的例子,实际中TCPMSS的用法可能会有所不同
raw表实例
# 关闭NAT表上的连接追踪功能,加速某些特定类型的数据包(例如ICMP)
iptables -t raw -A PREROUTING -p icmp -j NOTRACK
请注意,以上命令应在具有相应权限(通常是root)的情况下运行,并且需要根据具体的网络环境和需求进行调整。
关于security
表,由于其实际在iptables中的使用较少,且主要与IPsec和网络安全策略配置相关,这里不提供具体的实例。如果需要对这部分进行深入了解,建议查阅专门的IPsec和网络安全文档。
另外,这些规则默认不会永久保存,系统重启后会丢失。若需永久保存iptables规则,可以使用iptables-save
和iptables-restore
命令,或者在某些发行版中使用特定的服务或脚本来处理规则的保存和加载。
本文来自博客园,作者:dashery,转载请注明原文链接:https://www.cnblogs.com/ydswin/p/18062999