在一次针对Ubuntu服务器的安全审计中,我们发现系统存在明显的网络访问控制漏洞。某次紧急修复过程中,团队成员误将iptables规则设置为允许所有流量通过,导致系统暴露在公网攻击面下。
问题背景: 我们的Ubuntu 20.04服务器部署了Web服务和数据库服务,需要严格控制外部访问。最初仅配置了基本的防火墙规则,但缺乏精细化的访问控制策略。
踩坑过程:
- 初步尝试使用
iptables -A INPUT -j ACCEPT放行所有流量(错误做法) - 后续发现该操作会完全关闭防火墙保护机制
- 通过
iptables -L -n检查规则时发现已有大量默认规则 - 在不充分测试的情况下直接上线了错误的访问控制策略
正确加固方案:
# 清除现有规则
iptables -F
iptables -X
# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 允许loopback接口
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许SSH访问(仅限特定网段)
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT
# 允许HTTP服务
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许HTTPS服务
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 记录拒绝的日志
iptables -A INPUT -j LOG --log-prefix "iptables-deny:"
验证方法: 使用iptables -L -n -v查看流量统计,确认规则生效。通过网络扫描工具测试端口状态,确保仅开放必要端口。
经验教训:
- 任何防火墙策略变更都必须先在测试环境中验证
- 建议使用iptables-save和iptables-restore实现规则备份
- 避免一次性全量修改规则,应逐步添加规则

讨论