linux防火墙配置核心是明确允许与拒绝规则,需理解策略顺序、接口方向和连接状态;iptables先设默认策略再加白名单,firewalld用zone+service管理更直观,均须持久化且验证生效。

Linux 防火墙规则配置的核心是明确“允许什么、拒绝什么”,关键在于理解策略顺序、接口方向和连接状态,而不是堆砌命令。
iptables 基础策略:先设默认策略,再加白名单
直接添加规则前,先设定链的默认行为。例如,让 INPUT 默认丢弃所有入站流量,再逐条放行必要服务:
- iptables -P INPUT DROP —— 设置 INPUT 链默认拒绝(慎用,建议先在测试环境验证)
- iptables -A INPUT -i lo -j ACCEPT —— 允许本地回环通信(必须)
- iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT —— 允许已建立连接的返回流量(保障出站后能收到响应)
- iptables -A INPUT -p tcp --dport 22 -j ACCEPT —— 开放 SSH(生产环境建议改端口或限制源 IP)
firewalld 实用配置:用 zone + service 管理更直观
CentOS/RHEL 7+ 默认使用 firewalld,推荐按区域(zone)划分信任等级,避免手动写底层规则:
- 查看当前活跃 zone:firewall-cmd --get-active-zones
- 把 eth0 接口划入 trusted 区域(仅限内网可信环境):firewall-cmd --permanent --zone=trusted --add-interface=eth0
- 开放 HTTP 和 HTTPS:firewall-cmd --permanent --add-service=http --add-service=https
- 重载生效:firewall-cmd --reload(--permanent 参数保证重启后仍有效)
规则持久化:别让重启后防火墙“失忆”
iptables 规则默认不保存,firewalld 的 --permanent 已内置持久化,但 iptables 用户需额外操作:
- Debian/Ubuntu:iptables-save > /etc/iptables/rules.v4(需安装 iptables-persistent)
- RHEL/CentOS 7+:service iptables save(需启用 iptables 服务,而非 firewalld)
- 更通用做法:将规则写入脚本,通过 systemd 或 rc.local 加载(注意执行时机,确保网络就绪后再加载)
调试与验证:别只信“命令没报错”
配置完务必验证实际效果,尤其注意连接方向和状态匹配:
- 查实时规则:iptables -L -n -v(-v 显示包/字节计数,可判断规则是否命中)
- 查连接跟踪:conntrack -L | grep :22(确认 SSH 连接是否被正确识别为 ESTABLISHED)
- 模拟测试:从另一台机器用 telnet 或 curl 测试端口;用 tcpdump 抓包看数据是否被 DROP(如 tcpdump -i eth0 port 22)
- 临时放行全部用于排障:iptables -P INPUT ACCEPT,问题解决后再收紧










