直接将INPUT链默认策略设为DROP是实现纵深防御最基础最关键的一步,意味着所有入站流量默认不可信,必须明确放行本地回环、已建立连接及限源SSH等必要流量,并按最小权限开放业务端口、禁用ICMP、丢弃无效状态、限制连接速率,最后确保规则顺序正确并持久化保存。

直接将 INPUT 链默认策略设为 DROP,是实现纵深防御最基础也最关键的一步。它不是“加一道锁”,而是重置信任起点:所有入站流量默认不可信,只放行明确验证过必要性、来源和用途的连接。
设置默认拒绝并确保系统基本连通
执行 iptables -P INPUT DROP 后,服务器会立即拦截所有新进连接。必须紧接着放行三类基础流量,否则服务将瘫痪或管理中断:
- 本地回环通信:iptables -A INPUT -i lo -j ACCEPT(保障数据库本地访问、健康检查、容器间通信)
- 已建立及关联连接:iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT(保证现有 SSH 会话不断、HTTP 响应能返回)
- 出站默认允许:iptables -P OUTPUT ACCEPT(保持服务器主动发起的 DNS、日志上报、软件更新等能力)
按最小权限显式开放业务端口
每个开放规则都需回答“谁、什么协议、访问哪个端口”三个问题,避免宽泛放行:
- SSH 管理严格限源:iptables -A INPUT -p tcp -s 192.168.10.0/24 --dport 22 -j ACCEPT(禁止全网开放 22 端口)
- Web 服务仅开 80/443:iptables -A INPUT -p tcp --dport 80 -j ACCEPT 和 iptables -A INPUT -p tcp --dport 443 -j ACCEPT
- 数据库如 MySQL 不对外暴露:iptables -A INPUT -p tcp -s 10.5.2.100 --dport 3306 -j ACCEPT(仅允许可信运维 IP)
主动收缩攻击面与增强状态防护
纵深防御不仅防“有用攻击”,更要消除可被利用的通道:
- 禁用 ICMP 回显:iptables -A INPUT -p icmp --icmp-type echo-request -j DROP(减少被扫描发现的概率)
- 丢弃无效连接状态:iptables -A INPUT -m conntrack --ctstate INVALID -j DROP(拦截伪造或异常数据包)
- 对高频敏感端口做连接速率限制:iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 5/min --limit-burst 5 -j ACCEPT(防暴力破解)
规则顺序与持久化不可省略
iptables 按从上到下匹配,首条命中即执行。因此:
- 高优先级规则(如本地回环、ESTABLISHED)必须放在前面
- 精确规则(如限源 SSH)应优于宽泛规则(如全网 80 端口)
- 保存规则防止重启失效:CentOS/RHEL 执行 iptables-save > /etc/sysconfig/iptables;Debian/Ubuntu 使用 iptables-save > /etc/iptables/rules.v4

















