iptables日志需前置LOG规则、分离存储并结构化分析:LOG须在DROP前,用--log-prefix等参数增强可读性;通过rsyslog分离日志至独立文件并调大缓冲;用grep/awk提取SRC/DPT等字段;结合ELK实现可视化与告警。

想让 iptables 真正“说话”,得先让它把关键信息记下来,再用合适的方法翻出来、筛出来、看明白。不是加一条 -j LOG 就完事,重点在规则位置、字段完整性和日志可读性。
一、让 iptables 正确记录日志
LOG 规则必须放在 DROP/REJECT 之前,否则包已被丢弃,根本不会触发日志。推荐用 -I 插入链首,确保早匹配:
sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -j LOG \--log-prefix "SSH-ATTEMPT: " \--log-tcp-options \--log-ip-options
必须带 --log-prefix,方便后续过滤;--log-tcp-options 和 --log-ip-options 能捕获扫描特征(如 TCP 时间戳、源路由选项),对安全分析很关键。
二、把日志单独存好、不丢失
默认日志混在 /var/log/syslog 或 /var/log/messages 里,难找还容易被冲掉。建议分离存储:
- 编辑
/etc/rsyslog.d/iptables.conf,添加::msg, contains, "SSH-ATTEMPT:" /var/log/iptables.log& ~ - 重启 rsyslog:
sudo systemctl restart rsyslog - 为防日志丢,调大内核缓冲:
sudo sysctl -w kernel.log_buf_len=8388608(8MB)
这样日志就集中写进 /var/log/iptables.log,也更抗压。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
三、快速查看和提取关键信息
不用翻整本日志,几条命令就能定位问题:
- 实时盯新记录:
sudo tail -f /var/log/iptables.log - 只看被拒绝的源 IP:
sudo grep "SSH-ATTEMPT" /var/log/iptables.log | awk '{for(i=1;i<=NF;i++) if($i ~ /^SRC=/) print substr($i,5)}' | sort | uniq -c | sort -nr - 统计高频目标端口:
sudo grep "DPT=" /var/log/iptables.log | awk '{for(i=1;i<=NF;i++) if($i ~ /^DPT=/) print substr($i,5)}' | sort | uniq -c | sort -nr | head -10
每行日志里的 SRC=、DST=、DPT=、PROTO= 是核心字段,awk 直接按等号切分就能拿到值。
四、进阶:配合 ELK 做结构化分析
人工查适合应急,长期运营需要自动化:
- Filebeat 采集
/var/log/iptables.log - Logstash 用 grok 解析:
%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:hostname} kernel:.*?%{DATA:prefix}.*?SRC=%{IP:src_ip} DST=%{IP:dst_ip}.*?PROTO=%{WORD:proto} SPT=%{INT:src_port} DPT=%{INT:dst_port}.*? - Kibana 里就能按源 IP 地图分布、协议占比、端口访问趋势做可视化
结构化之后,查一个攻击源的全部行为、设阈值自动告警、关联其他系统日志,都变得简单可靠。

















