为什么需要理解iptables的四表五链?
大家否遇到过服务器莫名被扫描、内网服务无法被外网访问,或者想限制某些IP访问但配置规则总不生效?这些问题的背后,都离不开Linux防火墙工具iptables的核心机制------四表五链。"
iptables的本质:数据包的"交通警察"
- 把iptables比作网络流量的"交警岗",数据包是"车辆",而"四表五链"就是不同路口的"执法规则"------有的管"是否放行"(过滤),有的管"改路线/车牌"(地址转换),有的管"特殊标记"(流量跟踪)。
- 总结:防火墙通过预定义的规则集,对经过Linux系统的数据包进行过滤(放行/拦截)、地址转换(NAT)、标记(特殊处理)等操作。
四张表:不同场景下的"规则工具箱"
表名 | 核心作用 | 典型场景 |
---|---|---|
filter表 | 数据包的"安检员":决定是否放行(DROP/ACCEPT/REJECT) | 服务器只允许特定IP访问SSH(22端口),其他连接直接拒绝 |
nat表 | 数据包的"化妆师":修改IP/端口(网络地址转换) | 内网电脑通过服务器上网(SNAT),外网访问服务器上的内网服务(DNAT) |
mangle表 | 数据包的"标记师":修改TOS/TTL/mark等特殊字段 | 为VIP用户的流量打标记,后续优先处理(QoS场景) |
raw表 | 数据包的"免跟踪开关":决定是否启用状态跟踪 | 减少防火墙对高并发流量的跟踪负担(提升性能) |
五条链:数据包的"关键节点"
- INPUT链:当数据包的目标IP是本机时触发(比如你访问服务器的80端口,包到了服务器后先过INPUT链)。 场景举例:配置"只允许公司IP访问本机数据库(3306端口)",规则要写在INPUT链的filter表中。
- OUTPUT链:当本机主动发出的数据包时触发(比如你用服务器ping外网,包从本机出去先过OUTPUT链)。 场景举例:限制本机只能访问特定网站(如公司内网),可在OUTPUT链的filter表中设置规则。
- FORWARD链:当数据包既不是本机发出,也不是目标为本机(即需要本机转发时触发)(比如内网电脑通过服务器上网,包经过服务器转发)。 场景举例:配置"内网所有设备通过服务器访问外网",需在FORWARD链的filter表中允许转发并配合nat表的SNAT。
- PREROUTING链:数据包刚进入防火墙时立即触发(修改目标地址的最佳时机)。 场景举例:外网用户访问服务器的公网IP(如80端口),实际想转发到内网某台机器的8080端口(DNAT),规则要写在PREROUTING链的nat表中。
- POSTROUTING链:数据包即将离开防火墙时触发(修改源地址的最佳时机)。 场景举例:内网电脑通过服务器上网时,把包的源IP从内网IP改为服务器的公网IP(SNAT),规则要写在POSTROUTING链的nat表中。
四表五链的协作流程
- 数据包到达防火墙:首先经过raw表(PREROUTING)(决定是否跟踪状态)→ mangle表(PREROUTING)(可打标记)→ nat表(PREROUTING)(修改目标IP/端口,如DNAT)。
- 判断目标:如果是本机(如访问服务器的SSH),进入filter表(INPUT链)决定是否放行;如果不是本机(如转发流量),进入mangle表(FORWARD)/filter表(FORWARD链)(检查是否允许转发)。 3.本机发出的包:先经过mangle表(OUTPUT)/nat表(OUTPUT)(修改本机发出的包)→ filter表(OUTPUT链)(决定是否放行)。 4.所有包离开前:最后经过mangle表(POSTROUTING)/nat表(POSTROUTING)(如SNAT修改源IP)→ filter表(若涉及转发)→ 离开防火墙。
