Можно ли банить через fail2ban за определённые запросы?

Всем привет.
Имеется почтовый сервер с http-сервером nginx и roundcubewebmail для простоты использования почты.
Использую fail2ban как автобаномёт для ssh и для авторизации nginx

Так же на сервере стоит logwatch и присылает мне отчёты. Часто я вижу что-то вроде этого:

Requests with error response codes
400 Bad Request
www.baidu.com:443: 12 Time(s)
www.alipay.com:443: 7 Time(s)
www.msftncsi.com:443: 6 Time(s)
null: 2 Time(s)
404 Not Found
/HNAP1/: 6 Time(s)
www.luisaranguren.com/azenv.php: 5 Time(s)
proxyjudge.us/: 4 Time(s)
/admin/config.php: 3 Time(s)
domkrim.com/av.php: 3 Time(s)
testp3.pospr.waw.pl/testproxy.php: 3 Time(s)
www.advalleys.com/azenvaa.php: 3 Time(s)
/admin/i18n/readme.txt: 2 Time(s)
www.proxy-listen.de/azenv.php: 2 Time(s)
/a2billing/: 1 Time(s)
/favicon.ico: 1 Time(s)
/myadmin/scripts/setup.php: 1 Time(s)
/phpMyAdmin/scripts/setup.php: 1 Time(s)
/pma/scripts/setup.php: 1 Time(s)
/robots.txt: 1 Time(s)
testp4.pospr.waw.pl/testproxy.php: 1 Time(s)
www.msftncsi.com/ncsi.txt: 1 Time(s)
www.proxyjudge.info/azenv.php: 1 Time(s)
www.qyer.com/: 1 Time(s)
www.rx2.eu/ivy/azenv.php: 1 Time(s)

Наши азиатские друзья постоянно пытаются что-то такое сделать и вовсе мне не нравятся. Для этого я поставил ограничение по странам для сайта
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default no;
RU yes;
UA yes;
BY yes;
CZ yes;
блаблабла
if ($allowed_country = no) {
return 404;
Оно работает. Посылает товарищей и всё такое. Но очень хотелось бы банить по ip через fail2ban. Может кто-нибудь знает как это сделать?
  • Вопрос задан
  • 3042 просмотра
Решения вопроса 1
@tenhi_shadow Автор вопроса
123
Всем большое спасибо. Я подзагнался сделать это правильно(наверное)

root@mail:~# cat /etc/fail2ban/filter.d/chinabots.conf  | head
[Definition]
failregex = <HOST> .*GET /webdav/
                        <HOST> .*GET /xmlrpc.php
                        <HOST> .*GET /Administrator/FCKeditor/fckeditor.js
                        <HOST> .*GET /Administrator/fckeditor/fckeditor.js
                        <HOST> .*GET /CFIDE/administrator/
                        <HOST> .*GET /FCKEditorV2/fckeditor.js
                        <HOST> .*GET /FCKeditor/fckeditor.js
                        <HOST> .*GET /Fckeditor/fckeditor.js
                        <HOST> .*GET /Fckeditornew/fckeditor.js


root@mail:~# cat /etc/fail2ban/filter.d/testproxy.conf
[Definition]
failregex = <HOST> .*CONNECT


root@mail:~# cat /etc/fail2ban/jail.d/web.local
[nginx-http-auth]
enabled = true
filter  = nginx-http-auth
port    = http,https
logpath = /var/log/nginx/error.log
enabled = true
maxretry = 3
bantime = 86400

[chinabots]
enabled = true
filter  = chinabots
port    = http,https
logpath = /var/log/nginx/access.log
enabled = true
maxretry = 1
bantime = 100500

[testproxy]
enabled = true
filter  = testproxy
port    = http,https
logpath = /var/log/nginx/access.log
enabled = true
maxretry = 1
bantime = 200500


В iptables это выглядит так:
пампампам
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
пампарарарам
-A INPUT -j DROP
-A fail2ban-chinabots -j RETURN
-A fail2ban-dovecot -s 176.59.85.4/32 -j DROP
-A fail2ban-dovecot -j RETURN
-A fail2ban-nginx-http-auth -j RETURN
-A fail2ban-postfix -j RETURN
-A fail2ban-roundcube -j RETURN
-A fail2ban-testproxy -s 104.148.71.26/32 -j DROP
-A fail2ban-testproxy -s 104.148.71.34/32 -j DROP
-A fail2ban-testproxy -j RETURN


root@mail:~# fail2ban-client status testproxy
Status for the jail: testproxy
|- filter
|  |- File list:        /var/log/nginx/access.log
|  |- Currently failed: 0
|  `- Total failed:     2
`- action
   |- Currently banned: 2
   |  `- IP list:       104.148.71.34 104.148.71.26
   `- Total banned:     2
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
Ну так он и предназначен собственно для того чтобы парсить файлы логов, и банить файерволлом по определенным запросам. Просто почитайте про настройку.
Ответ написан
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
https://debian.pro/1223 как-то так (там пример для админки WP, но суть вы и так поймете, думаю).
Ответ написан
alsopub
@alsopub
https://habrahabr.ru/post/236859/ - не подойдет?
Можно просто перейти к настройке fail2ban и натравить его на то что вы хотите.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы