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

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

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

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

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

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

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

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

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

  • Протокол мережі: unspec (усі), ipv4, ipv6, arp, bridge, decnet
  • Номер хука: PRE_ROUTING, LOCAL_IN, FORWARD, LOCAL_OUT, POST_ROUTING
  • Структура мережі: контекст мережевого стеку
  • Сокет: BSD-сокет, пов’язаний з пакетом
  • Пакет: буфер сокета (socket buffer)
  • Вхідний інтерфейс: звідки пакет надійшов
  • Вихідний інтерфейс: куди пакет буде надісланий
  • Колбек-функція: викликається, якщо пакет проходить перевірку

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

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

  • `ipt_REJECT` — реалізує ціль REJECT
  • `xt_multiport` — виконує відповідність по портах (match)
  • `xt_TCPMSS` — змінює максимальний розмір TCP-сегмента (MSS) у таблиці mangle

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

  • `nf_conntrack` — здійснює відстеження з’єднань, підтримку NAT (masquerading) та дефрагментацію пакетів.

Служба 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
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 09:41
  • by vazaz