Table of Contents

Компоненти міжмережевого екрана

Реалізація міжмережевого екрана в OpenWrt — це механізм фільтрації мережевого трафіку, що проходить через маршрутизатор. На високому рівні можливі три результати обробки пакета: - він відкидається (dropped) без відповіді, - відхиляється (rejected) з повідомленням про помилку джерелу, - або приймається (accepted) і передається до пункту призначення.

Зверніть увагу, що сам маршрутизатор може бути пунктом призначення, наприклад для доступу до його інтерфейсу керування або моніторингу.

OpenWrt побудований на базі Linux-проєкту netfilter. Основні компоненти фаєрволу OpenWrt:

  1. застосунок firewall3
  2. набір netfilter hooks у мережевих стека ядра
  3. набір модулів ядра Linux, які виконують перевірку мережевих пакетів
  4. параметри налаштування ядра (через sysctl) для конфігурації мережевого стека та фаєрволу

Ця документація ґрунтується на версії OpenWrt 18.06.0. Більшість прикладів перевірено на цій версії з використанням тестової мережі.

Firewall3 (fw3)

Застосунок fw3 — головна утиліта для конфігурації фаєрволу в OpenWrt. Вона розроблена командою OpenWrt спеціально для цього проєкту.

Netfilter hooks у ядрі

У кожному мережевому стеку ядра реалізовані так звані hooks (точки перехоплення), які викликаються у визначених місцях. Коли пакет проходить через стек, кожен хук виконує перевірку на відповідність правилам netfilter, прив’язаним до цього хука.

Код хуків netfilter використовує набір макросів `NF_HOOK`. Кожен хук приймає наступні аргументи:

Модулі ядра netfilter

Модулі netfilter завантажуються при старті системи згідно з конфігурацією. Зазвичай використовується близько 35 модулів для підтримки стандартного функціоналу, але кількість може зрости в залежності від потреб. Наприклад, використання ipset додає ~16 додаткових модулів.

Більшість модулів невеликі та реалізують одну конкретну функцію. Приклади:

Деякі модулі є більшими за розміром. Наприклад:

Налаштування ядра через sysctl

Служба 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