
防火墙默认策略必须设为“拒绝所有”
很多管理员启用防火墙后就以为安全了,其实默认放行反而最危险。生产环境必须采用“默认拒绝”策略,只显式允许必需的流量通过。这样能直接封堵80%以上的自动化扫描和暴力破解尝试。
操作要点:
- Linux用iptables时执行:iptables -P INPUT DROP
- firewalld启用panic模式可快速生效:firewall-cmd --panic-on
- Windows Server中三个配置文件(域/专用/公用)都应设为“默认阻止入站”
- 规则列表顶部必须是明确的ALLOW语句,避免被后续DENY覆盖
只开放真实需要的端口和来源
开放22、80、443不等于安全——关键在限制谁可以访问。数据库端口如3306、5432绝不能对公网开放;SSH即使保留也必须绑定IP段或改用非标端口。
常见合理配置:
- SSH仅允许可信管理网段:192.168.10.0/24 → port 2222
- Web服务开放80/443,但禁止访问后台路径(靠WAF或应用层控制)
- 内部服务如Redis、Elasticsearch,只允许应用服务器单IP访问
- 禁用ICMP响应(防止网络探测):iptables -A INPUT -p icmp -j DROP
用连接状态和速率限制防暴力攻击
单纯按端口放行无法防御密码爆破或SYN Flood。需结合连接跟踪和限速机制,让攻击者难以持续发起请求。
实用防护规则示例:
- 限制SSH新建连接频率:iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
- 丢弃非法TCP标志包(XMAS/NULL扫描):iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
- Windows PowerShell中启用连接限制:Set-NetFirewallSetting -ConsolidatedConnectionLimit 100
- firewalld添加rich rule实现IP级限速:firewall-cmd --add-rich-rule='rule family="ipv4" source address="203.0.113.5" port port="2222" protocol="tcp" limit value="3/m" accept'
定期审计与自动化更新规则
防火墙规则不是一劳永逸的配置。业务变化、新服务上线、旧IP退役都会让规则过期甚至产生冲突。建议每季度做一次规则健康检查。
高效运维方式:
- 所有规则必须带清晰注释和负责人标签,例如:# Allow API gateway (10.20.30.0/24) → /auth, @ops-team 2026-05
- 用脚本导出当前规则并比对基线:iptables-save > /etc/iptables.rules.bak && diff /etc/iptables.rules /etc/iptables.rules.bak
- Windows中用PowerShell批量导出:Get-NetFirewallRule | Where-Object {$_.Enabled -eq 'True'} | Export-Csv firewall-rules.csv
- 将规则纳入配置管理工具(Ansible/Chef),确保多台服务器策略一致











