直接将INPUT链默认策略设为DROP是构建零信任网络边界的最基础关键一步,意味着“一切未明示允许的入站连接一律拒绝”,随后必须放行本地回环、已建立连接,并按最小权限原则显式开放SSH、HTTP/HTTPS等必要端口,禁用ICMP回显以收缩攻击面,最后保存规则并验证顺序。

直接将 INPUT 链默认策略设为 DROP,是构建零信任网络边界的最基础、最关键的一步。它意味着“一切未明示允许的入站连接,一律拒绝”,彻底摒弃“默认开放、事后封堵”的旧逻辑。
设置默认DROP并确保基础连通性
执行以下命令后,所有新进流量立即被拦截,因此必须紧接着放行维持系统基本运行所必需的流量:
- 先锁定策略:`sudo iptables -P INPUT DROP`
- 放行本地回环:`sudo iptables -A INPUT -i lo -j ACCEPT`(否则本机服务间调用、数据库本地连接、健康检查等全部中断)
- 放行已建立连接及关联流量:`sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT`(确保 SSH 会话不掉线、HTTP 响应能返回等)
按最小权限原则显式放行服务端口
每开一个端口,都必须回答三个问题:谁(源IP)、什么协议、访问哪个端口?禁止使用 -s 0.0.0.0/0 或省略源地址。
- SSH 管理仅允许可信运维网段:`sudo iptables -A INPUT -p tcp -s 192.168.10.0/24 --dport 22 -j ACCEPT`
- Web 服务只开 80 和 443,且不限源(若需限源同上):`sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT`、`sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT`
- 数据库如 MySQL 绝不对外暴露,确需远程访问时严格限定单个管理IP:`sudo iptables -A INPUT -p tcp -s 10.5.2.100 --dport 3306 -j ACCEPT`
阻断探测与非必要协议
零信任不是只防“有用攻击”,更要收缩攻击面。默认拒绝后,主动关闭易被滥用的通道:
- 禁用 ICMP 回显请求(防 ping 扫描):`sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP`
- 显式丢弃无效连接尝试(可选增强):`sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP`
- 不开放 UDP 大范围端口(如 DNS 若仅本机用,OUTPUT 放行即可;INPUT 不必开 53,除非你运行权威 DNS)
保存规则并验证执行顺序
iptables 规则重启即失效,必须持久化;且规则顺序决定匹配结果——越精确、越关键的规则越要靠前:
- CentOS/RHEL:`sudo service iptables save` 或 `sudo iptables-save > /etc/sysconfig/iptables`
- Debian/Ubuntu:`sudo iptables-save | sudo tee /etc/iptables/rules.v4`
- 验证顺序是否合理:`sudo iptables -L INPUT -n --line-numbers`,确认 DROP 策略未被错误覆盖,且 ESTABLISHED 规则在 SSH/HTTP 规则之前(保障已有连接不中断)










