В настоящее время я настраиваю фильтр для фильтрации POST-атак на файл с именем xmlrpc.php
. Запросы, которые следует отслеживать в доступе к журналу, выглядят так:
1.99.437.201 - - [01/Feb/2016:01:57:14 +0000] "POST /xmlrpc.php HTTP/1.1" 200 631 "-" "curl/7.30.0"
Тюрьма выглядит так:
[xmlrpc]
enabled = true
filter = xmlrpc
action = iptables[name=xmlrpc, port=http, protocol=tcp]
logpath = /srv/www/logs/access.log
bantime = 43600
maxretry = 5
И мой фильтр:
[Definition]
failregex = ^<HOST> .*POST .*xmlrpc\.php.*
ignoreregex =
Я пытаюсь понять, как регулярное выражение не улавливает попытки журнала. Любое понимание того, что <HOST>
собственно представляете?
В <HOST>
регулярное выражение довольно умное. Помимо прочего, он знает, что IP-адрес состоит из 4 октетов, и каждый октет может иметь значение от 0 до 255. IP-адрес в вашем вопросе 1.99.437.201 не соответствует этой спецификации и не будет соответствовать <HOST>
регулярное выражение. Если вы измените второй октет, чтобы он соответствовал спецификации, ваше регулярное выражение будет работать должным образом.
$ cat log
1.99.237.201 - - [01/Feb/2016:01:57:14 +0000] "POST /xmlrpc.php HTTP/1.1" 200 631 "-" "curl/7.30.0"
$ fail2ban-regex log "^<HOST> .*POST .*xmlrpc\.php.*"
Running tests
=============
Use failregex line : ^<HOST> .*POST .*xmlrpc\.php.*
Use log file : log
Use encoding : UTF-8
Results
=======
Failregex: 1 total
|- #) [# of hits] regular expression
| 1) [1] ^<HOST> .*POST .*xmlrpc\.php.*
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [1] Day(?P<_sep>[-/])MON(?P=_sep)Year[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-
Lines: 1 lines, 0 ignored, 1 matched, 0 missed [processed in 0.00 sec]
Я использую более простой способ заблокировать все xmlrpc.php
атаки.
Просто поместите этот код в свой .htaccess
файл:
<Files "xmlrpc.php">
Order Allow,Deny
Deny from all
</Files>
Этот код защитит ваш Wordpress от всех ботнетов.