Приклади використання IP sets

Див. також: Конфігурація IP set, Фільтрація трафіку за DNS через IP sets

IP sets — це функціональність netfilter, яка дозволяє об’єднувати велику кількість хостів або мереж у єдиний іменований набір (set). Правила netfilter можуть порівнювати поля пакетів з цим набором, а не з кожною адресою окремо. Це значно підвищує ефективність, наприклад, завдяки використанню хеш-пошуку замість лінійного.

`firewall4` підтримує найпоширеніші функції IP sets. У цьому розділі наведено приклади, як використовувати IP sets у правилах netfilter.

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 для перегляду та перевірки нових правил.

У наведеному прикладі список `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.

  • Last modified: 2025/06/01 19:08
  • by vazaz