WordPress: XML-RPC bruteforce и Fail2Ban

Автор: | 14/01/2016
 

wordpressЗаметил резко возросшую нагрузку на сервер (блог начал тупить :-)).

Первым делом – проверяем лог доступа, в котором сразу видна пачка запросов вида:

...
167.114.233.230 - - [13/Jan/2016:18:07:14 +0200] "POST /xmlrpc.php HTTP/1.1" 499 25 "-" "-" "-"
...

И количество таких запросов:

# cat /var/log/nginx/rtfm.co.ua-access.log | grep xmlrpc | wc -l
8405

Про саму уязвимость можно почитать тут>>>.

Первым делом – блокируем на фаерволе:

# iptables -I INPUT 2 -s 167.114.233.230 -j REJECT
# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

Что бы избежать их в дальнейшем – решил добавить правило в Fail2Ban.

Создаем файл /etc/fail2ban/filter.d/wp-xmlrpc.local с правилами:

[Definition]

failregex = .*client: <HOST>.*POST.*xmlrpc.php.*

ignoreregex =

Проверяем:

# fail2ban-regex /var/log/nginx/rtfm.co.ua-access.log /etc/fail2ban/filter.d/wp-xmlrpc.local
...
Results
=======

Failregex: 8403 total
|-  #) [# of hits] regular expression
|   1) [8403] ^<HOST> .*POST .*xmlrpc.php.*
...

Добавляем фильтр – редактируем файл /etc/fail2ban/jail.conf и подключаем новый фильтр:

...
[wp-xmlrpc]
enabled  = true
port     = http,https
filter   = wp-xmlrpc
logpath  = /var/log/nginx/*-access.log
maxretry = 2
...

Перезапускаем Fail2Ban:

# service fail2ban restart

Снимаем ручной бан, добавленный в начале:

# iptables -L INPUT -n --line-numbers | grep 167.114.233.230
10   REJECT     all  --  167.114.233.230      0.0.0.0/0           reject-with icmp-port-unreachable
# iptables -D INPUT 10
# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

Через пару минут – запросы снова пошли, проверяем:

# fail2ban-client status wp-xmlrpc
Status for the jail: wp-xmlrpc
|- Filter
|  |- Currently failed: 1
|  |- Total failed:     57
|  `- File list:        /var/log/nginx/rtfm.co.ua-access.log ***-access.log
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   167.114.233.230

Готово.

Linux: установка и настройка Fail2ban

Fail2ban: настройка ручных фильтров на примере NGINX