如何将 Linux IPTables 防火墙丢包记录到日志文件中
【摘要】 本文介绍如何记录传入和传出丢弃的防火墙数据包。
当您的 IPTables 规则没有按预期工作时,您可能需要记录 IPTables 丢弃的数据包以进行故障排除。本文介绍如何记录传入和传出丢弃的防火墙数据包。
记录所有丢弃的输入数据包
首先,我们需要了解如何将所有丢弃的 iptables 输入数据包记录到 syslog。
如果您已经有一大堆 iptables 防火墙规则,请将它们添加到底部,这会将所有丢弃的输入数据包(传入)记录到 /var/log/messages
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP
在上面的示例中,它执行以下操作:
- iptables -N LOGGING:创建一个名为LOGGING的新链
- iptables -A INPUT -j LOGGING:所有剩余的传入数据包都会跳转到LOGGING链
- 第 3 行:将传入数据包记录到 syslog (/var/log/messages)。下面详细解释这条线。
- iptables -A LOGGING -j DROP:最后,丢弃所有到达 LOGGING 链的数据包。即现在它真的丢弃了传入的数据包。
在上面的第 3 行中,它具有以下用于记录丢弃数据包的选项:
- -m limit:这使用限制匹配模块。使用它,您可以使用 –limit 选项限制日志记录。
- –limit 2/min:这表示日志记录的最大平均匹配率。在此示例中,对于类似的数据包,它将记录限制为每分钟 2 个。您还可以指定 2/秒、2/分钟、2/小时、2/天。当您不想将日志消息与相同丢弃数据包的重复消息混淆时,这很有帮助。
- -j LOG:表示这个包的目标是LOG。即写入日志文件。
- –log-prefix “IPTables-Dropped:” 可以指定任何日志前缀,将附加到将写入 /var/log/messages 文件的日志消息中
- –log-level 4 这是标准的系统日志级别。四是警告。您可以使用 0 到 7 范围内的数字。0 是紧急情况,7 是调试。
记录所有丢弃的传出数据包
这与上面相同,但下面的第二行有 OUTPUT 而不是 INPUT。
iptables -N LOGGING
iptables -A OUTPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP
记录所有丢弃的数据包(传入和传出)
这与以前相同,但我们将从前两个示例中获取第 2 行,并将其添加到此处。即,我们将为 INPUT 和 OUTPUT 设置一个单独的行,它将跳转到 LOGGING 链。
要记录传入和传出丢弃的数据包,请在现有 iptables 防火墙规则的底部添加以下行。
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A OUTPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP
此外,正如我们之前解释的,默认情况下,iptables 将使用 /var/log/messages 来记录所有消息。如果您想将此更改为您自己的自定义日志文件,请将以下行添加到 /etc/syslog.conf
kern.warning /var/log/custom.log
如何阅读 IPTables 日志
以下是丢弃传入和传出数据包时在 /var/log/messages 中记录的行示例。
Aug 4 13:22:40 centos kernel: IPTables-Dropped: IN= OUT=em1 SRC=192.168.1.23 DST=192.168.1.20 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=59228 SEQ=2
Aug 4 13:23:00 centos kernel: IPTables-Dropped: IN=em1 OUT= MAC=a2:be:d2:ab:11:af:e2:f2:00:00 SRC=192.168.2.115 DST=192.168.1.23 LEN=52 TOS=0x00 PREC=0x00 TTL=127 ID=9434 DF PROTO=TCP SPT=58428 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=0
在上面的输出中:
- IPTables-Dropped:这是我们通过指定 –log-prefix 选项在日志记录中使用的前缀
- IN=em1 这表示用于此传入数据包的接口。对于传出的数据包,这将为空
- OUT=em1 这表示用于传出数据包的接口。对于传入的数据包,这将为空。
- SRC = 数据包起源的源 IP 地址
- DST = 数据包发送到的目标 IP 地址
- LEN=数据包长度
- PROTO= 表示协议(如上图,第一行是传出的ICMP协议,第二行是传入的TCP协议)
- SPT= 表示源端口
- DPT= 表示目的端口。在上面的第 2 行中,目的端口是 443。这表示传入的 HTTPS 数据包被丢弃
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)