Linux防火墙配置新手指南:iptables与
先了解两个常见防火墙工具
Linux下最常用的防火墙工具有两个:firewalld 和 iptables。
- firewalld:RHEL 7 / CentOS 7 之后的默认方案,支持动态规则,操作更简单,适合日常管理。
- iptables:传统方案,规则静态加载,功能强大但稍复杂。
本文会同时覆盖两种,你根据自己系统的版本来选。
查看当前系统版本:cat /etc/redhat-release。
动手前的准备工作
无论用哪种工具,都要先保证服务安装并处于运行状态。
以下操作建议用 root 用户或具备 sudo 权限的普通用户执行。
检查并安装 firewalld
rpm -q firewalld # 查看是否安装
systemctl status firewalld # 查看运行状态
如果未安装,执行:
yum install firewalld -y # CentOS/RHEL
systemctl enable --now firewalld # 开机自启并立即启动
检查并安装 iptables-services
若你坚持用 iptables,可能需要先停用 firewalld:
systemctl stop firewalld
systemctl disable firewalld
yum install iptables-services -y
systemctl enable --now iptables
避坑:不要同时运行 firewalld 和 iptables,规则会冲突。
firewalld 实操:开放常用端口
firewalld 使用 zone(区域)管理规则,默认区域是 public。
常用命令如下:
查看当前区域和规则
firewall-cmd --get-default-zone
firewall-cmd --list-all
开放 SSH(22 端口)
SSH 默认已经放行,但如果你改了端口,需要手动添加:
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload
--permanent 表示永久生效,不加的话重启后会丢失。--reload 重新加载规则。
开放 HTTP(80)和 HTTPS(443)
推荐使用服务名:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
移除规则
firewall-cmd --permanent --remove-service=http
firewall-cmd --reload
常用端口和服务:ssh、http、https、mysql(3306/tcp)等。
iptables 快速入门
如果你坚持用 iptables,以下命令可以完成类似功能:
开放 SSH 端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
开放 80 和 443
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
拒绝其余入站流量(重要)
iptables -P INPUT DROP
这个策略模式会丢弃所有未显式允许的输入包,一定要先放行 SSH 再执行,否则你会立马断开连接。
保存规则
service iptables save # 保存到 /etc/sysconfig/iptables
避坑:iptables 规则重启后消失,必须执行保存操作。
避坑:这些错误你可能也会犯
- SSH 端口没放行就改了默认端口 → 先通过 VNC 或控制台恢复规则,或者在放行新端口前保留原 SSH 连接。
- firewalld 和 iptables 同时运行 → 规则冲突,防火墙失效。只能用其中一个。
--reload后老规则还在 → 检查是否所有规则都加了--permanent,临时规则 reload 后会丢失。- iptables
-P INPUT DROP后失联 → 如果只允许 22 端口,但 SSH 监听在其他端口,就会被拒绝。用 VNC 或带外管理修复。 - 忘记保存规则 → iptables 需要
service iptables save,firewalld 需要--permanent。
验证防火墙是否生效
查看当前开放端口
firewalld:
firewall-cmd --list-ports
firewall-cmd --list-services
iptables:
iptables -L -n -v
从外部测试
用另一台机器或手机连接你放行的端口:
telnet 你的服务器IP 80
curl http://你的服务器IP
如果连接成功,说明防火墙配置正确。
如果连接超时或拒绝,先检查规则是否真的放行了该端口。
如果仍然不通,请检查云服务商的安全组或 VPC 防火墙(比如阿里云安全组、腾讯云防火墙),它们独立于系统防火墙,需要额外放行。
结尾
Linux防火墙配置并不复杂,抓住核心——明确要放行的服务,拒绝其余流量——就能保证安全。
建议先按本文步骤在测试机上完整操作一遍,理解每条命令的含义之后再应用到生产环境。
遇到异常时,优先回看避坑和高频问题部分,往往能找到线索。