iptables日志记录:从入门到精准排查的实战指南
大家好,我是33blog的运维老司机。今天想和大家聊聊iptables日志记录那些事儿——这个看似简单却经常让人抓狂的功能。上周我还在凌晨3点被iptables日志淹没的服务器报警吵醒,痛定思痛后决定把这几年的踩坑经验整理成文。
为什么你的iptables日志总是没用?
很多新手会直接这样记录所有DROP规则:
iptables -A INPUT -j DROP --log-prefix "[IPTABLES DROP] "
结果就是/var/log/messages被刷爆,却找不到真正需要的信息。我建议用这两个参数优化:
iptables -A INPUT -j LOG --log-prefix "[NETFILTER] " --log-level 4 --log-tcp-options --log-ip-options
iptables -A INPUT -j DROP
精准记录的艺术
去年我们服务器被CC攻击时,我通过分层记录快速定位了攻击源:
- 先记录所有新连接请求:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j LOG --log-prefix "[HTTP_NEW] "
- 再单独记录异常请求(如每秒超过5次):
iptables -A INPUT -p tcp --dport 80 -m recent --set --name HTTP_ABUSE<br>
iptables -A INPUT -p tcp --dport 80 -m recent --update --seconds 1 --hitcount 5 --name HTTP_ABUSE -j LOG --log-prefix "[HTTP_ABUSE] "
日志分析的三个神器
经过多次实战,我总结出这三个最实用的分析命令:
# 实时监控特定前缀的日志
tail -f /var/log/messages | grep "[HTTP_ABUSE]"
# 统计源IP出现频率
grep "[NETFILTER]" /var/log/messages | awk '{print $6}' | sort | uniq -c | sort -nr
# 提取完整的TCP会话信息
grep -A 1 -B 1 "[NETFILTER]" /var/log/messages
那些年我踩过的坑
1. 日志风暴:曾因忘记限制日志速率导致磁盘爆满,现在都会加上:
-m limit --limit 5/min --limit-burst 7
2. 时间戳混乱:建议在log-prefix里加入$(date +%%s)
方便后续分析
3. 权限问题:记得检查rsyslog配置,确保kern.*日志能正常写入
最后说个冷知识:通过--log-tcp-sequence
可以记录TCP序列号,在分析某些高级攻击时特别有用。不过要注意安全风险哦!
如果大家在实践中遇到有趣的问题,欢迎在评论区交流~
学到了,原来还可以用–log-tcp-options记录TCP选项,以前都是傻傻地全记,怪不得日志爆炸 😅
请教下作者,–log-level 4这个参数具体对应什么日志级别啊?
去年被CC攻击的时候也是靠类似方法定位的,不过我是用–limit参数限速,效果确实不错!
真实用!已收藏,下次服务器出问题就按这个来排查