Статьи

Как заблокировать доступ к вашему сайту целым странам


Актуальные сообщения на SitePoint сегодня:


Если вы запускаете веб-сайт, то по умолчанию он доступен для всей планеты. Многие сайты просто не имеют отношения к людям в других странах. Таким образом, вы не должны ожидать значительного трафика от них как само собой разумеющееся.

Если у вас есть местный книжный магазин и ваш основной рынок — это местные люди, которые заходят в ваш магазин, то нет необходимости позволять другим странам индексировать или тратить трафик на вашем сервере. То же самое можно сказать об автомойке, няне или стрижке газонов.

Если вы пользуетесь личным или даже частным веб-сайтом, например семейным блогом, вы можете ограничить трафик по умолчанию.

Вот скриншот Awstats, говорящий мне, что Китай отвечает за второй по величине объем трафика на определенном веб-форуме, которым я управляю. Это только на январь 2015 года.

Awstats Китай

Несмотря на то, что китайцы могут найти содержание форума полезным, объяснения этой деятельности нет. Мы не обслуживаем специально Китай и не рекламируем, чтобы привлечь китайских жителей. Сайт даже не предлагает перевод на китайский язык и не говорит по-китайски.

Мне также известно, что 99% всех попыток взлома паролей грубой силы происходят с китайских IP-адресов. Приблизительно от 50 до 100 попыток «подбора» паролей к законным именам пользователей каждый день на этом сайте происходит с китайских IP-адресов.

Разница между 1,9 млн. Страниц и 134 000 страниц довольно велика, и пропускная способность 1,86 ГБ — это не конец света. Но когда я знаю, что 99% из них — это фальшивые, боты, взломы с применением грубой силы, сканеры уязвимостей и сканеры веб-сайтов, то почему бы мне просто не заблокировать доступ Китая к моему сайту?

Есть несколько причин против блокирования доступа к странам. Очевидный пример — отели. Несмотря на то, что они обслуживают только местных жителей, которые останавливаются в дверях, иностранцы, приезжающие в этот район, будут искать отели до того, как они туда доберутся. Тот же аргумент можно использовать для модных ресторанов, курортов, прокатов автомобилей, пригородных перевозок и так далее. Вам придется решить (и проверить свою веб-статистику!), Пойдет ли вам на пользу блокировка определенных стран.

Ниже приведены многие из распространенных способов блокирования стран, с некоторыми плюсами и минусами и примерами кода.

.htaccess

Если вы являетесь веб-администратором, вы можете знать, что попытка сделать что-то (например, заблокировать целые страны с помощью .htaccess) — проигрышная игра. Легальные хакеры используют прокси или бот-фермы, чтобы выполнять свою грязную работу. То, что IP-адрес из Китая, не означает, что блокирование этого IP-адреса принесет пользу в долгосрочной перспективе.

Веб-администраторы редко блокируют IP-адрес просто потому, что этот IP-адрес когда-то делал непослушные вещи. Настоящий хакер не будет использовать свой собственный IP-адрес, и нет гарантии, что этот IP-адрес всегда останется недобросовестным пользователем.

Законные пользователи также могут использовать прокси! Помните, что если вы блокируете не очень плохую страну только потому, что считаете, что она не имеет отношения к вашему трафику, у вас могут быть пользователи, использующие прокси или VPN в этой стране.

Это также проигрышная игра, потому что существует более четырех миллиардов IPv4-IP, и нет простого способа их разделения по странам. Другими словами, ваш файл конфигурации .htaccess или Apache (или другой ACL / брандмауэр) может вырасти до сотен тысяч строк текста, если вы хотите таким образом блокировать страны самостоятельно. Это не практично и не перформативно .

Если вы хотите увидеть, сколько строк потребуется в .htaccess, чтобы заблокировать страну, попробуйте использовать ip2location . Чтобы заблокировать США, вам нужно более 150000 строк текста!

