如何将 Linux IPTables 防火墙丢包记录到日志文件中

举报
Tiamo_T 发表于 2022/07/07 16:13:23 2022/07/07
【摘要】 本文介绍如何记录传入和传出丢弃的防火墙数据包。

当您的 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。