У меня есть сайт, который актуален только для посетителей из США, и я хотел бы заблокировать доступ к нему всех посетителей, не являющихся гражданами США. Как лучше всего сделать это с помощью iptables, учитывая, что у меня есть список CIDR блоков IP США?
Самый простой способ - заблокировать весь трафик по умолчанию, а затем разрешить только диапазоны США. Я использовал этот веб-сайт в прошлом, чтобы получить диапазоны IP-адресов в разных странах. В iptables вы создаете правило принятия $ US_IPS, а затем определяете его. Как предупреждение, это много IP-адресов, и это может замедлить работу вашего брандмауэра в зависимости от характеристик оборудования и объема входящего трафика из-за того, что правило должно каждый раз просматривать столько IP-адресов. Если есть какие-то определенные IP-адреса, которые часто попадают в ваш брандмауэр, вы можете поместить это правило выше этого правила принятия, чтобы ему не приходилось каждый раз обрабатывать огромный список IP.
Хотя, возможно, было бы проще заблокировать все по умолчанию, это также означает, что любые вновь назначенные адреса в США также будут заблокированы, если вы не будете стараться поддерживать свои таблицы в актуальном состоянии.
Вам следует изучить 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 в ядро, используемое вашим дистрибутивом. Я ожидаю, что в какой-то момент это действительно будет просто вопрос обновления данных, запустив сценарий, а затем просто добавив правило, описанное выше.