Суть в том, что не используйте .htaccess или Apache config или любой другой ACL веб-сервера, чтобы попытаться заблокировать страны. Это может быть хорошо для нескольких IP-адресов, но эти файлы читаются при каждом запросе и не кэшируются; в конечном итоге тебе будет больно.

СОВЕТ: Если вы все равно заинтересованы в маршруте .htaccess и хотите получить точный, «прямо из источника», ежедневно обновляемый список IP-адресов по странам, вы можете начать с чтения того, что этот парень сделал для автоматизации вещей.

Фактический код для блокировки IP с использованием .htaccess может быть таким простым:

Order Deny,Allow
Deny from 1.1.1.1
Deny from 2.2.2.2
Deny from 3.3.3.3

Вы можете генерировать код с помощью этого инструмента .

Вы можете получить гораздо больше, например, ограничение в зависимости от используемого протокола, но это основная идея. Ваш файл .htaccess выйдет из-под контроля!

Используйте хостинговую компанию, которая имеет блокировку как часть своих встроенных элементов управления

Это звучит красиво, но очень редко. Большинство хостинговых компаний предоставляют серверы таким образом, чтобы сделать эту функцию недоступной. Два основных типа:

Оголенный метал

Чистый металл или VPS — это машина, которую вы полностью контролируете. От программных брандмауэров до хостинга программного обеспечения и панелей управления — все это в ваших руках.

Это может быть, например, DigitalOcean Droplet или сервер с нуля из InMotionHosting или Rackspace.

Часто, когда вы покупаете голый металл или VPS, вы не можете изменить способ маршрутизации. Я не нашел хост с блокировкой страны в рамках плана и конфигурации по умолчанию. В лучшем случае они предоставляют вам базовый брандмауэр для добавления IP-адресов в черные или белые списки.

Общий хостинг

Вы можете настроить сервер с помощью панели управления Plesk или cPanel. Это просто панели управления для работы с базами данных, электронной почтой, резервными копиями и многими другими вещами. Общий сервер обычно поставляется с панелью управления, но вы не можете активировать сетевые элементы управления, которые могут повлиять на другие веб-сайты, размещенные на общем сервере с тем же IP-адресом.

В лучшем случае панель управления позволит вам легко добавлять IP-адреса в брандмауэр или разрешать редактирование .htaccess, но я не видел ни одного с элементами управления одним щелчком, чтобы блокировать трафик по странам.

Вот мой блокировщик IP-адресов cPanel:

cPanel IP Blocker

Короче говоря, сама хостинговая компания вряд ли поможет вам здесь, и вы не сможете заблокировать IP-адреса через панель управления один за другим!

Блокировка страны действительно кажется чем-то, что, как вы думаете, может позволить веб-хостинг, именно поэтому я включил эту категорию, но удивительно, что я не могу найти такую, которая делает.

Сети доставки контента

Это не всеобъемлющее решение для всего вашего сайта, но оно частично решает проблему. Если ваш веб-сайт предоставляет статический контент, такой как медиа-файлы, изображения или другие файлы, вы можете использовать CDN со встроенными геоинструментами, чтобы заблокировать доступ к определенным странам.

Крупный игрок здесь — Amazon CloudFront. Прочтите страницу с подробностями и перейдите к разделу «Ограничение гео». Quote:

Geo Restriction или Geoblocking позволяет вам выбрать страны, в которых вы хотите ограничить доступ к своему контенту. Настраивая белый или черный список стран, вы можете контролировать доставку своего контента через Amazon CloudFront только в страны, где у вас есть лицензия на распространение.

Большинство хороших CDN будут иметь некоторую форму гео-ограничения. Другим примером является Akamai, который не только позволяет блокировать по коду страны, но вы также можете блокировать на основе их списка стран, на которые наложено эмбарго США.

Если у вас есть CDN, доставляющий ваш контент, вы, вероятно, не очень беспокоитесь о пропускной способности (если вы не заплатите за него в CDN!). Но это помогает и в других отношениях, например, с лицензированием, если вы не разрешаете просматривать или слышать ваши медиа в определенных странах.

Модули Apache

