linux防火墙规则设计核心是精准控制流量,iptables通过input/output/forward链实现,建议默认drop再按需放行,严格遵循最小权限原则,结合state、limit等模块增强安全性,并及时保存调试日志。

Linux防火墙规则设计核心在于明确流量控制目标,iptables是实现这一目标的底层工具,但规则不是越多越好,而是越精准越安全。
明确进出方向与默认策略
iptables有INPUT、OUTPUT、FORWARD三张链,服务器场景重点关注INPUT(进)和OUTPUT(出)。建议先设默认策略为DROP,再按需放行,避免遗漏导致暴露:
- INPUT默认拒绝:防止未授权访问,如iptables -P INPUT DROP
- OUTPUT默认允许或限制:生产环境建议设为ACCEPT(保障服务主动外连),敏感系统可设DROP后白名单放行
- 设置前务必保留SSH端口放行规则,否则可能锁死远程连接
只放行必需端口与协议
最小权限原则是防火墙设计铁律。例如Web服务器只需开放80/443,数据库仅允许可信IP访问3306:
- 放行本机回环:iptables -A INPUT -i lo -j ACCEPT
- 放行已建立连接:iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- 开放SSH(带源IP限制更佳):iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT
- 禁止全网ping:iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
利用扩展模块提升精度
基础规则易被绕过,用state、iprange、limit等模块可增强控制力:
- 防SSH暴力破解:iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/min --limit-burst 3 -j ACCEPT
- 限制同一IP并发连接数:iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j REJECT
- 指定IP段访问DB:iptables -A INPUT -p tcp --dport 3306 -m iprange --src-range 10.0.2.10-10.0.2.20 -j ACCEPT
保存与调试要同步进行
iptables规则重启即失效,必须显式保存;调试阶段禁用默认DROP,用LOG目标观察匹配行为:
- 记录被拒绝的包(便于分析):iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: "
- CentOS 7+用iptables-save > /etc/sysconfig/iptables,Ubuntu用iptables-persistent
- 加规则前用iptables -L -n -v看当前计数,确认新规则是否生效
- 误操作锁死后,可通过物理机/控制台重置,或提前配置定时任务恢复临时规则










