После взлома через бытовой роутер: pfSense для дизайн-студии

Задача клиента: вся студия за одним TP-Link

В декабре 2025 года нам в АйТи Фреш позвонил директор дизайн-студии «ВектраДизайн» из Краснодара с тревожным сообщением: «Нас взломали, клиентские макеты утекли, и мы понятия не имеем, как это произошло». Студия с 35 сотрудниками — дизайнерами, аниматорами и разработчиками — работала над проектами крупных брендов, и утечка файлов грозила репутационной катастрофой.

Расследование показало картину, типичную для малого бизнеса: вся офисная сеть из 35 рабочих станций, NAS-хранилища с проектами, 3 принтеров и IP-телефонии работала через бытовой роутер TP-Link Archer C80. Один SSID, один пароль на всех, UPnP включён, прошивка двухлетней давности с известными CVE. Атакующий проник через уязвимость в веб-интерфейсе роутера (он торчал в интернет на порту 8080) и получил доступ ко всей плоской сети.

«Мы дизайнеры, а не айтишники. Поставили роутер, который достали из коробки, и забыли про него на два года. Теперь понимаем цену этой забывчивости» — директор «ВектраДизайн».

Аудит сетевой инфраструктуры

Наш инженер выехал на площадку и провёл полный аудит. Обнаруженное не удивило, но ужаснуло:

  • Плоская сеть — все устройства в одном сегменте 192.168.0.0/24, без VLAN
  • Wi-Fi — один SSID с паролем, который знали все сотрудники и бывшие сотрудники
  • UPnP — включён, автоматически пробрасывал порты из LAN в WAN
  • NAS Synology — доступен для всех устройств в сети, SMB без аутентификации для некоторых шар
  • Нет IDS/IPS — никакого анализа трафика
  • Нет VPN — удалённые дизайнеры подключались к NAS через проброшенный порт
  • DNS — использовался DNS провайдера, без фильтрации
# Сканируем сеть для инвентаризации
nmap -sn 192.168.0.0/24 -oG - | grep "Up" | wc -l
# 58 устройств (35 рабочих + личные телефоны + IoT)

# Проверяем проброшенные порты на WAN
nmap -sS -p 1-65535 85.xx.xx.xx
# PORT      STATE SERVICE
# 80/tcp    open  http          ← веб-интерфейс роутера!
# 443/tcp   open  https
# 5000/tcp  open  upnp          ← Synology DSM
# 8080/tcp  open  http-proxy    ← роутер admin
# 32400/tcp open  plex          ← кто-то поставил Plex

# Пять открытых портов в интернет через UPnP — катастрофа

Выбор решения: pfSense

Требования к новому сетевому решению:

  1. Полноценный stateful firewall с гранулярными правилами
  2. Сегментация сети (VLAN): рабочие станции, серверы, гостевой Wi-Fi
  3. VPN для удалённых сотрудников
  4. IDS/IPS для обнаружения атак
  5. DNS-фильтрация и ad-blocking
  6. Traffic shaping для приоритизации VoIP
  7. Высокая доступность (HA)

Мы выбрали pfSense CE — open-source решение на базе FreeBSD, которое превращает обычный x86-сервер в корпоративный UTM-шлюз. Аппаратная платформа: Protectli Vault FW4B (Intel Celeron J3160, 8 ГБ RAM, 120 ГБ SSD, 4 порта Intel GbE) — два устройства для HA-кластера.

Установка pfSense и базовая настройка интерфейсов

Установка pfSense занимает 10 минут, но правильная настройка интерфейсов — фундамент всей безопасности. Мы разделили сеть на 4 зоны.

Установка и начальная конфигурация

Скачиваем образ pfSense CE и записываем на USB:

# На рабочей станции Linux
wget https://atxfiles.netgate.com/mirror/downloads/pfSense-CE-2.7.2-RELEASE-amd64.iso.gz
gunzip pfSense-CE-2.7.2-RELEASE-amd64.iso.gz

# Записываем на USB-накопитель
sudo dd if=pfSense-CE-2.7.2-RELEASE-amd64.iso of=/dev/sdb bs=4M status=progress
sync