Вам не нужно заполнять свой файл .htaccess тысячами строк IP-адресов. Вместо этого вы можете установить библиотеку C и модуль Apache, чтобы выполнить тяжелую работу за вас.

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

Используя эту базу данных и устанавливая один из их различных API , вы можете обрабатывать трафик по своему усмотрению.

Для наших целей вам потребуется установить API библиотеки C, а также модуль Apache. После того, как они сработают и будут включены, поместите файл базы данных куда-нибудь, и затем вы можете настроить блоки своей страны с помощью простого кода в файле конфигурации .htaccess или Apache:

 MaxMindDBEnable On
MaxMindDBFile DB /path/to/GeoIP/GeoLite2-Country.mmdb
MaxMindDBEnv MM_COUNTRY_CODE DB/country/iso_code

SetEnvIf MM_COUNTRY_CODE ^(RU|DE|FR) BlockCountry
Deny from env=BlockCountry

Это заблокировало бы Россию, Германию и Францию. Получите ваши двухбуквенные коды стран ISO здесь .

Это будет работать намного лучше, чем ваш сервер, вынужденный анализировать тысячи строк текста при каждом запросе в файле .htaccess!

Вам необходим расширенный доступ к вашему серверу для установки библиотеки и модуля, так что это плохо работает на общих хостах или там, где у вас нет такого доступа на VPS.

Это также будет работать, если по какой-то причине вам нужны определенные правила блокировки на уровне папок.

Уровень приложений

Самая быстрая блокировка происходит, когда она полностью отключена от вашего сервера, обрабатывается на уровне маршрутизации или отдельными DNS-серверами или прокси-сервером до того, как трафик даже достигнет вашего веб-сервера. Следующим быстрым будет программный брандмауэр как часть операционной системы, прежде чем трафик будет направлен на программное обеспечение вашего веб-сервера.

Мы говорили о блокировке на уровне веб-сервера, например, с помощью конфигураций Apache или .htaccess, но теперь мы достигли самого верхнего уровня, 7-го уровня OSI, на уровне приложений.

Вы можете заблокировать на уровне приложений, используя те же API MaxMind, которые упоминались ранее. На этот раз вы можете установить API-интерфейсы PHP, .NET или Perl, чтобы помочь вам принимать решения о геолокации прямо в логике вашего приложения.

Это может быть необходимо, если вам необходимо принимать решения, например показывать разные страницы для разных стран или языков или предлагать совершенно разные предложения в зависимости от страны, и вам необходимо каким-то образом изменить основную логику вашего приложения.

Прочитайте это, чтобы понять, как это делается в PHP.

Это будет один из самых медленных методов, так как вам нужно найти их IP и проверить его, прежде чем ваш код сможет полностью скомпилировать страницу. Умножьте это на тысячи посещений в день, и вы можете столкнуться с некоторым отставанием в производительности, если вы не очень оптимизированы.

Я не предпочитаю делать полную блокировку на уровне приложений. К тому времени, когда человек заблокирован, он уже связался с вашим сервером, отправил некоторые данные, использовал пропускную способность, провел несколько циклов ЦП и т. Д. Но в некоторых особых случаях это может быть именно тот метод, который вам требуется.

Блокировка уровня приложения возможна в любой мыслимой форме. Вы можете найти API и файлы данных для любого языка, который вам необходим. В некоторые готовые программы, особенно программы для электронной коммерции, скорее всего, встроены инструменты геотаргетинга, такие как Prestashop. Они будут изменять такие вещи, как отображаемая валюта на основе геоданных.

Должен ли я действительно иметь дело с API и тому подобным?

Конечно, нет! Один из самых крутых способов сделать это на прикладном уровне — использовать любое количество доступных (и бесплатных) веб-API.

Например, freegeoip.net отправит вам геоданные, просто перейдя по их URL-адресу в форме «freegeoip.net/ndomformat‹/ndomIP_or_hostname}», где формат — csv, xml, json или jsonp.

