为了防止对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
一种select是使用以下规则logging任何丢弃的数据包:
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规则之前立即插入。 然后,你可以grep 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。 sorting,消除重复,你会有你的名单。
我发现Iptables教程是iptables / netfilter最有用的文档。
您可以在/ proc / net / ipt_recent / SSH下find详细信息。
这篇文章有更多的信息。
看着
/proc/net/ipt_recent/YOURNAME
其中YOURNAME是您在iptables规则中使用–name选项的名称。
这里是一个简单的一行:
$ iptables -L -n --line
我做什么,例如input地址欺骗,是定义链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
你可以对每一类丢包或拒绝的数据包进行类似的操作,以便在系统日志中查找一行,然后定期对这些日志行中的IP地址进行grep,cut,sort。
每个类别使用单独链的好处是你的configuration变得更简单,读取你的iptablesconfiguration变得更容易。 随着你添加越来越多的规则,你会很高兴你使用单独的链条来执行特定的不同操作。
“问题是:如何列出阻止的IP地址?
创build一个BANNED链:
iptables -N BANNED iptables -F BANNED
创build一个日志链:
iptables -N BANNEDLOG iptables -F BANNEDLOG iptables -A BANNEDLOG -j LOG --log-prefix "BANNED:" --log-level 6 iptables -A BANNEDLOG -j DROP
在大多数其他规则之前,将跳转添加到INPUT链中的禁止链
... iptables -A INPUT -j BANNED ...
现在添加ipaddresses到被禁止的链:
flock -w 5 /var/lock/iptables -c 'iptables -A BANNED -s 140.130.20.202/32 -i eth0 -m comment --comment "2012-03-19 23:49:33 accesslog" -j BANNEDLOG' etc...
你也可以像使用注释选项一样使用数据库,所以你可以知道什么时候和为什么。当iptables被许多进程频繁更新时,flock是非常重要的 – 看起来iptables没有内置任何锁。
要查看禁止链中的禁止地址和规则:
iptables -S BANNED
要查看刚sorting的唯一ipaddresses:
iptables -S BANNED | egrep -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort -u
我的服务器上有许多守护进程正在检查syslog文件和weblogs,所以如果有人正在尝试任何恶意的东西,他们的地址会被自动禁止几天,这取决于以前攻击的types,严重程度和数量。 信息被login到一个MySQL数据库,并定期过期。 这些地址也通过mysql复制分配给群集中的其他每台机器,以便它们也受到保护并保持同步。 我的软件也查找networking的所有者,并向ISP发送投诉。
经过十多年的努力,我希望能尽快为大家提供。 我目前有大约150万个IP地址历史logging和数十万个邮件和ssh攻击报告,帮助清理networking。 如果更多的会使用它,那么我希望它会有更多的影响。