为什么只管入方向不够
多数防火墙只做入方向限制,出方向默认全放行。这正是数据外带、挖矿矿池连接与 C2 回连最依赖的通道:主机一旦被入侵,攻击者可以自由往外连。高安全区可改为出方向白名单,只放行 DNS、时间同步、补丁源与业务依赖,并保留已建立连接的放行。它对横向移动同样有效,能显著压缩攻击者的操作空间。
基本信息
| 适用平台 | Linux(iptables/nftables)、云安全组、硬件防火墙 |
|---|---|
| 风险等级 | 中 |
| 基线 | 高安全区出口白名单 |
| 必要放行 | DNS、NTP、补丁与镜像源、监控上报、业务依赖 |
| 日志要求 | 被丢弃的出向连接要有日志便于调优 |
典型使用场景
- 高安全区主机:只允许访问指定业务对端,其余出向全部丢弃
- 被入侵后的影响抑制:即使命令执行成功也连不出外网
- 数据外带防护:发现异常外传行为时能第一时间阻断
- 合规要求:等保三级要求区域边界做访问控制,包含出方向
- 测试环境隔离:避免测试机误连生产或公网
出方向白名单骨架
出方向白名单骨架
iptables -N EGRESS
iptables -A OUTPUT -j EGRESS
iptables -A EGRESS -o lo -j ACCEPT
iptables -A EGRESS -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A EGRESS -p udp --dport 53 -d 10.0.0.53 -j ACCEPT
iptables -A EGRESS -p tcp --dport 443 -d 10.0.0.10 -j ACCEPT
iptables -A EGRESS -p udp --dport 123 -d 10.0.0.53 -j ACCEPT
iptables -A EGRESS -m limit --limit 10/min -j LOG --log-prefix 'EGRESS-DROP: '
iptables -A EGRESS -j DROP
iptables -S EGRESS | head -20 # 核对规则顺序,LOG 与 DROP 必须在最后依赖清单逐类读法
| 依赖类型 | 典型端口/目标 | 漏放行的表现 |
|---|---|---|
| 域名解析 | UDP/TCP 53 到内网 DNS | 域名解析超时,业务表现为偶发失败 |
| 时间同步 | UDP 123 到 NTP 服务器 | 时间漂移导致证书校验与日志时间异常 |
| 补丁与镜像源 | TCP 443 到内网源站 | 更新失败,漏洞长期不修 |
| 监控与日志上报 | 自定义端口到监控端 | 监控断点,告警体系失效 |
| 业务依赖 | 如 TCP 3306 到数据库 | 应用连接失败,属于必须显式放行项 |
出方向收紧会同时影响时间同步、监控上报、镜像拉取与健康检查:先在测试环境把依赖清单跑全,再上生产,并保留带外管理通道。
落地要点
- 先记录不阻断的观察期日志,把真实依赖都摸清楚再改成丢弃
- 规则顺序:先放行已建立连接与必要服务,再统一丢弃,最后才是日志
- 硬编码 IP 的白名单要随业务漂移定期核对,域名解析出的地址集合纳入变更管理
- 分批灰度:先对一台同型机器启用,观察一周再推同一批次
- 把出口白名单与安全组规则对齐,避免两层不一致带来的排障黑洞
日志前缀统一命名(如 EGRESS-DROP)便于在集中日志里统计被拦的目标与频次,是调优白名单的主要依据。