pfSense Firewall Pravidla
Tato dokumentace popisuje skutečnou konfiguraci firewall pravidel v pfSense podle zálohy z 5.2.2026.
Zdrojová data
Záloha: pfSense config-pfSense.marada.lan-20260205145402.xml
Systém: pfSense CE 2.8.1 na marada.lan, Timezone: Europe/Prague
REST API
Na pfSense je nainstalován balíček pfSense-pkg-RESTAPI (v2.7.3) pro programatický přístup.
| Parametr | Hodnota |
|---|---|
| URL | http://192.168.20.1/api/v2/ |
| Autentizace | API Key (SHA-512) + Local Database |
| API Key | PFSENSE_API_KEY v .env |
| MCP server | pfsense v .mcp.json (gensecaihq/pfsense-mcp-server) |
| Swagger docs | pfSense webUI → System → REST API → Documentation |
Klíčové endpointy:
GET /api/v2/status/system— systémový stav (uptime, CPU, RAM)GET /api/v2/diagnostics/arp_table— ARP tabulka všech VLANůGET /api/v2/services/dhcp_server?id=lan— DHCP konfigurace a statické mapování (per interface:lan,opt1–opt5)GET /api/v2/firewall/rules— firewall pravidlaGET /api/v2/system/dns— DNS konfiguraceGET /api/v2/auth/keys— správa API klíčů
[!WARNING] Balíček se po upgradu pfSense automaticky smaže. Po každém upgradu přeinstalovat:
pkg-static add https://github.com/jaredhendrickson13/pfsense-api/releases/latest/download/pfSense-<verze>-pkg-RESTAPI.pkg
Přehled Interfaces
| Interface | VLAN | IP Adresa | Subnet | Popis |
|---|---|---|---|---|
| WAN | 10 | DHCP | - | Internet (ISP) |
| LAN | 1 | 192.168.20.1 | /24 | Servery, Trusted zařízení |
| GUEST | 30 (opt1) | 192.168.30.1 | /24 | Wi-Fi pro hosty |
| IOT | 40 (opt2) | 192.168.40.1 | /24 | Chytrá domácnost |
| MEDIA | 50 (opt3) | 192.168.50.1 | /24 | TV, Audio |
| SECURITY | 60 (opt4) | 192.168.60.1 | /24 | Kamery, NVR |
| STAGING | 1 (opt5) | 192.168.1.1 | /24 | Testovací síť |
Firewall Rules (Detailně)
LAN Interface (VLAN 1 / 192.168.20.0/24)
| # | Type | Protocol | Source | Destination | Port | Popis |
|---|---|---|---|---|---|---|
| 1 | ✅ pass | any | lan |
opt5 (STAGING) |
- | TEMP Allow LAN to Staging |
| 2 | ✅ pass | any | 192.168.20.7 (HA) |
192.168.40.0/24 |
- | Allow HA to All IoT Devices |
| 3 | ✅ pass | any | lan |
any |
- | Default allow LAN to any rule |
| 4 | ✅ pass | any (IPv6) | lan |
any |
- | Default allow LAN IPv6 to any rule |
Strategie: LAN je trusted síť - má plný přístup kamkoliv (internet, ostatní VLANy).
Specifické pravidlo: Pravidlo #2 (Allow HA to All IoT Devices) je historický artefakt — HA má dnes přímou L2 přítomnost v IoT VLAN přes druhou síťovku (192.168.40.7), takže tímto pravidlem v praxi neprochází žádný traffic (pf state creations: 0). Ponecháno jako záloha pro případ, že by druhá NIC vypadla.
Dual-homed servery na LAN:
| Server | NIC 1 (LAN, primary) | NIC 2 (IoT VLAN 40) | Účel IoT rozhraní |
|---|---|---|---|
| Home Assistant | enp0s18 192.168.20.7 |
enp0s19 192.168.40.7 |
Přímé ovládání IoT zařízení same-VLAN |
| debian-services | 192.168.20.20 |
192.168.40.20 |
CUPS tiskový server → Canon GX7040 |
Bezpečnost: Oba servery mají
ip_forward=1(vyžaduje Docker/supervisor), ale iptables FORWARD chain má policy DROP — cross-VLAN routing přes tyto servery neprojde. Veškerý inter-VLAN provoz jde výhradně přes pfSense.[!CAUTION] HA musí mít LAN NIC jako
primary. Pokud se po HA OS upgrade přehodíprimary: truena IoT NIC (enp0s19), HA pošle veškerý non-local traffic ze zdroje192.168.40.7a pravidlo IoTBlock IoT to Internal Networksto zařízne — HA ztratí přístup ke kamerám, doorbell, MEDIA i Proxmoxu. Detaily a postup opravy: Home Assistant — Síťová Topologie. Incident 2026-05-06 v decision_log.md.
Tailscale VPN Interface
| # | Type | Protocol | Source | Destination | Popis |
|---|---|---|---|---|---|
| 1 | ✅ pass | any | any |
any |
Allow Tailscale VPN Full Access |
Strategie: Tailscale klienti mají plný přístup do všech sítí (jako by byli na LAN).
Více informací viz VPN dokumentace.
GUEST Interface (VLAN 30 / 192.168.30.0/24)
| # | Type | Protocol | Source | Destination | Port | Popis |
|---|---|---|---|---|---|---|
| 1 | ✅ pass | tcp/udp | opt1 |
(self) |
53 | Allow GUEST DNS to pfSense |
| 2 | 🚫 block | any | opt1 |
Private_Networks |
- | Block Guest to Internal Networks |
| 3 | ✅ pass | any | opt1 |
any |
- | Allow Guest to Internet |
Strategie:
- ✅ Hosté mají DNS rozlišení přes pfSense
- 🚫 Hosté nemají přístup do LAN, IoT, Media, Security VLANů
- ✅ Hosté mají přístup na internet
Bezpečnost: Client Isolation měla by být zapnutá na WiFi AP (viz wifi.md).
IOT Interface (VLAN 40 / 192.168.40.0/24)
| # | Type | Protocol | Source | Destination | Port | Popis |
|---|---|---|---|---|---|---|
| 1 | ✅ pass | udp | opt2 |
224.0.0.251 |
5353 | Allow mDNS (Device Discovery) |
| 2 | ✅ pass | tcp/udp | opt2 |
(self) |
53 | Allow IOT DNS to pfSense |
| 3 | 🚫 block | any | opt2 |
Private_Networks |
- | Block IoT to Internal Networks |
| 4 | ✅ pass | any | opt2 |
any |
- | Allow IOT to Internet |
Strategie:
- ✅ IoT zařízení mají plný přístup na internet (pro cloudové služby: Aqara, Shelly, atd.)
- 🚫 IoT nemá přístup do LAN (192.168.20.0/24) ani jiných VLANů
- ✅ mDNS povolen pro discovery protokoly (např. HomeKit, Chromecast)
- ✅ DNS přes pfSense
Výjimky:
- Home Assistant (192.168.20.7) má přístup do IoT (viz LAN pravidlo #2)
- debian-services (192.168.40.20) má druhé rozhraní přímo v IoT VLAN — CUPS tiskový server komunikuje s tiskárnou (192.168.40.8) bez cross-VLAN routingu
Bezpečnostní riziko
IoT má internet. Pokud chcete zero-trust přístup, změňte pravidlo #4 na block a přidejte whitelist pro specifická cloudová zařízení.
MEDIA Interface (VLAN 50 / 192.168.50.0/24)
| # | Type | Protocol | Source | Destination | Port | Popis |
|---|---|---|---|---|---|---|
| 1 | ✅ pass | tcp/udp | opt3 |
(self) |
53 | Allow MEDIA DNS to pfSense |
| 2 | 🚫 block | any | opt3 |
Private_Networks |
- | Block MEDIA to Internal Networks |
| 3 | ✅ pass | any | opt3 |
any |
- | Allow MEDIA to Internet |
Strategie:
- ✅ Media zařízení (Apple TV, HomePod) mají internet
- 🚫 Media nemá přístup do LAN ani jiných VLANů
- ✅ DNS přes pfSense
Poznámka: Žádná zařízení momentálně nejsou v této VLAN (podle DHCP).
SECURITY Interface (VLAN 60 / 192.168.60.0/24)
| # | Type | Protocol | Source | Destination | Port | Popis |
|---|---|---|---|---|---|---|
| 1 | ✅ pass | udp | opt4 |
(self) |
123 | Allow Kamery NTP (Time Sync) |
| 2 | ✅ pass | tcp/udp | opt4 |
(self) |
53 | Allow Kamery DNS |
| 3 | ✅ pass | tcp/udp | opt4 |
192.168.20.21 |
- | Allow Kamery to Scrypted (RTSP) |
| 4 | 🚫 block | any | opt4 |
Private_Networks |
- | Block Kamery to LAN |
Strategie: Zero Internet Policy 🔒
- ✅ Kamery mohou synchronizovat čas (NTP)
- ✅ Kamery mohou používat DNS
- ✅ Kamery mohou streamovat do Scrypted (192.168.20.21)
- 🚫 Kamery nemají přístup do LAN
- 🚫 Kamery nemají internet (implicitní DENY)
Bezpečnost: Kamery jsou zcela izolovány od internetu i LAN sítě. Pouze Scrypted může k nim přistupovat.
Globální Nastavení
DNS Resolver (Unbound)
- Doména:
marada.lan - DNS Server: pfSense (192.168.20.1, 192.168.30.1, atd.)
- Režim: forwarding přes DNS-over-TLS (šifrované, s ověřením certifikátu)
- Upstream (blokují reklamy a trackery):
94.140.14.14a94.140.15.15— AdGuard DNS Default (dns.adguard-dns.com)86.54.11.13— DNS4EU Protective + Ad Blocking (noads.joindns4.eu), nezávislý fallback- Unbound mezi upstreamy vybírá podle odezvy a mrtvé automaticky obchází — výpadek AdGuardu dům nepoloží.
- Když blokování rozbije nějakou stránku: přidat Host Override (Services → DNS Resolver) s reálnou IP domény, nebo dočasně vypnout checkbox Enable Forwarding Mode (Services → DNS Resolver) — resolver se vrátí k přímé rekurzi bez filtru.
- Lokální overrides (
*.marada.name) se resolvují lokálně, forwarding je neovlivňuje.
NAT
Všechny VLANy používají Outbound NAT pro přístup na internet.
Doporučení
1. IoT Internet - Zvážit Hardening
Současný stav: IoT má plný internet.
Doporučení:
🚫 Block opt2 → any (Internet)
✅ Allow 192.168.40.51-53 (Aqara FP2) → Cloud (specific IPs)
✅ Allow 192.168.40.2 (Zigbee) → Cloud (if needed)
2. Odebrat TEMP Pravidlo
Pravidlo "TEMP Allow LAN to Staging" označit jako dočasné - pokud už není potřeba, odstranit.
3. Přidat Logging
Pro kritická block pravidla zapnout logging (diagnostika útoků/problémů).
Diagram Firewall Politiky
graph TD
Internet((Internet))
LAN[LAN<br/>192.168.20.0/24<br/>TRUSTED]
GUEST[GUEST<br/>192.168.30.0/24<br/>ISOLATED]
IOT[IOT<br/>192.168.40.0/24<br/>RESTRICTED]
MEDIA[MEDIA<br/>192.168.50.0/24<br/>ISOLATED]
SEC[SECURITY<br/>192.168.60.0/24<br/>NO INTERNET]
TS[Tailscale VPN<br/>FULL ACCESS]
LAN -->|ALLOW| Internet
LAN -->|ALLOW| IOT
LAN -->|ALLOW| GUEST
LAN -->|ALLOW| MEDIA
LAN -->|ALLOW| SEC
GUEST -->|ALLOW| Internet
GUEST -.->|BLOCK| LAN
IOT -->|ALLOW| Internet
IOT -.->|BLOCK| LAN
MEDIA -->|ALLOW| Internet
MEDIA -.->|BLOCK| LAN
SEC -->|ALLOW| LAN[Scrypted only]
SEC -.->|BLOCK| Internet
SEC -.->|BLOCK| LAN
TS -->|ALLOW| LAN
TS -->|ALLOW| IOT
TS -->|ALLOW| MEDIA
TS -->|ALLOW| SEC
TS -->|ALLOW| Internet
Reference
- pfSense Dokumentace: https://docs.netgate.com/pfsense/en/latest/firewall/
- Záloha:
/docs/files/zalohy/pfSense/config-pfSense.marada.lan-20260205145402.xml