Jump to content
Лента
  • Добро пожаловать на :::XakepInter.Net - Исследование Безопасности и Уязвимостей в Сети:::.
  • Возможнасти
  • Чтобы увидеть ссылки и все функции форума рекомендуем зарегистрироваться.Приятного общения!.
Sign in to follow this  
Der X

Запрет доступа к сайту по IP-адресам стран

Recommended Posts

 

Наверное, многие web-мастера, которые не ленятся отслеживать логи посещений своих сайтов, задаются вопросом: «Как заблокировать доступ к сайту по IP адресам и отвадить надоедливых ботов и хакеров?» Собственно, проблема заключается не в том, каким способом запретить доступ к сайту. На помощь web-мастеру всегда придет конфигурационный файл .htaccess. Проблема в другом — в поиске списка диапазонов IP адресов, распределенных по географическому признаку.
Большинство моих сайтов рассчитаны на русскоязычную аудиторию. Географически — для Беларуси, России, Украины. Поэтому однозначно можно заблокировать IP адреса стран Африки, Юго-Восточной Азии и Южной Америки. Смотрите список IP адресов стран.
Оптимальное решение для запрета доступа к сайтам по выбранным IP адресам — использовать в файле .htaccess директиву Deny. Важно правильно установить порядок обработки правил — Allow,Deny или Deny,Allow:
 

  • При Allow,Deny сначала обрабатываются разрешающие правила Allow, затем запрещающие Deny. Действия, не подпадающие ни под одну из директив Allow или Deny, будут запрещены по умолчанию.
  • При Deny,Allow сначала обрабатываются запрещающие правила Deny, затем разрешающие Allow. Действия, не подпадающие ни под одну из директив Deny или Allow, будут разрешены по умолчанию.


Если перечислять все диапазоны IP адресов выбранных стран, список получается слишком длинным. Чтобы избежать этого, я решил заблокировать блоки IP адресов, отличающихся первым октетом (ХХХ.0.0.0/8). Получился совсем небольшой список, охватывающий большинство диапазонов IP адресов: AfriNIC (Африка), APNIC (Юго-Восточная Азия) и LACNIC (Южная Америка и страны Карибского бассейна). Из списка я исключил блоки IP адресов ARIN (Северная Америка) и RIPE (Ближний Восток, Европа и Центральная Азия). 

Блокировка IP адресов директивой Deny

Разрешаем только методы GET, HEAD, POST:

 

Deny from 58.0.0.0/7
Deny from 60.0.0.0/7
Deny from 101 103 106
Deny from 110.0.0.0/7
Deny from 112.0.0.0/5
Deny from 120.0.0.0/6
Deny from 124.0.0.0/7
Deny from 126 133 175 180
Deny from 182.0.0.0/7
Deny from 202.0.0.0/7
Deny from 210.0.0.0/7
Deny from 218.0.0.0/7
Deny from 220.0.0.0/6
# LACNIC:
Deny from 177 179 181
Deny from 186.0.0.0/7
Deny from 189
Deny from 190.0.0.0/7
Deny from 200.0.0.0/7
# Networks:
Deny from 3 6 9 11 13 15
Deny from 16.0.0.0/6
Deny from 20.0.0.0/7
Deny from 22 25 26
Deny from 28.0.0.0/7
Deny from 30 33
Deny from 34.0.0.0/7
Deny from 38 40 44 47 48
Deny from 51
Deny from 52.0.0.0/6
Deny from 56.0.0.0/7
Deny from 214.0.0.0/7
</Limit>

Данным правилом я запретил доступ к сайту для IP адресов стран Африки, Юго-Восточной Азии, Южной Америки и Карибского бассейна, а также некоторых корпораций и учрежний типа министерства обороны страны, скорый кирдык которой предрекал герой Сергея Бодрова в фильме «Брат». Обратите внимание, что в этом списке отсутствуют IP адреса из смешанных зон, которые можно найти на сайтах AfriNIC, APNIC, LACNIC и RIPE. Однако данные диапазоны отсекают основной объем паразитного трафика. IP адреса ARIN блокировать не рекомендуется, иначе роботы поисковых систем Bing, Google, Yahoo не смогут заходить на ваш сайт.
Я умышленно задал правило Order Deny,Allow, а не наоборот, чтобы иметь возможность добавить ниже разрешающие правила исключений некоторых IP адресов из заблокированных диапазонов.
Примечание: для отображения сообщения об ошибке 403 (доступ запрещен) лучше использовать не собственную страницу, а короткое сообщение, уменьшая тем самым нагрузку на сервер (какая вам разница, что увидят китаец или румын, пытавшиеся попасть на ваш сайт). Например, послать всех по известному адресу:
ErrorDocument 403 "Fuck you!
Обратите внимание на то, что в строке прописана только одна кавычка (для Apache 1.3). Для Apache 2.0 необходимо обязательно ставить закрывающую кавычку.


