Заблокировать User Agents используя Nginx

Заблокировать User Agents используя Nginx

В nginx имеется довольно много способов блокировки нежелательного трафика. Вы можете использовать правила allow/deny или установить пароль на каталог. Вы также можете избавиться от плохих ботов и избежать нападения от HTTP пользовательских агентов с GET или POST-запросов. Ниже приведены некоторые примеры защиты сайтов от распространенных незаконных подключений.

Что такое агент пользователя?

Агент пользователя (от анг яз user agent, UA) просто текстовая строка, которая помогает серверу и системе производить идентификацию браузера и операционной системы используемый клиентом.

Когда вы просматриваете веб-сайт, ваш браузер включает в себя поле пользовательского агента в его заголовке HTTP. Содержимое строки агента пользователя может варьироваться от браузера и ОС.

И в своей теме «Заблокировать User Agents используя Nginx» я расскажу как можно заблокировать UA используя nginx.

Зачем вам нужно знать информацию агента пользователя?

User agents являются хорошим способом блокировки распространенных атак против вашего сервера. И атак приступим, открываем конфигурационный файл самого nginx или виртуальный хост вашего сайта:

# vim /etc/nginx/nginx.conf

Внутри секции HTTP{} прописываем:

if ($http_user_agent ~* (Windows 95|Windows 98|wget|curl|libwww-perl) ) {
return 403;
}

Тем самым, я заблокировал старые браузеры операционной системы (Windows 95 и 98) блокируются, так же, я заблокировал запросы с Wget, Curl и Libwww-Perl (используются для попадания на сервер удаленно). Есть много других ботов и инструментов для блокирования; это просто элементарный пример.

Имеются и пустые агенты, то для того чтобы заблокировать его, можно использовать (так же прописываем в конфиге nginx):

set $a $request_method?$http_user_agent;

После чего, проверяем содержимое переменной «a» и если условие верно, я отдаю ошибку 403 всем пользователям, у кого наблюдается сочетание метода POST и пустого User-Agent:

if ($a = "POST?") {
return 403;
}

После чего, нужно перезапустить nginx:

# service nginx reload

Проверяем что получилось:

# wget --user-agent "malicious bot" http://linux-notes.org
  • http://linux-notes.org/ — Это мой сайт и на нем я тестировал, вы меняете на свой домен (IP).
  • malicious bot — Это имя агента который будет проверятся на доступность.

