Настройка fail2ban и Vesta CP для анализа apache

Объявился тут дудосер, который усердно прощупывал сайты на предмет ошибок, и в логах были замечены портянки подобного:

[sourcecode language=»plain»]

[Tue Apr 26 22:40:57 2016] [error] [client x.x.x.x] Directory index forbidden by Options directive: /home/test/example/public_html/system/, referer: -1
[Tue Apr 26 22:40:57 2016] [error] [client x.x.x.x] Directory index forbidden by Options directive: /home/test/example/public_html/system/, referer: -1 or 1*57=57
[Tue Apr 26 22:40:57 2016] [error] [client x.x.x.x] Directory index forbidden by Options directive: /home/test/example/public_html/system/, referer: -1 or 57=0
[Tue Apr 26 22:40:57 2016] [error] [client x.x.x.x] Directory index forbidden by Options directive: /home/test/example/public_html/system/, referer: -1′ or 5=5 or ’32’=’32
[Tue Apr 26 22:40:57 2016] [error] [client x.x.x.x] Directory index forbidden by Options directive: /home/test/example/public_html/system/, referer: -1′ or ’32’=’0
[Tue Apr 26 22:40:57 2016] [error] [client x.x.x.x] Directory index forbidden by Options directive: /home/test/example/public_html/system/, referer: -1" or 5=5 or "80"="80
[Tue Apr 26 22:40:57 2016] [error] [client x.x.x.x] Directory index forbidden by Options directive: /home/test/example/public_html/system/, referer: -1" or "80"="0
[Tue Apr 26 22:40:57 2016] [error] [client x.x.x.x] Directory index forbidden by Options directive: /home/test/example/public_html/system/, referer: IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2600000
,SHA1(0xDEADBEEF)),SLEEP(5))/*’XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2600000,SHA1(0xDEADBEEF)),SLEEP(5)))OR’|"XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2600000,SHA1(0xDEADBEEF)),SLEEP(5)))OR"*/
[Tue Apr 26 22:40:57 2016] [error] [client x.x.x.x] Directory index forbidden by Options directive: /home/test/example/public_html/system/, referer: 1 and sleep(4)
[Tue Apr 26 22:40:58 2016] [error] [client x.x.x.x] Directory index forbidden by Options directive: /home/test/example/public_html/system/, referer: 1 or (sleep(4)+1) limit 1 —

[/sourcecode]

 

Очевидно, что прощупывают на предмет sql-инъекций.

Поскольку из коробки fail2ban в панели vesta cp не имеет включенных правил для блокировки подобных запросов, и погуглив рунет на предмет готовых велосипедов (и не найдя подобного), было решено написать следующие правила:

в файл /etc/fail2ban/jail.local дописываем следующий джейл:

[bash]
[apache-iptables]
enabled = true
filter = apache-forbidden
action = vesta[name=WEB]
port = http,https
logpath = /var/log/httpd/domains/*error.log
maxretry = 10
[/bash]

а в папке /etc/fail2ban/filter.d создаем файл apache-forbidden.conf со следующим содержимым:

[bash]
# Fail2Ban apache-forbidden filter

[INCLUDES]
before = apache-common.conf

[Definition]
failregex = [[]client <HOST>[]] Directory index forbidden by Options directive: /\S*$

ignoreregex =.
[/bash]

После этого рестартим фейл2бан:
service fail2ban restart

и смотрим статус командой fail2ban-client status :

[bash]
Status
|- Number of jail: 6
`- Jail list: apache-iptables, dovecot-iptables, exim-iptables, ssh-iptables, vesta-iptables, vsftpd-iptables
[/bash]

Подробный статус по каждому джейлу:
fail2ban-client status apache-iptables