最常见的「我明明放行了端口为什么连不上」:规则被追加到了一条兜底 REJECT 的后面,而 iptables 是从上到下匹配、命中即停。
# -A:追加到链尾(可能落在 REJECT 之后,不生效!)
iptables -A INPUT -p tcp --dport 7890 -j ACCEPT
# -I:插入到链首(最先生效),推荐放行用这个
iptables -I INPUT 1 -p tcp --dport 7890 -j ACCEPT
查看带序号的规则:
iptables -L INPUT -n --line-numbers
# 或
iptables -S INPUT
典型误区链路:
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited # 兜底
-A INPUT -p tcp --dport 7890 -j ACCEPT # 永远走不到!
iptables 命令改的是内存里的规则,重启就没了。用 iptables-services:
yum install -y iptables-services
service iptables save # 保存到 /etc/sysconfig/iptables
systemctl enable iptables
iptables-save > /tmp/rules.bak 备份,远程操作别把自己 22 端口关了。— 本文为个人运维笔记,如有疏漏欢迎指正。