LINUX.ORG.RU

Бан IP ботов-взломщиков на VPS

 , , , ,


0

1

Здравствуйте, уважаемые программисты и разработчики сайтов, а также дизайнеры и анонимы!

Боты ищут на сайте уязвимости по адресам типа xx.php, m.php, bb.php, shell.php, root.php, wp-login.php , /news/wp-includes/wlwmanifest.xml и прочие ворпрессы. Что-то, относящееся к адресам Drupal 9, на котором работает сайт, сложно найти, видимо его реже всего взламывают. Вот примерный error.log nginx

2021/09/16 09:42:28 [error] 16450#16450: *484923 access forbidden by rule, client: 141.101.76.52, server: site.com, request: "GET /wp-content/ HTTP/1.1", host: "site.com"
2021/09/16 10:59:08 [error] 16450#16450: *485803 access forbidden by rule, client: 141.101.76.94, server: site.com, request: "GET /wp-content/ HTTP/1.1", host: "site.com"
2021/09/16 12:14:54 [error] 16450#16450: *486788 FastCGI sent in stderr: "Unable to open primary script: /var/www/site.com/www/x.php (No such file or directory)" while reading response header from upstream, client: 141.101.77.224, server: site.com, request: "GET /x.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "site.com"
2021/09/16 12:14:54 [error] 16450#16450: *486788 FastCGI sent in stderr: "Unable to open primary script: /var/www/site.com/www/wso.php (No such file or directory)" while reading response header from upstream, client: 141.101.77.224, server: site.com, request: "GET /wso.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "site.com"
2021/09/16 12:14:55 [error] 16450#16450: *486788 FastCGI sent in stderr: "Unable to open primary script: /var/www/site.com/www/srx.php (No such file or directory)" while reading response header from upstream, client: 141.101.77.224, server: site.com, request: "GET /srx.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "site.com"
2021/09/16 12:14:55 [error] 16450#16450: *486788 FastCGI sent in stderr: "Unable to open primary script: /var/www/site.com/www/1337.php (No such file or directory)" while reading response header from upstream, client: 141.101.77.224, server: site.com, request: "GET /1337.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "site.com"
2021/09/16 12:14:55 [error] 16450#16450: *486788 FastCGI sent in stderr: "Unable to open primary script: /var/www/site.com/www/xx.php (No such file or directory)" while reading response header from upstream, client: 141.101.77.224, server: site.com, request: "GET /xx.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "site.com"

Были добавлены запреты на доступ к таким адресам, но эта мера видится не достаточной:

    # block wordpress bots
    location ~ ^/(wordpress|wp-) {
        deny all;
    }
    # block joomla bots
    location ~ ^/(administrator) {
        deny all;
    }
    # block drupal bots
    location ~ ^/(sites/all/libraries/elfinder|sites/all/libraries/plupload) {
        deny all;
    }
    # block other bots
    location ~ ^/(old|new|oldsite|site|test|components|connectors|ckeditor|fckeditor|xmlrpc\.php|images/.*\.php) {
        deny all;
    }

Подскажите, есть ли способ забанить серые IP, с которых происходят такие запросы, и есть ли готовая база серых ip?

Больше всего отличились следующие ip:

$ grep -e 'forbidden by rule' -e 'No such file' error.log | grep -o 'client: [\.0-9]*' | cut -d' ' -f2 | sort | uniq -u
108.162.215.102
108.162.215.138
108.162.219.176
108.162.221.16
108.162.221.50
108.162.229.88
108.162.237.138
108.162.237.142
108.162.237.194
108.162.245.50
108.162.249.94
108.162.250.181
141.101.104.29
141.101.105.132
141.101.105.252
141.101.105.66
141.101.105.74
141.101.76.100
141.101.76.154
141.101.76.172
141.101.76.208
141.101.76.52
141.101.76.94
141.101.77.155
141.101.77.19
141.101.77.218
141.101.96.139
141.101.98.130
141.101.99.65
162.158.107.175
162.158.111.175
162.158.119.67
162.158.129.124
162.158.166.139
162.158.178.168
162.158.178.9
162.158.183.167
162.158.183.171
162.158.183.223
162.158.183.225
162.158.187.141
162.158.191.158
162.158.203.43
162.158.203.45
162.158.227.194
162.158.255.134
162.158.50.33
162.158.62.179
162.158.88.200
162.158.89.235
162.158.89.59
162.158.90.42
162.158.90.88
162.158.91.119
162.158.93.207
162.158.94.186
162.158.94.210
172.68.10.234
172.68.11.85
172.68.141.58
172.68.142.89
172.68.144.23
172.69.194.28
172.69.208.136
172.69.34.184
172.69.34.230
172.69.35.181
172.69.54.243
172.69.55.106
172.69.55.40
172.69.62.7
172.69.63.63
172.69.63.9
172.69.68.13
172.69.68.167
172.70.110.136
172.70.110.220
172.70.114.42
172.70.114.80
172.70.126.112
172.70.126.26
172.70.127.29
172.70.130.84
172.70.134.154
172.70.147.100
172.70.147.38
172.70.147.70
172.70.147.84
172.70.35.49
172.70.35.87
172.70.98.174
172.70.98.66
173.245.52.213
173.245.54.231
197.234.242.188

