文档首页> 技术教程> iptables 四表五链:看懂再动手

iptables 四表五链:看懂再动手

发布时间:2026-07-14 22:29        更新时间:2026-07-15 22:19
iptables 为什么叫四表五链?这个问题不弄清,写规则基本靠抄。把一次数据包的旅行路线画出来,表和链的关系自然就清楚了。 五个链是路上的检查站 一个包从进网卡到出去,依次可能经过:PREROUTING(刚进网卡,还没路由)、INPUT(决定交给本机进程)、FORWARD(流经本机转发给别处)、OUTPUT(本机进程发出的)、POSTROUTING(即将出网卡)。入站的包走 PREROUTING、INPUT;被转发的走 PREROUTING、FORWARD、POSTROUTING;出站的走 OUTPUT、POSTROUTING。 四个表是检查站里的不同科室 filter 管过滤,允许还是丢弃,日常用得最多;nat 管地址转换,比如把公网端口的流量转给内网机器;mangle 负责改写包头字段,做策略路由才用得上;raw 让某些包跳过连接跟踪,典型用途是给大流量端口减轻 nf_conntrack 表的压力。同一条链上各表按固定顺序生效,大体是 raw、mangle、nat、filter。 串起来看一次入站 外面来了一个访问 80 端口的包:先进 PREROUTING,nat 表有机会改写目的地址;路由判断发现目标就是本机,转入 INPUT,filter 表在这里决定放行或丢弃;放行后交给 nginx 这类进程处理。 两条常用规则,外加一条必配 放行 SSH:iptables -A INPUT -p tcp --dport 22 -j ACCEPT 丢弃一个网段:iptables -A INPUT -s 203.0.113.0/24 -j DROP 实际环境里最容易被忽略的是放行回包:iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT。缺了它,本机访问别人之后的响应包会被入站规则拦下,表现为请求发得出去、回不来。 -A 是追加到链末尾,匹配自上而下,排在前面的规则先说话。 想核对规则有没有命中,iptables -L INPUT -n -v 里的 pkts 列记录每条规则拦到或放过的包数,数字不会说谎。FORWARD 链只在机器充当网关转发时才有流量,单机业务可以不关心。 动手前两个提醒:iptables 规则默认不落盘,重启就丢,CentOS 用 iptables-save > /etc/sysconfig/iptables 配合 iptables 服务持久化,Ubuntu 用 netfilter-persistent save;云服务器在它外面还有一层安全组,排查连通性时两边都要看。