Реалізація міжмережевого екрана в OpenWrt — це механізм фільтрації мережевого трафіку, що проходить через маршрутизатор. На високому рівні можливі три результати обробки пакета: - він відкидається (dropped) без відповіді, - відхиляється (rejected) з повідомленням про помилку джерелу, - або приймається (accepted) і передається до пункту призначення.
Зверніть увагу, що сам маршрутизатор може бути пунктом призначення, наприклад для доступу до його інтерфейсу керування або моніторингу.
OpenWrt побудований на базі Linux-проєкту netfilter. Основні компоненти фаєрволу OpenWrt:
Ця документація ґрунтується на версії OpenWrt 18.06.0. Більшість прикладів перевірено на цій версії з використанням тестової мережі.
Застосунок fw3 — головна утиліта для конфігурації фаєрволу в OpenWrt. Вона розроблена командою OpenWrt спеціально для цього проєкту.
У кожному мережевому стеку ядра реалізовані так звані hooks (точки перехоплення), які викликаються у визначених місцях. Коли пакет проходить через стек, кожен хук виконує перевірку на відповідність правилам netfilter, прив’язаним до цього хука.
Код хуків netfilter використовує набір макросів `NF_HOOK`. Кожен хук приймає наступні аргументи:
Модулі netfilter завантажуються при старті системи згідно з конфігурацією. Зазвичай використовується близько 35 модулів для підтримки стандартного функціоналу, але кількість може зрости в залежності від потреб. Наприклад, використання ipset додає ~16 додаткових модулів.
Більшість модулів невеликі та реалізують одну конкретну функцію. Приклади:
Деякі модулі є більшими за розміром. Наприклад:
Служба sysctl виконується під час старту системи. Це скрипт, який зчитує /etc/sysctl.conf та всі файли в /etc/sysctl.d/. Ці файли встановлюють параметри ядра для функціонування OpenWrt. Див. sysctl.conf.
Усі параметри документовані в Documentation/networking/ дереві вихідного коду ядра, тому тут вони не повторюються. Для довідки дивіться файли `ip-sysctl.txt` і `nf_conntrack-sysctl.txt`.
Оскільки функціональність OpenWrt є досить стабільною, вам майже напевно не потрібно змінювати значення параметрів ядра, відмінні від типових у прошивці.
Зверніть увагу, що підтримка netfilter для bridge-трафіку в ядрі вимкнена за замовчуванням!
Згідно з `ip-sysctl.txt`:
bridge-nf-call-iptables - BOOLEAN 1 : передавати bridge-трафік IPv4 у ланцюжки iptables. 0 : вимкнути цю функцію. Типове значення: 1