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 看当前计数,确认新规则是否生效
- 误操作锁死后,可通过物理机 / 控制台重置,或提前配置定时任务恢复临时规则






