Загружаемся с USB на Protectli, проходим мастер установки (ZFS mirror не нужен — у нас HA на уровне CARP). После установки настраиваем интерфейсы через консоль:

# Консоль pfSense — назначение интерфейсов
# Option 1: Assign Interfaces

# igb0 (port 1) → WAN  — подключение к провайдеру
# igb1 (port 2) → LAN  — рабочие станции (VLAN 10)
# igb2 (port 3) → OPT1 → переименовываем в DMZ (серверы)
# igb3 (port 4) → OPT2 → переименовываем в MGMT (управление)

# Option 2: Set Interface IP Addresses
# WAN: DHCP от провайдера (или static, если выдан)
# LAN: 10.10.10.1/24
# DMZ: 10.10.20.1/24
# MGMT: 10.10.30.1/24

Настройка VLAN для сегментации

На LAN-интерфейсе создаём VLAN для разделения трафика внутри офиса. Managed-свитч (Cisco SG350-28) настроен на trunk-порту к pfSense:

# pfSense Web GUI → Interfaces → VLANs

# VLAN 10 — Рабочие станции дизайнеров
# Parent: igb1 | Tag: 10 | Description: Workstations

# VLAN 20 — VoIP телефоны
# Parent: igb1 | Tag: 20 | Description: VoIP

# VLAN 30 — Гостевой Wi-Fi
# Parent: igb1 | Tag: 30 | Description: Guest WiFi

# VLAN 99 — Native/Management
# Parent: igb1 | Tag: 99 | Description: Network Management

# Назначаем IP-адреса интерфейсам:
# igb1.10 (Workstations): 10.10.10.1/24
# igb1.20 (VoIP):         10.10.20.1/24
# igb1.30 (Guest):        10.10.30.1/24
# igb1.99 (Management):   10.10.99.1/24
# igb2    (DMZ):          10.10.50.1/24

# На Cisco SG350 настраиваем trunk:
# interface gi1
#   switchport mode trunk
#   switchport trunk allowed vlan 10,20,30,99
#   switchport trunk native vlan 99

# Access-порты для рабочих станций:
# interface range gi2-28
#   switchport mode access
#   switchport access vlan 10

Теперь дизайнерские компьютеры (VLAN 10) физически изолированы от серверов (DMZ), VoIP-телефонов (VLAN 20) и гостевого Wi-Fi (VLAN 30). Взлом одного сегмента не даёт автоматический доступ к остальным.

Правила файрвола и NAT

pfSense по умолчанию блокирует весь трафик между интерфейсами, кроме LAN → WAN. Мы создали гранулярные правила для каждого сегмента по принципу least privilege — разрешено только то, что необходимо.

Firewall Rules по зонам

Правила настраиваются через Firewall → Rules. Вот логика для каждого интерфейса:

# ===== WAN Rules =====
# По умолчанию: BLOCK ALL (implicit deny)
# Разрешаем только ответный трафик (stateful)
# Никаких входящих подключений!

# ===== Workstations (VLAN 10) =====
# Pass | IPv4 | TCP/UDP | VLAN10 net → * | Port 80,443  | HTTP/HTTPS
# Pass | IPv4 | TCP     | VLAN10 net → DMZ net | Port 445 | SMB to NAS
# Pass | IPv4 | TCP     | VLAN10 net → DMZ net | Port 5000 | Synology DSM
# Pass | IPv4 | UDP     | VLAN10 net → * | Port 53 | DNS (через pfSense)
# Pass | IPv4 | ICMP    | VLAN10 net → DMZ net | ICMP | Ping servers
# Block | IPv4 | *      | VLAN10 net → VLAN20 net | * | No VoIP access
# Block | IPv4 | *      | VLAN10 net → VLAN30 net | * | No guest access
# Block | IPv4 | *      | VLAN10 net → MGMT net  | * | No mgmt access

