先用命令确认当前防火墙:ufw(sudo ufw status verbose)、firewalld(sudo systemctl status firewalld)、iptables或nftables(sudo systemctl status iptables/nftables);ubuntu桌面默认ufw,centos/rhel 7+默认firewalld。

怎么判断当前用的是哪个防火墙
别急着关,先确认系统到底在跑啥——ufw、firewalld、iptables 或 nftables 互不兼容,强行关错一个,可能白操作还留隐患。
-
sudo ufw status verbose:有输出且含Status: active→ 正在用ufw -
sudo systemctl status firewalld:显示active (running)→ 是firewalld -
sudo systemctl status iptables或sudo systemctl status nftables:看哪个是 loaded + active - Ubuntu 桌面版默认是
ufw;CentOS/RHEL 7+ 默认是firewalld;老系统或手动装过规则的可能是iptables直接运行
临时关闭防火墙(重启前生效)
调试时最常用,改完服务马上测,不用等重启。但注意:这只是“暂停”,一 reboot 就自动恢复。
-
ufw:执行sudo ufw disable,之后sudo ufw status应显示Status: inactive -
firewalld:执行sudo systemctl stop firewalld,再用firewall-cmd --state验证,应报错或无输出 -
iptables:执行sudo systemctl stop iptables(若存在),注意 CentOS 7+ 默认没启用它,systemctl list-unit-files | grep iptables先确认是否注册为服务
永久关闭防火墙(重启后也不启动)
真正想“彻底不用”,必须禁用开机自启,否则 reboot 后又回来,容易误以为关成功了。
-
ufw:仅sudo ufw disable不够,还得sudo systemctl disable ufw -
firewalld:sudo systemctl stop firewalld+sudo systemctl disable firewalld -
iptables:如果它被启用了,用sudo systemctl disable iptables;部分系统用chkconfig iptables off(仅限 SysVinit 系统,如 CentOS 6) - ⚠️ 关闭后建议验证:重启机器(
sudo reboot),再登录执行对应状态命令,确认仍是 inactive/disabled
顺手关 SELinux?别乱动
有人关防火墙连带关 SELinux,这是常见误区。SELinux 和防火墙是两套机制:firewalld 控制网络进出,SELinux 控制进程权限。除非明确遇到 avc: denied 类错误且已确认是 SELinux 导致,否则不要碰它。
- 查状态:
getenforce(返回Enforcing/Permissive/Disabled) - 临时设为宽容模式(不推荐长期用):
sudo setenforce 0 - 永久关闭需改
/etc/selinux/config中的SELINUX=disabled,然后必须reboot才生效 - 多数开发调试场景,
setenforce 0足够,比永久关更安全
真正麻烦的不是命令记不住,而是关了 A 却忘了 B —— 比如关了 firewalld,但 ufw 其实也开着;或者禁用了服务,却没重启验证。动手前先 ps aux | grep -E "(ufw|firewalld|iptables|nft)" 看一眼,比事后抓包查端口更省时间。










