Firewall (Межсетевой экран)

VyOS использует nftables (начиная с версии 1.5.x) в качестве backend для межсетевого экрана, обеспечивая гибкое и производительное управление сетевым трафиком.

Архитектура firewall

Этапы обработки пакетов

Пакеты проходят через несколько этапов обработки:

  1. Prerouting - пакеты до принятия решения о маршрутизации
  2. Input - пакеты, адресованные самому маршрутизатору
  3. Forward - транзитные пакеты (проходящие через маршрутизатор)
  4. Output - пакеты, исходящие от маршрутизатора
  5. Postrouting - пакеты после принятия решения о маршрутизации
                                 Пакет входит
                                      │
                                      ▼
                               ┌─────────────┐
                               │ Prerouting  │
                               └──────┬──────┘
                                      │
                         ┌────────────┴────────────┐
                         │                         │
                         ▼                         ▼
                   ┌──────────┐            ┌──────────────┐
                   │  Input   │            │   Forward    │
                   └────┬─────┘            └──────┬───────┘
                        │                         │
                        ▼                         ▼
                   Локальные                 Маршрутизация
                   процессы                       │
                        │                         │
                        ▼                         │
                   ┌──────────┐                  │
                   │  Output  │                  │
                   └────┬─────┘                  │
                        │                         │
                        └────────────┬────────────┘
                                     ▼
                              ┌─────────────┐
                              │ Postrouting │
                              └──────┬──────┘
                                     ▼
                               Пакет выходит

Типы firewall

IPv4 Firewall

Правила для IPv4 трафика:

set firewall ipv4 input filter rule <number>
set firewall ipv4 forward filter rule <number>
set firewall ipv4 output filter rule <number>
set firewall ipv4 prerouting filter rule <number>

IPv6 Firewall

Правила для IPv6 трафика:

set firewall ipv6 input filter rule <number>
set firewall ipv6 forward filter rule <number>
set firewall ipv6 output filter rule <number>

Bridge Firewall

Правила для bridge (L2) трафика:

set firewall bridge forward filter rule <number>
set firewall bridge prerouting filter rule <number>

Группы (Groups)

Группы позволяют объединять адреса, сети, порты и интерфейсы для упрощения правил.

Address Group

Группа IP-адресов:

set firewall group address-group LAN-HOSTS address 192.168.1.10
set firewall group address-group LAN-HOSTS address 192.168.1.20
set firewall group address-group LAN-HOSTS address 192.168.1.30

Network Group

Группа сетей:

set firewall group network-group INTERNAL-NETS network 192.168.0.0/24
set firewall group network-group INTERNAL-NETS network 192.168.1.0/24
set firewall group network-group INTERNAL-NETS network 10.0.0.0/8

Port Group

Группа портов:

set firewall group port-group WEB-PORTS port 80
set firewall group port-group WEB-PORTS port 443
set firewall group port-group WEB-PORTS port 8080

Interface Group

Группа интерфейсов:

set firewall group interface-group LAN-INTERFACES interface eth1
set firewall group interface-group LAN-INTERFACES interface eth2
set firewall group interface-group LAN-INTERFACES interface eth3

Структура правил

Базовое правило

set firewall ipv4 forward filter rule 10 action accept
set firewall ipv4 forward filter rule 10 source address 192.168.1.0/24
set firewall ipv4 forward filter rule 10 destination address 8.8.8.8
set firewall ipv4 forward filter rule 10 protocol tcp
set firewall ipv4 forward filter rule 10 destination port 443

Действия (Actions)

  • accept - разрешить пакет
  • drop - отбросить пакет (без уведомления)
  • reject - отклонить пакет (с отправкой ICMP/TCP RST)
  • return - вернуться к правилу вызвавшей цепочки
  • jump <target> - перейти к другой цепочке правил

Default Action

Действие по умолчанию для трафика, не соответствующего ни одному правилу:

set firewall ipv4 forward filter default-action drop

Критерии сопоставления

Source и Destination

IP-адреса:

set firewall ipv4 forward filter rule 10 source address 192.168.1.0/24
set firewall ipv4 forward filter rule 10 destination address 8.8.8.8

