要让iptables记录被丢弃的数据包,需用log目标配合drop并限频、加前缀;可为input/output链单独或统一添加logging链;日志可通过rsyslog分离至独立文件;也可针对特定服务(如ssh)精准记录丢包。

要让 iptables 记录被丢弃的数据包,核心是用 LOG 目标配合 DROP,并控制日志频率、前缀和输出位置。它不改变原有规则逻辑,只是在丢弃前“打个招呼”,便于你确认到底是哪条规则、哪个方向、什么特征的包被拦下了。
为 INPUT 或 OUTPUT 链单独添加丢包日志
适合快速定位入站或出站问题。以记录所有被默认策略丢弃的入站包为例:
-
新建专用日志链:
iptables -N LOGGING -
把 INPUT 链末尾流量引向该链:
iptables -A INPUT -j LOGGING(必须放在所有 ACCEPT 规则之后、默认 DROP 之前) -
记录并限频:
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "DROP-IN: " --log-level 4(避免日志刷屏) -
真正丢弃:
iptables -A LOGGING -j DROP
若要记录出站丢包,只需把第二步中的 INPUT 换成 OUTPUT,其余不变。
同时记录 INPUT 和 OUTPUT 的丢包
当不确定丢包发生在哪个方向时,可统一处理:
- 执行一次
iptables -N LOGGING - 分别跳转:
iptables -A INPUT -j LOGGING和iptables -A OUTPUT -j LOGGING - 后续两行保持不变(限频记录 + 最终 DROP)
注意:不要重复创建 LOGGING 链,否则会报错;确保这两条跳转规则位于各自链的末尾、且在默认策略之前。
让日志输出到独立文件(如 /var/log/iptables.log)
默认日志混在 /var/log/messages 或 /var/log/syslog 中,难筛选。可通过 rsyslog 分离:
- 编辑
/etc/rsyslog.conf,在末尾添加:kern.warning /var/log/iptables.log - 创建日志文件:
touch /var/log/iptables.log && chmod 644 /var/log/iptables.log - 重启服务:
systemctl restart rsyslog
之后所有带 --log-level 4(warning)及更高级别的 iptables 日志都会写入该文件,方便 grep 或 tail 实时观察。
按需记录特定类型丢包(如 SSH 被拒)
比全量记录更精准,适合排查某服务连不通的问题:
- 在默认 DROP 规则前插入:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min -j LOG --log-prefix "SSH-DROP: " - 再跟一条同条件的 DROP:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j DROP
这样只记录新发起的 SSH 连接被拒情况,不影响已有连接,也避免干扰其他流量日志。











