在 CentOS 上 iptables 规则“拒绝(REJECT / DROP)” 通常由以下几类原因导致,我按常见程度给你梳理一下,并给出排查方法。
你或系统已经写了类似规则:
iptables -A INPUT -p tcp --dport 22 -j REJECT
iptables -A INPUT -s 192.168.1.100 -j DROP
查看当前规则:
iptables -L -n -v
iptables -S
特点:
CentOS 默认策略可能是:
iptables -P INPUT DROP
这表示:没有匹配允许规则的流量全部被拒绝
检查:
iptables -L | grep policy
如果是 DROP,需要放行:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
原因:
CentOS 7/8 默认用 firewalld,它会管理 iptables
查看:
systemctl status firewalld
解决方式(任选其一):
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload
systemctl stop firewalld
systemctl disable firewalld
yum install iptables-services
systemctl enable iptables
systemctl start iptables
SELinux 不是 iptables,但表现类似:
检查:
getenforce
临时关闭测试:
setenforce 0
若解决,需配置 SELinux 而非关掉它。
如果你装了 Docker:
查看:
iptables -L DOCKER-USER -n -v
| 现象 | 可能原因 |
|---|---|
| Connection refused | REJECT / 服务没起 |
| Timeout | DROP / 防火墙 |
| 本地能连,外部不能 | INPUT 没放行 |
| 刚重启就失效 | 没保存 iptables |
保存规则(CentOS 6/iptables-services):
service iptables save
iptables -L -n -vsystemctl status firewalldnetstat -tunlpgetenforcetelnet ip port如果你愿意,可以告诉我:
iptables -L -n 的输出我可以直接帮你定位是哪一条规则在“拒绝”。