Блокировка IP адресов модулем Mod Rewrite

Используя модуль mod_rewrite, список IP адресов можно существенно сократить. В этом помогут регулярные выражения. Главное удобство модуля mod_rewrite в данной задаче — возможность использования правил исключений.


Блокировка IP адресов стран Северной Америки модулем Mod Rewrite

Задача: необходимо заблокировать IP адреса ARIN (стран Северной Америки), оставив доступ к сайтам для поисковых ботов Bing, Google, Yahoo. При этом на хостинге размещены несколько сайтов, один из которых предназначен для американской аудитории.
Для этого в корневой директории своего хостинга размещаем файл .htaccess, в котором прописываем следующее правило:

<IfModule mod_rewrite.c>
# Включаем модуль mod_rewrite:
RewriteEngine on
# Для файла .htaccess, расположенного в корневой директории сайта
RewriteBase /
RewriteCond %{REMOTE_ADDR} ^(?:7|23|45|50|6[3-9]|7[1-6]|9[6-9]|1(?:0[0478]|7[2-4]|84|99)|2(?:0[4-9]|16))\..*$
RewriteCond %{HTTP_HOST} !^(?:www\.)?my_english_site\.com$ [NC]
RewriteCond %{HTTP_USER_AGENT} !bingbot [NC]
RewriteCond %{HTTP_USER_AGENT} !(?:Googlebot|gsa-crawler) [NC]
RewriteCond %{HTTP_USER_AGENT} !Slurp [NC]
RewriteRule ^.*$ - [F,L]
</IfModule>

Данное правило модуля mod_rewrite блокирует IP адреса стран Северной Америки, если имя хоста не содержит my_english_site.com, и строка User Agent не содержит имена поисковых ботов Bing, Google, Yahoo. Правило действует на все сайты, размещенные на хостинге, за исключением домена my_english_site.com. Если нужно исключить все поддомены этого сайта, пишем:
RewriteCond %{HTTP_HOST} !^(?:.+\.)?my_english_site\.com$ [NC]
При использовании в файлах .htaccess, размещенных во вложенных директориях, правил модуля mod_rewrite не забудьте добавить наследование указанных правил, иначе они работать не будут:
 

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteOptions inherit
RewriteBase /путь_к_директории_с_файлом_.htaccess_от_корня_сайта/
…
</IfModule>

Обязательно указывайте в RewriteBase путь к директории, в которой размещен файл .htaccess, от корня сайта. Все преобразования ссылок осуществляются относительно той директории, в которой расположен файл .htaccess. При этом унаследованные правила модуля mod_rewrite работают также относительно этой директории, то есть как бы копируются в новый файл. Если файл .htaccess расположен в директории /partners/web/access/, как данная статья, то:

RewriteBase /partners/web/access/

Использование общего файла .htaccess для всех сайтов возможно не на всех хостингах. В противном случае вам придется прописывать данные правила для каждого сайта в отдельности, что неудобно при редактировании (придется вносить изменения в файлы .htaccess каждого сайта).


Блокировка всех IP адресов, кроме стран СНГ, Bing, Google, Yahoo

Правило, блокирующее доступ к сайту со всех IP адресов, за исключением стран СНГ (включая Балтию) и поисковых ботов Bing, Google, Yahoo:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
# Запретить все IP, кроме СНГ, Bing, Google, Yahoo:
RewriteCond %{REMOTE_ADDR} !^(?:2|3|31|46|62|7[7-9]|8[0-9]|9[0-5]|1(?:09|28|3[046]|4[69]|5[89]|64|[78]8|9[2-5])|21[237])\..*$
RewriteCond %{HTTP_USER_AGENT} !bingbot [NC]
RewriteCond %{HTTP_USER_AGENT} !Googlebot [NC]
RewriteCond %{HTTP_USER_AGENT} !Slurp [NC]
RewriteRule ^.*$ - [F,L]
</IfModule>

В данное правило включены диапазоны IP адресов по первому октету, в которые входят IP адреса всех бывших республик СССР (включая Латвию, Литву и Эстонию). Данное правило не блокирует IP адреса других европейских стран, которые также входят в данный диапазон. Правило удобно применять для сайтов, ориентированных исключительно на аудиторию СНГ. Правда, если в будущем список IP-адресов, закрепленных за странами СНГ, расширится, новые адреса окажутся в числе запрещенных.


Защита сайта с помощь модуля mod_setenvif

Модуль mod_setenvif, позволяющий использовать регулярные выражения, на мой взгляд, представляет наиболее удобный способ защиты сайта.

<IfModule mod_setenvif.c>
# Блокировка ботов по User Agent:
SetEnvIfNoCase  User-Agent "(?:Accoona|antabot|Ask  Jeeves/Teoma|Baiduspider|Bigmir|China|curl/|Dolphin|Download|EltaIndexer|Email|FlashGet|GameSpy|Gigabot|grub|Gulper   Web|ia_archiver|liveinternet|Meta|Mihalism|OmniExplorer|Pagebull|Scooter|Twiceler|Validator|WebAlta|Wget|WordPress).*$"  bot
# Блокировка IP-адресов AfriNIC, APNIC, LACNIC:
SetEnvIf Remote_Addr ^(?:[346-9]|1[1-35-9]|2[0-25689]|3[02-58]|4[04578]|5[1-7]|21[45])\..*$ ip
# AfriNIC:
SetEnvIf Remote_Addr ^(?:41|102|105|197)\..*$ ip
# APNIC:
SetEnvIf  Remote_Addr  ^(?:1|14|27|3[69]|4[239]|5[89]|6[01]|1(?:0[136]|1[0-9]|2[0-6]|33|75|8[023])|2(?:0[23]|1[0189]|2[0-3]))\..*$  ip
# LACNIC:
SetEnvIf Remote_Addr ^(?:1(?:7[79]|8[1679]|9[01])|20[01])\..*$ ip
# Запрет для слишком активного бота Dolphin со всей их хитрож…  мудрой компанией (бот ходит с IP-адреса 94.127.144.38, выполняя  многочисленные запросы с «левыми» параметрами на несуществующие  страницы):
SetEnvIf Remote_Addr ^94\.127\.14[45]\..*$ ip
# Запрет хоста еще одной хитрож…  мудрой компании (на своем говносайте эти мудаки размещают спамерские  ссылки на чужие сайты, среди которых вы можете обнаружить и свой),  заодно жалуемся на них в службу поддержки Яндекса:
SetEnvIf Referer ^https?://(?:.+\.)?amazing\.ru/.*$ shit
SetEnvIf Remote_Addr ^213\.189\.197\.7$ shit
# Запрет языковых версий браузера - Arabic|Hindi|Turkish|Chinese:
SetEnvIfNoCase Accept-Language (?:ar|hi|tr|zh) banned
<Limit GET HEAD POST>
Order Deny,Allow
# Запрет всех IP-адресов одной хитрож…  мудрой компнии, которая позиционирует себя на рынке поискового  продвижения сайтов (чем на самом деле занимается, непонятно, но их бот  систематически простукивает сайты, ежесекундно меняя IP-адреса из всего  диапазона):
Deny from 94.77.64.0/18
Deny from env=banned
Deny from env=bot
Deny from env=ip
Deny from env=shit
</Limit>
</IfModule>

Если необходимо заблокировать какую-либо сеть, разрешив доступ к сайту с некоторых IP-адресов этой сети, пишем:

Order Deny,Allow
Deny from 94.77.64.0/18
Allow from 94.77.64.50 94.77.64.51 94.77.64.52