# ===== VoIP (VLAN 20) =====
# Pass | IPv4 | UDP | VLAN20 net → * | Port 5060 | SIP signaling
# Pass | IPv4 | UDP | VLAN20 net → * | Port 10000-20000 | RTP media
# Pass | IPv4 | TCP | VLAN20 net → * | Port 443 | HTTPS (provisioning)
# Block | IPv4 | *  | VLAN20 net → RFC1918 | * | No local access

# ===== Guest WiFi (VLAN 30) =====
# Pass | IPv4 | TCP | VLAN30 net → * | Port 80,443 | Web only
# Pass | IPv4 | UDP | VLAN30 net → * | Port 53 | DNS
# Block | IPv4 | *  | VLAN30 net → RFC1918 | * | No local access!

# ===== DMZ =====
# Pass | IPv4 | TCP | DMZ net → * | Port 80,443 | Updates
# Pass | IPv4 | TCP | DMZ net → * | Port 53 | DNS
# Block | IPv4 | *  | DMZ net → LAN/VLAN nets | * | No reverse access

Ключевой принцип: гостевой Wi-Fi и VoIP не имеют доступа к локальным сетям. Гости видят только интернет. Рабочие станции видят серверы в DMZ, но не могут попасть в сети VoIP и управления.

NAT и Port Forwarding

В отличие от старой конфигурации с UPnP, теперь каждый проброс порта — явный и контролируемый:

# Firewall → NAT → Outbound
# Mode: Hybrid Outbound NAT
# Автоматические правила для всех LAN → WAN
# + ручное правило для VoIP с static port:

# Interface: WAN
# Source: VLAN20 net (VoIP)
# Destination: *
# Translation: Interface Address | Static Port ✓
# Описание: SIP requires consistent source port

# Firewall → NAT → Port Forward
# НИКАКИХ пробросов портов извне!
# UPnP: System → Advanced → Networking → ОТКЛЮЧЁН

# Вместо проброса портов для удалённого доступа — VPN
# (настраиваем в следующем разделе)

UPnP отключён навсегда. Любой доступ к внутренним ресурсам — только через VPN.

VPN: OpenVPN и WireGuard

У «ВектраДизайн» 5 удалённых дизайнеров работают из дома. Раньше они подключались к NAS через проброшенный порт 5000 напрямую. Теперь доступ только через VPN.

OpenVPN для удалённых сотрудников

Настраиваем OpenVPN сервер на pfSense через встроенный мастер:

# VPN → OpenVPN → Wizards

# Шаг 1: Certificate Authority
# Descriptive Name: VektraDesign-CA
# Key Length: 4096 bit
# Lifetime: 3650 days

# Шаг 2: Server Certificate
# Descriptive Name: VektraDesign-VPN-Server
# Key Length: 4096 bit

# Шаг 3: Server Setup
# Interface: WAN
# Protocol: UDP on IPv4 only
# Local Port: 1194
# Description: Remote Designers VPN
# Cryptographic Settings:
#   TLS Key: Auto-generate
#   DH Parameter Length: 4096
#   Encryption Algorithm: AES-256-GCM
#   Auth Digest: SHA256

# Tunnel Settings:
# Tunnel Network: 10.10.100.0/24
# Redirect IPv4 Gateway: ✓ (весь трафик через VPN)
# Local Network: 10.10.50.0/24 (DMZ — доступ к NAS)
# Concurrent Connections: 10
# Compression: Omit (no compression — безопаснее)
# DNS Server 1: 10.10.10.1 (pfSense DNS Resolver)

# Шаг 4: Firewall Rules
# ✓ Add rule to allow traffic from clients through VPN
# ✓ Add rule on OpenVPN interface to allow traffic to DMZ

Создаём учётные записи для каждого удалённого сотрудника:

# System → User Manager → Add User
# Username: designer-ivanova
# Certificate: ✓ Click to create a user certificate
# → Certificate authority: VektraDesign-CA
# → Key Length: 2048

# Экспортируем конфиг:
# VPN → OpenVPN → Client Export
# Remote Access Server: Remote Designers VPN
# Host Name Resolution: Interface IP Address
# Скачиваем .ovpn файл для каждого пользователя

