Назад | Перейти на главную страницу

Как разрешить использование iptables только IP-адресов США?

У меня есть сайт, который актуален только для посетителей из США, и я хотел бы заблокировать доступ к нему всех посетителей, не являющихся гражданами США. Как лучше всего сделать это с помощью iptables, учитывая, что у меня есть список CIDR блоков IP США?

Самый простой способ - заблокировать весь трафик по умолчанию, а затем разрешить только диапазоны США. Я использовал этот веб-сайт в прошлом, чтобы получить диапазоны IP-адресов в разных странах. В iptables вы создаете правило принятия $ US_IPS, а затем определяете его. Как предупреждение, это много IP-адресов, и это может замедлить работу вашего брандмауэра в зависимости от характеристик оборудования и объема входящего трафика из-за того, что правило должно каждый раз просматривать столько IP-адресов. Если есть какие-то определенные IP-адреса, которые часто попадают в ваш брандмауэр, вы можете поместить это правило выше этого правила принятия, чтобы ему не приходилось каждый раз обрабатывать огромный список IP.

https://www.countryipblocks.net/country_selection.php

Хотя, возможно, было бы проще заблокировать все по умолчанию, это также означает, что любые вновь назначенные адреса в США также будут заблокированы, если вы не будете стараться поддерживать свои таблицы в актуальном состоянии.

Вам следует изучить xtables-addons, проект, который пишет модули ядра для кода netfilter (брандмауэра), которые улучшают / расширяют его возможности.

Одним из таких модулей является xt_geoip, который может сопоставлять коды стран с двоичной базой данных, загруженной из различных источников, в частности из базы данных MaxMind GeoIPCountry (бесплатно).

Преимущества? Гораздо более простые правила брандмауэра и, в зависимости от ваших настроек, значительно лучшая производительность. Стоимость? Чтобы все заработало, потребуется некоторое терпение и навыки устранения неполадок.

После создания и загрузки этого модуля и хранения двоичной базы данных в / usr / share / xt_geoip вы можете написать одно правило для выполнения своей задачи, например

iptables -I INPUT 1 -m geoip! --src-cc US -j УДАЛЕНИЕ

Любой трафик не из исходного кода страны США будет отброшен (вы поняли).

На этой странице представлен обзор процесса:

https://www.howtoforge.com/xtables-addons-on-centos-6-and-iptables-geoip-filtering

Caveat emptor: я обнаружил, что процесс очень специфичен в отношении версий ядра - для меня, чтобы заставить это работать на CentOS 6, потребовалось найти и запустить более старую (1.37) версию модуля и отключить ряд функций в файле mconfig перед ./configure; make, поскольку они не поддерживались в моем старом дистрибутиве.

Кроме того, MaxMind (поставщик данных GeoIP) изменил свои файлы и структуру, поэтому скрипты (даже последняя версия) не работают. У меня все заработало, используя публичный образ докера, содержащий обновленную версию скрипта преобразования данных:

https://hub.docker.com/r/sander1/xtables_geoip

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