Все, что вам нужно сделать, это захватить IP-адрес пользователя, отправить его по URL-адресу и проанализировать ответ! Freegeoip позволяет выполнять до 10 000 запросов в час, но если вам нужно больше, вы можете бесплатно загрузить их сервер и запустить собственный сервис!

Вы можете не только получить код страны, но и прочитать город, ZIP, часовой пояс и GPS-координаты.

Естественно, этот метод создает свое собственное отставание, когда вы ожидаете ответа от совершенно другого домена, но мы не будем здесь говорить ни секунды! Это довольно быстро, и, очевидно, они могут обслуживать 10 000 запросов в час для многих пользователей одновременно, так что это нечто.

Таблицы маршрутизации

Я кратко упомянул блокировку на уровне брандмауэра; это, конечно, вариант тоже. Это может быть одним из наименее автоматизируемых решений, если вы не усиленный администратор сервера.

Это естественным образом уменьшило бы нагрузку на программное обеспечение вашего веб-сервера (такого как Apache), и вам не пришлось бы самостоятельно выполнять кодирование на уровне приложений.

Я бы вообще подумал, что попытка поддерживать таблицы маршрутизации в актуальном состоянии с точными IP-адресами станет головной болью при обслуживании. Я бы не пошел по этому пути, если бы количество IP-адресов, которые вам нужно заблокировать, не было минимальным, и вы очень удобно редактировали таблицы брандмауэра и автоматизировали их обновления.

В любом случае, проверьте ipdeny.com, где вы можете скачать списки стран в виде файлов зон. Их файл зоны — это просто текст с одним адресом CIDR на строку.

Чтобы прочитать некоторые инструкции по использованию iptables и написанию сценариев этого процесса в Linux.

Несмотря на то, что это устраняет некоторые накладные расходы с веб-сервера, наличие тысяч строк для обработки в маршрутизаторе может привести к накладным расходам своего рода. Это действительно не лучший метод, я думаю.

Этот метод имеет другой эффект, хотя. Любые заблокированные IP-адреса не просто блокируются веб-трафиком порта 80, но буквально блокируются от любого доступа к вашему серверу! Другие методы могут заблокировать посещение вашей веб-страницы Китаем, но это не помешает им попытаться войти в систему через SSH!

Эта усиленная защита намного лучше настроена на модель с отрицательной защитой, просто блокируйте все, кроме нескольких допустимых точек доступа в вашем маршрутизаторе, вместо того, чтобы пытаться блокировать огромные куски планеты!

Этот метод также не предназначен для общего хостинга или заблокированных серверов, где вы не можете получить доступ к программам маршрутизации или выполнить массовое обновление для них.

ModSecurity

ModSecurity — это брандмауэр веб-приложений для Apache, IIS и Nginx, предназначенный для защиты от многих типов атак и позволяющий осуществлять мониторинг HTTP-трафика, ведение журналов и анализ в реальном времени.

Вы можете установить и настроить это на пустом сервере, если у вас есть skillz! Если у вас есть хост, который предоставляет вам WebHostManager (WHM), вы можете настроить его из интерфейса WHM.

ModSecurity настроен на собственный язык ModSecurity Rule Language, который предназначен для работы с данными транзакций HTTP.

ModSecurity — огромная тема, сама по себе, с множеством различных форм защиты, которые она может предложить. Для наших целей, однако, имеется встроенная поддержка ранее упомянутой базы данных MaxMind для поиска и правил GeoIP.

Вот пример правила для ModSecurity для блокировки Китая:

 SecGeoLookupDb /path/to/geo/data/GeoIP.dat
SecRule REMOTE_ADDR "@geoLookup" "chain,id:20,drop,msg:'Block China IP address'"
SecRule GEO:COUNTRY_CODE "@streq CN"

Чтобы это работало, вы должны обратить внимание на то, какую базу данных MaxMind вы используете, и вашу реализацию ModSecurity.

Если вы используете WHM, вот что вы будете делать.

Сначала загрузите устаревшую базу данных стран, найденную здесь . Важно получить устаревшую базу данных в формате * .dat, поскольку модуль Apache ModSecurity пока не может использовать более новый формат * .MMDB.