Правила блокировки для IP адресов стран Европы я не составлял. Слишком много диапазонов, распределенных по разным странам, включая СНГ. Если не лень, можно отлавливать засланцев по логам. Если IP принадлежит хостинг-провайдеру, можно смело блокировать всю сеть, поскольку зайти из нее может только бот. Дополнительно можно использовать блокировку доступа к сайту по User Agent известных ботов. Смотрите список User Agent ботов.
P.S. Используя вышеописанный метод, я запретил также возможность доступа к своему компьютеру (англоязычные сайты меня не интересуют), прописав в правилах сетевого экрана указанные диапазоны IP адресов (исключая зоны ARIN и RIPE). Правда, у меня по умолчанию всего-то открыты 2 порта, и жестко настроена групповая политика (Windows XP SP2), но это тема уже другой статьи. А пока можете ознакомиться с простым и эффективным способом защиты почты от спама.

Дополнительные настройки в файле .htaccess

Защита сайта от «левых» параметров в запросах
 

<IfModule mod_rewrite.c>
# RewriteCond %{THE_REQUEST} \?[0-9A-Z] [NC,OR] (если не используете ссылки с параметрами, раскомментируйте строку)
RewriteCond %{THE_REQUEST} (?:\%[0-9A-Z]*|\&|\(|\)|\+|\[|\]|\<|\>) [NC,OR]
RewriteCond %{THE_REQUEST} (?:\<|%3C).*script.*(?:\>|%3E) [NC,OR]
RewriteCond %{THE_REQUEST} _REQUEST(?:=|\[|\%[0-9A-Z]{0,2}) [NC,OR]
RewriteCond %{THE_REQUEST} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{THE_REQUEST} DOCUMENT_ROOT= [NC,OR]
RewriteCond %{THE_REQUEST} GLOBALS(?:=|\[|\%[0-9A-Z]{0,2}) [NC,OR]
RewriteCond %{THE_REQUEST} javascript [NC,OR]
RewriteCond %{THE_REQUEST} mosConfig_[a-zA-Z_]{1,21}(?:=|\%3D) [NC]
RewriteRule ^.*$ - [F,L]
</IfModule>

Запись выше можно существенно сократить:

RewriteCond %{QUERY_STRING} (?:\?.*\?|_REQUEST|base64_encode|GLOBALS|mosConfig_|script) [NC,OR]
RewriteCond %{THE_REQUEST} (?:\%[0-9A-Z]*|\&|\(|\)|\+|\[|\]|\<|\>)
RewriteRule ^.*$ - [F,L]

Либо  глобально разрешаем только, например, три метода (GET, HEAD, POST) с  заранее указанными символами в строке http-запроса, причем метод POST  разрешается только для указанного REQUEST_URI:
RewriteCond  %{THE_REQUEST} !^(?:GET|HEAD)\  /(?:[разрешенные_символы_REQUEST_URI]+(?:\?[разрешенные_символы_QUERY_STRING]+)?)?\  HTTP/1\.[01]$
RewriteCond %{THE_REQUEST} !^POST\ /разрешенный_для_метода_POST_REQUEST_URI\ HTTP/1\.[01]$
RewriteRule ^.*$ - [F,L]

Защита сайта от хотлинка

Запрещаем скачивание графических файлов на сайте по прямым ссылкам:

Цитата

<IfModule mod_setenvif.c>
SetEnvIfNoCase Referer ^$ empty
SetEnvIfNoCase Referer ^http://(?:.+\.)?my_site\.ru/.*$ host
SetEnvIf Referer ^https?://(?:.+\.)?(?:google|yandex)\.(?:com?\.)?[a-z]{2,3}/.*$ host
SetEnvIf Referer ^https?://(?:.+\.)?googleusercontent\.com/.*$ host
<FilesMatch "\.(?:gif|jpg|png)$">
Order Deny,Allow
Deny from all
Allow from env=empty
Allow from env=host
</FilesMatch>
</IfModule>

 

То же самое с помощью модуля mod_rewrite:

<IfModule mod_rewrite.c>
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(?:.+\.)?my_site\.ru/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^https?://(?:.+\.)?(?:google|yandex)\.(?:com?\.)?[a-z]{2,3}/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^https?://(?:.+\.)?googleusercontent\.com/.*$ [NC]
RewriteRule .*\.(?:gif|jpg|png)$ - [F,L]
</IfModule>
PS Не смог не скопипастить с http://mycrimea.su/partners/web/access/ 😉

---------======>>XakepInter.Net<<=======---------
 
Красть идеи у одного человека - плагиат; у многих - исследование.

Сунетесь к лучшим — умрете всей кучей.

… неважно хорошо это или плохо, а важно весело это будет или грустно

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
Вверх