ipset

Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 866
Стаж: 5 лет 9 месяцев
Откуда: Вологодская область
Поблагодарили: 41 раз
Контактная информация:

ipset

Сообщение Артём Мамзиков »

ipset - инструмент для работы с большим количеством IP-адресов и сетевых портов в брандмауэре/межсетевого экране netfilter/iptables. По сути, это список в специальном формате, который передается последнему при настройке.
Представляет собой набор инструментов, позволяющий работать с большими списками (sets) IP-адресов и/или портов. Поддерживается возможность динамического обновления списков при прохождении пакетов через правила netfilter.
В версии ipset 4 и более ранних поддерживалась работа только с семейством адресов IPv4, однако начиная с пятой версии реализована также и поддержка IPv6.
в современных ядрах поддержка ipset присутствует штатно с 2.6.39, для более старых ядер необходимо делать сборку вручную.
ipset состоит из следующих элементов:
Показать
* Модуль ядра ip_set, обеспечивающий базовый инструментарий работы со списками записей, который используется модулями расширений.
* Модули расширений, определяющие конкретные структуры записей и методы работы с ними, например, ip_set_hash_ip (тип данных hash: ip), ip_set_bitmap_port (тип данных bitmap: port) и т. д.
* Userspace-утилита ipset, позволяющая выполнять различные операции со списками и записями в них:
------Создание, удаление, переименование, вывод, очистка списков.
------Добавление и удаление записей из списков, проверка наличия записи в списке.
------Вывод справочной информации по работе со списками различного типа.
* Модули расширений для утилиты ipset, соответствующие модулям расширений в ядре, например, ipset_hash_ip (тип данных hash: ip), ipset_bitmap_port (тип данных bitmap: port) и т. д. Каждый такой модуль отвечает за обеспечение интерфейса между «своим» модулем ядра и конечным пользователем, в частности, проверку корректности вводимых и форматирование выводимых данных, а также вывод справочной информации по допустимым командам и параметрам. В ранних версиях ipset (до 4 включительно) такие модули выделялись в виде подгружаемых библиотек, однако в современных версиях ipset они статически включаются в основной бинарник, поэтому разделение существует лишь в исходном коде.
* Модуль netfilter xt_set (критерий set и действие SET), а также соответствующие модули (библиотеки) iptables (libxt_set и libxt_SET). Критерий set позволяет проверять различные параметры пакета (IP/MAC-адреса, TCP/UDP-порты источника и/или получателя) на предмет нахождения или отсутствия в списке. Действие SET позволяет добавлять или удалять записи из списка на основании указанных параметров пакета.
Официальная документация
Викиучебник ipset
Аналогичная документация в источника ОС
Debian ipset(8)
archlinux ipset(8)

Пример утилит, которые могут использоваться с ipset — iptables (Ubuntu / Debian), firewalld (CentOS / Red Hat).
Пакеты в Debian
Показать
ipset -Для наборов IP-адресов ядра
libipset-dev - Файлы разработки для наборов IP-адресов
ipset-persistent - Загрузчик во время загрузки правил netfilter, плагин ipset
libipset13 -для наборов IP-адресов

libcorkipset-dev -C для хранения наборов/карт IP-адресов (файлы разработки)
libcorkipset-doc -C для хранения наборов/карт IP-адресов (файлы документации)
libcorkipset-utils -C для хранения наборов/карт IP-адресов (служебные файлы)
libcorkipset1 -C для хранения наборов/карт IP-адресов
Пример команд для создания списка и внесения в него 2-х сетей:

Код: Выделить всё

ipset -N newlist nethash

Код: Выделить всё

ipset -A newlist 192.168.1.0/24

Код: Выделить всё

ipset -A newlist 192.168.2.0/24
Пример для применения созданного списка в iptables:

Код: Выделить всё

iptables -I INPUT -m set --match-set newlist src -j DROP
* в данном случае будут блокироваться все входящие запросы от сетей, перечисленных в списке newlist.

Блокировка списка сетей
Создаем новый «набор» сетевых адресов. создаст новый «хэш» набор сетевых адресов с названием «myset».

Код: Выделить всё

ipset create myset hash:net
или

Код: Выделить всё

ipset -N myset nethash
Добавьте в набор любые IP-адреса, которые вы хотите заблокировать.

Код: Выделить всё

ipset add myset 14.144.0.0/12

Код: Выделить всё

ipset add myset 27.8.0.0/13

Код: Выделить всё

ipset add myset 58.16.0.0/15

Код: Выделить всё

ipset add myset 1.1.1.0/24
Команда добавляет правило в цепочку INPUT, которое отбрасывает любые входящие пакеты с источником из множества IP-адресов, определенного как «myset».

Код: Выделить всё

iptables -I INPUT -m set --match-set myset src -j DROP
Блокировка списка IP-адресов
Создания нового «набора» IP-адресов. Команда создаст новый «хеш» набор IP-адресов с именем «myset-ip».

Код: Выделить всё

ipset create myset-ip hash:ip
или

Код: Выделить всё

ipset -N myset-ip iphash
Добавляем IP-адреса, которые нужно заблокировать.

Код: Выделить всё

ipset add myset-ip 192.153.1.1

Код: Выделить всё

ipset add myset-ip 192.210.2.2
iptables блокировка данного списка

Код: Выделить всё

iptables -I INPUT -m set --match-set myset-ip src -j DROP
Постоянный ipset
Созданный ipset хранится в памяти и исчезнет после перезагрузки.
Чтобы сделать ipset постоянным, необходимо сделать следующее
Сохранить ipset в /etc/ipset.conf

Код: Выделить всё

ipset save > /etc/ipset.conf
Добавить службу в автозагрузку ipset.service

просмотра наборов:

Код: Выделить всё

ipset list
или

Код: Выделить всё

ipset -L
Для удаления набора:

Код: Выделить всё

ipset destroy myset
или

Код: Выделить всё

ipset -X myset
Для удаления всех наборов:

Код: Выделить всё

ipset destroy
Инструмент iprangeAUR может помочь уменьшить количество записей в ipset.conf путём объединения соседних диапазонов или удаления пересекающихся диапазонов. Это может повысить производительность маршрутизатора/брандмауэра, если размер таблицы огромен. Этот инструмент также может преобразовать список имён хостов в IP


Тип содержимого: текст/html; кодировка=UTF-8
IPSET
Раздел: (8)
Обновлено: 25 июня 2015 г.


НАЗВАНИЕ
ipset --- инструмент администрирования наборов IP-адресов


КРАТКОЕ ОПИСАНИЕ
ipset [ ПАРАМЕТРЫ ] КОМАНДА [ COMMAND-OPTIONS ]
ipset [ OPTIONS ] COMMAND [ COMMAND-OPTIONS ]


КОМАНДЫ := { создать | добавить | удалить | протестировать | уничтожить | перечислить | сохранить | восстановить | очистить | переименовать | поменять местами | справка | версия | - }
COMMANDS := { create | add | del | test | destroy | list | save | restore | flush | rename | swap | help | version | - }


ПАРАМЕТРЫ := { -существующий | -вывод { обычный | сохранить | xml } | -тихий | -разрешить(резвол днс) | -сортировка | -имя | -краткий | -имя файла }
OPTIONS := { -exist | -output { plain | save | xml } | json } | -quiet | -resolve | -sorted | -name | -terse | -file filename }

ipset создать ИМЯ-НАБОРА ИМЯ-ТИПА [ СОЗДАТЬ-ПАРАМЕТРЫ ]
ipset create SETNAME TYPENAME [ CREATE-OPTIONS ]

ipset добавить ИМЯ-НАБОРА ДОБАВИТЬ ЗАПИСЬ [ ДОБАВИТЬ ПАРАМЕТРЫ ]
ipset add SETNAME ADD-ENTRY [ ADD-OPTIONS ]

ipset удалить ИМЯ-НАБОРА УДАЛИТЬ-ЗАПИСЬ [ УДАЛИТЬ-ПАРАМЕТРЫ ]
ipset del SETNAME DEL-ENTRY [ DEL-OPTIONS ]

ipset тест ИМЯ-НАБОРА ТЕСТ [ ПАРАМЕТРЫ ТЕСТИРОВАНИЯ ]
ipset test SETNAME TEST-ENTRY [ TEST-OPTIONS ]

ipset уничтожить [ ИМЯ-НАБОРА ]
ipset destroy [ SETNAME ]

ipset список [ ИМЯ-НАБОРА ]
ipset list [ SETNAME ]

ipset сохранить [ ИМЯ-НАБОРА ]
ipset save [ SETNAME ]

ipset восстановление
ipset restore

ipset сброс [ ИМЯ-НАБОРА ]
ipset flush [ SETNAME ]

ipset переименовать ИМЯ-НАБОРА-С ИМЯ-НАБОРА-НА
ipset rename SETNAME-FROM SETNAME-TO

ipset поменять ИМЯ-НАБОРА-С ИМЯ-НАБОРА-НА
ipset swap SETNAME-FROM SETNAME-TO

ipset справка [ тип ИМЯ ]
ipset help [ TYPENAME ]

ipset Версия
ipset version

ipset -


