Система керування фаєрволом OpenWrt — firewall — переважно конфігурується через файл /etc/config/firewall.
Основна увага у цьому розділі приділяється саме конфігураційним файлам і їхньому вмісту. Інтерфейси LuCI та UCI є лише зручними абстракціями, що в результаті змінюють ці самі файли.
/etc/config/firewall; саме його потрібно редагувати для зміни налаштувань./etc/init.d/firewall reload
#, ігноруються парсером/etc/config/firewall охоплює більшість, але не всі можливості NetFilter/etc/config/firewallLuCI — зручний спосіб переглядати та змінювати налаштування фаєрволу:
Після внесення змін натисніть Save & Apply.
#) з файлу /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 зручний для перегляду, але не дуже підходить для складного редагування, оскільки:
Нижче — короткий огляд типів секцій у конфігурації фаєрволу.
lan і wan) та однієї forwarding для дозволу трафіку з lan у wan.Секція 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'
| Назва | Тип | Обов’язковий | Типове | Опис |
|---|---|---|---|---|
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'
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 | рядок | ні | | |
direction | напрямок | ні | | |
set_helper | cthelper | ні | | |
helper | cthelper | ні | | |
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.Див. також: Переадресація портів для 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) — він не може впевнено визначити, чи дійсно пакети досягають хоста.
Найпоширеніша форма 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'
Див. також: Список опцій 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 | | | | |
enabled | рядок | ні | 1 або yes | Увімкнення правила переадресації. |
helper | cthelper | ні | | |
Див. також: Приклади IP-наборів
`fw4` підтримує використання або створення IP-наборів для спрощення співставлення з великими списками IP-адрес або портів без необхідності створення окремого правила для кожного елементу. `fw4` підтримує менше параметрів (див. нижче).
| Назва | Тип | Обов’язково | Типове | Опис |
|---|---|---|---|---|
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. |
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-ів. |
| Назва | Тип | Обов’язково | Типове | Опис |
|---|---|---|---|---|
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-ами. |
prefix_suffix
| Префікс (напрямок) | Суфікс (тип даних) | Примітки |
|---|---|---|
| src_* | Співпадіння за джерелом | |
| dest_* | Співпадіння за призначенням | |
| _ip | IP-адреси | |
| _port | TCP/UDP порти | |
| _mac | MAC-адреси | |
| _net | Підмережі | |
| _set | Не підтримується в firewall4 |
Порядок співставлення типів даних має значення.
| Діапазон | Тип зберігання | Співпадіння | Примітки |
|---|---|---|---|
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 | Мета-набір для створення набору з наборів |
Порядок співставлення типів даних має значення
| Діапазон | Метод зберігання | Співставлення | Примітки |
|---|---|---|---|
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.
Один зі способів — додавання фрагментів правил у стилі 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.
Додавання власних правил за допомогою 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.
fw4 за замовчуванням додає всі файли з розширенням .nft у каталозі /etc/nftables.d/ — на початку таблиці fw4 (еквівалент позиції table-pre).
Це означає, що ви можете створювати власні ланцюги, просто додавши файл із розширенням .nft до каталогу /etc/nftables.d/.
Автори пакунків, яким потрібні власні правила файрволу, можуть додавати фрагменти 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`, потрібні для трафік-шейпінгу.