Более быстрый способ — сначала создать папку для хранения файла базы данных, я использовал /usr/share/geoip/

Используйте эту команду для загрузки файла каждый месяц (он обновляется в первый вторник месяца).

 wget -N http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

Многие люди будут загружать последнюю версию в среду или четверг, на случай, если они отстают в обновлении файла.

Как только он загрузится, распакуйте его с помощью следующей команды:

 gzip -df GeoIP.dat.gz

Коммутаторы говорят ему «выкачать» и перезаписать существующий файл.

Теперь войдите в WHM и перейдите в Центр безопасности-> Конфигурация ModSecurity. Прокрутите вниз до «База данных геолокации» и введите путь сверху.

База данных геолокации ModSecurity

Вы также можете убедиться, что механизм правил настроен на обработку правил. Затем сохраните изменения.

Затем перейдите в раздел Инструменты ModSecurity. Вы увидите текущий «Список совпадений», показывающий действия, выполненные по любым активным правилам. Нажмите кнопку «Список правил», а затем нажмите «Добавить правило».

Скопируйте это правило:

 # Test IP address and block by country code
SecRule REMOTE_ADDR "@geoLookup"  "phase:1,chain,id:10,drop,log,msg:'Blocking China IP Address'"
SecRule GEO:COUNTRY_CODE "@streq CN"

Установите флажок «Включить правило», а также флажок «Развернуть и перезапустить Apache», а затем «Сохранить».

ModSecurity Rule

Вскоре вы увидите, что ваше новое правило блокирует некоторый трафик.

Список попаданий ModSecurity

Просто убедитесь, что если вы используете эту технику, она заблокирует ВСЕ домены, размещенные под WHM! Если вы хотите заблокировать только на основе определенных доменов, вам потребуется дополнительная настройка. Ни один из моих доменов, размещенных на этом WHM-сервере, не требует чтения из Китая, поэтому я решил заблокировать все домены.

Также обратите внимание, что если ваш WHM не имеет меню, как у меня, вы, возможно, не в курсе. Убедитесь, что вы используете последнюю версию, которая на данный момент составляет 11.48.0 (сборка 12).

Если у вас нет WHM, вам придется установить и настроить ModSecurity вручную и, вероятно, использовать другую (не унаследованную) базу данных.

Также…

Вы должны также проверить предложения на ConfigServer . Они не только имеют собственный продукт для обеспечения безопасности и брандмауэра, но и интегрируются с продуктами cPanel. У них даже есть плагин для WHM / cPanel для дополнительного контроля над ModSecurity.

Пространство WAF (брандмауэр веб-приложений) имеет много опций и само по себе является большой темой. Здесь много претендентов и даже голые металлические приборы, которые делают эту работу, например, из Барракуда .

Используйте прокси сервис на вашем домене

Наш последний метод заключается в том, чтобы скрыть ваш домен за прокси-службой, которая по существу обрабатывает весь исходный трафик, прежде чем перенаправлять их на ваш сервер.

Это работает на уровне DNS, и часто все, что вам нужно сделать, это изменить настройки DNS, чтобы использовать их.

Самым известным игроком здесь будет CloudFlare от оползня.

Ваш сайт не только работает через прокси-сервер, но также обеспечивает функции безопасности, доставку контента и многие другие элементы управления. Если у вас небольшой (ish) сайт и вам не нужны его расширенные функции, почти нет причин, по которым вы не должны защищать свой сайт за их полностью бесплатный план. Посмотреть планы для деталей. И я упоминал, что они довольно хорошо справляются с атаками DOS?

Они также действуют как обратный прокси-сервер со службами CDN и обслуживают ваш контент на серверах геотаргетинга. По этой причине они могут добавлять контент на ваш сайт, например, дополнительную аналитику или различные «приложения», которые вы можете добавить. Примером приложения является приложение «Лучший браузер», которое уведомляет ваших пользователей, если они используют устаревший браузер. Они делают это без того, чтобы вам приходилось кодировать что-то дополнительное на свой сайт или создавать эту логику самостоятельно.

