如何在 Ubuntu 服务器上使用 UFW 阻止对 Wordpress 的攻击?

如何在 Ubuntu 服务器上使用 UFW 阻止对 Wordpress 的攻击?

在 Ubuntu 14 上,我发现一些奇怪的活动,看起来像是针对 Wordpress 页面的攻击。Apache 日志显示了很多这样的情况:

191.96.249.54 - - [25/May/2016:00:46:57 +0200] "POST /xmlrpc.php HTTP/1.0" 500 585 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
191.96.249.53 - - [25/May/2016:00:46:58 +0200] "POST /xmlrpc.php HTTP/1.0" 500 585 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
191.96.249.54 - - [25/May/2016:00:46:59 +0200] "POST /xmlrpc.php HTTP/1.0" 500 585 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
191.96.249.53 - - [25/May/2016:00:47:00 +0200] "POST /xmlrpc.php HTTP/1.0" 500 585 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"

它看起来与这里描述的情况完全一样:http://blog.carlesmateo.com/2014/08/30/stopping-and-investigating-a-wordpress-xmlrpc-php-attack/

我首先想到的就是用 iptables 来阻止那些家伙,所以我输入了:

iptables -A INPUT -s 191.96.249.54 -j DROP
iptables -A INPUT -s 191.96.249.53 -j DROP

但它一直在继续。

因为我使用 UFW,所以我添加了 UFW 规则:

ufw deny from 191.96.249.54 to any
ufw deny from 191.96.249.53 to any

但情况没有任何改善。然后我禁用了 UFW,它就停止了!

Mu UFW 规则为(ufw 状态):

Status: active

To                         Action      From
--                         ------      ----
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
143                        ALLOW       Anywhere
993                        ALLOW       Anywhere
25/tcp                     ALLOW       Anywhere
465/tcp                    ALLOW       Anywhere
Anywhere                   DENY        191.96.249.54
Anywhere                   DENY        191.96.249.53
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
143 (v6)                   ALLOW       Anywhere (v6)
993 (v6)                   ALLOW       Anywhere (v6)
25/tcp (v6)                ALLOW       Anywhere (v6)
465/tcp (v6)               ALLOW       Anywhere (v6)

然后我意识到第一个规则是允许 http... 所以我删除了它并再次添加它,所以现在它位于链的末尾。这很有帮助。显然我应该像这样插入阻止规则:

ufw insert [position] [theRule]

我说得对吗?显然它有效,但这是一种好的做法吗?还是我应该用其他方法?

答案1

我建议了解一下ipset

与 UFW 的情况类似,iptables -A 附加在 netfilter 链末尾添加一条新规则。这意味着,如果在您添加的规则之前已有匹配的规则,则不会触发您的规则。

因此,就你的情况而言,你应该输入

iptables -I INPUT -s xxx.xxx.xxx.xxx -j DROP

默认情况下,将规则插入链中的第一个位置。

使用命令检查完整链iptables-save

现在,每次受到攻击时更改 iptables 规则链将非常成问题,并且充满危险,特别是当您使用“全面 DROP”时。此外还必须删除规则。

因此,请使用ipset。下面是一份很好的指南,其中包含了很好的例子以及一些关于性能影响的分析:

http://daemonkeeper.net/781/mass-blocking-ip-addresses-with-ipset/

关键是输入这两个命令:

ipset create blacklist hash:ip hashsize 4096
iptables -I INPUT -m set --match-set blacklist src -p TCP \
    --destination-port 80 -j DROP

现在您可以简单地将可疑的 IP 地址添加到集合中blacklist,而不必再与规则处理顺序作斗争。

相关内容