Ну бань уровнем ниже через ip/nftables.

Anoxemian ★★★★★ ()

Зачем? Не такой уж и большой трафик от них. Ну зайдет бот, а следующий — спустя много времени только. DDoS-атаки нет (да и нагрузки хоть какой-то заметной). Взломать они ничего не смогут. Пусть ищут.

Papant ()
Последнее исправление: Papant (всего исправлений: 1)

Не совсем понятно, нафига их банить. Если у тебя этих уязвимостей нет - то чего бояться-то? Всех ботов побанить невозможно, придёт ещё миллиард подобных по миллиарду поводов. Пусть себе живут. У меня жощще приходят динозавры, что я даже HTTP распарсить от них не могу - шлют бинарную жесть какую-то. Можно им отдавать CODE 419 TIPIDOR - они потом логи посмотрят и почувствуют оскорбление и обидятся.

kilokolyan ()
Последнее исправление: kilokolyan (всего исправлений: 2)

Поскольку nginx в этом плане весьма тупорыл - лучше банить через iptables, хотя есть шанс что запросы приходят с внутрепровайдеровского лоадбалансера с http_x_forwarded_for.

Что мешает тебе написать парсер nginx’овых логов на предмет тупого grep ‘.php’ | grep ‘404’ | wc -l и DROP’ать на 24 часа к примеру, если таких запросов больше чем 10 ?

Я с таким обычно не заморачиваюсь. Ну сканят и сканят. Ты бы еще злился на тысячи «Failed password for» в /var/log/secure :))

windows10 ★★★ ()

45.0.0.0. убей полностью и будут тебе счастье. Это почти вся америка.

Bootmen ☆☆☆ ()
10 января 2022 г.

добавил правила и новые IP. эти ip смотрят wp-includes или ищут папки /old, /bkp, /shop. Один бот работает из целой подсети на множестве адресов. пришлось блокировать по маске ‘167.88.60.’:

nginx.conf перед подключением include /etc/nginx/sites-enabled/*:

    #block IP in X forwarded for (cause actually remote_addr is cloudflare)
    map $http_x_forwarded_for $block {
      198.54.128.230  1; #cms,wp-login
      20.108.163.229  1; #news,site,wp-login
      37.120.147.169  1; #shop,wp-includes
      52.147.51.81    1; #sito,wp-includes
      108.162.237.192 1; #cms,sito,wp-includes
      146.70.29.182   1; #shop,wp-includes
      137.184.93.46   1; #cms,2021,wp-includes
      137.184.98.185  1; #cms,2019,wp-includes
      138.197.102.193 1; #old,backup
      138.68.191.147  1; #js,rest
      185.147.212.54  1; #cms,2021,wp-includes
      156.146.56.114  1; #cms,2021,wp-includes
      143.198.159.180 1; #cms,2021,wp-includes
      13.89.232.117   1; #feed,blog,2020,wp-includes
      143.110.231.54  1; #shop,news,2021,wp-includes
      51.145.92.28    1; #cms,2019,wp-includes
      34.101.149.245  1; #media,2018,wp-includes
      64.227.96.241   1; #shop,cms,wp-includes
      167.88.60.233   1; #shop,wp-includes moved as regex to block
      40.77.99.99     1; #old,old1,backup
      88.150.240.219  1; #js,rest
      165.232.143.103 1; #news,shop
      62.171.164.227  1; #2003,2009
      68.183.158.106  1; #old,cms,backup
    }

в секции ‘server { ..’ для каждого хоста:

    if ($http_x_forwarded_for ~ '167.88.60.') {
      set $block 1;
    }

    if ($block) { return 403; }
youni ()
Ответ на: комментарий от youni

на самом деле в каждом хосте подключается файл block_bots_locations.conf

cat block_bots_locations.conf

    #sites are drupal then block php except:
    #if not /index.php /update.php /autoload.php in the root dir - block
    location ~* ^/(?!index\.php|update\.php|autoload\.php)[^\/]*\.php$ {deny all;}
    location ~* ^/(files|images|tmp|cache)/.*\.php {deny all;}
    #drupal bots
    location ~* ^/(sites/all/libraries/elfinder|sites/all/libraries/plupload) {deny all;}

    #wordpress bots
    location ~* ^/(wordpress|wp) {deny all;}
    #joomla bots
    location ~* ^/(joomla|joom|admin[^\/]) {deny all;}
    #other bots
    location ~* ^/(old|new|oldsite|old-site|site|test|project|bak|backup|bac|components|connectors|fckeditor)/ {deny all;}


    if ($http_x_forwarded_for ~ '167.88.60.') {
      set $block 1;
    }

    if ($block) { return 403; }

в хосте в секции server { .. :

    include /etc/nginx/block_bots_locations.conf;
youni ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.