Таким образом, некоторые из серверов, которыми я управляю, загромождаются трафиком из Китая, когда сами сайты никоим образом не будут привлекать кого-либо в Китае. Что еще хуже, множество нежелательных взломов и попыток DDoS-атак происходят из Китая. Поэтому, несмотря на то, что у меня установлен Fail2Ban, чтобы блокировать часть этого трафика, мне бы очень хотелось на время отключить весь / весь трафик из Китая - чтобы эти серверы работали стабильно и счастливо.

Я читал о том, как включить поддержку GeoIP для IPTables, и пытался следовать решениям, подобным представленному здесь, но, похоже, он не работает на моих серверах Ubuntu 12.04.5 (LTS), независимо от того, какой совет я придерживаюсь ,

Один из вариантов, который у меня есть, - прикусить пулю и просто обновить эти серверы до Ubuntu 14.04, но это открывает целую банку червей. В прошлом, когда у меня возникали проблемы с настройкой и запуском GeoIP, эти серверы отлично работают и работают достаточно хорошо. Обновление до 14.04 может привести к потенциальной нестабильности, и у меня нет на это времени; было принято решение остаться 12.04, поскольку он стабилен и хорошо поддерживается до 2017 года, поэтому я перейду этот мост, когда приду к нему.

Так есть ли способ заставить IPTables в Ubuntu 12.04 фильтровать по геолокации, не перепрыгивая через слишком много циклов установки системных пакетов?

1 ответ1

2

Оказывается, мне не нужно полностью заново изобретать колесо, чтобы смешать какую-то поддержку GeoIP с IPTables. Просто используйте IPSet с копией базы данных MaxMind GeoIP Country в формате CSV - в дополнение к одному простому правилу IPTables - все, что вам нужно для запуска и запуска в Ubuntu 12.04.5 (LTS).

Дополнительное примечание, но некоторые онлайн-учебники, которые объясняют процедуру, подобную этой, рекомендуют использовать веб-файлы страновых зон, подобные тем, которые приходят с веб-сайта IPDeny:

http://www.ipdeny.com/ipblocks/data/countries/cn.zone

Хотя это технически работает, мне не нравится идея быть настолько зависимой от данных внешнего сайта, как это. Что если я захочу создать автоматизированный процесс создания сценариев для управления этим, а сайт IPDeny выйдет из строя или будет взломан? Чьи IP-адреса я бы заблокировал.

Вот почему я предпочитаю использовать базу данных MaxMind GeoIP Country в формате CSV на своих серверах. Я всегда могу получить новую копию этой базы данных, если мне нужны обновления, и даже если их сайт не работает, у меня всегда есть копия базы данных на моих серверах. И поскольку в этой базе данных содержатся все страны мира, я всегда могу легко добавить больше стран в набор IP-адресов, используя двухбуквенный код страны ISO 3166-1 .

В любом случае, вот шаги, которые я предпринял, чтобы сделать это с помощью IPSet и базы данных MaxMind GeoIP Country.

1. Установите IPSet.

Сначала установите IPSet следующим образом.

sudo aptitude install ipset

Как только это будет установлено, создайте набор IP-адресов BANNED_RANGES следующим образом:

sudo ipset create BANNED_RANGES hash:net

2. Получить копию базы данных MaxMind GeoIP Country в формате CSV.

Следующим ключом к этому является получение копии базы данных MaxMind GeoIP Country в формате CSV, установленной на сервере. Мои шаги следующие:

curl -O -L http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip

Теперь просто распакуйте этот архив:

unzip -o -q -d . GeoIPCountryCSV.zip

3. Фильтруйте и импортируйте конфигурацию IPSet для конкретной страны, как это.

Теперь мы будем использовать Awk для фильтрации определенных диапазонов IP-адресов в Китае в конфигурационном файле IPSet:

awk -F "," -v COUNTRY_CODE=CN -v IPSET_TABLE=BANNED_RANGES} '$5 ~ COUNTRY_CODE { gsub(/"/, "", $1); gsub(/"/, "", $2); print "add "IPSET_TABLE" "$1"-"$2; }' /usr/local/share/GeoIP/GeoIPCountryWhois.csv >> ipset.BANNED_RANGES.conf

Это создаст файл конфигурации IPSet с именем ipset.BANNED_RANGES.conf, который затем можно импортировать в IPSet следующим образом:

sudo ipset restore < ipset.BANNED_RANGES.conf

И затем вы можете проверить элементы в этом наборе с помощью этой команды:

sudo ipset -l BANNED_RANGES | more

4. Информируйте IPTables об IPSet.

Теперь последний шаг, который объединяет все это - вставить простое правило в IPTables, например так:

sudo iptables -I INPUT -p tcp -m set --match-set BANNED_RANGES src -j REJECT

Как только это будет сделано, IPTables теперь знает, что любые IP-адреса или диапазоны, добавленные в набор BANNED_RANGES будут просто отклонены через REJECT .

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

sudo iptables -D INPUT -p tcp -m set --match-set BANNED_RANGES src -j REJECT

Но для меня это немного грязно. Более чистый способ обработки такого случая - просто удалить все данные IP из набора BANNED_RANGES например так:

sudo ipset flush BANNED_RANGES

Делая это, вы можете иметь это правило IPTables на месте и не делать ничего другого, кроме как сбросить данные из BANNED_RANGES . Упрощает / упрощает обновление адресов или диапазонов, если вы хотите когда-либо добавлять или удалять IP-адреса или диапазоны из этого набора.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .