iptables黑白名单核心在于策略模型选择:白名单设默认drop、仅放行可信流量,适用于高敏业务,需先保障lo和已建立连接;黑名单设默认accept、插入drop/reject规则阻断风险源,容错性强;两者均须持久化规则并验证生效。

iptables 配置黑白名单不是“加几条命令”就完事,而是要根据业务场景选对策略模型、控制规则顺序、兼顾连接可用性。核心业务安全的关键,在于默认策略的设定方式和规则链的匹配逻辑——白名单更严格,黑名单更灵活,但误配风险更高。
白名单:只放行可信流量,适合高敏业务
适用于数据库、后台管理接口、内部API等不允许外部随意访问的服务。操作前提是:先保障本地管理不中断,再收紧外部入口。
- 先放行回环(lo)和已建立连接:iptables -A INPUT -i lo -j ACCEPT;iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- 设置默认拒绝:iptables -P INPUT DROP(注意:执行后若无放行规则,SSH会立即断开)
- 按需添加白名单规则,例如仅允许运维网段访问SSH:iptables -A INPUT -s 10.20.30.0/24 -p tcp --dport 22 -j ACCEPT
- 如需开放Web服务,只允特定IP访问80/443:iptables -A INPUT -s 203.0.113.50 -p tcp -m multiport --dports 80,443 -j ACCEPT
黑名单:默认放行,阻断已知风险源
适用于对外提供服务但需临时封禁恶意IP的场景,比如被扫描、撞库或CC攻击的源地址。优势是容错性强,不易误锁自己。
- 确保默认策略为接受:iptables -P INPUT ACCEPT
- 插入阻断规则(-I 保证优先匹配):iptables -I INPUT -s 192.168.5.101 -j DROP
- 可批量封禁网段:iptables -I INPUT -s 119.123.0.0/16 -j REJECT(REJECT 比 DROP 更利于日志识别)
- 若只需封某端口(如防暴力破解SSH),加协议和端口限制:iptables -I INPUT -p tcp -s 202.101.22.33 --dport 22 -j DROP
规则持久化与安全校验不可跳过
重启后规则丢失等于没配。不同系统保存方式不同,且必须验证生效后再退出终端。
- CentOS/RHEL 7 及以前:service iptables save(要求 iptables-services 已启用)
- CentOS/RHEL 8+ 或 Fedora:iptables-save > /etc/sysconfig/iptables
- Debian/Ubuntu:iptables-save > /etc/iptables/rules.v4
- 验证是否生效:iptables -L -n -v 查看计数器是否增长;用另一台机器测试封禁/放行效果
- 建议加一条“保底规则”:在所有规则前插入允许管理员IP的规则,避免配置失误导致失联
进阶建议:用 ipset 管理大规模黑白名单
当需要封禁或放行几十上百个IP时,逐条写 iptables 规则会导致性能下降、难以维护。ipset 提供哈希集合,一条规则即可匹配整个集合。
- 创建黑名单集合:ipset create blacklist hash:ip
- 批量导入IP:ipset add blacklist 192.168.1.100;ipset add blacklist 203.0.113.0/24
- 关联到 iptables:iptables -I INPUT -m set --match-set blacklist src -j DROP
- 集合可动态增删,不影响现有规则,也支持保存:ipset save > /etc/ipset.conf











