为 iptables 配置自定义日志文件

为 iptables 配置自定义日志文件

我正在尝试将删除的包记录到自定义文件而不是/var/log/messages.

为了实现这一点,我在配置文件的末尾添加了这两行:

    -A INPUT -m limit --limit 5/min -j LOG --log-prefix "IPTables-INPUT-Dropped: " --log-level 4
    -A OUTPUT -m limit --limit 5/min -j LOG --log-prefix "IPTables-OUTPUT-Dropped: " --log-level 4

这是有效的,因为我已将 INPUT 和 OUTPUT 链默认配置为 DROP,因此如果包不符合任何先前的规则,它将被记录并删除。

但是,我无法将它们记录到自定义文件中。他们登录成功/var/log/messages,但我希望他们登录/var/log/iptables.log。我创建了/etc/rsyslog.d/iptables.conf包含以下内容的文件:

    :msg, contains, "IPTables-INPUT-Dropped: " - /var/log/iptables.log
    & ~

然后我重新启动了rsyslog,/etc/init.d/rsyslog restart并发送了一些我知道会被删除的包。但是,它们没有记录在iptables.log中,它们仍在记录中/var/log/messages

缺少哪个配置?

解决了 问题是两者之间不应该有空格-/

答案1

问题是 - 和 / 之间不应该有空格

答案2

这可以使用以下方法实现:

要禁用 syslog 中的 iptables 日志,请进行如下修改/etc/rsyslog.d/50-default.conf

*.*;auth,authpriv.none;kern.*=!kern.warning             -/var/log/syslog

登录单独的文件;附加:

kern.=warning -/var/log/iptables.log

然后重新启动syslogrsyslogtail日志

/etc/init.d/rsyslog restart

syslog也适用rsyslog

答案3

这是使用 的另一种方法ulogd。我建议使用这种机制,因为它会停止-m LOG使用内核日志记录机制(这也会产生填充日志的严重副作用dmesg)。

首先,您需要 ulogd,您可以通过apt-get install ulogd.编辑您的/etc/ulogd.conf,启用此模块(通过删除#行开头的 ):

plugin="/usr/lib/ulogd/ulogd_LOGEMU.so"

并更改/添加该部分[LOGEMU]

[LOGEMU]
file="/var/log/iptables.log"
sync=1

然后使用 重新启动 ulogd /etc/init.d/ulogd restart。然后不要在您的 iptables 规则上-j LOG使用。 -j ULOGULOG 模块没有 的概念,--log-level因此您可以删除这些选项。它还使用--ulog-prefix代替--log-prefix.

答案4

ulogd 的工作解决方案

a)确保启动此模块

modprobe nf_log_ipv4
cp /etc/modules /etc/modules.bak
echo nf_log_ipv4 >> /etc/modules

b)编辑文件/etc/ulogd.conf启用这些插件(取消注释#)

plugin="/usr/lib64/ulogd/ulogd_inppkt_NFLOG.so"
plugin="/usr/lib64/ulogd/ulogd_filter_IFINDEX.so"
plugin="/usr/lib64/ulogd/ulogd_filter_IP2STR.so"
plugin="/usr/lib64/ulogd/ulogd_filter_PRINTPKT.so"
plugin="/usr/lib64/ulogd/ulogd_output_LOGEMU.so"
plugin="/usr/lib64/ulogd/ulogd_raw2packet_BASE.so"

在第一个注释的 # stack 之前添加此行

stack=firewall11:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,print1:PRINTPKT,emu11:LOGEMU

最后在文件末尾添加这些行

[firewall11]
group=11

[emu11]
file="/var/log/iptables.log"
sync=1

c) 现在,我更喜欢使用 iptables 脚本的旧方法而不是 firewalld,在我的 iptables 脚本中我使用这些行进行日志记录。

# Log
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A FORWARD -j NFLOG
iptables -A LOGGING -j NFLOG --nflog-prefix "[firewall-drop]:" --nflog-group 11
iptables -A LOGGING -j DROP

d) 最终部分

touch /var/log/iptables.log
systemctl restart ulogd

验证是否可以使用此命令

tail -f /var/log/iptables.log

您应该在事件后看到一些行:nmap portscan,或者只是 telnet 到您的计算机(希望已禁用或防火墙)。

相关内容