Блокировка страны не может быть проще. Просто войдите в систему и перейдите в «Контроль угроз», затем там, где написано «Добавить пользовательское правило», начните вводить полное название страны, а затем щелкните его в раскрывающемся списке. Нажмите большую красную кнопку «Блокировать», и все готово!

CloudFlare Block

Заблокируйте все страны, которые вам нужны, и тогда вы увидите их в списке «Черный список».

CloudFlare Block 2

Это может быть самым быстрым и простым способом включения некоторого уровня защиты, поддержки CDN, кэширования обратного прокси-сервера и блокирования страны в домене. Вы можете прикрепить свой домен к CloudFlare и получить его защиту и настройку примерно за 10 минут.

Я упомяну еще одного игрока здесь, это Инкапсула . Они делают то же самое и конкурируют напрямую с ClourFlare. У них также есть бесплатный план, который вы можете использовать на неограниченном количестве доменов с основными функциями. С CloudFlare вы должны изменить свои записи NS, но Incapsula требует только CNAME, что может лучше соответствовать тому, как обрабатывается ваш DNS.

Если вы серьезно относитесь к использованию прокси-сервисов (и вам все равно следует это учитывать), изучите CloudFlare и Incapsula, чтобы найти оптимальный вариант для ваших нужд.

tl; dr — Просто случается провести довольно глубокий анализ CloudFlare против Incapsula против ModSecurity на Slideshare от Zero Science Lab, посмотрите его .

Краткое примечание о безопасности

Я потратил немного больше времени на ModSecurity и CloudFlare, потому что я склонен полагать, что это ваши лучшие варианты сегодня. Я не думаю, что вы должны беспокоиться о правилах .htaccess или брандмауэра. В некоторых ситуациях могут потребоваться географические ограничения на прикладном уровне, поэтому в случае необходимости это хороший вариант.

В конце концов, вы действительно должны обратить внимание на CloudFlare, Incapsula и ModSecurity, чтобы предоставить вам большую степень защиты от современных атак и проблем безопасности. Или посмотрите на другие решения WAF.

Когда вы устанавливаете ModSecurity с WHM, появляется множество правил по умолчанию, которые начинают защищать вас от вещей, о которых вы даже не задумывались. Например, мой начал блокировать запросы, используя протокол «COOK», а не GET или POST. Почему? Поскольку, очевидно, этот протокол иногда обрабатывается встроенным компилятором в ОС и может использоваться в Интернете. Кто знал? Вероятно, в какой-то момент это был успешный взлом, но я не уверен, что он давно исправлен.

Если вы устанавливаете ModSecurity с нуля, по умолчанию он не имеет правил. Самое распространенное, что нужно сделать — это установить готовый набор правил. Лучшим является основной набор правил OWASP ModSecurity (CRS) . Это защищает от многих известных методов взлома и плохого поведения, таких как запрос контента по протоколу COOK!

Если вы используете ModSecurity, вы должны остерегаться ложных срабатываний. Будьте готовы с ними справиться и следите за заблокированным трафиком, который вы обычно разрешаете. Следите за бревнами на что-нибудь интересное.

Дальнейшее чтение

Если вы ищете дополнительное, связанное чтение, почему бы не попробовать:

Вывод

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

Есть некоторые веб-администраторы, которые дурачат меня за то, что я вообще предлагаю блокировать страны, но это полностью ваше дело, и у вас могут быть совершенно веские причины сделать это на ваших собственных доменах, поэтому мне все равно!

Я также хотел бы знать, знаете ли вы какие-либо веб-хосты, которые имеют встроенную, встроенную поддержку гео-ограничений без суеты или расширенных настроек. Я не мог найти ни одного!

Если я пропустил некоторые методы, не стесняйтесь поделиться ими. Если вам нужна более глубокая статья об использовании конкретной техники в конкретной среде, возможно, мы сможем обсудить это на форумах.