![iptables 问题](https://linux22.com/image/500712/iptables%20%E9%97%AE%E9%A2%98.png)
我目前正遭受 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
。
如果您正在运行rsyslog
或syslog-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 等数据库。