Linux服务器防火墙开启需据系统版本选择firewalld或iptables:firewalld适用于CentOS 7+等,通过systemctl启停并用firewall-cmd配置;iptables适用于旧系统,需手动保存规则;异常时可检查屏蔽文件并强制启用;最后须验证内核模块、进程及端口连通性。

如果您在Linux服务器上发现网络服务无法被外部访问,且确认网络层连通性正常,则很可能是防火墙处于关闭状态或未放行对应端口。以下是开启Linux服务器防火墙并完成基础配置的多种方法:
一、使用firewalld开启并启用防火墙(适用于CentOS 7/RHEL 7+、Fedora、Rocky/AlmaLinux 8+)
firewalld是动态管理防火墙的服务,支持区域划分与运行时/永久配置分离,无需重启服务即可重载规则。
1、检查firewalld当前服务状态:systemctl status firewalld
2、若显示inactive (dead),则启动服务:sudo systemctl start firewalld
3、设置开机自启以确保重启后持续生效:sudo systemctl enable firewalld
4、验证防火墙是否已激活:sudo firewall-cmd --state(返回running即为成功)
5、查看当前活动区域以确认默认策略作用范围:sudo firewall-cmd --get-active-zones
二、使用iptables开启并启用防火墙(适用于CentOS 6、Debian 9及更早版本、部分嵌入式或定制系统)
iptables直接操作内核netfilter链,规则默认不持久化,需手动保存至配置文件,否则重启后失效。
1、检查iptables服务状态:sudo systemctl status iptables(部分旧系统使用service iptables status)
2、若服务未运行,启动iptables守护进程:sudo systemctl start iptables
3、启用开机自启:sudo systemctl enable iptables
4、设置INPUT链默认策略为DROP以强化安全基线:sudo iptables -P INPUT DROP
5、添加基础通行规则避免锁死SSH连接:sudo iptables -A INPUT -i lo -j ACCEPT 与 sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
6、保存当前全部规则至持久化路径:sudo service iptables save(CentOS/RHEL) 或 sudo netfilter-persistent save(Debian/Ubuntu)
三、通过修改系统服务配置文件强制启用防火墙(适用于服务异常或策略被禁用场景)
当systemctl无法启动firewalld或iptables服务时,可检查其单元文件是否被屏蔽或配置为disabled,绕过服务管理直接激活底层机制。
1、检查firewalld单元是否被屏蔽:ls /etc/systemd/system/firewalld.service.d/ 及 ls /run/systemd/system/firewalld.service.d/
2、若存在override.conf等屏蔽文件,临时移除:sudo rm -f /etc/systemd/system/firewalld.service.d/override.conf
3、重新加载systemd配置:sudo systemctl daemon-reload
4、取消iptables服务的禁用标记(如存在):sudo systemctl unmask iptables
5、强制启用并启动服务:sudo systemctl enable --now firewalld 或 sudo systemctl enable --now iptables
四、验证防火墙实际运行状态与基础连通性
仅启动服务不等于规则已生效;必须确认内核模块加载、服务进程运行、以及默认策略符合预期,才能判定防火墙真正“开启”。
1、检查nf_tables或ip_tables内核模块是否已载入:lsmod | grep -E "(nf_tables|ip_tables)"
2、确认firewalld主进程正在运行:ps aux | grep firewalld | grep -v grep
3、对iptables,确认规则链非空且有默认策略:sudo iptables -L -n | head -10
4、测试本地回环通信是否仍可达(关键安全基线):curl -I http://127.0.0.1
5、从远程主机执行端口探测(如SSH端口):nc -zv 服务器IP 22,观察是否返回succeeded


















