≡菜单

如何将Linux IPTables防火墙丢弃的数据包记录到日志文件

本文是我们正在进行的Linux IPTables系列文章的一部分。当您的IPTables规则无法正常工作时,您可能希望记录IPTables丢弃的数据包以进行故障排除。本文介绍了如何记录传入和传出的丢弃firewal数据包。

如果您不熟悉IPTables,请先熟悉一下 IPTables基本概念.

记录所有丢弃的输入数据包

首先,我们需要了解如何将所有丢弃的iptables输入数据包记录到syslog中。

如果您已经有一堆iptables防火墙规则,请在底部添加这些规则,这将记录所有丢弃的输入数据包 (incoming) to the /var/log/messages

iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m限制--limit 2/min -j LOG --log-prefix "IPTables删除:" --log-level 4
iptables -A日志-j DROP

在上面的示例中,它执行以下操作:

  • iptables -N LOGGING:创建一个名为LOGGING的新链
  • iptables -A INPUT -j LOGGING: 所有剩余的传入数据包将跳至LOGGING链
  • 第3行:将传入数据包记录到syslog(/ var / log / messages)。该行在下面详细说明。
  • iptables -A日志-j DROP: Finally, drop all the packets that came to the LOGGING chain. i.e now it really drops the incoming packets.

在上面的第3行中,它具有以下选项可记录丢弃的数据包:

  • -m limit:使用限制匹配模块。使用这个可以限制日志记录的使用–limit option.
  • –limit 2 / min:这表示记录的最大平均匹配率。在此示例中,对于类似的数据包,它将日志记录限制为每分钟2个。您还可以指定2 /秒,2 /分钟,2 /小时,2 /天。当您不这样做时会很有帮助’不想让重复的相同丢弃数据包消息使您的日志消息混乱。
  • -j LOG:这表示此数据包的目标是LOG。即写入日志文件。
  • –log-prefix “IPTables-Dropped: ”您可以指定任何日志前缀,这些前缀将附加到将被写入/ var / log / messages文件的日志消息中
  • –日志级别4这是标准的系统日志级别。 4是警告。您可以使用0到7之间的数字。0是紧急事件,而7是调试。

记录所有丢弃的外发数据包

与上面相同,但是下面的第二行具有OUTPUT而不是INPUT。

iptables -N LOGGING
iptables -A OUTPUT -j LOGGING
iptables -A LOGGING -m限制--limit 2/min -j LOG --log-prefix "IPTables删除:" --log-level 4
iptables -A日志-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 2/min -j LOG --log-prefix "IPTables删除:" --log-level 4
iptables -A日志-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删除: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删除: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删除:This is the prefix that we used in our logging 通过 specifying –log-prefix option
  • IN = em1这表示用于此传入数据包的接口。对于传出数据包将为空
  • OUT = em1这表示用于传出数据包的接口。对于传入的数据包,它将为空。
  • SRC =数据包起源的源IP地址
  • DST =数据包发送到的目标IP地址
  • LEN =封包长度
  • PROTO =表示协议(如上所示,第一行用于传出ICMP协议,第二行用于传入TCP协议)
  • SPT =表示源端口
  • DPT =指示目标端口。在上面的第二行中,目标端口是443。这表示传入的HTTPS数据包已被丢弃

其他IPTable教程

如果您喜欢这篇文章,您可能还会喜欢..

  1. 50个Linux Sysadmin教程
  2. 50个最常用的Linux命令(包括示例)
  3. 排名前25位的最佳Linux性能监视和调试工具
  4. 妈妈,我找到了! – 15个实用的Linux Find命令示例
  5. Linux 101 Hacks第二版电子书 Linux 101黑客手册

Bash 101 Hacks书 Sed和Awk 101黑客手册 Nagios Core 3书 Vim 101黑客手册

