Firewall (Межсетевой экран)
VyOS использует nftables (начиная с версии 1.5.x) в качестве backend для межсетевого экрана, обеспечивая гибкое и производительное управление сетевым трафиком.
Архитектура firewall
Этапы обработки пакетов
Пакеты проходят через несколько этапов обработки:
- Prerouting - пакеты до принятия решения о маршрутизации
- Input - пакеты, адресованные самому маршрутизатору
- Forward - транзитные пакеты (проходящие через маршрутизатор)
- Output - пакеты, исходящие от маршрутизатора
- 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.30Network 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/8Port 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 8080Interface 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-requestTCP флаги
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/minuteZone-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-FILTERGlobal 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 10Log martians
Логирование пакетов с некорректными адресами:
set firewall global-options log-martiansState 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 dropFlowtable
Аппаратное ускорение для высокопроизводительной обработки:
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Лучшие практики
- Default deny - используйте
default-action dropи разрешайте только необходимый трафик - Stateful inspection - всегда разрешайте established/related соединения
- Блокируйте invalid - отбрасывайте пакеты в состоянии invalid
- Используйте группы - упрощает управление правилами
- Логируйте критичное - включайте логирование для важных правил
- Нумерация правил - оставляйте промежутки (10, 20, 30) для будущих изменений
- Документируйте - используйте описательные имена для групп и зон
- Тестируйте осторожно - используйте
commit-confirmдля удаленных изменений