为了防止对 ssh 的暴力攻击,我添加了一些iptables 规则(如下)。问题是:如何列出被阻止的 IP 地址?
(1)
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP
答案1
一个选项是使用如下规则记录所有丢弃的数据包:
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl -j LOG --log-prefix "FW_DROPPED: "
将其插入到规则之前DROP
。然后,您可以在 syslog 文件中查找任何包含“FW_DROPPED”的内容,IP 列表将在那里。日志文件中的条目如下所示:
Jun 3 08:05:57 some-machine kernel: [15852451.420557] FW_DROPPED: IN=eth0 OUT= MAC=00:50:ba:4a:d9:e3:00:12:17:3a:e3:64:08:00 SRC=228.23.45.189 DST=192.168.1.1 LEN=48 TOS=0x00 PREC=0x00 TTL=106 ID=10941 PROTO=TCP SPT=58212 DPT=22 WINDOW=65535 RES=0x00 SYN URGP=0
因此,删除“SRC=”后面的内容将显示已删除的 IP。对其进行排序,删除重复项,即可获得列表。
我发现Iptables 教程成为 iptables/netfilter 最有用的文档。
答案2
您可以在 /proc/net/ipt_recent/SSH 下找到详细信息。
本文有更多信息。
答案3
看着
/proc/net/ipt_recent/YOURNAME
其中 YOURNAME 是您在 iptables 规则中使用 --name 选项的名称。
答案4
例如,对于输入地址欺骗,我所做的就是定义链SPOOF_REJECT
:
iptables -N SPOOF_REJECT
iptables -A SPOOF_REJECT -j LOG --log-prefix "Input spoof detected: "
iptables -A SPOOF_REJECT -j REJECT
如果数据包被欺骗,则将其发送到此链:
iptables -A INPUT -i $EXT_DEV1 -s $INT_NET -j SPOOF_REJECT
iptables -A INPUT -i $EXT_DEV2 -s $INT_NET -j SPOOF_REJECT
您可以对丢弃或拒绝的每种数据包类别执行类似的操作,以在系统日志中获取要查找的一行,然后定期 grep、cut、sort,以从这些日志行中获取 IP 地址。
为每个类别使用单独的链的好处是,您的配置变得更简单,并且更容易阅读您的iptables
配置。随着您添加越来越多的规则,您会很高兴为特定的不同操作使用了单独的链。