防火墙怎么开启和关闭linux命令行
Linux系统中防火墙的开启与关闭需依据实际部署的服务类型而定,主流为firewalld(RHEL/CentOS 7+、Fedora默认)和iptables(传统方案),部分新版发行版已逐步采用nftables作为底层框架。firewalld通过`sudo systemctl start firewalld`启用、`sudo systemctl stop firewalld`停用,并支持`sudo systemctl status firewalld`实时查看运行状态;iptables则常用`sudo systemctl start iptables`与`sudo systemctl stop iptables`完成启停操作。值得注意的是,不同发行版预装策略存在差异——Ubuntu 22.04默认未启用firewalld,而Debian系多依赖iptables或ufw;命令兼容性亦受init系统影响,systemd环境优先使用`systemctl`,SysV init环境则适配`service`指令。所有操作均需root权限,且建议执行前确认当前生效的防火墙服务,避免配置冲突。
一、精准识别当前生效的防火墙服务
执行`sudo systemctl list-unit-files | grep -E "(firewalld|iptables|ufw|nftables)"`可列出所有相关服务单元及其启用状态;再通过`sudo ss -tuln | grep ":22|:80|:443"`结合`sudo cat /proc/sys/net/ipv4/ip_forward`辅助判断网络层是否实际受控。若系统同时安装firewalld与iptables,需优先运行`sudo systemctl status firewalld`和`sudo systemctl status iptables`,以确认哪个服务处于active(running)状态——二者不可并行生效,否则规则冲突将导致策略失效。
二、firewalld服务的标准操作流程
启用时先确保服务已安装:`sudo dnf install firewalld`(RHEL系)或`sudo apt install firewalld`(Debian系),随后执行`sudo systemctl start firewalld`启动服务,并立即运行`sudo systemctl enable firewalld`设为开机自启。关闭则分两步:先`sudo systemctl stop firewalld`终止进程,再`sudo systemctl disable firewalld`取消开机加载。如需临时放行某端口(例如SSH的22端口),应配合`sudo firewall-cmd --permanent --add-port=22/tcp`与`sudo firewall-cmd --reload`完成持久化配置,而非直接停用防火墙。
三、iptables与nftables的兼容性处理
在已迁移至nftables的系统(如Ubuntu 24.04、Fedora 39+)中,传统iptables命令仍可通过iptables-nft工具链兼容运行,但底层规则由nft管理。此时建议统一使用`sudo nft list ruleset`查看规则,`sudo systemctl restart nftables`重启服务。若需回退至纯iptables模式,须卸载nftables相关包并重新安装iptables-services,再执行`sudo systemctl mask firewalld && sudo systemctl unmask iptables`完成服务切换。
四、安全操作的三项硬性前提
其一,所有启停操作前必须备份现有规则:firewalld执行`sudo firewall-cmd --runtime-to-permanent`后导出`/etc/firewalld/zones/public.xml`;iptables则用`sudo iptables-save > /root/iptables_backup_$(date +%Y%m%d).rules`保存快照。其二,远程管理服务器时,务必预先配置白名单规则或保留SSH端口开放,避免防火墙关闭后失连。其三,禁用防火墙仅限可信内网调试场景,生产环境严禁长期关闭。
综上,Linux防火墙管理本质是服务识别、规则持久化与运行时协同的系统工程,需严格遵循发行版规范与安全基线。




