Установка ipset в Linux (centOS/Debian/Ubuntu)

Установка ipset в Linux (centOS/Debian/Ubuntu)

Программа ipset дает возможность написать правило, только одно, а не использовать много однотипных правил iptables что позволяет ускорить работу iptables. Я хотел бы в своей теме «Установка ipset в Linux (centOS/Debian/Ubuntu)» рассказать как можно установить ipset в Linux, на примере centOS 6/7 и Debian 8, так же, расскажу и покажу на готовых примерах как пользоваться данной утилитой для блокировки IP или даже всей сети.

Установка ipset в Debian/Ubuntu

И так, я сейчас покажу как производиться установка ipset на deb’s ОС.

Установка на Debian:

Далее, выполняем следующую команду для установки дополнительных модулей:

После чего, активируем модули:

Работоспособность проверялась на Debian, на Ubuntu — не проверялась. Еси будет замечания, напишите мне, я исправлю.

Установка ipset в centOS

Выполняем команду.

Для x64 бит:

Для x32 бит:

Или можно использовать простую команду:

Можно, поискать пакет, выполнив:

И так, если используете Denyhosts то список IP адресов можно найти в файле /etc/hosts.deny, который содержит записи:

Приводим запись к нужному виду (выбираем с файла только IP адреса), так же, сортируем и убираем повторяющиеся записи:

И приступаем к блокировке.

Настройка ipset в Linux (centOS/Debian/Ubuntu)

Создам список (N -new) set с именем dropip, в нем будет сохраняться все заблокированные IP (Список для блокировки по ip):

Добавляю в этот список адреса в созданный список.

Создам следующий список, но в нем буду хранить все заблокированные сети (список для блокировки сетей):

После создания списка, я добавлю несколько сетей в него (A — add):

Смотрим наши списки (L — list):

Получаем:

Можно просматривать конкретные списки, для этого используйте опцию «-L  имя_вашего_списка», например:

Чтобы удалить IP из dropip set используйте (D — delete):

Можно проверить наличия IP в dropip set (T — test):

Чтобы удалить все IP-шники из dropip set используйте следующую команду (F — flush):

Для того чтобы удалить сам dropip set (X) используйте:

Вспомним путь прохождения внешнего пакета в правилах iptables, сверху вниз:

Вот наглядная картинка:

прохождения внешнего пакета в правилах iptables

прохождения внешнего пакета в правилах iptables

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

или

Расшифрую команду подробнее:

  • -m set —  это используемый модуль в ipset.
  • —set — dropip, dropnet  — эта опция необходима для перечисления  списка(ов) которые будут использоваться.
  • src — созданый список выполняет проверку с IP-шником источника
  • dst — созданый список выполняет проверку с IP-шником назначения

Можно просмотреть цепочку INPUT, и убедиться что добавлено правило ipset:

Пример с FORWARD и логированием:

Чтобы удалить правила, используйте:

ЗАМЕЧАНИЕ! Все лог-файлы ipset и iptables нужно искать в логах самого ядра, т.к это «ядерные» модули.

Я пользуюсь syslog-ng, kernel логи перенаправляю в нужный мне файл. Просмотреть заблокированные IP-шники можно следующим образом:

Если не помните где лежат лог файлы, то можно использовать команду:

Для удобства, есть готовый скрипт, он будет получать из файла список блокировок. Для начала, я создам папку где будет лежать скрипт:

Далее, скачаем список IP-шников (так же, при нужде можно скрипт добавив в задание cron):

Так выглядит скрипт:

Есть замечание для UDP, по правилу iptables. Если firewall был настроен должным образом, (политики DROP), и вы открыли только необходимые порты, следует прописать более конкретные правила, для нужного порта, например:

Чтобы заблокировать IP-адреса, основанный на geoIP страна, можно следующим скриптом:

Так же, можно добавить

Для автоматического тайм-аута (auto-timeout) добавляем правило (и не генерирует никакого сообщения, если он уже существует):

Для автоматического разпознавания MAC адресов: (определить диапазон):

Для того, чтобы заблокировать трафик от запрещенных сетей или IP-адресов, IP устанавливает использование в сырой таблице Netfilter. Если вы хотите изменить набор, не нарушая существующие правила Iptables, просто поменять его на новый набор:

Если сильно интересно, то можно посчитать количество IP адресов в списке:

Смотрим наш ipset и какой его размер следующей командой:

После всех изменений, необходимо сохранить правила ipset, для этого существует команда:

Можно добавить ipset в автозагрузку ОС, для этого нужно открыть:

И добавляем команду:

Все готово, используйте. На этом, у меня все. Статья «Установка ipset в Linux (centOS/Debian/Ubuntu)»  завершена.

8 thoughts on “Установка ipset в Linux (centOS/Debian/Ubuntu)

  1. Почему везде приводят пример с ip-адресами? Покажите пример ipset с использованием списка портов.

  2. Отличный мануал!! Спасибо!
    Уточните маленький нюанс — вы даете скрипт, который подгружает весь список IP для бана. А как этот скрипт применить? В автозагрузку его поставить или еще как-то?

    • Можно добавить его в crontab и чтобы он выполнялся ( запускался) по указанному расписанию. Так же, можно запускать его переодически «в ручном режиме». Смотря как будет вам удобно.

  3. Со скриптами разобралась, и нашла ошибку в вашем:
    «Чтобы заблокировать IP-адреса, основанный на geoIP страна, можно следующим скриптом:»
    Ошибка в последней строке (неверный аргумент -set сработало такое правило:

  4. логирование

    не сработает, потому что стоит после дропа

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *