如何将 Linux iptables 防火墙丢弃的数据包记录到日志文件中
本文是我们正在进行的 Linux iptables 系列文章的一部分。 当我们的 iptables 规则没有按预期工作时,我们可能需要记录 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 数据包被丢弃
相关文章
在 Linux 中安装 MySQL 客户端
发布时间:2023/05/09 浏览次数:72 分类:MySQL
-
在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。
在 Linux 中更新 YUM
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。
在 Linux 中安装 Deb 文件
发布时间:2023/05/04 浏览次数:130 分类:操作系统
-
本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。
Linux 中的 lsof 命令
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。
Linux 解决不能执行二进制文件问题
发布时间:2023/05/04 浏览次数:187 分类:操作系统
-
在本文中,我们将学习如何在 Linux 中执行二进制文件。 如果 Linux 无法执行二进制文件,我们还将学习如何解决错误。
Linux 中错误 Mesg: Ttyname Failed: Inappropriate Ioctl for Device Error
发布时间:2023/05/04 浏览次数:145 分类:操作系统
-
本文介绍如何在 Linux 中解决 mesg: ttyname failed: inappropriate ioctl for device 错误。在 Linux 中,这个错误是由于默认的 vagrant 配置 config.ssh.shell 与 bash -l 交互导致的。
Linux 中的 ps aux 命令
发布时间:2023/05/04 浏览次数:69 分类:操作系统
-
本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。
Linux 中的 NTP
发布时间:2023/05/04 浏览次数:137 分类:操作系统
-
本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。
在 Linux 中计算文件中的唯一行
发布时间:2023/05/04 浏览次数:70 分类:操作系统
-
计算文件中的唯一行是 Linux 中的一项常见任务,可以使用多种不同的工具和方法来执行此操作。使用 sort 和 uniq 命令计算文件中的唯一行数