ОПИСАНИЕ
ipset используется для настройки, обслуживания и проверки так называемых наборов IP-адресов в ядре Linux. В зависимости от типа набора, набор IP-адресов может содержать IP-адреса (v4/v6), номера портов (TCP/UDP), пары IP-адресов и MAC-адресов, пары IP-адресов и номеров портов и т.д. Смотрите определения типов наборов ниже.

Совпадения Iptables и цели, ссылающиеся на наборы, создают ссылки, которые защищают данные наборы в ядре. Набор не может быть уничтожен, пока есть хоть одна ссылка, указывающая на него.

ОПЦИИ
Параметры, которые распознаются ipset, можно разделить на несколько различных групп.

КОМАНДЫ
Эти параметры определяют желаемое действие для выполнения. В командной строке можно указать только одно из них, если ниже не указано иное. Для всех длинных версий названий команд необходимо использовать только достаточное количество букв, чтобы ipset можно было отличить от всех других команд. Анализатор ipset следует приведенному здесь порядку при поиске кратчайшего совпадения в длинных именах команд.

n, create SETNAME TYPENAME [ CREATE-OPTIONS ]
Создайте набор, идентифицируемый с помощью setname и указанного типа. Для этого типа могут потребоваться параметры, зависящие от типа. Если указан параметр -exist, ipset игнорирует ошибку, возникающую в противном случае, когда один и тот же набор (параметры setname и create идентичны) уже существует.

add SETNAME ADD-ENTRY [ ADD-OPTIONS ]
Добавьте данную запись в набор. Если указан параметр -exist, ipset игнорирует, если запись уже добавлена в набор.

del SETNAME DEL-ENTRY [ DEL-OPTIONS ]
Удалить запись из набора. Если задан параметр -exist, а записи нет в наборе (возможно, срок действия уже истек), то команда игнорируется.

test SETNAME TEST-ENTRY [ TEST-OPTIONS ]
Проверьте, есть ли запись в наборе или нет. Номер статуса выхода равен нулю, если проверяемая запись есть в наборе, и отличен от нуля, если она отсутствует в наборе.

x, destroy [ SETNAME ]
Уничтожьте указанный набор или все наборы, если ни один из них не указан.
Если на набор есть ссылки, то ничего не делается и ни один набор не уничтожается.

list [ SETNAME ] [ OPTIONS ]
Укажите данные заголовка и записи для указанного набора или для всех наборов, если ни один из них не указан.
Параметр -resolve можно использовать для принудительного поиска по имени (который может быть медленным).
Если выбрана опция -sorted, записи отображаются в списке/сохраняются отсортированными (что может быть медленным процессом).
Опция -output может использоваться для управления форматом списка: обычный, сохранить/plain, save или xml. (По умолчанию используется обычный plain).
Если указано имя -name параметра, то будут перечислены только имена существующих наборов.
Если указан параметр "краткий" -terse, то будут перечислены только имена наборов и заголовки.
Выходные данные выводятся в стандартный вывод, параметр -file можно использовать для указания имени файла вместо стандартного вывода.

save [ SETNAME ]
Сохраните заданный набор или все наборы, если ни один из них не задан в стандартном режиме вывода, в формате, который может быть прочитан при восстановлении restore.
Параметр -file можно использовать для указания имени файла вместо стандартного вывода.

restore
Восстановите сохраненный сеанс, сгенерированный с помощью save. Сохраненный сеанс может быть загружен из stdin или можно использовать option -file для указания имени файла вместо stdin.
Обратите внимание, что существующие наборы и элементы не удаляются с помощью restore, если это не указано в файле восстановления. В режиме восстановления разрешены все команды, за исключением списка, справки, версии,/list, help, version интерактивного режима и самого восстановления restore.

flush [ SETNAME ]
Очистите все записи из указанного набора или очистите все наборы, если ни один из них не указан.

e, переименуйте SETNAME-ИЗ SETNAME-В
e, rename SETNAME-FROM SETNAME-TO
Переименуйте набор. Набор, указанный с помощью SETNAME-TO, не должен существовать.

w, поменять SETNAME-С SETNAME-НА
w, swap SETNAME-FROM SETNAME-TO
Поменяйте местами содержимое двух наборов, или, другими словами, поменяйте названия двух наборов. Указанные наборы должны существовать, и можно менять только совместимые типы наборов.

help [ TYPENAME ]
Отобразить справку и установите справку для конкретного типа, если указано имя типа.

version
Отобразить версию программы

-
Если в качестве команды указано тире, то ipset переходит в простой интерактивный режим, и команды считываются со стандартного ввода. Интерактивный режим можно завершить, введя псевдокоманду quit.


ДРУГИЕ ОПЦИИ
Можно указать следующие дополнительные параметры. Длинные названия параметров сокращать нельзя.

-!, -exist
Игнорируйте ошибки, когда требуется создать точно такой же набор, или когда добавляется уже добавленная запись, или когда удаляется отсутствующая запись.
-o, -output { plain | save | xml | json }
Выберите формат вывода для команды список list.
-q, -quiet
Подавите любой вывод в stdout, и stderr. ipset все равно завершит работу с ошибкой, если не сможет продолжить.
-r, -resolve
При выводе списков наборов необходимо использовать поиск по именам. Программа попытается отобразить записи IP, преобразованные в имена хостов, что требует медленного slow поиска по DNS.
-s, -sorted
Отсортированные выходные данные. При перечислении или сохранении наборов записи отображаются в отсортированном виде.
-n, -name
Перечислите только имена существующих наборов, т.е. исключите перечисление заголовков и членов набора.
-t, -terse
Перечислите имена наборов и заголовки, т.е. исключите перечисление членов набора.
-f, -file filename
Укажите имя файла для печати вместо стандартного вывода (команды списка list или save сохранения) или для чтения из него вместо стандартного ввода (команда восстановления restore).


ВВЕДЕНИЕ

Тип набора включает в себя метод хранения, с помощью которого хранятся данные, и типы данных, которые хранятся в наборе. Таким образом, параметр TYPENAME команды create соответствует синтаксису

ИМЯ ТИПА := метод:тип данных[,тип данных[,тип данных]]
TYPENAME := method:datatype[,datatype[,datatype]]

где текущим списком методов являются bitmap, hash и list, а возможными типами данных являются ip, net, mac, port и iface. Размерность набора равна количеству типов данных в его названии.

При добавлении, удалении или тестировании записей в наборе для входных параметров команд должен использоваться один и тот же синтаксис данных, разделенный запятыми, т.е.
ipset add foo ipaddr,portnum,ipaddr

Если вместо IP-адресов или номеров служб используются имена хостов или служб с тире в названии, то имя хоста или службы должно быть заключено в квадратные скобки. Пример:
ipset добавляет foo [тест-имя_хоста],[ftp-данные]
ipset add foo [test-hostname],[ftp-data]

В случае имен хостов распознаватель DNS вызывается внутри ipset, но если он возвращает несколько IP-адресов, используется только первый из них.

Типы bitmap и list используют хранилище фиксированного размера.
Типы hash используют хэш для хранения элементов. Во избежание коллизий в хэше используется ограниченное количество цепочек, и если они исчерпаны, то при добавлении записей командой ipset выполняется удвоение размера хэша.
Когда записи добавляются с помощью установленного SET целевого параметра iptables/ip6tables, размер хэша фиксируется, и набор не будет дублироваться, даже если новая запись не может быть добавлена в набор.


ОБЩИЕ ПАРАМЕТРЫ СОЗДАНИЯ И ДОБАВЛЕНИЯ


Таймаут/timeout
Все типы наборов поддерживают необязательный параметр timeout при создании набора и добавлении записей.
Значение параметра timeout для команды create означает значение тайм-аута по умолчанию (в секундах) для новых записей.
Если набор создан с поддержкой тайм-аута, то тот же параметр тайм-аута можно использовать для указания значений тайм-аута, отличных от значений по умолчанию, при добавлении записей.
Нулевое значение тайм-аута означает, что запись добавляется в набор постоянно.
Значение тайм-аута для уже добавленных элементов можно изменить, повторно добавив элемент с помощью параметра -exist.
Максимально возможное значение тайм-аута равно 2147483 (в секундах).
Пример:
ipset создает тестовый хэш: тайм-аут ip-адреса 300
ipset create test hash:ip timeout 300

ipset добавляет тест 192.168.0.1 тайм-аут 60
ipset add test 192.168.0.1 timeout 60

ipset -существует, добавляет тест 192.168.0.1 тайм-аут 600
ipset -exist add test 192.168.0.1 timeout 600

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


счетчики, пакеты, байты/counters, packets, bytes
Все типы наборов поддерживают опцию дополнительных счетчиков/counters при создании набора.
Если опция указана, то набор создается с поддержкой счетчиков/counters пакетов/packets и байтов/bytes на элемент.
Счетчики пакетов/packets и байтов/bytes обнуляются при (повторном) добавлении элементов в набор, если только значения счетчика пакетов/packets и байтов/bytes явно не указаны в параметрах "Пакеты/packets и байты/bytes".

Пример, когда элемент добавляется в набор с ненулевыми значениями счетчика:
ipset создает хэш foo:ip-счетчики
ipset create foo hash:ip counters

ipset добавляют пакеты foo 192.168.1.1 размером 42 байта 1024
ipset add foo 192.168.1.1 packets 42 bytes 1024


