我正在尝试通过配置 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 规则更改为输出到日志级别调试以匹配您的规则集配置。