iptables记录丢包日志需确保log规则置于drop/reject之前,使用-i插入链首,并启用--log-prefix、--log-tcp-options等扩展字段;日志应通过rsyslog分流至专用文件,调大内核缓冲区并启用同步写盘,以保障完整性与可审计性。

iptables 记录丢包日志不是简单加一条 -j LOG 就完事,关键在于规则顺序、字段完整性、日志落盘可靠性,以及后续可审计性。核心原则是:日志必须在丢弃动作前触发,且内容要足够支撑行为判断。
日志规则必须放在 DROP/REJECT 之前
如果先 -j DROP 再 -j LOG,包已被内核丢弃,LOG 根本不会执行。正确做法是用 -I 插入链首,确保匹配即记录:
sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -j LOG \--log-prefix "SSH-BLOCK: " \--log-tcp-options \--log-ip-options
紧接着再跟丢弃规则:sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -j DROP。这样每条被阻断的新 SSH 连接请求都会留下带前缀的完整日志。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
让日志内容真正有用,不止是 IP 和端口
默认 -j LOG 只输出源/目的 IP、协议、端口、TTL 和包长,对分析扫描或攻击意图远远不够。必须显式启用扩展字段:
-
--log-tcp-options:捕获 TCP 头部选项(如 Timestamp、MSS、SACK),能识别慢速扫描或异常握手 -
--log-ip-options:记录 IP 源路由、记录路由等非常规选项,很多扫描工具会滥用这些字段 -
--log-uid:仅适用于 OUTPUT 链,但对本地发起的出向连接审计有价值 -
--log-prefix:必须设置,否则无法从系统日志中快速分离 iptables 条目
把日志单独存到专用文件,避免丢失
混在 /var/log/syslog 或 /var/log/messages 里不仅难查,还容易被轮转冲掉。推荐分离存储:
- 新建
/etc/rsyslog.d/iptables.conf,写入::msg, contains, "SSH-BLOCK:" /var/log/iptables.log<br>& ~
- 重启服务:
sudo systemctl restart rsyslog - 调大内核日志缓冲区(防高并发下丢日志):
sudo sysctl -w kernel.log_buf_len=8388608(8MB) - 为防断电丢数据,可在
/etc/rsyslog.conf中添加$ActionFileEnableSync on强制同步写盘
审计时怎么高效利用这些日志
日志有了,还得能快速定位和归因:
- 用
grep "SSH-BLOCK:" /var/log/iptables.log | awk '{print $10}' | sort | uniq -c | sort -nr统计高频攻击源 IP - 结合
--log-tcp-options输出,查找含TSval或SACK的行,判断是否为真实用户连接还是自动化扫描 - 定期比对
iptables-save -c的计数器变化,确认某条 LOG 规则是否真被触发,避免规则“挂着没用” - 把日志路径加入 logrotate 配置,防止单个文件过大影响读取和分析










