Приклади використання IP sets
Див. також: Конфігурація IP set, Фільтрація трафіку за DNS через IP sets
IP sets — це функціональність netfilter, яка дозволяє об’єднувати велику кількість хостів або мереж у єдиний іменований набір (set). Правила netfilter можуть порівнювати поля пакетів з цим набором, а не з кожною адресою окремо. Це значно підвищує ефективність, наприклад, завдяки використанню хеш-пошуку замість лінійного.
`firewall4` підтримує найпоширеніші функції IP sets. У цьому розділі наведено приклади, як використовувати IP sets у правилах netfilter.
Використання IP sets для блокування SMTP-спаму
IP sets добре підходить для об'єднання великої кількості IP-адрес/мереж під одним ярликом (label), який потім використовується як єдиний критерій у правилах файрволу.
Одне з головних застосувань — блокування генераторів спаму (станції або мережі, що розсилають мільярди листів щодня). Таких генераторів тисячі, і додавання окремого правила на кожен створить величезний і неефективний список правил netfilter.
Замість цього всі спам-мережі додаються до одного IP set з назвою dropcidr, а потім ця назва використовується в одному правилі.
У конфігурації файрволу `/etc/config/firewall` додайте:
config ipset option name 'dropcidr' option match 'src_net' option enabled '1' list entry '42.56.0.0/16' list entry '180.178.160.0/20' list entry '79.133.43.0/24' list entry '27.44.0.0/15' list entry '192.168.3.0/24' config rule option src 'wan' option ipset 'dropcidr' option dest_port '25' option target 'DROP' option name 'DROP-SMTP-WAN-LAN' option enabled '1'
Конфігурація `ipset` створює IP-набір із назвою dropcidr і вказує файрволу перевіряти його за полем джерела мережі у відповідному правилі.
Щоб переглянути створені IP sets:
nft list sets
Ядро OpenWrt виконує додаткову оптимізацію всередині модулів IP sets. Цей набір використовує ефективну хеш-таблицю замість повного перебору (linear search).
Секція `rule` перевіряє, чи IP джерела належить до набору dropcidr і чи порт дорівнює 25 (SMTP). Якщо так — спрацьовує `DROP`.
Для таких випадків бажано використовувати саме `DROP`, а не `REJECT`.
Див. також: Керування netfilter для перегляду та перевірки нових правил.
Наповнення IP set
У наведеному прикладі список `list entry` задає IP-адреси безпосередньо в конфігурації.
192.168.3.0/24 — це приватна тестова мережа; решта — реальні джерела спаму.
На практиці зручніше використовувати опцію loadfile, яка дозволяє завантажувати IP-адреси з зовнішнього текстового файлу.
Створіть файл:
cat << "EOF" > /etc/dropcidr.txt 42.56.0.0/16 180.178.160.0/20 79.133.43.0/24 27.44.0.0/15 192.168.3.0/24 EOF
Потім змініть конфігурацію IP set у файрволі, видаливши `list entry` та додавши `loadfile`:
config ipset option name 'dropcidr' option match 'src_net' option enabled '1' option loadfile '/etc/dropcidr.txt'
CIDR-адреси можна додавати або видаляти динамічно, навіть під час активності правила.
Окрім ручного додавання, пакет dnsmasq-full може автоматично заповнювати набір IP. Це корисно, коли потрібна фільтрація за доменами: IP-адреси, які відповідають певним DNS-іменам, додаються до IP set.