комментарий/comment
Все типы наборов поддерживают необязательное расширение для комментариев/comment. Включение этого расширения для ipset позволяет добавлять к записи ipset произвольную строку.
Эта строка полностью игнорируется как ядром, так и самим ipset и предназначена исключительно для удобства документирования причины существования записи.
Комментарии не должны содержать кавычек, а обычный escape-символ (\) не имеет значения.
Например, следующая команда shell является недопустимой:
ipset добавляет комментарий foo 1.1.1.1 "этот комментарий является \"плохим\"".
ipset add foo 1.1.1.1 comment "this comment is \"bad\""

В приведенном выше примере ваша оболочка, конечно же, не будет использовать кавычки, и ipset увидит кавычки в аргументе для комментария, что приведет к ошибке синтаксического анализа. Если вы пишете свою собственную систему, вам следует избегать создания комментариев, содержащих кавычки, если вы не хотите нарушать "ipset save/сохранение" и "ipset restore/восстановление", тем не менее, ядро не будет препятствовать вам в этом.
Следующее вполне приемлемо:
ipset создает хэш foo:ip-комментарий
ipset create foo hash:ip comment

ipset добавляет комментарий foo 192.168.1.1/24 "разрешить доступ к общему ресурсу SMB на \\\файловом сервере\\"
ipset add foo 192.168.1.1/24 comment "allow access to SMB share on \\\\fileserv\\"

вышеприведенное будет выглядеть следующим образом: "разрешить доступ к общему ресурсу SMB на \\файловом сервере\".
the above would appear as: "allow access to SMB share on \\fileserv\"


skbinfo, skbmark, skbprio, skbqueue
информация skb, отметка skb, приоритет skb, очередь skb

Все типы наборов поддерживают дополнительное расширение skbinfo. Это расширение позволяет сохранять метаинформацию (метку брандмауэра, класс tc и очередь оборудования) для каждой записи и сопоставлять ее с пакетами, используя параметр SET netfilter target с параметром --map-set. формат параметра skbmark: MARK или MARK/MASK, где MARK и MASK - это 32-битные шестнадцатеричные числа с префиксом 0x.
Если указан только mark, используется маска 0xffffffff. параметр skbprio имеет формат класса tc: MAJOR:MINOR, где major/старшие и minor/второстепенные числа являются шестнадцатеричными без префикса 0x.
Параметр skbqueue - это просто десятичное число.

ipset создает хэш foo:ip skbinfo
ipset create foo hash:ip skbinfo

установить ip-адрес, добавить foo skbmark 0x1111/0xff00ffff skbprio 1:10 skbqueue 10
ipset add foo skbmark 0x1111/0xff00ffff skbprio 1:10 skbqueue 10
ipset add foo 192.168.0.1 skbmark 0x1111/0xff00ffff skbprio 1:10 skbqueue 10


hashsize/размер хэша
Этот параметр действителен для команды create для всех наборов типов хэша/hash. Он определяет начальный размер хэша/hash для набора, значение по умолчанию равно 1024. Размер хэша должен быть в степени двойки, ядро автоматически округляет значения, отличные от двух, до первого правильного значения.
Пример:
ipset создает тестовый хэш: размер ip-хэша 1536
ipset create test hash:ip hashsize 1536


maxelem/макселем
Этот параметр действителен для команды create для всех наборов хэш-типов/hash. Он определяет максимальное количество элементов, которое может храниться в наборе, по умолчанию 65536.
Пример:
ipset создает тестовый хэш: ip maxelem 2048.
ipset create test hash:ip maxelem 2048.

bucket size
размер корзины
Этот параметр действителен для команды create для всех наборов типов хэша. Он определяет максимальное количество элементов, которые могут храниться в корзине хэша. Возможные значения - любое четное число в диапазоне от 2 до 14, по умолчанию используется значение 14. Установка меньшего значения вынуждает ipset создавать хэши большего размера, что потребляет больше памяти, но обеспечивает большую скорость сопоставления в наборе.
Пример:
ipset создать тестовый хэш:размер ip-корзины 2
ipset create test hash:ip bucketsize 2

семейство/family { inet | inet6 }
Этот параметр действителен для команды create для всех наборов типов хэша/hash, за исключением hash:mac. Он определяет семейство протоколов IP-адресов, которые будут сохранены в наборе. По умолчанию используется inet, то есть IPv4.
Для семейства inet можно добавить или удалить несколько записей, указав диапазон или сеть IPv4-адресов в части IP-адреса записи:
ipaddr := { ip | fromaddr-toaddr | ip/cidr }
netaddr := { fromaddr-toaddr | ip/cidr }

Пример:
ipset создает тестовый хэш:семейство ip-адресов inet6
ipset create test hash:ip family inet6


nomatch не совпадающие/не соответствующие
Типы наборов хэшей/hash, которые могут хранить данные сетевого/net типа (например, хэш:*net*), поддерживают необязательную опцию nomatch при добавлении записей. При сопоставлении элементов в наборе записи, помеченные как не совпадающие/не соответствующие/nomatch, пропускаются, как если бы они не были добавлены в набор, что позволяет создавать наборы с исключениями. Смотрите пример в разделе hash type hash:net ниже.
При проверке элементов с помощью ipset учитываются флаги несоответствия/nomatch. Если требуется проверить наличие элемента, помеченного как nomatch, в наборе, то для этого флага должно быть указано значение.


forceadd/принудительное добавление
Все типы наборов хэшей/hash поддерживают необязательный параметр forceadd при создании набора. Когда наборы, созданные с помощью этого параметра, становятся полными, следующее добавление к набору может завершиться успешно и удалить случайную запись из набора.
ipset создает хэш foo:ip forceadd
ipset create foo hash:ip forceadd

wildcard /подстановочный знак
Этот флаг действителен при добавлении элементов в хэш:net,iface. Если флаг установлен, то при сравнении с этим элементом используется сопоставление префикса. Например, элемент, содержащий имя интерфейса "eth", будет соответствовать любому имени с этим префиксом.


УСТАНОВЛЕННЫЕ ТИПЫ
ipset поддерживает следующие типы данных (в скобках приведены названия согласно терминологии устаревшей версии ipset 4):

bitmap:ip (ipmap) — полный перечень IP-адресов.
Тип набора bitmap:ip использует диапазон памяти для хранения либо хост-адресов IPv4 (по умолчанию), либо сетевых адресов IPv4. Набор типа bitmap:ip может содержать до 65536 записей.