WireGuard для site-to-site и мобильных устройств

Дополнительно настраиваем WireGuard — он быстрее OpenVPN и удобнее для мобильных устройств (QR-код для подключения):

# VPN → WireGuard → Tunnels → Add Tunnel
# Description: Mobile Access
# Listen Port: 51820
# Interface Keys: Generate
# Interface Addresses: 10.10.200.1/24

# VPN → WireGuard → Peers → Add Peer
# Description: Иванова — iPhone
# Public Key: (генерируется на устройстве)
# Allowed IPs: 10.10.200.2/32
# Peer WireGuard Address: 10.10.200.2/32

# Конфиг для iPhone (QR-код):
[Interface]
PrivateKey = (генерируется автоматически)
Address = 10.10.200.2/32
DNS = 10.10.10.1

[Peer]
PublicKey = (публичный ключ pfSense)
AllowedIPs = 10.10.50.0/24
Endpoint = 85.xx.xx.xx:51820
PersistentKeepalive = 25

WireGuard работает в 2-3 раза быстрее OpenVPN при передаче файлов — критично для дизайнеров, качающих PSD-файлы по 500 МБ с NAS.

Система обнаружения вторжений: Suricata и pfBlockerNG

Файрвол блокирует нежелательные подключения, но не анализирует содержимое разрешённого трафика. Для обнаружения вредоносной активности внутри разрешённых потоков мы установили IDS/IPS.

Установка и настройка Suricata

Suricata — это IDS/IPS-движок, анализирующий трафик по правилам (сигнатурам). Устанавливаем через менеджер пакетов pfSense:

# System → Package Manager → Available Packages
# Ищем: suricata
# Install: suricata 7.0.3

# Services → Suricata → Global Settings
# Install ETOpen Emerging Threats rules: ✓
# Install Snort GPLv2 Community Rules: ✓
# Install Suricata rules: ✓ (если есть подписка)
# Rules Update Interval: 12 hours
# Remove Blocked Hosts After: 3600 seconds
# Log to System Log: ✓

# Services → Suricata → Interfaces → Add
# Interface: WAN
# Enable: ✓
# Block Offenders: ✓ (IPS-режим — не только обнаружение, но и блокировка)
# IPS Mode: Legacy Mode
# Detection Engine: Pattern matcher — Hyperscan

# Выбираем категории правил:
# ✓ emerging-attack_response
# ✓ emerging-exploit
# ✓ emerging-malware
# ✓ emerging-scan
# ✓ emerging-trojan
# ✓ emerging-web_server
# ✓ emerging-policy (обнаружение TOR, mining)
# ✓ emerging-dos

# Services → Suricata → Interfaces → WAN → WAN Categories
# Включаем нужные наборы правил
# Жмём "Start" на интерфейсе WAN

Теперь Suricata анализирует весь входящий трафик на WAN. При обнаружении сигнатуры атаки IP-адрес атакующего блокируется автоматически.

pfBlockerNG: DNS-фильтрация и GeoIP-блокировка

pfBlockerNG — мощный пакет для фильтрации трафика на уровне DNS и IP-адресов:

# System → Package Manager → Install: pfBlockerNG-devel

# Firewall → pfBlockerNG → DNSBL
# Enable DNSBL: ✓
# DNSBL Mode: Unbound python mode
# DNSBL Virtual IP: 10.10.1.1

# Списки блокировки DNS:
# ✓ EasyList (реклама)
# ✓ EasyPrivacy (трекеры)
# ✓ Malware Domain List
# ✓ Phishing Database
# ✓ Crypto-Mining Blocklist
# ✓ Steven Black's hosts (unified)

# Firewall → pfBlockerNG → IP → IPv4
# GeoIP Actions:
# Block Inbound: CN, KP, RU-excluded (блокируем входящий из CN, KP)
# Block Outbound: none

# Threat feeds:
# ✓ Spamhaus DROP + EDROP
# ✓ DShield Block List
# ✓ Abuse.ch Feodo Tracker
# ✓ Emerging Threats Compromised IPs

