iptables规则未生效的根本原因是规则顺序错误:-a input追加到链尾,若前面有-drop或默认策略为drop,新规则将无法匹配;应使用-i input 1优先插入,同时确认filter表不处理dnat/snat,须用-t nat配合prerouting/postrouting链。

iptables 不是“开了就能用”的黑盒工具——规则顺序、表链优先级、默认策略这三点没理清,加再多 -A INPUT -p tcp --dport 22 -j ACCEPT 都可能被前面一条 -j DROP 直接截断。
为什么刚加的允许 SSH 规则没生效?
根本原因不是语法错,而是规则在链中位置太靠后。INPUT 链默认策略如果是 DROP 或 REJECT,而你的允许规则插在末尾,那所有包在匹配到它之前就已被丢弃。
-
iptables -A INPUT ...总是追加到链末尾,适合已设宽松默认策略(如ACCEPT)后再做细化拦截 - 要放行关键服务(SSH/HTTP),应优先用
-I INPUT 1 ...插入到最前面 - 执行
iptables -L INPUT --line-numbers查看当前规则序号,确认你加的规则是否真在生效位置 - 别忽略默认策略:用
iptables -t filter -P INPUT DROP设定后,必须确保至少有一条显式ACCEPT规则在它之前匹配成功
filter 表和 nat 表混用常见错误
想做端口转发(比如把外网 8080 映射到内网 80),却在 filter 表里加规则,结果流量根本进不到 PREROUTING 链——因为 filter 表不处理地址转换,只做放行/拦截。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- DNAT(目标地址转换)必须用
-t nat -A PREROUTING,例如:iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80 - SNAT(源地址转换)必须用
-t nat -A POSTROUTING,常用于内网主机共享出口 IP 上网 -
filter表的FORWARD链必须同时放行:① 转发请求本身(-p tcp --dport 80);② 回程响应(通常靠-m state --state ESTABLISHED,RELATED -j ACCEPT) - 漏掉
sysctl -w net.ipv4.ip_forward=1,nat 规则会静默失效——这不是 iptables 错,是内核转发开关没开
状态匹配(state)为什么有时不工作?
-m state --state NEW 看起来很直观,但实际依赖连接跟踪模块(nf_conntrack)。如果系统负载高、连接数超限,或 raw 表里有 -j NOTRACK 规则,state 匹配就会退化为不可靠。
- 现代写法推荐用
-m conntrack --ctstate NEW,它更稳定,且明确区分连接跟踪状态 - 避免对所有 UDP 流量都加
--ctstate NEW,UDP 无连接,NEW状态极短,容易漏包;更适合用端口+IP 组合过滤 - 如果用了
raw表的NOTRACK(例如加速 DNS 或 NTP),那这些包后续在filter表里就无法用conntrack匹配,得改用基础四元组(源/目的 IP+端口)判断 -
iptables -t raw -L -n -v可查是否有意外的NOTRACK规则干扰了状态逻辑
保存规则后重启失效?
执行 service iptables save 或 iptables-save > /etc/sysconfig/iptables 并不能保证下次开机自动加载——取决于 init 系统是否真正调用它。
- CentOS 6/7:确认
iptables服务已启用:systemctl enable iptables(注意不是firewalld) - Ubuntu/Debian:没有原生
service iptables,需手动写 systemd service 或用iptables-persistent包 - 更可靠的做法是把
iptables-restore 写进 <code>/etc/network/if-up.d/或/etc/rc.local(若启用) - 别直接编辑
/etc/sysconfig/iptables后以为完事——必须用iptables-restore加载才生效,文件只是快照
规则顺序、表链职责、连接跟踪状态、持久化机制——这四个点任意一个模糊,都会让配置看起来“写了但没用”。尤其当多张表(raw/nat/mangle/filter)混用时,数据包实际流经路径和你想象的往往差两步。










