Linux防火墙规则如何设置才有效
导读:Linux防火墙规则有效设置指南 一、先明确生效链路与最小可行配置 在云环境(如ECS)中,流量先经安全组过滤,再由操作系统防火墙处理,二者是“与”关系,必须同时放行;若安全组未放行端口(如 SSH 22),系统防火墙规则再正确也不会到达...
Linux防火墙规则有效设置指南
一、先明确生效链路与最小可行配置
- 在云环境(如ECS)中,流量先经安全组过滤,再由操作系统防火墙处理,二者是“与”关系,必须同时放行;若安全组未放行端口(如 SSH 22),系统防火墙规则再正确也不会到达应用。操作前务必先检查安全组与网络 ACL。
- 坚持“先放行,后启用”与“最小权限”原则:仅开放业务必需端口;对数据库等核心服务仅对内网网段开放;变更前准备备用通道(如已建立的 SSH 会话)以便回滚。
- 变更流程建议:备份当前规则 → 预置放行规则(如 SSH)→ 重载/启用防火墙 → 验证连通 → 观察日志与监控。
二、按工具的快速配置范式
- firewalld(CentOS/RHEL、Fedora、Ubuntu 常见)
- 状态与启停:查看状态
sudo firewall-cmd --state;启动/开机自启sudo systemctl start|enable firewalld;临时关闭sudo systemctl stop firewalld(不建议生产)。 - 放行与持久化:放行 SSH
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查看。
- 状态与启停:查看状态
- ufw(Debian/Ubuntu 常见)
- 启用与放行:
sudo ufw allow ssh或sudo ufw allow 3306/tcp;启用sudo ufw enable(会自动加载已允许的条目并开机自启);查看sudo ufw status。
- 启用与放行:
- nftables/iptables(底层与兼容性)
- 现代发行版默认集成 nftables;如需沿用 iptables 规则,可用
iptables-translate平滑转换。 - 最小化示例(iptables):允许回环与已建立连接
sudo iptables -A INPUT -i lo -j ACCEPT、sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT;放行 SSH 22sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT;默认拒绝入站sudo iptables -P INPUT DROP(务必先放行 SSH 再设默认 DROP)。 - 持久化:Debian/Ubuntu
sudo iptables-save > /etc/iptables/rules.v4;RHEL/CentOSsudo service iptables save或sudo iptables-save > /etc/sysconfig/iptables。
- 现代发行版默认集成 nftables;如需沿用 iptables 规则,可用
三、让规则真正“有效”的关键细节
- 规则顺序与默认策略:iptables 按序匹配,务必把“放行已建立连接”“关键业务放行”放在前面,最后再设默认 DROP/REJECT;firewalld 用区域与“富规则”实现精细化与优先级控制。
- 连接状态与回退路径:放行
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或 iptablesULOG/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 |
五、排障与风险控制清单
- 排查顺序:先看云侧安全组/网络 ACL → 再看系统防火墙(
firewall-cmd --list-all或ufw status/iptables -L -v -n)→ 确认服务监听(ss -tunlp | grep < 端口>)→ 检查日志(journalctl -u firewalld、/var/log/ufw.log)。 - 变更风险控制:远程变更前保留已建立的 SSH 会话;先加“放行规则”再启用/重载;生产环境避免直接关闭防火墙;变更后及时验证与回滚预案。
- 容器与第三方组件:注意 Docker 会自动操作 iptables,可能覆盖策略;必要时为容器单独规划链与规则,或在变更前冻结容器网络变更窗口。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux防火墙规则如何设置才有效
本文地址: https://pptw.com/jishu/773235.html