# DNSBL Whitelist (чтобы не сломать работу):
# *.adobe.com
# *.figma.com
# *.behance.net
# *.googleapis.com

DNS-фильтрация блокирует рекламу, трекеры, фишинг и вредоносные домены на уровне DNS-резолвера pfSense. GeoIP-фильтрация блокирует входящие подключения из стран, откуда «ВектраДизайн» не ожидает трафика.

Высокая доступность (CARP) и Traffic Shaping

Для студии, где простой в 30 минут означает 35 человек без работы, мы настроили отказоустойчивый кластер из двух pfSense-устройств и управление полосой пропускания.

CARP-кластер: автоматическое переключение

CARP (Common Address Redundancy Protocol) позволяет двум pfSense работать в режиме active/passive. При падении primary трафик автоматически переключается на secondary за 2-3 секунды:

# На PRIMARY pfSense (FW-01):
# System → High Avail. Sync
# Synchronize States: ✓
# Synchronize Interface: MGMT (igb3)
# pfsync Synchronize Peer IP: 10.10.99.2
# Synchronize Config to IP: 10.10.99.2
# Remote System Username: admin
# Remote System Password: ********
# Toggle All: ✓ (синхронизируем все настройки)

# Создаём Virtual IPs (CARP):
# Firewall → Virtual IPs → Add

# WAN VIP:
# Type: CARP | Interface: WAN
# Address: 85.xx.xx.xx/24 (WAN IP от провайдера)
# VHID Group: 1 | Adv. Skew: 0 (primary)
# Password: CarpSecret123

# LAN VIP (Workstations):
# Type: CARP | Interface: VLAN10
# Address: 10.10.10.1/24
# VHID Group: 10 | Adv. Skew: 0

# DMZ VIP:
# Type: CARP | Interface: DMZ
# Address: 10.10.50.1/24
# VHID Group: 50 | Adv. Skew: 0

# На SECONDARY pfSense (FW-02):
# Те же VIP, но Adv. Skew: 100 (secondary — higher skew)
# Все правила, VPN, пакеты синхронизируются автоматически

# Проверяем статус:
# Status → CARP (failover)
# FW-01: MASTER on all VIPs
# FW-02: BACKUP on all VIPs

Теперь при отказе FW-01 все клиенты автоматически работают через FW-02. Обратное переключение (failback) также автоматическое. Тест переключения: вытаскиваем сетевой кабель из FW-01 — пинг пропадает на 2 секунды, затем трафик идёт через FW-02.

Traffic Shaping: приоритет VoIP и ограничение гостей

Канал в 100 Мбит/с делится между 35 сотрудниками, VoIP-телефонами и гостевым Wi-Fi. Без QoS скачивание файла одним дизайнером убивает голосовую связь:

# Firewall → Traffic Shaper → Wizards
# Wizard Type: Multiple Lan/Wan

# WAN Upload: 95000 Kbit/s (95 Мбит из 100 — оставляем запас)
# WAN Download: 95000 Kbit/s
# Scheduler Type: PRIQ (Priority Queuing)

# Очереди по приоритету:
# Queue 1: qVoIP (Priority 7 — максимальный)
#   Match: Source VLAN20 net
#   Bandwidth: 20% (guaranteed)

# Queue 2: qWorkstations (Priority 5)
#   Match: Source VLAN10 net
#   Bandwidth: 60%

# Queue 3: qDefault (Priority 3)
#   Bandwidth: 15%

# Queue 4: qGuest (Priority 1 — минимальный)
#   Match: Source VLAN30 net
#   Bandwidth: 5%
#   Upper Limit: 10000 Kbit/s (жёсткий лимит 10 Мбит)

# Дополнительно ограничиваем гостей через Limiter:
# Firewall → Traffic Shaper → Limiters → Add
# Name: GuestDown | Bandwidth: 5 Mbit/s
# Name: GuestUp | Bandwidth: 2 Mbit/s
# Mask: Source Address (лимит на каждого гостя)

# Применяем Limiter в правилах VLAN30:
# Pass | VLAN30 → * | Port 80,443
#   Advanced → In/Out pipe: GuestDown / GuestUp

Теперь VoIP-звонки всегда имеют гарантированную полосу, даже когда все 35 дизайнеров одновременно заливают проекты на Behance.

Результаты внедрения

Проект занял 5 рабочих дней: 2 дня на аудит и планирование, 2 дня на установку и настройку, 1 день на тестирование и обучение. Результаты через 3 месяца:

МетрикаДо (TP-Link)После (pfSense)
Сегментация сети1 плоский сегмент5 VLAN + DMZ
Открытые порты в WAN5 (UPnP)0 (только VPN)
IDS/IPSОтсутствуетSuricata, 45 000+ правил
DNS-фильтрацияОтсутствуетpfBlockerNG, 1.2 млн доменов
VPN для удалёнщиковПроброс порта NASOpenVPN + WireGuard
ОтказоустойчивостьНет (single point of failure)CARP active/passive, failover 2 сек
Заблокировано атак (за 3 мес.)Неизвестно12 400+ (Suricata)
Заблокировано вредоносных DNS0847 000 запросов/мес

За 3 месяца после внедрения pfSense — ноль инцидентов безопасности. Suricata заблокировала более 12 000 подозрительных подключений на WAN. pfBlockerNG ежемесячно фильтрует 847 000 DNS-запросов к вредоносным и рекламным доменам. Удалённые дизайнеры отмечают, что WireGuard работает заметно быстрее прежнего прямого подключения к NAS.

Часто задаваемые вопросы

Да. pfSense масштабируется от домашнего офиса до предприятий с сотнями пользователей. Ключевой фактор — аппаратная платформа. Для 50 пользователей с IDS/IPS и VPN рекомендуем минимум 4-ядерный процессор и 8 ГБ RAM. Для 200+ — 8 ядер и 16 ГБ. В нашей практике pfSense успешно обслуживает офисы до 300 сотрудников с полным набором функций: Suricata, pfBlockerNG, OpenVPN, traffic shaping.

pfSense — это open-source решение без лицензионных платежей. Fortinet и Cisco ASA требуют ежегодных подписок на обновления сигнатур, поддержку и лицензии (от $500 до $5 000/год и выше). pfSense предоставляет сопоставимый функционал бесплатно: stateful firewall, VPN, IDS/IPS (Suricata/Snort), DNS-фильтрация, HA. Недостаток — отсутствие единой вендорской поддержки (но доступна платная поддержка Netgate), и интерфейс менее «полированный» по сравнению с Fortinet. Для малого и среднего бизнеса pfSense — оптимальное соотношение функционала и стоимости.

pfSense имеет интуитивный веб-интерфейс — большинство настроек делается через GUI без командной строки. Однако для первичной настройки (VLAN, IDS/IPS, VPN, HA) нужен опытный инженер. После настройки повседневное администрирование минимально: обновление правил Suricata происходит автоматически, pfBlockerNG обновляет списки по расписанию, CARP переключается сам. «ВектраДизайн» обращается к нам для ежеквартального аудита и обновления pfSense — это занимает 2-3 часа.

pfSense не является Wi-Fi контроллером, но отлично работает совместно с контроллерами Ubiquiti UniFi, TP-Link Omada или Cisco Meraki. В нашем кейсе мы установили 4 точки доступа UniFi U6 Pro с контроллером на отдельной VM. pfSense управляет маршрутизацией и безопасностью VLAN, а UniFi — радиочастотной частью и роумингом между точками. VLAN 10 (рабочий), VLAN 30 (гостевой) настроены на точках доступа как отдельные SSID.

Нужна помощь с настройкой?

Специалисты АйТи Фреш помогут с внедрением и настройкой — 15+ лет опыта, обслуживание от 15 000 ₽/мес

📞 Связаться с нами
#pfSense настройка офис#pfSense firewall правила#pfSense VPN OpenVPN WireGuard#pfSense Suricata IDS IPS#pfSense pfBlockerNG#pfSense VLAN DMZ настройка#pfSense CARP отказоустойчивость#pfSense traffic shaping QoS