Конфігурація міжмережевого екрана /etc/config/firewall

Система керування фаєрволом OpenWrt — firewall — переважно конфігурується через файл /etc/config/firewall.

Основна увага у цьому розділі приділяється саме конфігураційним файлам і їхньому вмісту. Інтерфейси LuCI та UCI є лише зручними абстракціями, що в результаті змінюють ці самі файли.

  • Основний файл конфігурації фаєрволу — /etc/config/firewall; саме його потрібно редагувати для зміни налаштувань.
    • :!: Перед змінами обов’язково зробіть резервну копію файлу!
      • Якщо після змін ви втратите доступ до маршрутизатора, знадобиться аварійний режим (failsafe) для відновлення з копії.
    • Після редагування файлу, і подвійної перевірки всіх змін, оновіть конфігурацію командою:
      /etc/init.d/firewall reload
      • Це shell-скрипт, що викликає `fw4 reload` і виводить повідомлення до консолі. Обов’язково перевірте наявність помилок!
  • Рядки, що починаються з #, ігноруються парсером
    • Коментарі можна використовувати для пояснення, опису чи тимчасового вимкнення секцій.
  • Починаючи з OpenWrt 22.03, за замовчуванням використовується firewall4, що працює поверх nftables. Він підтримує той самий синтаксис UCI, що й fw3.
  • Конфігурація UCI у /etc/config/firewall охоплює більшість, але не всі можливості NetFilter
    • Для розширення можливостей доступний механізм include
      • Можна додавати shell-скрипт з nftables-командами або фрагмент nft-конфігурації.
        • Див. приклади: fw3_config_examples (можуть бути застарілими!)
  • Коли можливо, використовуйте файл UCI-конфігурації /etc/config/firewall
    • У складних випадках дозволяється використання власних nftables-правил

LuCI — зручний спосіб переглядати та змінювати налаштування фаєрволу:

  • Розташування: Network → Firewall
  • Відображає конфігурацію у структурованому вигляді, що відповідає секціям конфігураційного файлу.