Группы адресов:

set firewall ipv4 forward filter rule 10 source group address-group LAN-HOSTS
set firewall ipv4 forward filter rule 10 destination group network-group DMZ-NETS

Порты:

set firewall ipv4 forward filter rule 10 source port 1024-65535
set firewall ipv4 forward filter rule 10 destination port 80
set firewall ipv4 forward filter rule 10 destination group port-group WEB-PORTS

Протоколы

set firewall ipv4 forward filter rule 10 protocol tcp
set firewall ipv4 forward filter rule 20 protocol udp
set firewall ipv4 forward filter rule 30 protocol icmp

Список протоколов: tcp, udp, icmp, esp, ah, gre, ipip, all

ICMP

ICMP типы:

set firewall ipv4 forward filter rule 30 protocol icmp
set firewall ipv4 forward filter rule 30 icmp type-name echo-request

TCP флаги

set firewall ipv4 forward filter rule 10 protocol tcp
set firewall ipv4 forward filter rule 10 tcp flags syn
set firewall ipv4 forward filter rule 10 tcp flags not fin
set firewall ipv4 forward filter rule 10 tcp flags not ack

Состояние соединения (State)

set firewall ipv4 forward filter rule 10 state established
set firewall ipv4 forward filter rule 10 state related
set firewall ipv4 forward filter rule 20 state invalid
set firewall ipv4 forward filter rule 20 action drop

Состояния:

  • established - пакеты принадлежат установленным соединениям
  • related - пакеты связаны с установленными соединениями
  • new - новые соединения
  • invalid - некорректные пакеты

Интерфейсы

Входящий интерфейс:

set firewall ipv4 forward filter rule 10 inbound-interface name eth0

Исходящий интерфейс:

set firewall ipv4 forward filter rule 10 outbound-interface name eth1

Группы интерфейсов:

set firewall ipv4 forward filter rule 10 inbound-interface group LAN-INTERFACES

Логирование

Включение логирования для правила:

set firewall ipv4 forward filter rule 10 log

С пользовательским префиксом:

set firewall ipv4 forward filter rule 10 log
set firewall ipv4 forward filter rule 10 log-prefix "[FW-DROP]"

Лимитирование (Rate Limiting)

Ограничение частоты срабатывания правила:

set firewall ipv4 forward filter rule 10 limit rate 10/second
set firewall ipv4 forward filter rule 10 limit burst 20

Примеры конфигурации

Базовая защита маршрутизатора (Input)

# Default drop
set firewall ipv4 input filter default-action drop

# Разрешить established/related
set firewall ipv4 input filter rule 10 action accept
set firewall ipv4 input filter rule 10 state established
set firewall ipv4 input filter rule 10 state related

# Отбросить invalid
set firewall ipv4 input filter rule 20 action drop
set firewall ipv4 input filter rule 20 state invalid

# Разрешить ICMP
set firewall ipv4 input filter rule 30 action accept
set firewall ipv4 input filter rule 30 protocol icmp

# Разрешить SSH из LAN
set firewall ipv4 input filter rule 40 action accept
set firewall ipv4 input filter rule 40 source group address-group LAN-NETWORKS
set firewall ipv4 input filter rule 40 destination port 22
set firewall ipv4 input filter rule 40 protocol tcp

Базовая защита для транзитного трафика (Forward)

# Default drop
set firewall ipv4 forward filter default-action drop

# Established/related
set firewall ipv4 forward filter rule 10 action accept
set firewall ipv4 forward filter rule 10 state established
set firewall ipv4 forward filter rule 10 state related

# Invalid drop
set firewall ipv4 forward filter rule 20 action drop
set firewall ipv4 forward filter rule 20 state invalid

# Разрешить LAN -> WAN
set firewall ipv4 forward filter rule 30 action accept
set firewall ipv4 forward filter rule 30 source group address-group LAN-NETWORKS
set firewall ipv4 forward filter rule 30 outbound-interface name eth0

Разрешение конкретных сервисов

# Web сервер в DMZ
set firewall ipv4 forward filter rule 100 action accept
set firewall ipv4 forward filter rule 100 destination address 192.168.100.10
set firewall ipv4 forward filter rule 100 destination group port-group WEB-PORTS
set firewall ipv4 forward filter rule 100 protocol tcp

# SSH для администраторов
set firewall ipv4 forward filter rule 110 action accept
set firewall ipv4 forward filter rule 110 source group address-group ADMIN-HOSTS
set firewall ipv4 forward filter rule 110 destination group network-group SERVERS
set firewall ipv4 forward filter rule 110 destination port 22
set firewall ipv4 forward filter rule 110 protocol tcp

Защита от DoS

# Лимит ICMP
set firewall ipv4 input filter rule 30 action accept
set firewall ipv4 input filter rule 30 protocol icmp
set firewall ipv4 input filter rule 30 limit rate 10/second

# Лимит новых SSH соединений
set firewall ipv4 input filter rule 40 action accept
set firewall ipv4 input filter rule 40 destination port 22
set firewall ipv4 input filter rule 40 protocol tcp
set firewall ipv4 input filter rule 40 state new
set firewall ipv4 input filter rule 40 limit rate 3/minute

Zone-Based Firewall

Зоны позволяют группировать интерфейсы и определять политики между зонами.

Создание зон

set firewall zone LAN interface eth1
set firewall zone LAN default-action drop

set firewall zone WAN interface eth0
set firewall zone WAN default-action drop

set firewall zone DMZ interface eth2
set firewall zone DMZ default-action drop

Политики между зонами

# LAN -> WAN
set firewall zone LAN from WAN firewall ipv4 name LAN-WAN-FILTER

# WAN -> LAN (обычно блокируется)
set firewall zone WAN from LAN firewall ipv4 name WAN-LAN-FILTER

Global Options

Connection tracking

Timeout для различных протоколов:

set firewall global-options timeout tcp close 10
set firewall global-options timeout tcp established 86400
set firewall global-options timeout udp other 30
set firewall global-options timeout icmp 10

Log martians

Логирование пакетов с некорректными адресами:

set firewall global-options log-martians

State policy

Политика для различных состояний соединений:

set firewall global-options state-policy established action accept
set firewall global-options state-policy related action accept
set firewall global-options state-policy invalid action drop

Flowtable

Аппаратное ускорение для высокопроизводительной обработки:

set firewall flowtable FT01 interface eth0
set firewall flowtable FT01 interface eth1
set firewall flowtable FT01 offload hardware

Операционные команды

Просмотр правил

show firewall
show firewall ipv4
show firewall ipv4 forward filter
show firewall ipv4 forward filter rule 10

Просмотр статистики

show firewall statistics

Просмотр групп

show firewall group
show firewall group address-group LAN-NETWORKS

Мониторинг логов

monitor log | grep FW

Устранение неполадок

Трафик блокируется

Проверьте правила:

show firewall ipv4 forward filter

Включите логирование для диагностики:

set firewall ipv4 forward filter rule 10 log
commit

Просмотр логов:

show log firewall
monitor log | grep firewall

Проблемы с производительностью

Используйте flowtable для offload:

set firewall flowtable FT01 interface eth0
set firewall flowtable FT01 interface eth1
set firewall flowtable FT01 offload hardware

Проверьте connection tracking:

show conntrack table ipv4

Лучшие практики

  1. Default deny - используйте default-action drop и разрешайте только необходимый трафик
  2. Stateful inspection - всегда разрешайте established/related соединения
  3. Блокируйте invalid - отбрасывайте пакеты в состоянии invalid
  4. Используйте группы - упрощает управление правилами
  5. Логируйте критичное - включайте логирование для важных правил
  6. Нумерация правил - оставляйте промежутки (10, 20, 30) для будущих изменений
  7. Документируйте - используйте описательные имена для групп и зон
  8. Тестируйте осторожно - используйте commit-confirm для удаленных изменений

Следующие шаги

  • NAT - настройка трансляции адресов
  • VPN - защищенные соединения
  • Policy - политики маршрутизации