去年处理过一起服务器入侵事件,客户的iptables规则写了三百多条,密密麻麻看着特别专业。结果渗透测试一跑,22端口对内网全开,数据库3306端口对外网暴露。规则虽多,核心策略却漏洞百出。
两个方案对比:iptables裸写vs安全组+防火墙分层
方案A是纯iptables方式,所有规则写在服务器本地。优点是灵活,能做细粒度控制,比如限制每秒新建连接数、做端口敲门。缺点也很明显:规则一多就容易乱,运维人员流动后没人看得懂,出了问题排查困难。
方案B是云平台安全组+服务器防火墙分层。安全组在云平台层面做网络隔离,只放行业务必须的端口;服务器本地的firewalld或ufw再做一层应用级控制。这种方式规则数量少、逻辑清晰,而且安全组规则可以版本管理、团队共享。
对于大多数中小企业,我推荐方案B。理由很简单:安全策略的可维护性比绝对灵活性更重要。你写的三百条iptables规则,三个月后连你自己都说不清每条是干嘛的。
防火墙配置的检查清单
第一,默认策略必须是DROP而不是ACCEPT。很多服务器出厂默认INPUT链是ACCEPT,这意味着你写的规则只是“黑名单”模式,漏写一条就暴露一个端口。改成默认DROP,只显式放行需要的端口,这才是“白名单”模式。
第二,定期执行iptables -L -n --line-numbers做规则审计。把每条规则加上注释,用#标注用途和添加日期。有条件的话把规则纳入Git管理,每次变更走PR评审。
第三,出站流量也要管控。很多企业只管入站,出站全放行。一旦服务器被植入木马,它会用你的服务器往外发数据、连C2服务器。限制出站只允许必要的目标IP和端口,能大幅降低被入侵后的损失。
防火墙不是规则越多越安全。少而精的策略,配合定期审计,比堆规则有效得多。