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
