你的问题有点简略,我分几种常见场景给你说明 CentOS 下 iptables 如何“兼容”,你可以对号入座:
CentOS 7 开始默认使用 firewalld,但你习惯用 iptables 命令。
systemctl stop firewalld
systemctl disable firewalld
yum install -y iptables-services
systemctl enable iptables
systemctl start iptables
之后就可以正常使用:
iptables -L -n
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
service iptables save
firewalld 本质也是调用 iptables,但规则由它管理,不建议手动改 iptables。
CentOS 8 默认是 nftables,但提供了 iptables 兼容层
yum install -y iptables iptables-services
查看是否使用 nft 后端:
iptables -V
# 显示 xtables-multi 或 nf_tables
如果你想完全用传统 iptables:
systemctl disable firewalld
systemctl stop firewalld
systemctl enable iptables
systemctl start iptables
Docker 自动改 iptables,你手动加的规则失效
DOCKER 链DOCKER-USER 链(推荐):iptables -I DOCKER-USER -p tcp --dport 3306 -j DROP
CentOS 7/8 必须保存:
service iptables save
# 或
iptables-save > /etc/sysconfig/iptables
systemctl status firewalld
iptables -L -n
如果你能补充一句:
我可以给你精确到命令级别的方案。