电脑工场
白蓝主题五 · 清爽阅读
首页  > 网络基础

网络分区策略日志记录:为什么你的防火墙日志总在“装哑巴”?

上周帮朋友排查公司内网访问不了云数据库的问题,查了半天发现是分区策略把流量 silently 拦截了——防火墙没报错,应用连不上,日志里却只有一行行空洞的“ACCEPT”和“DROP”,根本看不出哪条规则在起作用。这不是个例,而是很多中小型网络实际运行中的常态。

分区策略不是开关,是逻辑链

网络分区策略(比如 iptables 的 chain、nftables 的 table/chain、或 Cisco ACL 的 sequence)本质是一组带顺序的匹配-动作规则。但很多人只配置了“怎么拦”,却忘了留一条“拦完记一笔”的尾巴。结果就是:流量被 DROP 了,但没人知道是第 7 条规则干的,还是默认策略兜底的。

日志记录不是锦上添花,是故障定位刚需

举个真实场景:某电商后台突然收不到支付回调,运维第一反应是查 Web 日志、查 Nginx 访问日志——全都没记录请求。最后翻到 iptables -L -v,才发现 INPUT 链第 12 条规则把 443 端口外的回源 IP 段全 DROP 了,而这条规则后面没加 LOG。如果当时有这句:

-A INPUT -s 203.0.113.0/24 -p tcp --dport 8080 -j LOG --log-prefix "[BLOCK-PAYBACK] " --log-level 4

那么 /var/log/messages 里就会多出类似这样的线索:

Jan 15 14:22:33 web01 kernel: [BLOCK-PAYBACK] IN=eth0 OUT= MAC=... SRC=203.0.113.42 DST=10.0.2.10 LEN=60 ...

一眼锁定来源 IP 和触发规则,5 分钟就能改好,不用重启服务、不用抓包、不惊动开发。

三个实操建议,马上能用

① LOG 要紧挨 DROP/REJECT,别放默认策略后面
错误写法:

-A INPUT -j DROP
-A INPUT -j LOG --log-prefix "[FALLBACK-DROP] "
这样 LOG 根本不会执行。正确顺序是先 LOG 再 DROP:

-A INPUT -s 192.168.100.0/24 -j LOG --log-prefix "[DROP-FROM-TESTNET] "
-A INPUT -s 192.168.100.0/24 -j DROP

② 给不同分区打标签,别混成一锅粥
比如 DMZ 区、办公网、生产内网,每类规则前缀明确:

--log-prefix "[DMZ-TO-DB] "
--log-prefix "[OFFICE-TO-GW] "
--log-prefix "[PROD-OUTBOUND] "

grep 时直接 grep '\[DMZ-TO-DB\]',比翻几百行原始日志快得多。

③ 别只信 syslog,关键分区配独立日志文件
在 rsyslog 中加一行:

:msg, contains, "[PROD-SECURITY]" /var/log/firewall/prod-security.log

既避免日志轮转时冲掉线索,也方便用 logrotate 单独管理保留周期。

别让日志成为“事后诸葛亮”

有次客户服务器凌晨三点被扫端口,安全团队第二天才看到告警。我调出前一天的 iptables LOG,发现早在 22:17 就开始高频 DROP 来自 185.143.x.x 的 SSH 连接,但没人订阅这个日志流。后来他们用 systemd-journal + grep 做了个简易监控脚本,每分钟扫一次含 "[BRUTE-SSH]" 的行,超 10 次就发钉钉——现在扫段行为刚冒头就被自动封 IP。

网络分区策略的日志记录,不是给审计看的装饰品,是你在网络迷宫里随身带的手电筒。光开着不等于能照见路,得对准方向、调好亮度、还别忘了换电池。