iptables 问题

iptables 问题

我目前正遭受 SSH 攻击。
这次攻击的性质非常奇怪,攻击者使用了计算机僵尸网络并将它们用作单独的登录尝试(见日志片段):
Dec 11 08:30:51 rhea sshd[16267]: 来自 78.43.82.153 的无效用户 maureenDec
11 08:35:24 rhea sshd[20012]: 来自 201.244.188.202 的无效用户 maurizioDec
11 08:44:46 rhea sshd[27711]: 来自 211.140.12.46 的无效用户最大值
Dec 11 08:49:10 rhea sshd[31383]: 来自 190.144.47.82 的无效用户最大值
Dec 11 08:58:19 rhea sshd[6659]: Invalid user max from 69.250.227.138
Dec 11 09:07:28 rhea sshd[14249]: Invalid user maxim from 93.63.231.55
Dec 11 09:12:03 rhea sshd[18127]: Invalid user maximus from 79.188.240.210

我愿意过滤对端口 22 的所有访问(即只允许我指定的 IP 连接),就像我几天前所做的那样(阻止除我自己之外的所有到端口 22 的连接)。我想要做的是记录所有没有接受规则的连接并将其丢弃 - 这样我就可以跟踪机器人中的所有计算机,而不会让它们有机会尝试登录。

我有类似这样的内容:
-A INPUT -s my.addr(s) -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j DROP

更新
我已将其添加到我的 iptables 中:
[0:0] -A INPUT -m limit --limit 5/min -p tcp -m tcp --dport 22 -j LOG --log-level 4 --log-prefix "** DoS **"
并使用
http://www.cyberciti.biz/tips/force-iptables-to-log-messages-to-a-different-log-file.html
但是,要设置单独的文件,我只能看到 dmesg 中记录的数据。

答案1

但是,要设置单独的文件,我只能看到 dmesg 中记录的数据。

来自子系统的消息netfilter通过 kenerl 日志记录机制记录。这显示在 dmesg 输出中,并且通常通过 服务最终出现在您的系统日志中klogd

如果您正在运行rsyslogsyslog-ng,它们通常会本地读取内核日志数据。

消息使用“kern”功能显示在系统日志中,因此在传统的 syslog.conf 文件中您可以执行以下操作:

kern.* /var/log/kernel-messages

(但请注意,这会让你全部内核消息,而不仅仅是 netfilter)。

rsyslog 和 syslog-ng 都提供模式匹配功能,让您可以更精细地控制日志消息的去向。

答案2

编辑:
你刚才需要在 accept 和 drop 规则之间添加 Log 规则,请参阅下面的将其发送到 syslog 的示例。 http://www.cyberciti.biz/tips/force-iptables-to-log-messages-to-a-different-log-file.html

这是可行的,因为 log 的不同之处在于它是一个“非终止目标”,即规则遍历在下一个规则处继续。--从man iptables'。因此,与其他规则不同,对规则的检查在达到匹配时不会短路。

另请参阅此链接如何指定日志文件(但请注意后续帖子)。

来自之前(误读的问题):
你可能想要失败2ban,自动为您完成此操作...此帖子还有一大堆其他选项:数百次 SSH 登录失败

答案3

你想要的是乌洛多它使您能够将匹配的 iptables 数据包记录到用户指定的文件中。

安装 ulogd 后,编辑/etc/ulogd.conf文件并取消注释该行: plugin="/usr/lib/ulogd/ulogd_LOGEMU.so"

在 [LOGEMU] 部分你会看到 file="/var/log/ulogd.pktlog"

这是 iptables 日志的存放位置。我建议你也添加此文件(logrotate如果你安装了该文件),因为即使有限制,日志也会很快变得很大。

一旦 ulogd 全部设置完毕,您就可以替换此规则:

-A INPUT -m limit --limit 5/min -p tcp -m tcp --dport 22 -j LOG --log-level 4 --log-prefix "** DoS **"

根据此规则:

-A INPUT -m limit --limit 5/min -p tcp -m tcp --dport 22 -j ULOG --ulog-prefix "** DoS **"

还值得注意的是,ulogd 允许您将数据包记录到 MySQL、PostgreSQL 和 SQLite 等数据库。

相关内容