生产环境中iptables端口白名单的核心原则是默认拒绝所有入站连接,仅放行明确授权的端口与来源;需设input链默认策略为drop、按序插入白名单规则、避免自锁、保存并持久化配置,叠加连接限制、状态跟踪、icmp管控及日志审计,并通过验证与自动化持续维护。

生产环境中,iptables端口白名单的核心原则是:默认拒绝所有入站连接,仅放行明确授权的端口与来源。关键不在“加规则”,而在“建秩序”——先堵死,再精准开口,同时确保规则可维护、可审计、不自锁。
一、基础策略:默认DROP + 白名单显式放行
必须将INPUT链默认策略设为DROP,而非ACCEPT。这是白名单生效的前提:
- 执行顺序决定安全: iptables按规则顺序匹配,一旦命中即停止;因此白名单规则必须放在默认DROP之前(通常在自定义链或早期位置)
-
避免自锁: 配置前务必保留带超时的SSH会话(如
timeout 300 ssh user@host),或通过控制台/带外管理接入 -
立即生效但不持久: 运行命令只影响当前内核状态,需后续保存(如
iptables-save > /etc/iptables/rules.v4)并配置开机加载
二、典型白名单规则写法(含注释)
以下为常用服务的安全放行示例,每条均限定来源IP段(请按实际替换192.168.10.0/24等):
-
SSH管理端口(建议非22):
iptables -A INPUT -s 192.168.10.0/24 -p tcp --dport 2222 -j ACCEPT -
Web服务(HTTP/HTTPS):
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT(若面向公网,建议前置WAF或限制地域) -
健康检查端口(如Prometheus):
iptables -A INPUT -s 10.0.1.5 -p tcp --dport 9090 -j ACCEPT(仅允许监控服务器访问) -
数据库端口(严禁全网开放):
iptables -A INPUT -s 10.0.2.100 -p tcp --dport 3306 -j ACCEPT(仅应用服务器IP)
注意:-A追加规则易导致顺序混乱,生产环境推荐用-I插入到链首,或先清空再重载规则集。
三、必须配套的防护增强项
单纯端口放行不够,需叠加基础防护降低攻击面:
-
限制新建连接速率: 防端口扫描,例如
iptables -A INPUT -p tcp --syn -m limit --limit 1/sec --limit-burst 3 -j ACCEPT -
放行已建立连接: 保障响应包返回,必加规则:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -
关闭ICMP泛洪风险: 如无需ping检测,禁用
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP -
记录可疑尝试(谨慎启用):
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min -j LOG --log-prefix "SSH-brute:",避免日志刷爆磁盘
四、运维与验证要点
上线后必须验证,且每次变更需留痕:
-
导出当前规则备查:
iptables-save > /etc/iptables/rules.v4.$(date +%F_%H%M) -
用
iptables -L -n -v查看计数器: 确认白名单规则有匹配流量,DROP规则计数是否异常增长 - 模拟测试: 从非授权IP尝试telnet目标端口,应超时或被拒;从白名单IP应通
-
检查规则重复与冗余: 用
iptables -S输出原始规则,人工比对逻辑冲突(如某IP被多条规则覆盖)
不复杂但容易忽略:白名单不是一劳永逸,需随服务拓扑变化同步更新,并纳入CI/CD或配置管理工具(如Ansible)统一管控。










