为了审计目的,我想要记录所有不是源自 LAN 的 INPUT 数据包,我有一个 tcpdump 脚本,基本上将以下结果附加到文件中:
tcpdump "(dst net 192.168.0.0/24 and ! src net 192.168.0.0/24)"
不过,我在 /var/log/syslog 中看到了一些外部尝试
[567325.985994] iptables INPUT denied: IN=eth1 OUT= MAC=..... SRC=69.163.149.200 DST=192.168.0.2 LEN=60 TOS=0x00 PREC=0x00 TTL=57 ID=50281 DF PROTO=TCP SPT=51380 DPT=1194 WINDOW=5840 RES=0x00 SYN URGP=0
[567895.076532] iptables INPUT denied: IN=eth1 OUT= MAC=.... SRC=72.21.91.19 DST=192.168.0.2 LEN=40 TOS=0x00 PREC=0x00 TTL=59 ID=0 DF PROTO=TCP SPT=80 DPT=52589 WINDOW=0 RES=0x00 RST URGP=0
这些在 tcpdump outout 中没有显示。我想添加一条规则,例如
-A INPUT -j LOG
但我想(如果有意义的话)避免将来自 LAN 的日志输入数据包放入
放这个就够了吗?
-A INPUT ! -s 192.168.0.0/24 -j LOG
顺便说一句,作为一个附带问题,iptables 是否支持将不同的东西记录到不同的文件中?
答案1
iptables 总是记录到 syslog 的内核工具中,你可以将你的syslog 工具存放到不同的文件中- 参见syslog.conf 文档了解详情。
你的规则
-A 输入!-s 192.168.0.0/24 -j 日志
将记录没有源 IP 192.168.0.0/24 的数据包,但 iptables 日志记录仅涵盖部分数据包头数据,而不是数据包的有效负载。
那么,我怎样才能捕获有效载荷?
tcpdump 是捕获有效负载的工具。您应该明确指定您期望流量进入的接口(-i eth1)或使用任何接口(-i any)。您可能还想增加 snaplen(-s 参数)并将捕获的内容写入二进制格式的文件(-W 参数)。
但由于 tcpdump 不是一个安全工具,而是一个具有复杂安全历史的诊断工具,并且可能在你的配置中以 root 权限运行(尽管非 root 运行方法),你应该考虑一个以安全性为重点的其他解决方案 -IDS 系统可能合适。