Установка и использование ipset

ipset — инструмент состоящий из модуля ядра, библиотек и утилиты, позволяющий организовать список сетей, IP или MAC адресов и т.д., который очень удобно использовать например с IPTables.

Команда установки в Ubuntu:

sudo apt install ipset

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

sudo yum install ipset

Приведу возможные типы списка:
net (сети, например 192.168.5.0/24)
ip (только ip, например 192.168.5.5)
mac (MAC адреса, например 11:22:33:44:55:66)
port (порты, удобно при создании списков ip,port)
iface (сетевые интерфейсы, удобно при создании списков ip,iface)

Приведу несколько примеров создания списка (где ixnfo — имя списка):

ipset -N ixnfo nethash
ipset create ixnfo nethash
ipset create ixnfo hash:net
ipset create ixnfo hash:ip
ipset create ixnfo hash:ip,port
ipset create ixnfo hash:ip,iface
ipset create ixnfo hash:mac

Пример удаления списка:

ipset destroy ixnfo

Приведу примеры добавления данных в списки:

ipset add ixnfo 192.168.5.5/24
ipset add ixnfo 192.168.5.5
ipset add ixnfo 192.168.5.5,80
ipset add ixnfo 192.168.5.5,udp:1812
ipset add ixnfo 192.168.5.5,eth0
ipset add ixnfo 11:22:33:44:55:66

Пример удаления элемента из списка:

ipset del ixnfo 192.168.5.5

Если добавляются одинаковые элементы, например скриптами, и чтобы не отображались лишние сообщения, что элемент уже добавлен, добавим к команде «-exist», например:

ipset add ixnfo 192.168.5.5 -exist

ipset не даст добавить в список одинаковые элементы, если добавить несколько одинаковых, в списке все равно будет один.

Пример просмотра списков (где ixnfo — имя списка):

ipset -L
ipset --list
ipset -L ixnfo

Подсчет количество строк в списке, вторая команда с grep считает только IP адреса, что удобно, так как не считаются 7 строк с техническим текстом (где ixnfo — имя списка):

ipset -L | wc -l
ipset -L ixnfo | /bin/grep '\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}' | /usr/bin/wc -l

Переименовать список можно так:

ipset –e OLDNAME NEWNAME

Теперь когда у нас создан список, вручную или его заполняет скрипт, используя ipset и iptables например, очень удобно запретить доступ к серверу всем адресам которые есть в списке:

iptables -I INPUT -m set --match-set ixnfo src -j DROP

Или так (разрешить доступ всем, кроме адресов в списке):

iptables -I INPUT -m set ! --match-set ixnfo src -j ACCEPT

Смотрите также мои статьи:
Скрипт добавления IP адресов из файла в ipset
Настройка IPTables

Оставьте комментарий

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