Linux防火墙规则有效设置指南
一、先明确生效链路与最小可行配置
二、按工具的快速配置范式
sudo firewall-cmd --state;启动/开机自启 sudo systemctl start|enable firewalld;临时关闭 sudo systemctl stop firewalld(不建议生产)。sudo firewall-cmd --permanent --add-service=ssh;放行端口 sudo firewall-cmd --permanent --add-port=8080/tcp;使配置生效 sudo firewall-cmd --reload;查看 sudo firewall-cmd --list-all。sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.5" port protocol="tcp" port="22" accept';开启拒绝日志 sudo firewall-cmd --set-log-denied=all 并用 journalctl -u firewalld 查看。sudo ufw allow ssh 或 sudo ufw allow 3306/tcp;启用 sudo ufw enable(会自动加载已允许的条目并开机自启);查看 sudo ufw status。iptables-translate 平滑转换。sudo iptables -A INPUT -i lo -j ACCEPT、sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT;放行 SSH 22 sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT;默认拒绝入站 sudo iptables -P INPUT DROP(务必先放行 SSH 再设默认 DROP)。sudo iptables-save > /etc/iptables/rules.v4;RHEL/CentOS sudo service iptables save 或 sudo iptables-save > /etc/sysconfig/iptables。三、让规则真正“有效”的关键细节
ESTABLISHED,RELATED 可确保已建立的会话与关联流量(如 FTP 数据通道)不被中断,避免因策略过严导致“能连上但没数据”。sudo sysctl -w net.nf_conntrack_max=1048576;适度调整 nf_conntrack_tcp_timeout_established;必要时清理过期连接 conntrack -D -p tcp --dport 80。firewalld --set-log-denied=all 或 iptables ULOG/LOG 前缀),结合 journalctl、iftop、iptables -L -v -n 观察命中与异常;对关键端口设置速率限制与自动化封禁(如 Fail2Ban)。四、常见场景与命令清单
| 场景 | 关键动作 | 命令示例 |
|---|---|---|
| 云上 Web 服务器 | 安全组放行 80/443/TCP;系统防火墙放行 http/https | sudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload |
| 仅内网访问数据库 | 安全组与系统防火墙均仅对内网网段放行 3306/TCP | sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" port protocol="tcp" port="3306" accept' && sudo firewall-cmd --reload |
| 端口转发/NAT | 将外网 80 转发到内网 8080;开启 SNAT | sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 destination port port=80 protocol=tcp redirect port=8080' && sudo firewall-cmd --permanent --add-masquerade && sudo firewall-cmd --reload |
| 限制暴力破解 | 限制 SSH 频率并自动封禁 | 配置 Fail2Ban:[sshd] enabled=true port=ssh maxretry=3 bantime=86400 |
| 容器环境 | 允许已建立连接出站,限制容器外发 | sudo iptables -A FORWARD -o docker0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT;sudo iptables -A FORWARD -o docker0 -j DROP |
| 规则备份与恢复 | 持久化与回滚 | firewalld:sudo firewall-cmd --runtime-to-permanent 并备份 /etc/firewalld;iptables:sudo iptables-save > /etc/iptables/rules.v4 / sudo iptables-restore < /etc/iptables/rules.v4 |
五、排障与风险控制清单
firewall-cmd --list-all 或 ufw status/iptables -L -v -n)→ 确认服务监听(ss -tunlp | grep <端口>)→ 检查日志(journalctl -u firewalld、/var/log/ufw.log)。