Вопрос: Есть ли другой способ получить IPTables для фильтрации IP-адресов на основе геолокации в Ubuntu 12.0.4.5 (LTS)


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

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

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

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


0
2017-11-07 17:30


Источник




Ответы:


Оказывается, мне не нужно полностью изобретать колесо, чтобы получить некоторую поддержку GeoIP, смешанную с IPTables. Просто используя IPSet с копией базы данных GeoIP Country MaxMind в формате 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

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

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, что архив:

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-адреса или диапазоны из этого набора.


1
2017-11-07 18:03



Вау. этот ответ действительно заслуживает большего внимания. - Gábor Dani