Некоторые заблокированные мной боты и user-agent

        if ($http_user_agent ~* "^BlackWidow"){ return 403; }
        if ($http_user_agent ~ "^Bolt"){ return 403; }
        if ($http_user_agent ~* "CazoodleBot"){ return 403; }
        if ($http_user_agent ~* "^ChinaClaw"){ return 403; }
        if ($http_user_agent ~* "^Custo"){ return 403; }
        if ($http_user_agent ~ "^Default"){ return 403; }
        if ($http_user_agent ~* "^DIIbot"){ return 403; }
        if ($http_user_agent ~* "^DISCo"){ return 403; }
        if ($http_user_agent ~* "discobot"){ return 403; }
        if ($http_user_agent ~* "^eCatch"){ return 403; }
        if ($http_user_agent ~* "ecxi"){ return 403; }
        if ($http_user_agent ~* "^EirGrabber"){ return 403; }
        if ($http_user_agent ~* "^EmailCollector"){ return 403; }
        if ($http_user_agent ~* "^EmailSiphon"){ return 403; }
        if ($http_user_agent ~* "^EmailWolf"){ return 403; }
        if ($http_user_agent ~* "^ExtractorPro"){ return 403; }
        if ($http_user_agent ~* "^EyeNetIE"){ return 403; }
        if ($http_user_agent ~* "^FlashGet"){ return 403; }
        if ($http_user_agent ~* "^GetRight"){ return 403; }
        if ($http_user_agent ~* "^GetWeb!"){ return 403; }
        if ($http_user_agent ~* "^Go!Zilla"){ return 403; }
        if ($http_user_agent ~* "^Go-Ahead-Got-It"){ return 403; }
        if ($http_user_agent ~* "^GrabNet"){ return 403; }
        if ($http_user_agent ~* "^Grafula"){ return 403; }
        if ($http_user_agent ~* "GT::WWW"){ return 403; }
        if ($http_user_agent ~* "heritrix"){ return 403; }
        if ($http_user_agent ~* "^HMView"){ return 403; }
        if ($http_user_agent ~* "HTTP::Lite"){ return 403; }
        if ($http_user_agent ~* "HTTrack"){ return 403; }
        if ($http_user_agent ~* "ia_archiver"){ return 403; }
        if ($http_user_agent ~* "IDBot"){ return 403; }
        if ($http_user_agent ~* "id-search"){ return 403; }
        if ($http_user_agent ~* "id-search.org"){ return 403; }
        if ($http_user_agent ~* "^InterGET"){ return 403; }
        if ($http_user_agent ~* "^InternetSeer.com"){ return 403; }
        if ($http_user_agent ~* "IRLbot"){ return 403; }
        if ($http_user_agent ~* "^Java"){ return 403; }
        if ($http_user_agent ~* "^JetCar"){ return 403; }
        if ($http_user_agent ~* "^larbin"){ return 403; }
        if ($http_user_agent ~* "^LeechFTP"){ return 403; }
        if ($http_user_agent ~* "libwww"){ return 403; }
        if ($http_user_agent ~* "libwww-perl"){ return 403; }
        if ($http_user_agent ~* "^Link"){ return 403; }
        if ($http_user_agent ~* "LinksManager.com_bot"){ return 403; }
        if ($http_user_agent ~* "linkwalker"){ return 403; }
        if ($http_user_agent ~* "lwp-trivial"){ return 403; }
        if ($http_user_agent ~* "^Maxthon$"){ return 403; }
        if ($http_user_agent ~* "MFC_Tear_Sample"){ return 403; }
        if ($http_user_agent ~* "^microsoft.url"){ return 403; }
        if ($http_user_agent ~ "Microsoft"){ return 403; }
        if ($http_user_agent ~* "^Mozilla.*Indy"){ return 403; }
        if ($http_user_agent ~* "^Mozilla.*NEWT"){ return 403; }
        if ($http_user_agent ~* "^MSFrontPage"){ return 403; }
        if ($http_user_agent ~* "^Navroad"){ return 403; }
        if ($http_user_agent ~* "^NearSite"){ return 403; }
        if ($http_user_agent ~* "^NetAnts"){ return 403; }
        if ($http_user_agent ~* "^NetSpider"){ return 403; }
        if ($http_user_agent ~* "^NetZIP"){ return 403; }
        if ($http_user_agent ~* "^Nutch"){ return 403; }
        if ($http_user_agent ~* "^Octopus"){ return 403; }
        if ($http_user_agent ~* "^PageGrabber"){ return 403; }
        if ($http_user_agent ~* "panscient.com"){ return 403; }
        if ($http_user_agent ~* "^pavuk"){ return 403; }
        if ($http_user_agent ~* "PECL::HTTP"){ return 403; }
        if ($http_user_agent ~* "^PeoplePal"){ return 403; }
        if ($http_user_agent ~* "^pcBrowser"){ return 403; }
        if ($http_user_agent ~* "PHPCrawl"){ return 403; }
        if ($http_user_agent ~* "PleaseCrawl"){ return 403; }
        if ($http_user_agent ~* "^psbot"){ return 403; }
        if ($http_user_agent ~* "^RealDownload"){ return 403; }
        if ($http_user_agent ~* "^ReGet"){ return 403; }
        if ($http_user_agent ~ "^Rippers"){ return 403; }
        if ($http_user_agent ~* "SBIder"){ return 403; }
        if ($http_user_agent ~* "^SeaMonkey$"){ return 403; }
        if ($http_user_agent ~* "^sitecheck.internetseer.com"){ return 403; }
        if ($http_user_agent ~* "^SiteSnagger"){ return 403; }
        if ($http_user_agent ~* "^SmartDownload"){ return 403; }
        if ($http_user_agent ~* "Snoopy"){ return 403; }
        if ($http_user_agent ~* "Steeler"){ return 403; }
        if ($http_user_agent ~* "^SuperBot"){ return 403; }
        if ($http_user_agent ~* "^SuperHTTP"){ return 403; }
        if ($http_user_agent ~* "^Surfbot"){ return 403; }
        if ($http_user_agent ~* "^tAkeOut"){ return 403; }
        if ($http_user_agent ~ "^Teleport"){ return 403; }
        if ($http_user_agent ~ "^Toata"){ return 403; }
        if ($http_user_agent ~* "URI::Fetch"){ return 403; }
        if ($http_user_agent ~* "urllib"){ return 403; }
        if ($http_user_agent ~* "User-Agent"){ return 403; }
        if ($http_user_agent ~* "^VoidEYE"){ return 403; }
        if ($http_user_agent ~* "webalta"){ return 403; }
        if ($http_user_agent ~* "^WebAuto"){ return 403; }
        if ($http_user_agent ~* "^[Ww]eb[Bb]andit"){ return 403; }
        if ($http_user_agent ~* "WebCollage"){ return 403; }
        if ($http_user_agent ~* "^WebCopier"){ return 403; }
	if ($http_user_agent ~* "^WebFetch"){ return 403; }
        if ($http_user_agent ~* "^WebLeacher"){ return 403; }
        if ($http_user_agent ~* "^WebReaper"){ return 403; }
        if ($http_user_agent ~* "^WebSauger"){ return 403; }
        if ($http_user_agent ~* "^WebStripper"){ return 403; }
        if ($http_user_agent ~* "^WebWhacker"){ return 403; }
        if ($http_user_agent ~* "^WebZIP"){ return 403; }
       #wget 
	#if ($http_user_agent ~* "^Wget"){ return 403; }
       #Curl
	#if ($http_user_agent ~* "^Curl"){ return 403; }	
        if ($http_user_agent ~* "^Widow"){ return 403; }
        if ($http_user_agent ~* "^WWW-Mechanize"){ return 403; }
        if ($http_user_agent ~* "^WWWOFFLE"){ return 403; }
        if ($http_user_agent ~* "zermelo"){ return 403; }
        if ($http_user_agent ~* "^Zeus"){ return 403; }
        if ($http_user_agent ~* "^Zeus.*Webster"){ return 403; }
        if ($http_user_agent ~* "ZyBorg"){ return 403; }

На этом все, я завершаю свою статью «Заблокировать User Agents используя Nginx».

3 thoughts on “Заблокировать User Agents используя Nginx

    • Вот мой конфиг:

      server {
      	listen 80;
      	server_name www.linux-notes.org;
          	return 301 $scheme://linux-notes.org$request_uri;
      	}
      server {
      	  listen 80 default_server;
      	  charset utf-8;	
      	  set $root '/home/www/linux-notes/public_html';
            root   $root;
            index  index.php index.html index.htm;
      	  access_log /var/log/nginx/access-linux-notes.org.log main;
            error_log /var/log/nginx/error-linux-notes.org.log;
      	  
      	  if ($http_user_agent ~* "^BlackWidow"){ return 403; }
        	  if ($http_user_agent ~ "^Bolt"){ return 403; }
        	  if ($http_user_agent ~* "CazoodleBot"){ return 403; }
            if ($http_user_agent ~* "^ChinaClaw"){ return 403; }
            if ($http_user_agent ~* "^Custo"){ return 403; }
            if ($http_user_agent ~ "^Default"){ return 403; }
            if ($http_user_agent ~* "^DIIbot"){ return 403; }
      
      
      	  location / {
      			try_files $uri $uri/ /index.php?$query_string;
                            }	 
      	   location ~ \.php$ {
      				add_header Cache-Control "no-cache, no-store, must-revalidate";
       			        try_files $uri =404;	
       			        fastcgi_cache fastcgicache;
       			        fastcgi_index  index.php;
       			        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       			        fastcgi_param  DOCUMENT_ROOT      $document_root;
       			        include fastcgi_params;
       			        fastcgi_intercept_errors on; 
      			      }
      	   include /etc/nginx/global/statics.conf;	
      	   include /etc/nginx/global/errors.conf;
       	  location /wp-admin {
               		   index index.php;
      	 		       try_files $uri $uri/ /index.php?$args;	
      			       root /home/www/linux-notes/public_html;
          	 		     }
                 rewrite /wp-admin$ $scheme:/$host$uri/ permanent;
               
      }
      

      Работает все!

  1. Здравствуйте! скажите вот у меня прописаны название ботов BLEXBot и SemrushBot, но сейчас в логах наблюдаю что есть посещения ботов

    BLEXBot/1.0 и SemrushBot/7~bl , то есть я так понимаю они сменили версию, приставка к боту /1.0 , /1.2 как прописать что бы все версии ботов блокировались ?

    (MBCrawler|Cloudfind|SafeDNSBot|BLEXBot|SemrushBot)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.