Инструменты пользователя

Инструменты сайта


flip:linux:ipset

IPSET

ipset — это утилита для создания и управления наборами (сетами) IP-адресов, сетей, портов и их комбинаций. Она работает в связке с iptables/nftables, позволяя обрабатывать тысячи адресов в одном правиле, что значительно ускоряет фильтрацию.

Основные типы сетов

Тип Описание
hash:ip Набор отдельных IP-адресов
hash:net Набор подсетей (например, 192.168.1.0/24)
hash:ip,port Пары IP:порт
hash:net,port Сеть + порт
bitmap:ip Диапазон IP (фиксированный размер)
list:set Список из других сетов

Основные команды

1. Создать сет

 ipset create <имя_сета> <тип> [опции] 

Примеры:

Создать хеш-таблицу для 1000 IP-адресов
ipset create blacklist hash:ip hashsize 1024 maxelem 100000
 
Создать набор подсетей
ipset create allow_nets hash:net
 
Создать набор IP+порт (например, для блокировки порта 22 с определённых IP)
ipset custom_ssh hash:ip,port

2. Добавить элемент

 ipset add <имя_сета> <значение> 

Примеры:

ipset add blacklist 192.168.1.100
ipset add blacklist 10.0.0.5
ipset add allow_nets 192.168.0.0/16
ipset add custom_ssh 203.0.113.5,22

3. Удалить элемент

 ipset del <имя_сета> <значение> ipset del blacklist 192.168.1.100 

4. Просмотреть содержимое

 ipset list # все сеты ipset list blacklist # конкретный сет 

5. Сохранить и восстановить

 # Сохранить все сеты в файл ipset save > /etc/ipset.conf
Восстановить из файла
ipset restore < /etc/ipset.conf
 
Автозагрузка (для systemd)
systemctl enable ipset
systemctl start ipset

6. Удалить сет

 ipset destroy <имя_сета> # удалить конкретный ipset destroy # удалить ВСЕ сеты (осторожно!) 

7. Очистить сет (удалить элементы)

 ipset flush blacklist ipset flush # очистить все 

8. Проверить наличие элемента

 ipset test blacklist 192.168.1.100 

Примеры использования с iptables

Пример 1: Чёрный список IP

 # Создаём сет для чёрного списка ipset create blocklist hash:ip
Добавляем IP для блокировки
ipset add blocklist 1.2.3.4
ipset add blocklist 5.6.7.0/24
 
Правило iptables: блокировать все пакеты из этих IP
iptables -I INPUT -m set --match-set blocklist src -j DROP

Пример 2: Белый список порта 22 только для разрешённых сетей

 ipset create ssh_allow hash:net ipset add ssh_allow 192.168.1.0/24 ipset add ssh_allow 10.0.0.0/8
iptables -A INPUT -p tcp --dport 22 -m set --match-set ssh_allow src -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

Пример 3: Блокировка по IP+порт (например, ботнеты на 443)

 ipset create bad_ssl hash:ip,port ipset add bad_ssl 203.0.113.10,443 ipset add bad_ssl 198.51.100.22,443
iptables -A INPUT -m set --match-set bad_ssl src,dst -j DROP

Полезные опции

timeout — автоматическое удаление элемента через N секунд:

ipset create temp_ban hash:ip timeout 60

counters — включить счётчики пакетов/байт:

ipset create stat_net hash:net counters

comment — добавлять комментарии к элементам:

ipset create with_comments hash:ip comment
ipset add with_comments 8.8.8.8 comment "Google DNS"

Важные замечания

Сеты живут только в памяти (до перезагрузки), поэтому нужны ipset save/restore и автозагрузка.

Максимальное количество элементов задаётся при создании (maxelem).

Для hash:ip размер хеша (hashsize) лучше выбирать как степень двойки.

При удалении сета, на который ссылаются правила iptables, нужно сначала удалить эти правила.

Просмотр статистики

 ipset list -t # краткий вывод ipset list blacklist -o save # в формате, совместимом с restore 
flip/linux/ipset.txt · Последнее изменение: 2026/04/29 16:05 — tamada

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki