企业级防火墙配置与规则管理实战指南

先搞懂防火墙的核心逻辑
要配置防火墙,得先摸透它的「包过滤」底层逻辑——每个网络包到达防火墙时,会按规则列表的顺序逐一匹配源IP、目的IP、端口、协议这四个核心属性,匹配到第一条规则就执行对应的动作(允许/拒绝/记录),没匹配到就执行默认策略。

企业级防火墙配置与规则管理实战指南

很多新手踩过的大坑:把「拒绝所有」的规则放在允许规则前面,结果正常流量全被拦了;或者默认策略设为「允许」,导致未定义的流量悄悄溜进内网。记住:安全的默认策略是「DROP」(拒绝所有未匹配流量),规则顺序是「先允许必要流量,再拒绝剩余」

从零开始配置基础防护规则
基础规则的核心是「明确边界」——定义哪些IP/端口/协议能进、哪些不能进。以Linux系统的iptables(最常用的开源防火墙工具)为例,教你配三条必用规则:

1. 允许内网访问服务器SSH(远程管理)

SSH是服务器远程管理的入口,必须严格限制来源:

# 允许公司内网(192.168.1.0/24)访问SSH端口(22)
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT -m comment --comment "允许内网SSH管理"
# 拒绝其他所有SSH请求
iptables -A INPUT -p tcp --dport 22 -j DROP -m comment --comment "拒绝公网SSH访问"

2. 允许Web服务对外提供HTTP/HTTPS

如果服务器是Web服务器,需要开放80(HTTP)和443(HTTPS)端口:

# 允许所有IP访问Web端口(80/443)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT -m comment --comment "允许HTTP访问"
iptables -A INPUT -p tcp --dport 443 -j ACCEPT -m comment --comment "允许HTTPS访问"

3. 禁止服务器主动访问危险端口

比如禁止服务器访问外部的3306(MySQL)、27017(MongoDB)端口,防止数据泄露:

# 拒绝服务器主动访问外部数据库端口
iptables -A OUTPUT -p tcp --dport 3306 -j DROP -m comment --comment "禁止访问外部MySQL"
iptables -A OUTPUT -p tcp --dport 27017 -j DROP -m comment --comment "禁止访问外部MongoDB"

配置完基础规则,一定要用iptables -L -v查看规则顺序,确认允许规则在拒绝规则前面——这步没做好,前面的配置全白费!

进阶:精准控制应用层访问
基础规则只能管到传输层(端口/协议),但现在的攻击多是「应用层」的(比如SQL注入、CC攻击),这时候要用到深度包检测(DPI)应用层网关(ALG)

案例1:限制单IP的HTTP请求频率(防CC攻击)

CC攻击是用大量假请求占满服务器资源,用iptables的xt_recent模块限制每分钟最多10次请求:

# 加载DPI模块(需提前安装xt_recent)
modprobe xt_recent
# 限制单IP每分钟最多10次HTTP请求
iptables -A INPUT -p tcp --dport 80 -m recent --name http_limit --rcheck --seconds 60 --hitcount 10 -j DROP -m comment --comment "限制HTTP请求频率"
iptables -A INPUT -p tcp --dport 80 -m recent --name http_limit --set -j ACCEPT -m comment --comment "允许合规HTTP请求"

案例2:配置端口映射(让内网服务对外可用)

如果内网有台OA服务器(192.168.1.100:8080),想让公网用户访问,需要做NAT端口映射

# 1. 把公网IP(203.0.113.10)的80端口转发到内网OA服务器的8080端口
iptables -t nat -A PREROUTING -d 203.0.113.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
# 2. 允许转发流量通过防火墙
iptables -A FORWARD -d 192.168.1.100 -p tcp --dport 8080 -j ACCEPT
# 3. 把内网服务器的响应流量转换为公网IP(SNAT)
iptables -t nat -A POSTROUTING -s 192.168.1.100 -p tcp --sport 8080 -j SNAT --to-source 203.0.113.10

规则优化:避免越配越乱的技巧
规则多了容易「打架」——比如两条规则互相冲突,或者冗余规则拖慢防火墙性能。分享4个优化技巧:

优化项 操作方法
加注释 每条规则用-m comment写清楚用途(比如「允许OA系统访问数据库」),避免后期忘初心
分组管理 把同类规则归为一组(比如「办公区规则」「服务器区规则」),用iptables -N创建自定义链
清理冗余 每月用iptables -L --line-numbers查看规则,删除未使用的(比如过期的IP段)
优化顺序 把频繁匹配的规则(比如Web端口)放在前面,减少匹配时间(防火墙是按顺序遍历规则的!)

举个分组管理的例子:创建「办公区允许规则」链,把所有办公区的允许规则放进去:

# 创建自定义链
iptables -N Office_Allow
# 添加办公区允许规则
iptables -A Office_Allow -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT -m comment --comment "允许办公区访问数据库"
iptables -A Office_Allow -s 192.168.1.0/24 -p tcp --dport 8080 -j ACCEPT -m comment --comment "允许办公区访问OA"
# 调用自定义链
iptables -A INPUT -j Office_Allow

日志与监控:及时发现规则漏洞
配置完规则不是终点,还要盯着日志——很多规则漏洞是日志里「漏」出来的。

1. 开启防火墙日志

LOG目标把被拒绝的流量记录到系统日志(/var/log/syslog):

# 记录INPUT链被拒绝的流量
iptables -A INPUT -j LOG --log-prefix "INPUT DROPPED: " --log-level 4
# 记录FORWARD链被拒绝的流量(端口映射用)
iptables -A FORWARD -j LOG --log-prefix "FORWARD DROPPED: " --log-level 4

2. 分析日志找问题

  • 快速过滤异常:用grep查被拒绝的数据库请求:
    # 查看最近1小时被拒绝的MySQL请求(dport=3306)
    grep "INPUT DROPPED: .*dport=3306" /var/log/syslog | grep "$(date -d '-1 hour' +%H:)"
    
  • 可视化监控:用ELK Stack(Elasticsearch+Logstash+Kibana)把日志导进去,做个「被拒绝流量TOP10」仪表盘——如果某个IP频繁尝试访问3306端口,大概率是黑客在扫库!
  • 性能监控:用top看iptables的CPU占用,如果超过30%,说明规则太多或顺序不合理,要优化(比如把Web规则移到最前面)。

最后提醒:配置完规则一定要测试!比如用另一台电脑访问服务器的SSH,看能不能连上;用公网IP访问Web服务,看能不能打开页面。如果出问题,用iptables -L -v查规则顺序,或者用tcpdump抓包看流量走到哪一步被拦了。

防火墙配置不是「一配了之」,而是「持续优化」——随着业务变化,规则要跟着调整,比如新上了ERP系统,要加允许ERP服务器访问数据库的规则;旧系统下线了,要删掉对应的允许规则。

原创文章,作者:,如若转载,请注明出处:https://zube.cn/archives/245

(0)