Блокировка страны (массовые диапазоны iP), лучшая практика для реального блока
Этот вопрос, очевидно, задавался много раз во многих различных формах, но я не могу найти фактический ответ на конкретный план, который у меня есть. У нас есть популярный европейский сайт коммерческих сделок, и мы получаем большое количество входящих регистраций / трафика из стран, которые даже не могут принять участие в предлагаемых нами сделках (а многие ритейлеры даже не известны за пределами Западной Европы).
Я определил проблемную область, чтобы блокировать большую часть этого трафика, но (как и ожидалось) необходимы тысячи диапазонов IP-адресов.
Мой вопрос сейчас (наконец-то!). На тестовом сервере я создал скрипт для блокировки каждого диапазона в iptables, но количество времени, которое потребовалось для добавления правил, было большим, а затем iptables не отвечал после этого (особенно при попытке iptables -L).
Какой самый эффективный способ блокировки большого количества диапазонов IP-адресов:
- Iptables? Или плагин, где я могу эффективно загрузить их?
- hosts.deny?
- .htaccess (неприятно, так как я запускаю его в apache на каждом веб-сервере с балансировкой нагрузки)?
5 ответов
Насколько я понимаю, вопрос не в том, где взять список IP-адресов, которые нужно заблокировать, а в том, как эффективно их заблокировать с помощью iptables. Сценарию, выполняющему серию команд "iptables -A", потребуется очень много времени для загрузки правил, и в это время межсетевой экран работает с несовместимой политикой. Это также существенно влияет на его производительность.
Я предлагаю вам попробовать модуль ipset ( http://ipset.netfilter.org/). Это позволяет вам манипулировать таблицами адресных блоков напрямую, вам нужно только одно правило iptables, чтобы соответствовать всему набору. Вам нужно будет поэкспериментировать с различными типами наборов, чтобы найти тот, который будет соответствовать количеству блоков IP-адресов, которые вам нужно блокировать, и даст вам необходимую производительность. В любом случае это намного лучше при сопоставлении длинных списков адресных блоков и позволяет перезагрузить его с помощью инструмента командной строки, не касаясь правил.
Обратите внимание, что не все дистрибутивы Linux включают ipsets в конфигурацию по умолчанию, поэтому вам может потребоваться перекомпилировать модули ядра и iptables.
Блоки адресов стран время от времени меняются, поэтому вам придется периодически обновлять набор адресов. Чтобы перезагрузить набор, который уже используется, вы можете использовать инструмент командной строки "ipset", и его легко обернуть в сценарий оболочки для автоматизации процесса. Или вы можете использовать fwbuilder для генерации вашей политики iptables и использовать сценарий, который она генерирует, для управления ipset ( http://www.fwbuilder.org/4.0/docs/users_guide/address-table-object.html, см. "5.2.13.1 Использование объектов адресных таблиц с наборами IP-адресов iptables"в этой главе)
Что мы нашли лучше всего, так это использование базы данных MaxMinds во время регистрации. Бесплатная версия привязана к стране, и вы можете заплатить за дополнительную детализацию.
Преимущество только сделать это во время регистрации в том, что вы не будете делать жизнь неловко для клиентов, которые уже зарегистрировались, которые путешествуют.
Linux iptables сносен для базового межсетевого экрана, несчастен для всего остального.
Брандмауэр pf (используемый большинством BSD Unices) значительно облегчит вашу жизнь. Функция таблиц в брандмауэре pf аналогична модулю ipset в netfilter.
OpenBSD, FreeBSD, NetBSD, pfSense и OPNSense используют pf. Мне нравится OpenBSD как дистрибутив брандмауэра, но если вам нужен графический интерфейс для брандмауэра, pfSense и OPNSense справятся с этой задачей.
Что касается того, что положить в таблицы pf, я держу обновленный архив блоков CIDR по странам здесь.
Я использую http://www.countryipblocks.net/. Мне нравится, что это бесплатно (регистрация не требуется) и поддерживает множество различных форматов для маршрутизаторов, веб-серверов и т. Д.
Список блоков IP для каждой страны в формате, который может быть легко использован многими брандмауэрами (я использую таблицы PF во FreeBSD, которые можно загрузить из файла): http://www.ipdeny.com/ipblocks/