Как ограничить доступ к ресурсу только для определенного региона?

Как я могу настроить файрволл на сервере (linux), чтобы заблокировать доступ к нему и к сайту для определенного региона, учитывая многочисленные неудачные попытки входа, в основном из Индии и подобных IP-адресов?
  • 6 февраля 2024 г. 13:18
Ответы на вопрос 4
Для ограничения доступа к ресурсу только для определенного региона можно использовать несколько методов. Один из популярных подходов — это геоблокировка, основанная на IP-адресах.

Вот несколько шагов, как это можно реализовать на сервере с Linux:

1. Получение списка IP-адресов:
   Получите список IP-адресов для региона, который вы хотите заблокировать. Это можно сделать через различные сервисы и базы данных, такие как IP2Location, MaxMind GeoIP и другие.

2. Использование inetutils (ipset и iptables):
   Создание правил `ipset` для управления списками IP-адресов и `iptables` для применения этих правил на файрволле.

   Вот пример:

   ```shell
   # Создайте новый список ipset для заблокированных IP-адресов
   ipset create geoblock hash:net

   # Добавьте IP-адреса или подсети в список (пример для одного адреса)
   ipset add geoblock 123.123.123.0/24

   # Настройте iptables, чтобы блокировать пакеты из списка ipset
   iptables -I INPUT -m set --match-set geoblock src -j DROP
   ```

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

3. Использование GeoIP модуля для `iptables`:
   Если у вас установлен модуль GeoIP для `iptables`, вы можете прямо блокировать по странам так:

   ```shell
   # Блокирует весь входящий трафик из Индии
   iptables -I INPUT -m geoip --src-cc IN -j DROP
   ```

4. Обновление и поддержка:
   Следите за обновлениями списков IP-адресов, поскольку IP-подсети могут меняться со временем.

5. Рассмотрите использование специализированного ПО:
   Существуют готовые решения для платформ уровня приложения, такие как Cloudflare или подобное CDN, которое также может предоставлять услуги по геоблокированию на более высоком уровне, не требуя от вас ручной настройки списков IP.

При выполнении этих шагов, пожалуйста, будьте осторожны, чтобы не заблокировать доступ важным пользователям или ваши собственные IP-адреса. Также будьте в курсе, что IP-блокирование не является идеальным решением, так как пользователи могут использовать VPN или прокси для обхода такой блокировки. Из-за этого некоторые законные пользователи из блокируемой страны также не смогут получить доступ к вашему ресурсу.
GeoIP ngx_http_geoip_module 

1. Nginx должен включать модуль ngx_http_geoip_module.
2. Качаем БД GeoLite2 Country.
3. Пример конфига (nginx.conf), с отправкой всех из Индии в 403 лес:
Рабочий вариант, не полагающийся на разной степени редко обновляемые географические базы IP-адресов - закрыть SSH совсем и ходить только из локальной сети, например через впн. 

С веб-сервером сложнее - тут без подключения посторонних сервисов выбор невелик - модуль geoip или ручное перечисление диапазонов релевантных стран.
Недавно проверял состояние сервера и заметил в логах много неудачных попыток входа на сервер (В основном через ssh)
ну как первый раз в интернет вышел, уже сто лет такое, ssh вообще постоянно долбят, ставишь fail2ban, а еще лучше меняешь дефолтный порт и ставишь логин только по ключу. А регион блокировать, так себе идея.
Похожие вопросы