linux防火墙配置核心是选对工具(firewalld推荐生产环境,iptables适合精细控制)和写对规则;需先确认状态,再按需开放端口、设置策略或配置nat转发。

Linux 防火墙配置核心就两点:选对工具、写对规则。当前主流是 firewalld(RHEL/CentOS 7+、Fedora 默认)和 iptables(兼容层,底层多由 nftables 驱动)。生产环境推荐 firewalld——规则可热更新、区域化管理更清晰;老系统或需精细控制包流程时用 iptables。
确认当前防火墙状态与工具
先搞清你用的是哪个:
- 查 firewalld 是否运行:systemctl status firewalld
- 查 iptables 规则(实际可能是 nftables 兼容模式):sudo iptables -L -n -v 或 sudo nft list ruleset
- 多数新版系统(如 CentOS 8/9、Ubuntu 20.04+)默认启用 firewalld;若看到 inactive (dead),说明没开,也可能是被禁用或换成了其他方案。
firewalld 常用端口与服务开放
这是最常遇到的场景:部署 Web、SSH、数据库后外网访问不通,八成是防火墙挡住了。
- 永久开放 HTTP/HTTPS:firewall-cmd --permanent --add-service=http 和 firewall-cmd --permanent --add-service=https
- 开放自定义端口(如 Tomcat 的 8080):firewall-cmd --permanent --add-port=8080/tcp
- 开放 MySQL(3306)并限制仅内网访问:firewall-cmd --permanent --zone=internal --add-port=3306/tcp
- 关键一步:所有带 --permanent 的操作,必须执行 firewall-cmd --reload 才生效
- 查看当前开放项:firewall-cmd --list-all(含 zone、服务、端口、富规则)
iptables 基础策略配置(filter 表)
适合需要明确“默认拒绝”逻辑的服务器,比如跳板机、网关或安全加固场景。
- 清空旧规则:iptables -F; iptables -X; iptables -Z
- 设默认策略:iptables -P INPUT DROP; iptables -P FORWARD DROP; iptables -P OUTPUT ACCEPT
- 放行本地回环:iptables -A INPUT -i lo -j ACCEPT
- 放行已建立连接:iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT(比旧版 state 模块更高效)
- 放行 SSH:iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
- 保存规则(CentOS/RHEL):service iptables save;Ubuntu 系:netfilter-persistent save
进阶:NAT 与转发(做网关/端口映射)
当你的 Linux 主机要充当内网出口或反向代理时,需开启 IP 转发 + NAT 规则。
- 开启内核转发:echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf && sysctl -p
- SNAT(内网访问外网):iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens37 -j MASQUERADE
- DNAT(外网访问内网服务):iptables -t nat -A PREROUTING -d 203.0.113.10 -p tcp --dport 8080 -j DNAT --to-destination 192.168.100.5:80
- 注意:DNAT 后通常还需放行 FORWARD 链对应流量,否则包会被 filter 表 DROP










