生产环境iptables防火墙配置核心是“最小必要通行”逻辑:先放行本地回环、已建立连接及关键服务端口(如SSH、HTTPS),再设INPUT默认策略为DROP,确保未匹配规则的入站流量一律拒绝。

生产环境用 iptables 写防火墙规则,核心不是堆命令,而是建立“最小必要通行”逻辑:先放行关键路径,再堵住所有其他入口。默认策略设为 DROP,再一条条加白名单,比从 ACCEPT 开始删更安全。
明确 INPUT 链是主战场
对外服务的访问控制几乎全在 filter 表的 INPUT 链上。OUTPUT 和 FORWARD 在多数单机服务场景中可保持宽松(OUTPUT 默认 ACCEPT,FORWARD 通常不启用或设 DROP)。
- INPUT:处理所有进来的包——SSH 登录、Web 请求、数据库连接都走这里,必须精细控制
- OUTPUT:本机发出去的包(如 curl 外网、发邮件),一般无需限制,设为 ACCEPT 即可
- FORWARD:仅当机器做路由/NAT 才启用;纯应用服务器应设为 DROP 并跳过配置
四步构建最小安全基线
按执行顺序写规则,iptables 从上到下匹配,第一条命中即执行动作,不再往下看。顺序错了,规则就失效。
- 放行本地回环:
iptables -A INPUT -i lo -j ACCEPT(127.0.0.1 通信不能断) - 放行已有连接:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT(确保 SSH 会话不断、HTTP 响应能回来) - 按需开放服务端口:
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT(SSH 只允内网)、iptables -A INPUT -p tcp --dport 443 -j ACCEPT(HTTPS 全放开) - 最后设默认拒绝:
iptables -P INPUT DROP(没被前面规则放过的包,一律丢弃)
关键服务放行要带条件
开放端口 ≠ 开放全部。生产环境务必叠加来源限制、协议校验和状态判断。
- SSH 不裸开:
-s 10.0.0.0/8或--src-range 192.168.5.10-192.168.5.20限定管理网段 - Web 服务加 ICMP 支持:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT,方便基础连通性排查 - 数据库端口(如 3306)必须指定源 IP:
-s 10.20.30.40,禁止全网扫描 - DNS 查询需双向放行:
iptables -A INPUT -p udp --sport 53 -j ACCEPT(允许上游返回),iptables -A OUTPUT -p udp --dport 53 -j ACCEPT(允许本机发请求)
规则持久化与安全操作习惯
内存规则重启即丢,且误操作可能锁死 SSH。必须固化+备份。
- 保存当前规则:
iptables-save > /etc/sysconfig/iptables(CentOS/RHEL)或iptables-save > /etc/iptables/rules.v4(Debian/Ubuntu) - 操作前必备份:
iptables-save > /root/iptables.bak.$(date +%s) - 清空规则前先放宽默认策略:
iptables -P INPUT ACCEPT,避免清空瞬间失联 - 测试新规则时,加一条“10 分钟后自动回滚”的 cron(例如
sleep 600 && iptables-restore < /root/iptables.bak.last),留逃生通道
文章来自机圈观察员网,发布者:,转载请注明出处:https://www.jqgcy.com/shoujipingce/21068.html