Після внесення змін натисніть Save & Apply.

  • :!: LuCI видаляє всі коментарі (#) з файлу /etc/config/firewall!

UCI — низькорівнева абстракція для керування конфігураційними файлами. Доступна також через SSH.

uci add firewall rule
uci set firewall.@rule[-1].name='Відхилити VPN → LAN'
uci set firewall.@rule[-1].src='vpn'
uci set firewall.@rule[-1].dest='lan'
uci set firewall.@rule[-1].proto='all'
uci set firewall.@rule[-1].target='REJECT'
uci commit firewall
service firewall restart

Це створить правило у кінці списку, що відхиляє весь трафік з VPN у LAN (усі протоколи).

Перегляд поточної конфігурації фаєрволу:

uci show firewall
# Приклад:
firewall.@rule[20]=rule
firewall.@rule[20].name='Відхилити VPN → LAN'
firewall.@rule[20].src='vpn'
firewall.@rule[20].dest='lan'
firewall.@rule[20].proto='all'
firewall.@rule[20].target='REJECT'
...

UCI зручний для перегляду, але не дуже підходить для складного редагування, оскільки:

  • Потрібно знати точну позицію, куди вставити правило;
  • UCI не бачить вміст файлу /etc/firewall.user;
  • Після змін потрібно виконати `uci commit`, а потім ще й `firewall reload`.

Нижче — короткий огляд типів секцій у конфігурації фаєрволу.

  • Мінімальна конфігурація для маршрутизатора зазвичай складається з однієї секції defaults, принаймні двох zones (lan і wan) та однієї forwarding для дозволу трафіку з lan у wan.
  • Секція forwarding не є обов’язковою, якщо є лише дві зони — можна вказати global defaults.

Секція defaults задає глобальні параметри фаєрволу, які не належать до окремих зон:

config defaults
  option  input     'ACCEPT'
  option  output      'ACCEPT'
  option  forward     'REJECT'
  option  custom_chains   '1'
  option  drop_invalid    '1'
  option  synflood_protect  '1'
  option  synflood_rate   '25/s'
  option  synflood_burst    '50'
  option  tcp_ecn     '1'
  option  tcp_syncookies    '1'
  option  tcp_window_scaling  '1'

Параметри (Options)

Назва Тип Обов’язковий Типове Опис
input рядок ні ACCEPT Політика для ланцюга INPUT у таблиці filter.
output рядок ні ACCEPT Політика для ланцюга OUTPUT у таблиці filter.
forward рядок ні REJECT Політика для ланцюга FORWARD у таблиці filter.
drop_invalid булевий ні 0 Відкинути недійсні пакети (наприклад, ті, що не відповідають активним з’єднанням).
syn_flood булевий ні 0 Увімкнути захист від SYN flood (застарілий, використовуйте synflood_protect).
synflood_protect булевий ні 0 Увімкнути захист від SYN flood-атак.
synflood_rate рядок ні 25/s Обмеження швидкості (пакетів/с) для SYN-пакетів, понад яке трафік вважається атакою.
synflood_burst рядок ні 50 Обмеження для кількості SYN-пакетів, які допускаються одночасно перед розпізнаванням атаки.
tcp_syncookies булевий ні 1 Увімкнути використання SYN cookies.
tcp_ecn ціле число ні 0 0 — вимкнено, 1 — увімкнено, 2 — лише вхід (ingress). Включає ECN.
tcp_window_scaling булевий ні 1 Увімкнути масштабування TCP-вікна.
accept_redirects булевий ні 0 Дозволити ICMP-перенаправлення.
accept_source_route булевий ні 0 Дозволити маршрутизацію з вказаним джерелом (source routing).
custom_chains булевий ні 1 Дозволити створення користувацьких ланцюгів (hooks).
disable_ipv6 булевий ні 0 Вимкнути IPv6-правила фаєрволу (не підтримується fw4).
flow_offloading булевий ні 0 Увімкнути програмне прискорення трафіку.
flow_offloading_hw булевий ні 0 Увімкнути апаратне прискорення трафіку (потребує flow_offloading).
tcp_reject_code reject_code ні 0 Метод відхилення TCP (скидання або ICMP unreachable).
any_reject_code reject_code ні 1 Метод відхилення для будь-яких протоколів (скидання або ICMP unreachable).
auto_helper булевий ні 1 Додати Conntrack helper-и.
auto_includes булевий ні 1 (лише fw4) Автоматично підключати правила з /usr/share/nftables.d/.

Секція zone об’єднує один або кілька інтерфейсів та слугує джерелом або ціллю для секцій forwardings, rules та redirects.

config zone
  option name 'wan'
  option network 'wan wan6'
  option input 'REJECT'
  option output 'ACCEPT'
  option forward 'REJECT'
  option masq '1'
  option mtu_fix '1'
  • MASQUERADE (NAT) для вихідного трафіку зони визначається на рівні зони.
  • input — трафік до маршрутизатора з цієї зони.
  • output — трафік з маршрутизатора через цю зону.
  • forward — трафік між інтерфейсами в цій зоні.

Параметри

Назва Тип Обов’язковий Типове Опис
name назва зони так Унікальна назва зони (до 11 символів).
network список ні Список інтерфейсів, що входять до зони.
masq булевий ні 0 Вказує, чи слід маскувати IPv4 трафік зони.
masq6 булевий ні 0 Те саме для IPv6 (fw4).
masq_src список підмереж ні 0.0.0.0/0 Обмежити маскарадинг певними джерелами.
masq_dest список підмереж ні 0.0.0.0/0 Обмежити маскарадинг певними цілями.
masq_allow_invalid булевий ні 0 Не додавати DROP для недійсних пакетів.
mtu_fix булевий ні 0 Увімкнути MSS Clamping.
input рядок ні з defaults Політика для вхідного трафіку.
output рядок ні з defaults Політика для вихідного трафіку.
forward рядок ні з defaults Політика для переспрямованого трафіку.
family рядок ні any ipv4, ipv6 або any.
log число ні 0 Увімкнення логування (0 — вимкнено, 1 — filter, 2 — mangle).
log_limit рядок ні 10/minute Обмеження кількості логів.
device список ні Перелік L3-інтерфейсів (наприклад, tun+ для OpenVPN).
subnet список ні IP-підмережі, прив’язані до зони.
custom_chains булевий ні 1 Дозволити кастомні ланцюги (працює лише при активному global custom_chains).
enabled булевий ні 1 Якщо 0, зона вимкнена.
auto_helper булевий ні 1 Додавати CT helper-и.
helper cthelper ні Список conntrack helper-ів.

Секції forwarding визначають правила переспрямування трафіку між зонами.

config forwarding
  option src 'lan'
  option dest 'wan'
  • Одне правило forwarding охоплює лише один напрямок. Для двостороннього трафіку потрібно створити два правила зі зміненими місцями src і dest.

Параметри

Назва Тип Обов’язковий Типове Опис
name назва правила ні Унікальна назва правила переспрямування.
src назва зони так Зона-джерело трафіку.
dest назва зони так Зона-призначення трафіку.
family рядок ні any ipv4, ipv6 або any.
enabled булевий ні 1 Якщо 0, правило вимкнене.
ipset рядок ні Обмеження через ipset; можна інвертувати з !.

:!: Для роботи цих правил необхідне відстеження з’єднань (conntrack). Принаймні одна із зон повинна мати увімкнений masq або інше, що активує conntrack.

Секція rule використовується для створення простих правил прийому (accept), відхилення (drop) або заборони (reject) трафіку для дозволу або обмеження доступу до певних портів чи хостів.

config rule
  option  name    'Заборонити LAN → WAN для певної IP'
  option  src   'lan'
  option  src_ip    '192.168.1.2'
  option  src_mac   '00:11:22:33:44:55'
  option  src_port  '80'
  option  dest    'wan'
  option  dest_ip   '194.25.2.129'
  option  dest_port '120'
  option  proto   'tcp'
  option  target    'REJECT'

Наступний приклад демонструє переспрямування між зонами (де переспрямування заборонене), з однією зоною lan, яка містить два інтерфейси. Один інтерфейс має сервер з IP-адресою 172.30.100.1, інший — типовий LAN-інтерфейс з діапазоном 192.168.1.0/24. Конфігурація дозволяє IPv4-трафік tcp лише до IP сервера на порт 22.

config rule
  option name             'Переспрямувати SSH до сервера'
  option family           'ipv4'
  option src              'lan'
  option src_ip           '192.168.1.0/24'
  option dest             'lan'
  option dest_ip          '172.30.100.1'
  option proto            'tcp'
  option dest_port        '22'
  option target           'ACCEPT'

* У фаєрволі OpenWrt, зв’язок src і dest визначає тип правила:

  • Якщо вказані обидва — правило для переспрямованого трафіку
  • Якщо лише src — правило для вхідного трафіку
  • Якщо лише dest — правило для вихідного трафіку
  • Якщо не вказано жодного — обробляється як вихідне

* src\_ip і dest\_ip можуть бути як окремою IP-адресою, так і CIDR-нотацією (наприклад, 192.168.1.0/24) * Діапазон портів задається як start-stop, наприклад 6666-6670

Параметри

Назва Тип Обов’язковий Типове Опис
name рядок ні Назва правила
src назва зони ні Зона-джерело трафіку, або \* для будь-якої зони. Якщо не вказано — вважається вихідним трафіком
src_ip IP-адреса ні Вхідний трафік з вказаної IP-адреси або CIDR
src_mac MAC-адреса ні Вхідний трафік з вказаної MAC-адреси
src_port порт або діапазон ні Джерельний порт або діапазон, наприклад 80 або 6666-6670
proto протокол ні tcp udp Один або декілька: tcp, udp, icmp, all тощо
icmp_type список ні any Для ICMP: обмежити конкретними типами (наприклад, echo-request)
dest назва зони ні Зона-призначення трафіку
dest_ip IP-адреса ні IP-адреса призначення (може бути CIDR)
dest_port порт або діапазон ні Порт призначення або діапазон
ipset рядок ні Порівняння з ipset; можна інвертувати з !
mark значення/маска ні Порівняння з маркером пакета, наприклад 0x0/0x1 для парних значень
start_date дата (yyyy-mm-dd) ні Активне з цієї дати
stop_date дата ні Активне до цієї дати включно
start_time час (hh\:mm\:ss) ні Активне з цього часу
stop_time час ні Активне до цього часу
weekdays список днів ні Наприклад, mon wed fri або ! sun sat для виключення вихідних
monthdays список дат ні Наприклад, 1 15 30 або ! 31
utc_time булевий ні 0 Вважати час за UTC, а не локальний
target рядок так DROP Дія: ACCEPT, REJECT, DROP, MARK, NOTRACK
set_mark значення/маска так для MARK Присвоїти маркер пакету через логічну OR-операцію
set_xmark значення/маска так для MARK Присвоїти XOR-маркер
family рядок ні any IP-діапазон: ipv4, ipv6, any
limit рядок ні Обмеження частоти: 5/second, 2/minute тощо
limit_burst ціле число ні 5 Початкова кількість пакетів до активації ліміту
enabled булевий ні yes Активувати або вимкнути правило
device рядок ні FIXME FIXME
direction напрямок ні FIXME FIXME (direction\_out?)
set_helper cthelper ні FIXME FIXME
helper cthelper ні FIXME FIXME

Типи ICMP

address-mask-reply host-redirect pong time-exceeded
address-mask-request host-unknown port-unreachable timestamp-reply
any host-unreachable precedence-cutoff timestamp-request
communication-prohibited ip-header-bad protocol-unreachable TOS-host-redirect
destination-unreachable network-prohibited redirect TOS-host-unreachable
echo-reply network-redirect required-option-missing TOS-network-redirect
echo-request network-unknown router-advertisement TOS-network-unreachable
fragmentation-needed network-unreachable router-solicitation ttl-exceeded
host-precedence-violation parameter-problem source-quench ttl-zero-during-reassembly
host-prohibited ping source-route-failed ttl-zero-during-transit

Переадресація портів (DNAT) визначається секціями типу redirect. Перенаправлення портів також часто називають “port forwarding” або “віртуальні сервери”.

  • Увесь вхідний трафік із вказаної вихідної зони, що відповідає заданим правилам, буде переадресовано на вказаний внутрішній хост.
  • Діапазони портів вказуються у форматі початковий-кінцевий, наприклад: 6666-6670.

Призначений NAT (Destination NAT)

Див. також: Переадресація портів для IPv6

config redirect
  option  name    'DNAT WAN to LAN for SSH'
  option  src   'wan'
  option  src_dport '19900'
  option  dest    'lan'
  option  dest_ip   '192.168.1.1'
  option  dest_port '22'
  option  proto   'tcp'
  option  target    'DNAT'

:!: Якщо в секції конфігурації не вказано src_dport, усі пакети, що відповідають іншим параметрам цієї секції (на будь-якому порту), будуть переадресовані на порт призначення, зазначений у цій секції. Це може становити загрозу безпеці для застосунку, що працює на вказаному порту призначення. Один із способів перевірити цю проблему — скористатись сервісом ShieldsUP! від Gibson Research Corporation і просканувати бажані порти на вашому маршрутизаторі. Можливі відповіді: відкритий (open), закритий (closed) або невидимий (stealth). У випадках відкритих або закритих портів пакети досягають хоста-призначення й отримують підтвердження або відповіді. У той час як невидимі порти просто відкидають пакети; з точки зору сканувального сервера (GRC) — він не може впевнено визначити, чи дійсно пакети досягають хоста.

Початковий NAT (Source NAT)

Найпоширеніша форма SNAT — це маскарадинг, який змінює адресу джерела трафіку до WAN на публічну IP-адресу маршрутизатора. SNAT також можна задати вручну:

config redirect
  option  name    'SNAT DMZ 192.168.1.250 to WAN 1.2.3.4 for ICMP'
  option  src   'dmz'
  option  src_ip    '192.168.1.250'
  option  src_dip   '1.2.3.4'
  option  dest    'wan'
  option  proto   'icmp'
  option  target    'SNAT'

Параметри (Options)

Див. також: Список опцій SNAT на OpenWrt SNAPSHOT

Назва Тип Обовʼязково Типове Опис
name рядок ні рядок Назва правила переадресації
src назва зони так для DNAT (не задано) Вказує зону-джерело трафіку. Зазвичай для переадресації портів це wan.
src_ip IP-адреса ні (не задано) Вхідний трафік із вказаної IP-адреси.
src_dip IP-адреса так для SNAT (не задано) Для DNAT: трафік, скерований на вказану IP-адресу. Для SNAT: нова адреса-джерело після заміни.
src_mac MAC-адреса ні (не задано) Трафік від вказаної MAC-адреси.
src_port порт або діапазон ні (не задано) Трафік з вказаного порту або діапазону портів джерела.
src_dport порт або діапазон ні (не задано) Для DNAT: порт або діапазон портів призначення. Для SNAT: змінений порт джерела.
proto назва або номер протоколу ні tcp udp Протокол трафіку: tcp, udp, icmp, all тощо. Також дозволено числові значення та імена з /etc/protocols.
dest назва зони так для SNAT (не задано) Зона призначення трафіку. Для DNAT — не має значення.
dest_ip IP-адреса ні (не задано) Для DNAT: хост, на який перенаправляється трафік. Для SNAT: IP призначення, що перевіряється.
dest_port порт або діапазон ні (не задано) Для DNAT: порт внутрішнього хоста. Для SNAT: перевірка на порти призначення.
ipset рядок ні (не задано) Ім’я ipset-набору, за яким фільтрується трафік.
mark рядок ні (не задано) Firewall-маркування. Напр., 0xFF або !0x10 (виключення).
start_date дата (рррр-мм-дд) ні (завжди) Початкова дата для відповідності.
stop_date дата (рррр-мм-дд) ні (завжди) Кінцева дата для відповідності.
start_time час (гг:хх:сс) ні (завжди) Початковий час доби для відповідності.
stop_time час (гг:хх:сс) ні (завжди) Кінцевий час доби для відповідності.
weekdays список днів тижня ні (завжди) Напр., sun mon fri. ! sat sun — усі, крім суботи та неділі.
monthdays список чисел ні (завжди) Напр., 2 5 30. ! 31 — усі дні, крім 31-го.
utc_time булеве значення ні 0 Інтерпретація часу у форматі UTC.
target рядок ні DNAT Тип NAT: DNAT або SNAT.
family рядок ні (авто) Діапазон адрес: ipv4, ipv6 або any.
reflection булеве значення ні 1 Увімкнення NAT-відображення для DNAT.
reflection_src рядок ні internal Джерело для NAT-відображення: internal або external.
reflection_zone список зон ні (не задано) Зони, для яких увімкнено відображення.
limit рядок ні (не задано) Максимальна середня швидкість відповідності. Напр.: 3/sec.
limit_burst ціле число ні 5 Початковий ліміт пакетів вище порогового значення.
extra рядок ні (не задано) Додаткові аргументи iptables. Не підтримується у firewall4.
enabled рядок ні 1 або yes Увімкнення правила переадресації.
helper cthelper ні FIXME FIXME

Див. також: Приклади IP-наборів

`fw4` підтримує використання або створення IP-наборів для спрощення співставлення з великими списками IP-адрес або портів без необхідності створення окремого правила для кожного елементу. `fw4` підтримує менше параметрів (див. нижче).

Параметри (fw3)

Назва Тип Обов’язково Типове Опис
enabled булеве ні 1 Дозволяє вимкнути оголошення ipset без видалення секції.
external рядок ні (немає) Якщо встановлено, firewall посилається на вже існуючий ipset з вказаною назвою. Якщо не встановлено — створює ipset при запуску та знищує при зупинці.
name рядок так, якщо external не встановлено
ні, якщо встановлено
(немає) або значення external Внутрішня назва ipset у firewall для використання в правилах або переадресаціях.
family рядок ні ipv4 Діапазон адрес: ipv4 або ipv6. Застосовується лише до hash та list. Тип bitmap передбачає ipv4.
storage рядок ні залежить від типу даних Метод зберігання: bitmap, hash або list. Типовий значення залежить від типів даних у match. :!: Тільки для fw3 — потрібно прибрати в конфігурації fw4.
match список кортежів напрямок/тип так (немає) Вказує типи, що співпадають: ip, port, mac, net, set та напрямки: src або dest. Наприклад: src_port або dest_net. Для мульти-співставлення вказується в лапках: “match dest_ip dest_port”.
iprange IP-діапазон так для bitmap з типом ip (немає) Визначає діапазон IP. Застосовується до hash. Див. ipset(8).
portrange Діапазон портів так для bitmap з типом port (немає) Діапазон портів, лише для hash.
netmask ціле число ні 32 Якщо задано, адреси мережі будуть збережені замість IP-хостів. Від 1 до 32.
maxelem ціле число ні 65536 Максимальна кількість елементів у наборі. Тільки для типів hash та list.
hashsize ціле число ні 1024 Початковий розмір хешу. Лише для hash.
timeout ціле число ні 0 Таймаут для елементів набору. 0 — увімкнено таймаут, але без значення.
entry значення набору ні (немає) IP-адреса, CIDR або MAC. Один запис — одне значення.
loadfile рядок ні (немає) Шлях до файлу в OpenWrt з переліком CIDR-ів.

Параметри (fw4)

Назва Тип Обов’язково Типове Опис
enabled булеве ні 1 Дозволяє вимкнути оголошення ipset без видалення секції.
comment булеве ні (немає) Ймовірна помилка: має бути рядком для коментаря користувача.
name рядок так (немає) Внутрішня назва ipset у firewall.
family рядок ні ipv4 Діапапзон адрес: ipv4 або ipv6.
match список типів ipset так (немає) Типи даних (ip, port, mac, net, set) і напрямок (src, dest), наприклад: src_port.
maxelem ціле число ні 65536 Максимум елементів у наборі.
timeout ціле число ні 0 Таймаут за замовчуванням. 0 — лише прапорець, без значення.
entry список значень ні IP, CIDR або MAC. Один елемент на запис.
loadfile рядок ні (немає) Шлях до файлу з CIDR-ами.

Типи IP-наборів (IP set types)

prefix_suffix

Префікс (напрямок) Суфікс (тип даних) Примітки
src_* Співпадіння за джерелом
dest_* Співпадіння за призначенням
_ip IP-адреси
_port TCP/UDP порти
_mac MAC-адреси
_net Підмережі
_set Не підтримується в firewall4

Зберігання / Параметри співпадіння (Storage / Match options)

Порядок співставлення типів даних має значення.

Діапазон Тип зберігання Співпадіння Примітки
ipv4 bitmap ip Потрібен параметр iprange
ipv4 bitmap ip mac Потрібен параметр iprange
ipv4 bitmap port Потрібен параметр portrange
будь-яке hash ip -
будь-яке hash net -
будь-яке hash ip port -
будь-яке hash net port -
будь-яке hash ip port ip -
будь-яке hash ip port net -
- list set Мета-набір для створення набору з наборів

Варіанти зберігання та відповідності (Storage / Match options)

Порядок співставлення типів даних має значення

Діапазон Метод зберігання Співставлення Примітки
ipv4 bitmap ip Потрібен параметр iprange
ipv4 bitmap ip mac Потрібен параметр iprange
ipv4 bitmap port Потрібен параметр portrange
будь-яке hash ip
будь-яке hash net
будь-яке hash ip port
будь-яке hash net port
будь-яке hash ip port ip
будь-яке hash ip port net
list set Мета-тип для створення набору з наборів

fw4 підтримує кілька способів додавання власних правил файрволу. У всіх випадках власні правила мають бути записані у стилі nftables.

Секція config include з фрагментами nftables

Один зі способів — додавання фрагментів правил у стилі nftables. Можливі кілька позицій для вставки в структуру nftables.

Наприклад, щоб додати власне логування до ланцюга input_wan:

# /etc/config/firewall
config include
  option  type    'nftables'
  option  path    '/etc/my_custom_firewall_rule.nft'
  option  position  'chain-pre'
  option  chain   'input_wan'
 
# /etc/my_custom_firewall_rule.nft
tcp dport 0-1023 log prefix "Inbound WAN connection attempt to low TCP port: "

Щоб додати один або більше власних ланцюгів:

config include
  option  type    'nftables'
  option  path    '/etc/my_custom_firewall_chain.nft'
  option  position  'table-post'

Підтримувані параметри:

Назва Тип Обовʼязково Типове Опис
enabled булеве ні 1 Дозволяє вимкнути відповідне додавання без видалення секції
type рядок ні script Тип додавання: script (shell-скрипт сумісний з fw3) або nftables (фрагмент nftables)
path назва файлу так Шлях до файлу, який потрібно додати
position рядок так (для типу nftables) table-post Позиція вставки правил (див. таблицю нижче)
chain рядок так (якщо position починається з chain-) Назва ланцюга, у який вставлятимуться правила

Можливі позиції вставки для фрагментів nftables:

Позиція Призначення
ruleset-pre На самому початку, до визначення таблиці fw4
ruleset-post У самому кінці, після всієї таблиці fw4
table-pre На початку таблиці fw4, до визначення ланцюгів
table-post В кінці таблиці fw4, після визначення всіх ланцюгів
chain-pre На початку ланцюга $chain (вказаного в option chain), до існуючих правил
chain-post В кінці ланцюга $chain, після існуючих правил

Для розуміння структури таблиці/ланцюгів/правил виконайте команду: ``fw4 print``

:!: Примітка: суфікс -pre можна також писати як -prepend, а -post — як -postpend або -append.

Секція config include з shell-скриптом

Додавання власних правил за допомогою shell-скрипта працює аналогічно fw3, але скрипт повинен використовувати синтаксис nftables. Параметр fw4_compatible обовʼязковий, якщо вказано шлях до файлу /etc/firewall.user — він вказує, що скрипт сумісний із fw4.

config include
  option  enabled   1
  option  type    'script'
  option  path    '/etc/firewall.user'
  option  fw4_compatible  1

:!: Параметри family та reload з fw3 більше не підтримуються у fw4.

Типові drop-in додавання (Default drop-in includes)

fw4 за замовчуванням додає всі файли з розширенням .nft у каталозі /etc/nftables.d/ — на початку таблиці fw4 (еквівалент позиції table-pre).

Це означає, що ви можете створювати власні ланцюги, просто додавши файл із розширенням .nft до каталогу /etc/nftables.d/.

Drop-in додавання для авторів пакунків (Drop-in includes for package authors)

Автори пакунків, яким потрібні власні правила файрволу, можуть додавати фрагменти nftables у відповідні директорії залежно від бажаної позиції вставки:

Шлях Позиція вставки
/usr/share/nftables.d/ruleset-pre/*.nft Додаються на самому початку, до визначення таблиці fw4
/usr/share/nftables.d/ruleset-post/*.nft Додаються в самому кінці, після визначення таблиці fw4
/usr/share/nftables.d/table-pre/*.nft На початку таблиці fw4, до оголошення ланцюгів
/usr/share/nftables.d/table-post/*.nft В кінці таблиці fw4, після всіх оголошених ланцюгів
/usr/share/nftables.d/chain-pre/${chain}/*.nft На початку ланцюга ${chain} (валідна назва fw4-ланцюга), до правил у цьому ланцюгу
/usr/share/nftables.d/chain-post/${chain}/*.nft В кінці ланцюга ${chain}, після правил у цьому ланцюгу

:!: Усі фрагменти мають бути доступними для читання та закінчуватися на .nft.

У старіших версіях OpenWrt (з fw3) ви можете додати власні скрипти файрволу, визначивши одну або більше секцій include у конфігурації файрволу:

config include
  option  path    '/etc/firewall.user'

Файл /etc/firewall.user за замовчуванням порожній.

Параметри

Назва Тип Обов’язково Типове Опис
enabled булеве ні 1 Дозволяє вимкнути відповідне додавання без видалення секції
type рядок ні script Тип додавання: script для shell-скриптів або restore для файлів у форматі iptables-restore
path назва файлу так /etc/firewall.user Вказує на shell-скрипт, який виконується при запуску або перезапуску файрволу
family рядок ні any Діапазон адрес: ipv4, ipv6 або any
reload булеве ні 0 Визначає, чи викликати скрипт при перезавантаженні файрволу. Потрібно лише, якщо скрипт змінює внутрішні ланцюги.

Скрипти типу script можуть містити будь-які команди оболонки, наприклад: розширені правила nftables або команди `tc`, потрібні для трафік-шейпінгу.

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2025/06/01 10:55
  • by vazaz