iptables 不记录任何内容

iptables 不记录任何内容

我正在尝试通过配置 iptables 来保护我的服务器 (Ubuntu Lucid 10.04) 免受一些暴力 ssh 攻击。我想将匹配记录到 DROP 规则中,但它不起作用,所以我尝试了最基本的方法:

iptables -A INPUT -p tcp --dport 22 -j LOG --log-level info --log-prefix "TEST: "

但它什么都没记录!我尝试更改日志级别:debug 或 7 并添加到, kern.=debug -/var/log/firewall/etc/syslog.conf什么都没写入/var/log/messages/var/log/firewall

该规则确实得到了一些匹配:

$ iptables -L -v
pkts bytes target     prot opt in     out     source               destination
44  5543 LOG        tcp  --  any    any     anywhere             anywhere            tcp dpt:ssh LOG level debug prefix `TEST: '

iptables 日志记录不起作用有一个解决方案,将 rsyslog 更新到较新的版本。然而根据此来源 “此解决方案扰乱了默认日志系统”

有人知道更好的解决方案吗?

如果没有,我可以尝试更新 rsyslog(从源代码编译),但如果它把事情搞乱了,我该如何恢复到默认的 rsyslog?

编辑: rsyslog 放弃了它的权限,因此它无法读取 /proc/kmesg。这个问题应该在较新的内核中得到解决,但不幸的是,我只能使用 2.6.18。

“事实上它无法在旧内核上读取 kmsg,这是故意的,并且不会被修复。”

我尝试通过修改让 rsyslog 保留其 root 权限/etc/rsyslogd.conf

$PrivDropToUser root
$PrivDropToGroup root

但这也不起作用,这让我很困惑。为什么这个 root 进程无法读取 root 拥有的文件?

答案1

您可以安装失败2ban并配置 ssh jail,根据 sshd 写入日志的消息自动禁止攻击您服务器的 IP 地址。这是执行所需操作的相当标准的方法。

如果您还没有这样做,您应该禁用通过 ssh 的 root 登录以及启用和使用基于密钥的身份验证。

答案2

您正在设置日志级别信息,但您的 syslog 配置输出的是日志级别调试。请将 syslog 更改为输出 kern.info,或将您的 iptables 规则更改为输出到日志级别调试以匹配您的规则集配置。

相关内容