小白也能懂的iptables核心逻辑!四张表+五条链如何守护你的网络安全?

为什么需要理解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表​ 数据包的"免跟踪开关":决定是否启用状态跟踪 减少防火墙对高并发流量的跟踪负担(提升性能)

五条链:数据包的"关键节点"

  1. INPUT链:当数据包的目标IP是本机时触发(比如你访问服务器的80端口,包到了服务器后先过INPUT链)。 场景举例:配置"只允许公司IP访问本机数据库(3306端口)",规则要写在INPUT链的filter表中。
  2. OUTPUT链:当本机主动发出的数据包时触发(比如你用服务器ping外网,包从本机出去先过OUTPUT链)。 场景举例:限制本机只能访问特定网站(如公司内网),可在OUTPUT链的filter表中设置规则。
  3. FORWARD链:当数据包既不是本机发出,也不是目标为本机(即需要本机转发时触发)(比如内网电脑通过服务器上网,包经过服务器转发)。 场景举例:配置"内网所有设备通过服务器访问外网",需在FORWARD链的filter表中允许转发并配合nat表的SNAT。
  4. PREROUTING链:数据包刚进入防火墙时立即触发(修改目标地址的最佳时机)。 场景举例:外网用户访问服务器的公网IP(如80端口),实际想转发到内网某台机器的8080端口(DNAT),规则要写在PREROUTING链的nat表中。
  5. POSTROUTING链:数据包即将离开防火墙时触发(修改源地址的最佳时机)。 场景举例:内网电脑通过服务器上网时,把包的源IP从内网IP改为服务器的公网IP(SNAT),规则要写在POSTROUTING链的nat表中。

四表五链的协作流程

  1. 数据包到达防火墙:首先经过raw表(PREROUTING)(决定是否跟踪状态)→ mangle表(PREROUTING)(可打标记)→ nat表(PREROUTING)(修改目标IP/端口,如DNAT)。
  2. 判断目标:如果是本机(如访问服务器的SSH),进入filter表(INPUT链)决定是否放行;如果不是本机(如转发流量),进入mangle表(FORWARD)/filter表(FORWARD链)(检查是否允许转发)。 3.本机发出的包:先经过mangle表(OUTPUT)/nat表(OUTPUT)(修改本机发出的包)→ filter表(OUTPUT链)(决定是否放行)。 4.所有包离开前:最后经过mangle表(POSTROUTING)/nat表(POSTROUTING)(如SNAT修改源IP)→ filter表(若涉及转发)→ 离开防火墙。
相关推荐
ajassi20002 小时前
开源 C++ QT Widget 开发(十五)多媒体--音频播放
linux·c++·qt·开源
JosieBook3 小时前
【远程运维】Linux 远程连接 Windows 好用的软件:MobaXterm 实战指南
linux·运维·windows
文档搬运工3 小时前
Linux MInt启动速度的优化
linux
Broken Arrows3 小时前
Linux学习——管理网络安全(二十一)
linux·学习·web安全
Light604 小时前
领码方案|Linux 下 PLT → PDF 转换服务超级完整版:异步、权限、进度
linux·pdf·可观测性·异步队列·plt转pdf·权限治理·进度查询
羚羊角uou5 小时前
【Linux】命名管道
linux·运维·服务器
IT 小阿姨(数据库)5 小时前
PgSQL监控死元组和自动清理状态的SQL语句执行报错ERROR: division by zero原因分析和解决方法
linux·运维·数据库·sql·postgresql·centos
THMAIL5 小时前
量化股票从贫穷到财务自由之路 - 零基础搭建Python量化环境:Anaconda、Jupyter实战指南
linux·人工智能·python·深度学习·机器学习·金融
让子弹飞025 小时前
36.2Linux单总线驱动DS18B20实验(详细讲解代码)_csdn
linux·ubuntu·驱动的分离和分层
grrrr_15 小时前
【工具类】Nuclei YAML POC 编写以及批量检测
网络·安全·web安全