ОПЦИИ-СОЗДАНИЯ := диапазон от ip-адреса до ip-адреса|cidr [ cidr сетевой маски ] [ значение тайм-аута ] [ счетчики ] [ комментарий ] [ skbinfo ]
CREATE-OPTIONS := range fromip-toip|ip/cidr [ netmask cidr ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ДОБАВИТЬ ЗАПИСЬ := { ip | fromip-toip | ip/cidr }
ADD-ENTRY := { ip | fromip-toip | ip/cidr }

ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ := [ значение тайм-аута ] [ значение пакетов ] [ значение в байтах ] [ строка комментария ] [ значение skbmark ] [ значение skbprio ] [ значение skbqueue ]
ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

УДАЛИТЬ-ЗАПИСЬ := { ip | fromip-toip | ip/cidr }
DEL-ENTRY := { ip | fromip-toip | ip/cidr }

ТЕСТОВАЯ ЗАПИСЬ := ip
TEST-ENTRY := ip

Обязательные параметры создания/create:
диапазон от ip-до ip|ip/cidr
range fromip-toip|ip/cidr
Создайте набор из указанного включающего диапазона адресов, выраженного в диапазоне адресов IPv4 или сети. Размер диапазона (в записях) не может превышать максимального значения в 65536 элементов.

Необязательные параметры создания/create:
маски-сети cidr
netmask cidr
Если указан необязательный параметр netmask, в наборе будут сохранены сетевые адреса вместо IP-адресов хостов.
Значение префикса cidr должно быть в диапазоне от 1 до 32. IP-адрес будет указан в наборе, если в наборе можно найти сетевой адрес, полученный в результате маскировки адреса указанной маской сети.

Тип bitmap:ip поддерживает добавление или удаление нескольких записей одной командой.
Примеры:

ipset создает битовую карту foo: диапазон ip-адресов 192.168.0.0/16
ipset create foo bitmap:ip range 192.168.0.0/16

ipset добавляет foo 192.168.1/24
ipset add foo 192.168.1/24

ipset тестирует foo 192.168.1.1
ipset test foo 192.168.1.1


bitmap:ip,mac (macipmap) — полный перечень IP-адресов, причем вместе с каждым IP-адресом может быть сохранен MAC-адрес.
Набор данных типа bitmap:ip, mac использует диапазон памяти для хранения пар IPv4 и MAC-адресов. Набор данных типа bitmap:ip,mac может содержать до 65536 записей.

СОЗДАТЬ-ПАРАМЕТРЫ := диапазон от ip-до ip-адреса|cidr [ значение тайм-аута ] [ счетчики ] [ комментарий ] [ skbinfo ]
CREATE-OPTIONS := range fromip-toip|ip/cidr [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ДОБАВИТЬ-ЗАПИСЬ := ip[,macaddr]
ADD-ENTRY := ip[,macaddr]

ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ := [ значение тайм-аута ] [ значение пакетов ] [ значение в байтах ] [ строка комментария ] [ значение skbmark ] [ значение skbprio ] [ значение skbqueue ]
ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

УДАЛИТЬ-ЗАПИСЬ := ip[,macaddr]
DEL-ENTRY := ip[,macaddr]

ТЕСТОВЫЙ ВВОД := ip[,macaddr]
TEST-ENTRY := ip[,macaddr]

Обязательные параметры для использования при создании типа набора bitmap:ip,mac, тип установки:

диапазон от ip-до ip-адреса|cidr
range fromip-toip|ip/cidr

Создайте набор из указанного включающего диапазона адресов, выраженного в диапазоне адресов IPv4 или сети. Размер диапазона не может превышать максимального значения в 65536 записей.

Тип bitmap:ip,mac является исключительным в том смысле, что часть MAC может быть опущена при добавлении/удалении/тестировании (adding/deleting/testing) записей в наборе.
Если мы добавим запись без указанного MAC-адреса, то при первом сопоставлении записи ядром, оно автоматически заполнит недостающий MAC-адрес MAC-адресом из пакета. MAC-адрес источника используется, если запись совпадает с параметром src для параметра set match, а MAC-адрес назначения используется, если доступен, и запись совпадает с параметром dst. Если для ввода было указано значение тайм-аута, таймер сработает после завершения сопоставления IP- и MAC-адресов.

Для наборов типа bitmap:ip,mac требуются два параметра src/dst в модулях ядра set match и SET target netfilter. Что касается совпадений по MAC-адресам назначения, смотрите КОММЕНТАРИИ ниже.

Примеры:

ipset создает foo bitmap:ip,mac диапазон 192.168.0.0/16
ipset create foo bitmap:ip,mac range 192.168.0.0/16

ipset добавляет foo 192.168.1.1,12:34:56:78:9A:BC
ipset add foo 192.168.1.1,12:34:56:78:9A:BC

ipset проверяет foo 192.168.1.1
ipset test foo 192.168.1.1


bitmap:port /bitmap:порт (portmap) — полный перечень портов.
Тип набора bitmap:port использует диапазон памяти для хранения номеров портов, и такой набор может содержать до 65536 портов.

СОЗДАТЬ-ПАРАМЕТРЫ := диапазон от порта к порту [ значение тайм-аута ] [ счетчики ] [ комментарий ] [ skbinfo ]
CREATE-OPTIONS := range fromport-toport [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ДОБАВИТЬ ЗАПИСЬ := { [proto:]порт | [proto:]из порта в порт }
ADD-ENTRY := { [proto:]port | [proto:]fromport-toport }

ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ := [ значение тайм-аута ] [ значение пакетов ] [ значение в байтах ] [ строка комментария ] [ значение skbmark ] [ значение skbprio ] [ значение skbqueue ]
ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

УДАЛИТЬ-ВВОД := { [proto:]порт | [proto:]из порта в порт }
DEL-ENTRY := { [proto:]port | [proto:]fromport-toport }

ТЕСТОВЫЙ ВВОД := [proto:]порт
TEST-ENTRY := [proto:]port

Обязательные параметры для использования при создании bitmap:port установки:
диапазон [proto:] от порта к порту
range [proto:]fromport-toport
Создайте набор из указанного включающего диапазона портов.

Модули ядра set match и SET target netfilter интерпретируют сохраненные номера как номера портов TCP или UDP.

proto необходимо указывать только в том случае, если используется имя службы, и это имя не существует в качестве службы TCP. Протокол никогда не сохраняется в наборе, только номер порта службы.
Примеры:
ipset создать foo bitmap:port диапазон портов 0-1024
ipset create foo bitmap:port range 0-1024

ipset добавить foo 80
ipset add foo 80

ipset тестировать foo 80
ipset test foo 80

ipset удалить foo udp:[macon-udp]-[tn-tl-w2]
ipset del foo udp:[macon-udp]-[tn-tl-w2]


hash:ip /хэш:ip (iphash) — выборочный перечень IP-адресов (либо IP-подсетей с одинаковой маской).
Тип набора hash:ip использует хэш для хранения IP-адресов хостов (по умолчанию) или сетевых адресов. IP-адрес с нулевым значением не может быть сохранен в наборе типа hash:ip.

СОЗДАНИЕ-ОПЦИИ := [ семейство { inet | inet6 } ] | [ значение хэш-размера ] [ значение максимального значения ] [ сетевая маска cidr ] [ значение тайм-аута ] [ счетчики ] [ комментарий ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize value ] [ maxelem value ] [ netmask cidr ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ netmask cidr ] [ bitmask mask ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ДОБАВИТЬ-ЗАПИСЬ := ipaddr
ADD-ENTRY := ipaddr

ДОБАВИТЬ-ПАРАМЕТРЫ := [ значение тайм-аута ] [ значение пакетов ] [ значение в байтах ] [ строка комментария ] [ значение skbmark ] [ значение skbprio ] [ значение skbqueue ]
ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

УДАЛИТЬ-ЗАПИСЬ := ipaddr
DEL-ENTRY := ipaddr

ТЕСТИРОВАТЬ-ЗАПИСЬ := ipaddr
TEST-ENTRY := ipaddr

Необязательные параметры создания/create:
netmask cidr /маска-сети
Если указан необязательный параметр netmask, в наборе будут сохранены сетевые адреса вместо IP-адресов хостов. Значение префикса cidr должно быть в диапазоне от 1 до 32 для IPv4 и от 1 до 128 для IPv6. IP-адрес будет указан в наборе, если в наборе можно найти сетевой адрес, полученный в результате маскировки адреса с помощью маски сети.
Примеры:
ipset создать хэш foo:ip netmask 30
ipset create foo hash:ip netmask 30

ipset добавить foo 192.168.1.0/24
ipset add foo 192.168.1.0/24

ipset тест foo 192.168.1.2
ipset test foo 192.168.1.2

bitmask mask /маска битовой маски
Это работает аналогично маске сети, но она будет принимать любой действительный адрес IPv4/v6. Это не обязательно должна быть действительная маска сети.


hash:mac /хэш:mac
Тип набора hash:mac использует хэш для хранения MAC-адресов. MAC-адреса с нулевым значением не могут быть сохранены в наборе типа hash:mac. Совпадения по MAC-адресам назначения приведены в КОММЕНТАРИЯХ ниже.

ПАРАМЕТРЫ-СОЗДАНИЯ := [ значение хэш-размера ] [ значение максимального значения ] [ значение таймаута ] [ счетчики ] [ комментарий ] [ skbinfo ]
CREATE-OPTIONS := [ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
CREATE-OPTIONS := [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ДОБАВИТЬ-ЗАПИСЬ := macaddr
ADD-ENTRY := macaddr

ДОБАВИТЬ-ПАРАМЕТРЫ := [ значение тайм-аута ] [ значение пакетов ] [ значение в байтах ] [ строка комментария ] [ значение skbmark ] [ значение skbprio ] [ значение skbqueue ]
ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

УДАЛИТЬ-ЗАПИСЬ := macaddr
DEL-ENTRY := macaddr

ТЕСТ-ЗАПИСИ := macaddr
TEST-ENTRY := macaddr

Примеры:
ipset создает хэш foo:mac
ipset create foo hash:mac

ipset добавить foo 01:02:03:04:05:06
ipset add foo 01:02:03:04:05:06

ipset тест foo 01:02:03:04:05:06
ipset test foo 01:02:03:04:05:06


hash:ip,mac
В наборе типа hash:ip, mac используется хэш для хранения пар IP-адресов и MAC-адресов с нулевым значением. MAC-адреса с нулевым значением не могут быть сохранены в наборе типа hash:ip,mac. Совпадения по MAC-адресам назначения приведены в КОММЕНТАРИЯХ ниже.

СОЗДАТЬ-ПАРАМЕТРЫ := [ семейство { inet | inet6 } ] | [ значение хэш-размера ] [ максимальное значение ] [ значение тайм-аута ] [ счетчики ] [ комментарий ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ДОБАВИТЬ-ЗАПИСЬ := ipaddr,macaddr
ADD-ENTRY := ipaddr,macaddr

ДОБАВИТЬ-ПАРАМЕТРЫ := [ значение тайм-аута ] [ значение пакетов ] [ значение в байтах ] [ строка комментария ] [ значение skbmark ] [ значение skbprio ] [ значение skbqueue ]
ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

УДАЛИТЬ-ЗАПИСЬ := ipaddr,macaddr
DEL-ENTRY := ipaddr,macaddr

ТЕСТ-ЗАПИСИ := ipaddr,macaddr
TEST-ENTRY := ipaddr,macaddr

Примеры:

ipset создать хэш foo:ip,mac
ipset create foo hash:ip,mac

ipset добавить foo 1.1.1.1,01:02:03:04:05:06
ipset add foo 1.1.1.1,01:02:03:04:05:06

ipset тест foo 1.1.1.1,01:02:03:04:05:06
ipset test foo 1.1.1.1,01:02:03:04:05:06


hash:net (nethash) — выборочный перечень IP-подсетей (блоков IP-адресов). В отличие от hash: ip, в одном списке могут присутствовать подсети с различными масками.
Тип набора hash:net использует хэш для хранения сетевых IP-адресов разного размера. Сетевой адрес с нулевым размером префикса не может быть сохранен в наборах этого типа.

СОЗДАНИЕ-ПАРАМЕТРЫ := [ семейство { inet | inet6 } ] | [ значение хэш-размера ] [ максимальное значение ] [ значение тайм-аута ] [ счетчики ] [ комментарий ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ДОБАВИТЬ-ЗАПИСЬ := netaddr
ADD-ENTRY := netaddr

ДОБОВИТЬ-ПАРАМЕТРЫ := [ значение тайм-аута ] [ несоответствие ] [ значение пакетов ] [ значение в байтах ] [ строка комментария ] [ значение skbmark ] [ значение skbprio ] [ значение skbqueue ]
ADD-OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

УДАЛИТЬ-ЗАПИСЬ := netaddr
DEL-ENTRY := netaddr

ТЕСТ-ЗАПИСЬ := netaddr
TEST-ENTRY := netaddr

где сетевой-адрес := ip[/cidr]
where netaddr := ip[/cidr]

При добавлении/удалении/тестировании adding/deleting/testing записей, если параметр cidr prefix не указан, то используется значение префикса хоста.
При добавлении/удалении записей добавляется/удаляется точный элемент, а перекрывающиеся элементы не проверяются ядром. При тестировании записей, если проверяется адрес хоста, ядро пытается найти соответствие с адресом хоста в сетях, добавленных в набор, и сообщает о результатах соответствующим образом.

С точки зрения соответствия сетевому фильтру, поиск соответствия всегда начинается с наименьшего размера сетевого блока (наиболее специфичный префикс) и заканчивается наибольшим размером сетевого блока (наименее специфичный префикс), добавленным в набор. При добавлении/удалении IP-адресов в набор с помощью целевого параметра SET netfilter они будут добавлены/удалены по наиболее определенному префиксу, который можно найти в наборе, или по значению префикса хоста, если набор пуст.

Время поиска растет линейно с увеличением количества различных значений префикса, добавляемых к набору.

Пример:
ipset создает хэш foo:чистый
ipset create foo hash:net

ipset добавить foo 192.168.0.0/24
ipset add foo 192.168.0.0/24

ipset добавить foo 10.1.0.0/16
ipset add foo 10.1.0.0/16

ipset добавить foo 192.168.0/24
ipset add foo 192.168.0/24

ipset добавить foo 192.168.0/30, не соответствует
ipset add foo 192.168.0/30 nomatch

При сопоставлении элементов из приведенного выше набора будут совпадать все IP-адреса из сетей 192.168.0.0/24, 10.1.0.0/16 и 192.168.0/24, за исключением адресов из 192.168.0/30.


hash:net,net
Тип hash:net,net набор использует хэш для хранения пар сетевых IP-адресов разного размера. Имейте в виду, что первый параметр имеет приоритет над вторым, поэтому запись о несоответствии может оказаться неэффективной, если бы существовал более конкретный первый параметр с подходящим вторым параметром. Сетевой адрес с нулевым размером префикса не может быть сохранен в наборе такого типа.

СОЗДАНИЕ-ПАРАМЕТРЫ := [ семейство { inet | inet6 } ] | [ значение хэш-размера ] [ максимальное значение ] [ значение тайм-аута ] [ счетчики ] [ комментарий ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ netmask cidr ] [ bitmask mask ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ДОБАВИТЬ-ЗАПИСЬ := netaddr,netaddr
ADD-ENTRY := netaddr,netaddr

ДОБАВИТЬ-ПАРАМЕТРЫ := [ значение тайм-аута ] [ несоответствие ] [ значение пакетов ] [ значение в байтах ] [ строка комментария ] [ значение skbmark ] [ значение skbprio ] [ значение skbqueue ]
ADD-OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

УДАЛИТЬ-ЗАПИСЬ := netaddr,netaddr
DEL-ENTRY := netaddr,netaddr

ТЕСТ-ЗАПИСИ := netaddr,netaddr
TEST-ENTRY := netaddr,netaddr

где сетевой адрес := ip[/cidr]
where netaddr := ip[/cidr]

При добавлении/удалении/тестировании (adding/deleting/testing) записей, если параметр cidr prefix не указан, то используется значение префикса хоста.
При добавлении/удалении записей добавляется/удаляется точный элемент, а перекрывающиеся элементы не проверяются ядром.
При тестировании записей, если проверяется адрес хоста, ядро пытается найти соответствие с адресом хоста в сетях, добавленных в набор, и сообщает о результатах соответствующим образом.

С точки зрения заданного set соответствия netfilter, поиск соответствия всегда начинается с наименьшего размера сетевого блока (наиболее специфичный префикс) до наибольшего (наименее специфичный префикс), при этом первый параметр имеет приоритет. При добавлении/удалении IP-адресов в набор с помощью целевого параметра SET netfilter они будут добавлены/удалены по наиболее определенному префиксу, который можно найти в наборе, или по значению префикса хоста, если набор пуст.

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

Необязательные параметры создания:
netmask cidr
Если указан необязательный параметр netmask, сетевые адреса будут сохранены в наборе вместо IP-адресов хостов. Значение префикса cidr должно быть в диапазоне от 1 до 32 для IPv4 и от 1 до 128 для IPv6. IP-адрес будет указан в наборе, если в наборе можно найти сетевой адрес, полученный в результате маскировки адреса с помощью маски сети.
битовая маска
Это работает аналогично маске сети, но будет принимать любой допустимый адрес IPv4/v6. Это не обязательно должна быть действительная маска сети.

Пример:
ipset создает хэш foo:net,net
ipset create foo hash:net,net

ipset добавить foo 192.168.0.0/24,10.0.1.0/24
ipset add foo 192.168.0.0/24,10.0.1.0/24

ipset добавить foo 10.1.0.0/16,10.255.0.0/24
ipset add foo 10.1.0.0/16,10.255.0.0/24

ipset добавить foo 192.168.0/24,192.168.54.0-192.168.54.255
ipset add foo 192.168.0/24,192.168.54.0-192.168.54.255

ipset добавить foo 192.168.0/30,192.168.64/30 не соответствует
ipset add foo 192.168.0/30,192.168.64/30 nomatch

При сопоставлении элементов из приведенного выше набора будут совпадать все IP-адреса из сетей 192.168.0.0/24<->10.0.1.0/24, 10.1.0.0/16<->10.255.0.0/24 и 192.168.0/24<->192.168.54.0/24, за исключением адресов из 192.168.0/30<->192.168.64/30.


hash:ip,port (ipporthash) — выборочный перечень IP-адресов, причем с каждым адресом может быть сохранен порт. В версии ipset 4 и более ранних существует ограничение: адреса в пределах одного перечня должны принадлежать одному блоку /16 (/255.255.0.0, максимум 65536 адресов). Начиная с версии ipset 5, для каждого номера порта можно также сохранять идентификатор протокола транспортного уровня.

Тип набора hash:ip, порт использует хэш для хранения пар IP-адреса и номера порта. Номер порта интерпретируется вместе с протоколом (по умолчанию TCP), и нулевой номер протокола использовать нельзя.

СОЗДАНИЕ-ПАРАМЕТРЫ := [ семейство { inet | inet6 } ] | [ значение хэш-размера ] [ максимальное значение ] [ значение тайм-аута ] [ счетчики ] [ комментарий ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ netmask cidr ] [ bitmask mask ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ДОБАВИТЬ ЗАПИСЬ := ip-адрес,[proto:]порт
ADD-ENTRY := ipaddr,[proto:]port

ДОБАВИТЬ-ПАРАМЕТРЫ := [ значение тайм-аута ] [ значение пакетов ] [ значение в байтах ] [ строка комментария ] [ значение skbmark ] [ значение skbprio ] [ значение skbqueue ]
ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

УДАЛИТЬ-ЗАПИСЬ := ipaddr,порт [proto:]
DEL-ENTRY := ipaddr,[proto:]port

ТЕСТ-ЗАПИСЬ := ipaddr,порт[proto:]
TEST-ENTRY := ipaddr,[proto:]port

Часть элементов [proto:]port может быть выражена в следующих формах, где допустимы изменения диапазона при добавлении или удалении записей:
имя порта[-имя порта]
portname[-portname]
TCP-порт или диапазон портов, выраженный в идентификаторах имен TCP-портов из /etc/services

номер порта[-номер порта]
portnumber[-portnumber]
TCP-порт или диапазон портов, выраженный в номерах TCP-портов

tcp|sctp|udp|udplite:portname|portnumber[-portname|portnumber]
Порт TCP, SCTP, UDP или UDPLITE или диапазон портов, выраженный в названии порта (ов) или номере(ах) порта(ов)

icmp:codename|type/code
ICMP:Кодовое-имя | тип/код. Поддерживаемые идентификаторы кодового имени ICMP всегда можно получить с помощью команды help (помощь).

icmpv6:codename|type/code
ICMPv6:Кодовое-имя | тип/код. Поддерживаемые идентификаторы кодового имени ICMPv6 всегда можно получить с помощью команды help (помощь).

proto:0
Все остальные протоколы, в качестве идентификатора из /etc/protocols или номера. Псевдоаналоговый номер порта должен быть равен нулю.

Для наборов hash:ip,port требуются два параметра src/dst для set match и SET целевые модули ядра.

Необязательные параметры создания:
netmask cidr
Если указан необязательный параметр netmask, сетевые адреса будут сохранены в наборе вместо IP-адресов хостов. Значение префикса cidr должно быть в диапазоне от 1 до 32 для IPv4 и от 1 до 128 для IPv6. IP-адрес будет указан в наборе, если в наборе можно найти сетевой адрес, полученный в результате маскировки адреса с помощью маски сети.
битовая маска
Это работает аналогично маске сети, но будет принимать любой допустимый адрес IPv4/v6. Это не обязательно должна быть действительная маска сети

Примеры:
ipset создать хэш foo:ip,порт
ipset create foo hash:ip,port

ipset добавить foo 192.168.1.0/24,80-82
ipset add foo 192.168.1.0/24,80-82

ipset добавить foo 192.168.1.1,udp:53
ipset add foo 192.168.1.1,udp:53

ipset добавить foo 192.168.1.1,vrrp:0
ipset add foo 192.168.1.1,vrrp:0

ipset тест foo 192.168.1.1,80
ipset test foo 192.168.1.1,80


hash:net,port
Тип набора hash:net, порт использует хэш для хранения сетевых IP-адресов и пар портов разного размера. Номер порта интерпретируется вместе с протоколом (по умолчанию TCP), и нулевой номер протокола не может быть использован. Сетевой адрес с нулевым размером префикса также не принимается.

СОЗДАТЬ-ПАРАМЕТРЫ := [ семейство { inet | inet6 } ] | [ значение хэш-размера ] [ максимальное значение ] [ значение тайм-аута ] [ счетчики ] [ комментарий ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ДОБАВИТЬ ЗАПИСЬ := netaddr,[proto:]порт
ADD-ENTRY := netaddr,[proto:]port

ДОБАВИТЬ-ПАРАМЕТРЫ := [ значение тайм-аута ] [ несоответствие ] [ значение пакетов ] [ значение в байтах ] [ строка комментария ] [ значение skbmark ] [ значение skbprio ] [ значение skbqueue ]
ADD-OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

УДАЛИТЬ-ЗАПИСЬ := netaddr,[proto:]порт
DEL-ENTRY := netaddr,[proto:]port

ТЕСТ-ЗАПИСЬ := netaddr,[proto:]порт
TEST-ENTRY := netaddr,[proto:]port

где сетевой адрес := ip[/cidr]
where netaddr := ip[/cidr]

Для элементов, относящихся к netaddr, смотрите описание в разделе hash:net сетевого набора. Для элементов, относящихся к [proto:]порту, смотрите описание в разделе hash:ip,port тип установленного порта.

При добавлении/удалении/тестировании (adding/deleting/testing) записей, если параметр kids prefix не указан, то используется значение префикса host. При редактировании/удалении записей добавляется/удаляется точный элемент, а перекрывающиеся элементы не проверяются ядром. При тестировании записей, если проверяется адрес хоста, ядро пытается найти соответствие с адресом хоста в сетях, добавленных в набор, и сообщает о результатах соответствующим образом.

С точки зрения соответствия сетевому фильтру, поиск соответствия всегда начинается с наименьшего размера сетевого блока (наиболее специфичный префикс) и заканчивается наибольшим размером сетевого блока (наименее специфичный префикс), добавленным в набор. При добавлении/удалении IP-адресов в набор с помощью целевого параметра SET netfilter они будут добавлены/удалены по наиболее определенному префиксу, который можно найти в наборе, или по значению префикса хоста, если набор пуст.

Время поиска растет линейно с увеличением количества различных значений префикса, добавляемых к набору.

Примеры:
ipset создать хэш foo:сеть,порт
ipset create foo hash:net,port

ipset добавить foo 192.168.0/24,25
ipset add foo 192.168.0/24,25

ipset добавить foo 10.1.0.0/16,80
ipset add foo 10.1.0.0/16,80

ipset тест foo 192.168.0/24,25
ipset test foo 192.168.0/24,25


hash:ip,port,ip (ipportiphash) — выборочный перечень IP-адресов, причем с каждым адресом может быть сохранен порт и еще один IP-адрес. В версии ipset 4 и более ранних ограничение на «первичные» адреса (первые в тройке адрес-порт-адрес) такое же, как и для ipporthash. Начиная с версии ipset 5, для каждого номера порта можно также сохранять идентификатор протокола транспортного уровня.

Тип набора hash:ip,port,ip-адрес использует хэш для хранения IP-адреса, номера порта и троек второго IP-адреса. Номер порта интерпретируется вместе с протоколом (по умолчанию TCP), и нулевой номер протокола не может быть использован.

СОЗДАТЬ-ПАРАМЕТРЫ := [ семейство { inet | inet6 } ] | [ значение хэш-размера ] [ максимальное значение ] [ значение тайм-аута ] [ счетчики ] [ комментарий ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ДОБАВИТЬ-ЗАПИСЬ := ipaddr,[proto:]порт,ip
ADD-ENTRY := ipaddr,[proto:]port,ip

ДОБАВИТЬ-ПАРАМЕТРЫ := [ значение тайм-аута ] [ значение пакетов ] [ значение в байтах ] [ строка комментария ] [ значение skbmark ] [ значение skbprio ] [ значение skbqueue ]
ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

УДАЛИТЬ-ЗАПИСЬ := ipaddr,[proto:]порт,ip
DEL-ENTRY := ipaddr,[proto:]port,ip

ТЕСТ-ЗАПИСЬ := ipaddr,[proto:]порт,ip
TEST-ENTRY := ipaddr,[proto:]port,ip

Для первой части элементов ipaddr и [proto:]порта смотрите описания в разделе hash:ip,port тип установленного порта.

Для наборов hash:ip,port,ip type требуются три параметра src/dst для set match и SET target модулей ядра.

Примеры:
ipset создать хэш foo:ip,порт,ip
ipset create foo hash:ip,port,ip

ipset добавить foo 192.168.1.1,80,10.0.0.1
ipset add foo 192.168.1.1,80,10.0.0.1

ipset тест foo 192.168.1.1,udp:53,10.0.0.1
ipset test foo 192.168.1.1,udp:53,10.0.0.1


hash:ip,port,net (ipportnethash) — выборочный перечень IP-адресов, причем с каждым адресом может быть сохранен порт и IP-подсеть. В версии ipset 4 и более ранних ограничение на «первичные» адреса такое же, как и у типа ipporthash. Начиная с версии ipset 5, для каждого номера порта можно также сохранять идентификатор протокола транспортного уровня.

Тип набора hash:ip,port,net использует хэш для хранения IP-адреса, номера порта и троек сетевых IP-адресов. Номер порта интерпретируется вместе с протоколом (по умолчанию TCP), и нулевой номер протокола не может быть использован. Сетевой адрес с нулевым размером префикса также не может быть сохранен.

СОЗДАТЬ-ПАРАМЕТРЫ := [ семейство { inet | inet6 } ] | [ значение хэш-размера ] [ максимальное значение ] [ значение тайм-аута ] [ счетчики ] [ комментарий ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ДОБАВИТЬ-ЗАПИСЬ := ipaddr,[proto:]порт,netaddr
ADD-ENTRY := ipaddr,[proto:]port,netaddr

ДОБАВИТЬ-ПАРАМЕТРЫ := [ значение тайм-аута ] [ несоответствие ] [ значение пакетов ] [ значение в байтах ] [ строка комментария ] [ значение skbmark ] [ значение skbprio ] [ значение skbqueue ]
ADD-OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

УДАЛИТЬ-ЗАПИСЬ := ipaddr,[proto:]порт,netaddr
DEL-ENTRY := ipaddr,[proto:]port,netaddr

ТЕСТ-ЗАПИСЬ := ipaddr,[proto:]порт,netaddr
TEST-ENTRY := ipaddr,[proto:]port,netaddr

где сетевой адрес := ip[/cidr]
where netaddr := ip[/cidr]

Для элементов, относящихся к ipaddr и [proto:]port, смотрите описания в разделе hash:ip,port установленного порта. Для элементов, относящихся к netaddr, смотрите описание в разделе hash:net установленного сетевого порта.

С точки зрения соответствия сетевому фильтру, поиск соответствия всегда начинается с наименьшего размера сетевого блока (наиболее специфичный cidr) и заканчивается наибольшим размером сетевого блока (наименее специфичный cidr), добавленным в набор. При добавлении/удалении троек в набор с помощью параметра SET netfilter target, они будут добавлены/удалены по наиболее определенному cidr, который можно найти в наборе, или по значению cidr хоста, если набор пуст.

Время поиска растет линейно с увеличением количества различных значений cidr, добавляемых к набору.

Для наборов hash:ip,port,net тип требуются три параметра src/dst для set match и SET target модулей ядра.

Примеры:

ipset создать хэш foo:ip,порт,сетевой
ipset create foo hash:ip,port,net

ipset добавить foo 192.168.1,80,10.0.0/24
ipset add foo 192.168.1,80,10.0.0/24

ipset добавить foo 192.168.2,25,10.1.0.0/16
ipset add foo 192.168.2,25,10.1.0.0/16

ipset тест foo 192.168.1,80.10.0.0/24
ipset test foo 192.168.1,80.10.0.0/24


hash:ip,mark
Тип набора hash:ip,mark использует хэш для хранения пар IP-адресов и меток пакетов.

СОЗДАТЬ-ПАРАМЕТРЫ := [ семейство { inet | inet6 } ] | [ значение маски пометки ] [ значение хэш-размера ] [ значение максимального значения ] [ значение тайм-аута ] [ счетчики ] [ комментарий ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] | [ markmask value ] [ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] [ markmask value ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ДОБАВИТЬ-ЗАПИСЬ := ipaddr,отметить
ADD-ENTRY := ipaddr,mark

ДОБАВИТЬ-ПАРАМЕТРЫ := [ значение тайм-аута ] [ значение пакетов ] [ значение в байтах ] [ строка комментария ] [ значение skbmark ] [ значение skbprio ] [ значение skbqueue ]
ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

УДАЛИТЬ-ЗАПИСЬ := ipaddr,отметить
DEL-ENTRY := ipaddr,mark

ТЕСТ-ЗАПИСЬ := ipaddr,отметка
TEST-ENTRY := ipaddr,mark

Необязательные параметры создания:

значение маски метки
markmask value
Позволяет задать интересующие вас разряды для метки пакета. Эти значения затем используются для выполнения побитовой операции И для каждой добавленной метки. маской метки может быть любое значение от 1 до 4294967295, по умолчанию заданы все 32 бита.
Меткой mark может быть любое значение от 0 до 4294967295.

Для наборов типа hash:ip,mark требуются два параметра src/dst для модулей set match и SET target kernel.

Примеры:
ipset создать хэш foo:ip,отмечает
ipset create foo hash:ip,mark

ipset добавить foo 192.168.1.0/24,555
ipset add foo 192.168.1.0/24,555

ipset добавить foo 192.168.1.1,0x63
ipset add foo 192.168.1.1,0x63

ipset добавить foo 192.168.1.1,111236
ipset add foo 192.168.1.1,111236


hash:net,port,net
Тип набора hash:net,port,net работает аналогично типу hash:ip,port,net, но принимает значение cidr как для первого, так и для последнего параметра. Для любой подсети допускается значение /0, если вы хотите сопоставить порт между всеми пунктами назначения.

СОЗДАТЬ-ПАРАМЕТРЫ := [ семейство { inet | inet6 } ] | [ значение хэш-размера ] [ максимальное значение ] [ значение тайм-аута ] [ счетчики ] [ комментарий ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ДОБАВИТЬ-ЗАПИСЬ := netaddr,[proto:]порт,netaddr
ADD-ENTRY := netaddr,[proto:]port,netaddr

ДОБАВИТЬ-ПАРАМЕТРЫ := [ значение тайм-аута ] [ несоответствие ] [ значение пакетов ] [ значение в байтах ] [ строка комментария ] [ значение skbmark ] [ значение skbprio ] [ значение skbqueue ]
ADD-OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

УДАЛИТЬ-ЗАПИСЬ := netaddr,[proto:]порт,netaddr
DEL-ENTRY := netaddr,[proto:]port,netaddr

ТЕСТ-ЗАПИСЬ := netaddr,[proto:]порт,netaddr
TEST-ENTRY := netaddr,[proto:]port,netaddr

где сетевой адрес := ip[/cidr]
where netaddr := ip[/cidr]

Для элементов, относящихся к [proto:] port, смотрите описание в разделе hash:ip,port тип набора портов. Для элементов, относящихся к netaddr, смотрите описание в разделе hash:net набора сетей.


С точки зрения соответствия сетевому фильтру, поиск соответствия всегда начинается с наименьшего размера сетевого блока (наиболее специфичный cidr) и заканчивается наибольшим размером сетевого блока (наименее специфичный cidr), добавленным в набор. При добавлении/удалении троек в набор с помощью параметра SET netfilter target, они будут добавлены/удалены по наиболее определенному cidr, который можно найти в наборе, или по значению cidr хоста, если набор пуст. Первая подсеть имеет приоритет при выполнении наиболее специфичного поиска, так же как и для hash:net,net

Время поиска увеличивается линейно с увеличением количества различных значений cidr, добавляемых к набору, и количества вторичных значений cidr на одно первичное значение.

Для наборов hash:net,port,net тип требуются три параметра src/dst для установленных модулей match и SET целевые модули ядра.

Примеры:
ipset создать хэш foo:сеть,порт,чистый
ipset create foo hash:net,port,net

ipset добавить foo 192.168.1.0/24,0,10.0.0/24
ipset add foo 192.168.1.0/24,0,10.0.0/24

ipset добавить foo 192.168.2.0/24,25,10.1.0.0/16
ipset add foo 192.168.2.0/24,25,10.1.0.0/16

ipset тест foo 192.168.1.1,80,10.0.0.1
ipset test foo 192.168.1.1,80,10.0.0.1
количество слов: 3325
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 866
Стаж: 5 лет 9 месяцев
Откуда: Вологодская область
Поблагодарили: 41 раз
Контактная информация:

ipset

Сообщение Артём Мамзиков »

hash:net,iface -выборочный перечень IP-подсетей, причем с каждой подсетью может быть сохранено название сетевого интерфейса. Появился в версии ipset 6.7 (входит в Linux 3.1), ранние версии ipset не имеют подобных возможностей. Существует ограничение: нельзя сохранять более 64 имен интерфейсов с одним и тем же адресом подсети. Этот тип данных удобен при наличии в системе большого количества сетевых интерфейсов (например, сотен VLAN-интерфейсов).

Тип набора hash:net,iface использует хэш для хранения пар сетевых IP-адресов разного размера и имен интерфейсов.

СОЗДАТЬ-ПАРАМЕТРЫ := [ семейство { inet | inet6 } ] | [ значение хэш-размера ] [ максимальное значение ] [ значение тайм-аута ] [ счетчики ] [ комментарий ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ДОБАВИТЬ-ЗАПИСЬ := netaddr,[physdev:]iface
ADD-ENTRY := netaddr,[physdev:]iface

ДОБАВИТЬ-ПАРАМЕТРЫ := [ значение тайм-аута ] [ несоответствие ] [ значение пакетов ] [ значение в байтах ] [ строка комментария ] [ значение skbmark ] [ значение skbprio ] [ значение skbqueue ]
ADD-OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
ADD-OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ] [ wildcard ]

УДАЛИТЬ-ЗАПИСЬ := netaddr,[physdev:]iface
DEL-ENTRY := netaddr,[physdev:]iface

ТЕСТ-ЗАПИСЬ := netaddr,[physdev:]iface
TEST-ENTRY := netaddr,[physdev:]iface

где сетевой адрес := ip[/cidr]
where netaddr := ip[/cidr]


Для части элементов netaddr смотрите описание в разделе hash:net set type.

При добавлении/удалении/тестировании (adding/deleting/testing) записей, если параметр cidr prefix не указан, то используется значение префикса хоста. При добавлении/удалении записей добавляется/удаляется точный элемент, а перекрывающиеся элементы не проверяются ядром. При тестировании записей, если проверяется адрес хоста, ядро пытается найти соответствие с адресом хоста в сетях, добавленных в набор, и сообщает о результатах соответствующим образом.

С точки зрения соответствия сетевому фильтру, поиск соответствия всегда начинается с наименьшего размера сетевого блока (наиболее специфичный префикс) и заканчивается наибольшим размером сетевого блока (наименее специфичный префикс), добавленным в набор. При добавлении/удалении IP-адресов в набор с помощью целевого параметра SET netfilter они будут добавлены/удалены по наиболее определенному префиксу, который можно найти в наборе, или по значению префикса хоста, если набор пуст.

Второй параметр направления модулей set match и SET target соответствует входящему/исходящему интерфейсу: src - входящему (аналогично флагу -i в iptables), а dst - исходящему (аналогично флагу -o в iptables). Когда интерфейс помечен параметром physdev:, он интерпретируется как входящий/исходящий порт моста.

Внутреннее ограничение типа набора hash:net,iface заключается в том, что один и тот же сетевой префикс не может быть сохранен более чем с 64 различными интерфейсами в одном наборе.
Время поиска растет линейно с увеличением количества различных значений префикса, добавляемых к набору.

Примеры:
ipset создает хэш foo:net,ipset iface
ipset create foo hash:net,iface

ipset добавить foo 192.168.0/24,eth0
ipset add foo 192.168.0/24,eth0

ipset добавить foo 10.1.0.0/16,eth1
ipset add foo 10.1.0.0/16,eth1

ipset тест foo 192.168.0/24,eth0
ipset test foo 192.168.0/24,eth0


list:set (setlist) — список списков. Может содержать списки любого перечисленного здесь типа, кроме list: set. При обращении к такому объекту из netfilter, включенные в него списки рассматриваются как один большой список. Поиск записей (критерий set) производится по всем вложенным спискам соответствующего типа. При добавлении записей (действие SET), вложенные списки поочередно проверяются (согласно порядку их перечисления) на соответствие типа и наличие свободного места, и запись добавляется в первый же подходящий. В то же время, при обращении к такому списку через утилиту ipset, он рассматривается именно как совокупность элементов-списков, что позволяет добавлять, удалять и проверять наличие именно вложенных списков, но не их элементов.

Тип list:set использует простой список, в котором вы можете хранить имена наборов.

СОЗДАТЬ-ПАРАМЕТРЫ := [ значение размера ] [ значение тайм-аута ] [ счетчики ] [ комментарий ] [ skbinfo ]
CREATE-OPTIONS := [ size value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ДОБАВИТЬ-ЗАПИСЬ := имя_установки [ { до | после } имя_установки ]
ADD-ENTRY := setname [ { before | after } setname ]

ДОБАВИТЬ-ПАРАМЕТРЫ := [ значение тайм-аута ] [ значение пакетов ] [ значение в байтах ] [ строка комментария ] [ значение skbmark ] [ значение skbprio ] [ значение skbqueue ]
ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

УДАЛИТЬ-ЗАПИСЬ := имя_установки [ { до | после } имя_установки ]
DEL-ENTRY := setname [ { before | after } setname ]

ТЕСТ-ЗАПИСЬ := setname [ { до | после } setname ]
TEST-ENTRY := setname [ { before | after } setname ]

Необязательные параметры создания/create:
size value /значение размера
Размер списка по умолчанию равен 8. Начиная с версии ipset 6.24, этот параметр игнорируется.

С помощью команды ipset вы можете добавлять, удалять и тестировать имена наборов в list:set /списке:установить тип набора.

С помощью параметра set match или SET target в netfilter вы можете тестировать, добавлять или удалять записи в наборах, добавленных в list:set /список:установить тип набора. Совпадение попытается найти подходящую запись в наборах, а цель попытается добавить запись в первый набор, в который она может быть добавлена. Количество параметров направления совпадения и цели важно: наборы, для которых требуется больше параметров, чем указано, пропускаются, в то время как наборы с равными или меньшими параметрами отмечаются, элементы добавляются/удаляются. Например, если a и b являются list:set списком: укажите тип наборов, затем в команде
iptables -m set --match-set a src,dst -j SET --add-set b src,dst

совпадение и цель пропустят любой набор в a и b, в котором хранятся тройки данных, но сопоставят все наборы с одиночным или двойным хранилищем данных в наборе a и прекратят сопоставление при первом успешном наборе и добавят src к первому одиночному или src, dst к первому двойному хранилищу данных в наборе b к которому может быть добавлена запись. Вы можете представить себе тип набора list:set как упорядоченное объединение элементов набора.

Пожалуйста, обратите внимание: с помощью команды ipset вы можете добавлять, удалять и test проверять имена наборов в list:set /списке: задайте тип набора, а not не наличие члена набора (например, IP-адреса).


В четвертой версии дополнительно присутствовали два типа списков, упраздненные в более поздних версиях:

iptree — выборочный перечень IP-адресов, причем с каждым адресом может быть сохранено значение тайм-аута в секундах. По истечении тайм-аута адрес удаляется из списка. Чтобы активировать возможность использование тайм-аутов для определенного списка, нужно при его создании задать тайм-аут по умолчанию (опция --timeout). Начиная с версии ipset 5, данный тип не поддерживается, при попытке его использования автоматически заменяется на hash: ip. Заметим, что начиная с пятой версии тайм-ауты реализованы для всех поддерживаемых типов данных.
iptreemap — гибридный перечень, позволяющий сохранять адреса, блоки и диапазоны адресов. Начиная с версии ipset 5, данный тип не поддерживается, при попытке его использования автоматически заменяется на hash: ip. Стоит отметить, что в современных версиях ipset при работе с адресами IPv4 можно указывать диапазоны адресов и подсети, которые при обращении к внутренним спискам будут автоматически преобразованы в наборы соответствующих элементов, Например, ipset create foo hash:ip; ipset add foo 192.168.0.0-192.168.0.3 добавит в список foo адреса 192.168.0.0, 192.168.0.1, 192.168.0.2 и 192.168.0.3 (аналогичный эффект может быть достигнут и командой ipset add foo 192.168.0.0/3).
Практически для всех типов списков, реализованных в ipset, существует общее ограничение на максимальный размер: 65536 записей.

ОБЩИЕ ОГРАНИЧЕНИЯ
Элементы набора с нулевым значением не могут быть использованы с помощью методов хэширования. Невозможно использовать нулевое значение протокола с портами.


КОММЕНТАРИИ
Если вы хотите сохранить подсети одинакового размера из данной сети (скажем, блоки /24 из сети /8), используйте тип набора bitmap:ip. Если вы хотите хранить случайные сети одинакового размера (скажем, random /24 блока), используйте тип набора hash:ip. Если у вас есть случайный размер сетевых блоков, используйте hash:net.

Сопоставление по MAC-адресам назначения с использованием параметра dst в модулях ядра set match netfilter будет работать только в том случае, если MAC-адрес назначения доступен в пакете на данном этапе обработки, то есть он применяется только к входящим пакетам в цепочках предварительной PREROUTING маршрутизации, INPUT входа и FORWARD пересылки по первоначально найденному MAC-адресу в полученном пакете (как правило, это один из MAC-адресов локального хоста). Это not не тот MAC-адрес назначения, который преобразуется в IP-адрес назначения после маршрутизации. Если MAC-адрес недоступен (например, в цепочке OUTPUT ВЫВОДА), пакет просто не будет соответствовать.

Поддерживается обратная совместимость, и по-прежнему поддерживается старый синтаксис ipset.

Типы наборов iptree и iptreemap удалены: если вы ссылаетесь на них, они автоматически заменяются типом наборов hash:ip.


ДИАГНОСТИКА
Различные сообщения об ошибках выводятся в формате стандартной ошибки. Для корректной работы код выхода равен 0.


ОШИБКИ
Баги? Нет, просто забавные особенности. :-) Ладно, шучу...


СМОТРИТЕ ТАК ЖЕ
iptables(8), ip6tables(8) iptables-extensions(8)


АВТОРЫ
Йожеф Кадлечик написал ipset, который основан на ippool Йоакима Аксельссона, Патрика Шаафа и Мартина Йозефссона.
Свен Вегенер написал тип iptreemap.


ПОСЛЕДНЕЕ ЗАМЕЧАНИЕ
Я стою на плечах гигантов.

Этот документ был создан пользователем man2html с использованием страниц руководства.
Время: 12:25:43 GMT, 29 июля 2019 г.


Большинство перечисленных типов данных можно разделить на две группы: полные перечни (map, bitmap) и выборочные перечни (hash, tree). Разница между этими типами состоит в следующем: если выборочный перечень сохраняет только те элементы, которые в него входят, то полный перечень представляет собой таблицу логических значений (битов) для всех элементов, которые могут входить в данный перечень, и вхождение конкретного элемента в перечень определяется значением соответствующего бита. Полный перечень всегда формируется на базе одного непрерывного диапазона значений.

Таким образом, выбор необходимого вам типа данных определяется конкретными условиями задачи, прежде всего, отношением усредненного количества элементов в списке к требуемому диапазону охвата. Например, если вы собираетесь хранить в списке блэк-листы адресов, замеченных в атаках на ваш сервер, целесообразнее использовать тип hash: ip, потому что атакующие вас ботнеты, как бы они ни были велики, все равно занимают незначительную долю адресного пространства IPv4. К тому же, как следует из сказанного в предыдущем абзаце, тип bitmap: ip все равно не может хранить адреса, выходящие за предел одной подсети префикса 16. Но в том случае, если вам, например, нужно задать список хостов из вашей локальной сети, имеющих доступ к каким-либо услугам (службам вашего сервера, выходу в Интернет), и этот доступ должно иметь значительное количество хостов (а не единицы), то целесообразнее будет использовать bitmap: ip.

По поводу хранения адресов подсетей (блоков IP-адресов) можно сказать следующее. Если вам нужно хранить большое количество блоков одного размера из ограниченного диапазона (не более 65536 возможных значений), например, блоки /24 из подсети /8, вы можете использовать тип bitmap: ip, указав маску. Если же вам нужно хранить блоки одного размера из достаточно широкого диапазона, например, /24 из всего адресного пространства IPv4, используйте тип hash: ip, также с указанием маски. При необходимости хранить в одном списке блоки разного размера, воспользуйтесь типом hash: net.

Что касается улучшений в версиях 5 и 6 по сравнению с четвертой и более ранними, то, помимо уже упомянутых (поддержка адресов IPv6, поддержка тайм-аутов для всех типов данных, возможность сохранения идентификатора протокола транспортного уровня в типах hash: ip, port, hash: ip, port, ip и hash: ip, port, net), стоит также отметить переход на использование nfnetlink (см. выше) для связи ядра и userspace, а также более простой синтаксис. Например, те действия, которые в ipset 4 выглядели бы так:

ipset -N foo macipmap --network 192.168.0.0/16 # Создаем список
ipset -A foo 192.168.1.1,12:34:56:78:9A:BC # Добавляем запись
ipset -T foo 192.168.1.1,12:34:56:78:9A:BC # Проверяем ее наличие в списке
ipset -L foo # Выводим список на экран (точнее, на stdout)
ipset -F foo # Очищаем список
ipset -X foo # Удаляем список
в современных версиях ipset будут выглядеть следующим образом:

ipset create foo bitmap:ip,mac range 192.168.0.0/16
ipset add foo 192.168.1.1,12:34:56:78:9A:BC
ipset test foo 192.168.1.1,12:34:56:78:9A:BC
ipset list foo
ipset flush foo
ipset destroy foo
Кроме того, современные версии ipset поддерживают работу в режиме простой оболочки, принимающей команды со stdin. При этом в них обеспечивается полная обратная совместимость синтаксиса с четвертой версией, то есть синтаксис, корректно работающий для четвертой версии ipset, будет точно так же работать в пятой и шестой.
количество слов: 560
Ответить Пред. темаСлед. тема

Вернуться в «Linux»