{ 22 评论… 加一 }

  • 阿比舍克 2012年8月15日,下午12:18

    我执行后“iptables -A日志-j DROP”规则所有连接都从我的服务器上删除,所以我将其更改为“iptables -A日志-j接受”记录所有传入的数据包。

  • 沙卡兰 2012年8月15日,下午2:46

    对我而言,此步骤完全阻止了开发服务器的工作,因为iptables日志记录会删除本地主机上的每个软件包:
    kernel: IPTables删除:IN= OUT=lo SRC=127.0.0.1 DST=127.0.0.1 LEN=44 TOS=0x00 PREC=0x00 TTL=64 ID=3502 DF PROTO=UDP SPT=39673 DPT=39673 LEN=24

    我必须在引导模式下进行补救,并清理iptables规则以重新启动服务器。

  • 贾拉尔·哈吉霍拉玛利 2012年8月19日,晚上10:53

    你好

    非常感谢….

  • 史蒂夫 2012年10月25日,下午12:03

    很有帮助,
    谢谢

  • 布莱恩 2012年12月10日,下午3:57

    前3条评论来自没有’阅读并理解整篇文章。

    好信息。

  • 詹姆斯·布朗 2013年1月5日,上午2:07

    所以,如果我想–对于某些服务,可以说httpd–允许来自某个IP块的连接,拒绝来自其他IP地址的连接,并想要记录已接受和拒绝的连接,我是否需要两条记录链,一条将面向ACCEPT,另一条将面向DROP,即:

    iptables -A LOGGINGA -j ACCEPT
    iptables -A LOGGINGD -j DROP

  • 高拉夫·坎萨尔(Gaurav Kansal) 2013年1月14日,上午2:34

    IPtables日志都出现在两个文件中,即./var/log/messages和/var/log/custom.log

    我应该怎么做才能使日志仅出现在自定义日志文件中,而不出现在/ var / log / messages文件中。

  • 西蒙·泰勒 2013年1月22日,下午2:40

    我读了整篇文章,以为自己理解了,这看起来非常简单。我完全按照说明进行操作,但是按照第一条评论,结果是服务器将不接受连接,因此我不得不进入控制台并重新启动iptables,以便删除新规则。

    有人可以解释一下我们吗’re doing wrong?

  • 莱夫 2013年2月21日,下午1:24

    停止/ va / log / messages中的日志记录也很聪明。
    kern.warning /var/log/custom.log
    警惕〜
    *。* / var / log / messages

  • 西蒙·特纳 2013年3月4日,上午5:39

    我认为混乱是因为声明“如果您已经有一堆iptables防火墙规则,请在底部添加这些规则,这将记录所有丢弃的输入数据包”。 (未声明的)含义是,您已经有一大堆可以接受连接的规则,因此建议的规则将记录并删除*剩下的一切*。那’s why it says “所有剩余的传入数据包将跳至LOGGING链”。当然,如果您仅具有现有的DROP连接规则(或根本没有任何规则),那么最终结果是将所有内容都丢弃(!)。

  • dj 2013年3月14日,上午9:25

    @西蒙·特纳

    或者当您在INPUT链中有默认策略DROP时(像我一样)
    我在没有thinkind的情况下也犯了同样的愚蠢,现在我的服务器关闭了30分钟(我有一项cron作业,每小时将iptables重置为工作一次)

    我认为最好在文章中对此进行说明。
    它仅在默认策略为接受时才有效。
    您有一些接受规则,并且此日志记录规则还充当DROP,规则中未涵盖其他所有内容。

  • 奶奶 2013年4月19日,上午5:08

    除了丢弃的数据包,您还可以记录其他内容吗?

  • cus 2013年12月31日,上午6:41

    我也必须重设服务器,请修改文章或提醒人们。

  • 穆罕默德 2014年2月26日,下午4:31

    嗨,我有一个问题。我们是否可以记录由于转发队列已满而丢弃的数据包(例如,拥塞时间)?我如何执行这项工作?
    问候穆罕默德。

  • 泰勒·吉利斯皮 2014年3月21日,下午4:50

    我对INPUT链的默认策略是DROP。我运行了四个命令来记录来自INPUT链的所有丢弃的数据包。丢弃的数据包现在正在记录。

    谢谢!

    一种可能会帮助他人的提示。确保防火墙规则有效,而不仅仅是接受所有内容。列出规则,并确保pkts实际上符合任何规则。

    iptables -L–line-number -v

  • 一月 2014年6月2日,上午5:05

    你好
    我需要测量iptables’ latency.

    我的问题是:在Linux Debian中可以使用哪些工具来测量iptables延迟(在处理不同流量时的延迟)?

    这是以前做过的吗?如果是,请您能帮我找到测量结果或类似项目的结果吗?

  • 阿内斯·帕 2014年6月21日,上午8:26

    你好
    我需要您的快速答复,这是我在星期二(即将来临)进行的实验室考试。我尝试了第四
    上面的命令
    iptables -A LOGGING -m限制–limit 2/min -j LOG –log-prefix “IPTables-Dropped: ” –log-level 4

    但显示为“iptables v1.4.12:未指定命令。尝试iptables -h或iptables–帮助获得更多信息” 上 my ubuntu.

    请告诉我我怎么了

    谢谢
    安尼斯

  • 阿努普拉萨德 2014年9月10日,上午8:40

    你好
    我的UDP丢弃规则说只有单个丢弃规则,在iptables -vnL输出上丢弃了780个数据包。但是所有输入日志规则仅显示8个数据包为什么?

  • 杰森·埃滕 2015年2月6日,上午6:39

    您能否提及日志记录需要哪些内核模块?

  • 汤汁 2016年2月26日,上午2:26

    由于某种原因,在Ubuntu 14.04上我不知道’没有一个/ var / log / messages文件

    不知道这些日志语句的去向。

  • 汤汁 2016年2月26日,上午3:09

    好的,我认为它应该在/var/log/kern.log中— but I don’看不到任何丢弃的数据包正在记录(在VPS上)。

  • 巴洛 2017年3月24日,晚上7:56

    嗨,我根据您的示例设置了所有丢弃的输入数据包的日志记录,并且我在日志中注意到了这一点:IPTables-Dropped:IN = eth0 OUT = MAC = ff:ff:ff:ff:ff:ff:ff:00:04:2e :58:47:ch:08:00 SRC = 0.0.0.0 DST = 255.255.255.255 LEN = 334 TOS = 0x00 PREC = 0x00 TTL = 128 ID = 24675 PROTO = UDP SPT = 68 DPT = 67 LEN = 314

    知道是什么原因造成的(什么被阻止了)?谢谢。

发表评论