Linux系统如何开关防火墙?
Linux系统开关防火墙需依据发行版及默认防火墙服务类型区别操作:CentOS/RHEL/Fedora主流采用firewalld,Ubuntu/Debian则普遍预装ufw,而iptables作为底层工具仍被广泛支持。以firewalld为例,启用命令为`sudo systemctl start firewalld`并配合`sudo systemctl enable firewalld`实现开机自启;ufw用户则执行`sudo ufw enable`即可激活策略管理;若使用iptables,需先启动服务`sudo systemctl start iptables`,再通过`sudo iptables -P INPUT ACCEPT`或`DROP`设定默认策略,并用`sudo iptables-save`持久化规则。所有操作均需root权限,且状态核查应分别调用`sudo firewall-cmd --state`、`sudo ufw status verbose`或`sudo iptables -L -n`确保配置生效。不同工具虽命令各异,但核心逻辑一致——明确服务启停、策略设定与规则持久化三步闭环。
一、精准识别当前系统防火墙类型
在执行开关操作前,必须先确认系统实际启用的防火墙服务。执行`sudo systemctl list-unit-files | grep -E "(firewalld|ufw|iptables)"`可列出所有相关服务单元状态;再运行`sudo ss -tuln | grep ":22"`结合`sudo ps aux | grep -E "(firewalld|ufw|iptables)"`辅助判断活跃进程。CentOS 8及以上默认启用firewalld且iptables服务被禁用,Ubuntu 20.04起ufw为预装管理前端,而Debian系若未安装ufw则可能直接调用iptables规则链。切勿凭发行版名称武断操作,例如部分定制版Ubuntu可能已替换为nftables后端,此时`sudo nft list ruleset`才是有效验证手段。
二、分场景执行安全启停流程
对于firewalld:启动后务必执行`sudo firewall-cmd --reload`加载新规则,关闭时应先`sudo firewall-cmd --remove-service=ssh --permanent`清理关键服务再`sudo systemctl stop firewalld`,避免SSH连接中断;ufw用户需在启用前用`sudo ufw default deny incoming`设定安全基线,再逐条`sudo ufw allow OpenSSH`开放必要端口;iptables操作则严格遵循“清空→设策→加规→保存”四步法:依次执行`sudo iptables -F`、`sudo iptables -P INPUT DROP`、`sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT`、`sudo sh -c "iptables-save > /etc/iptables/rules.v4"`,缺失任一环节均可能导致服务不可达。
三、持久化配置与状态校验要点
firewalld需对每个`--permanent`参数操作后执行`--reload`,ufw依赖`sudo ufw status verbose`查看含日志级别的完整策略,iptables则必须将规则写入系统级配置文件(如RHEL系的`/etc/sysconfig/iptables`或Debian系的`/etc/iptables/rules.v4`),仅靠`iptables-save`命令输出不等于自动生效。每次变更后,使用`curl -I http://localhost`测试本地服务连通性,并通过`sudo journalctl -u firewalld --since "1 hour ago"`或`sudo ufw logging on`开启日志追踪异常拦截。
综上,Linux防火墙管理本质是服务控制、策略定义与规则固化三位一体的技术实践,需严格匹配系统环境选择工具链并恪守操作时序。




