Hlavní navigace

Firewall pfSense: VPN IPSec tunely a HA režim

Lukáš Malý 17. 8. 2016

Dnes si povíme, jak se pomocí pfSense dají snadno realizovat IPSec tunely všech možných variací. Závěrem si povíme, jak realizovat High Availability řešení pomocí protokolu CARP.

VPN IPSec

předchozím díle seriálu o pfSense jsme si řekli, jak konfigurovat OpenVPN. Další možností, jak realizovat VPN spojení je IPSec, který je v pfSense též plně funkční. Ve FreeBSD je IPSec implementován díky projektu KAME, který zajistil podporu v kernelu. pfSense má podporu IPSec v kernelu připravenu k použití. Můžeme to ověřit pomocí následujícího příkazu.

$ /sbin/sysctl -a | grep ipsec
kern.features.ipsec_natt: 1
kern.features.ipsec: 1
net.inet.ipsec.def_policy: 1
net.inet.ipsec.esp_trans_deflev: 1
net.inet.ipsec.esp_net_deflev: 1
net.inet.ipsec.ah_trans_deflev: 1
net.inet.ipsec.ah_net_deflev: 1
net.inet.ipsec.ah_cleartos: 1
net.inet.ipsec.ah_offsetmask: 0
net.inet.ipsec.dfbit: 0
net.inet.ipsec.ecn: 0
net.inet.ipsec.debug: 0
net.inet.ipsec.crypto_support: 50331648
net.inet.ipsec.filtertunnel: 0
net.inet6.ipsec6.def_policy: 1
net.inet6.ipsec6.esp_trans_deflev: 1
net.inet6.ipsec6.esp_net_deflev: 1
net.inet6.ipsec6.ah_trans_deflev: 1
net.inet6.ipsec6.ah_net_deflev: 1
net.inet6.ipsec6.ecn: 0
net.inet6.ipsec6.debug: 0
net.inet6.ipsec6.filtertunnel: 0
net.enc.out.ipsec_bpf_mask: 1
net.enc.out.ipsec_filter_mask: 1
net.enc.in.ipsec_bpf_mask: 2
net.enc.in.ipsec_filter_mask: 2

Ve verzi pfSense 2.2 došlo ke změně IPsec backend. V předchozích verzích se používala user-space apliakce Racoon jako IKE/ISAKMP a ta byla nahrazena aplikací strongSwan.

IPSec kompatibilita

Je velmi důležité, jaká je kompatibilita IPSec s ostatními routery od různých výrobců. Tento seznam kompatibility je vhodné znát před tím, než se začneme pouštět do realizace nějakého IPSec tunelu. Z vlastní zkušenosti jsem realizoval tunely s Fortigate, Kerio Control a s m0n0wall. Je samozřejmé, že tunely mezi routery s pfSense budou fungovat bezproblémově. Projekt pfSense má obrovskou výhodu v tom, že nabízí velmi široké možností konfigurací. Např. zda použijeme IKE nebo IKEv2, nebo jaký typ šifer začleníme do asociačních pravidel. Vždy je nutné sladit nastavení obou IPSec zařízení na stejnou úroveň.

Konfigurace IPSec tunelu

dokumentaci pfSense je podrobně popsán postup, jak vytvořit IPSec tunel. Nastavení se provádí v menu VPN / IPsec / Tunnels. Ze starší verze dokumentace FreeBSD jsem si vypůjčil obrázek, popisující IPSec tunel mezi LAN1 a LAN2, realizovaný skrze veřejný internet.

pfSense 2.3 IPSec tunnel schema

pfSense 2.3 IPSec tunel schéma

Pro realizaci tunelu potřebujeme vždy veřejnou IPv4 adresu. V současné době je IPv6 s IPSec funkční, ale není možné mixovat oba protokoly v jednom tunelu.

Pokud vyšleme např. ICMPv4 packet z LAN 1, na  router 1 se zjistí, kterým tunelem se má kam poslat, zabalí se do ESP a dál putuje internetem šifrovaně k routeru 2, kde se ESP rozbalí a paket se doručí k hostu v LAN 2. Takto je to velmi jednoduše řečeno.

pfSense 2.3 IPSec list tunels

pfSense 2.3 IPSec list tunels

Takto vypadá seznam vytvořených tunelů. Můžeme je snadno zakázat, smazat nebo editovat.

pfSense 2.3 IPSec Edit Phase 2

pfSense 2.3 IPSec Edit Phase 2

Takto vypadá editrace VPN / IPsec / Tunnels / Edit Phase 1.

pfSense 2.3 IPSec Edit Phase 2 list

pfSense 2.3 IPSec Edit Phase 2 list

Je možné definovat vícero Phase 2, např. když chceme zpřístupnit další LAN nebo VLAN, byť jen na jedné straně tunelu.

pfSense 2.3 IPSec Edit Phase 1

pfSense 2.3 IPSec Edit Phase 1

Takto vypadá editrace VPN / IPsec / Tunnels / Edit Phase 2 .

Veškerá IPSec nastavení se ukládají do adresáře /var/etc/ipsec, kam je možné nahlédnout při ladění nějaké specifické konfigurace s odlišnou implementací IPSec než je ta v pfSense. Struktura adresářů a souborů vypadá následovně:

$ ls -lrthR1
ipsec.d
strongswan.d
strongswan.conf
ipsec.secrets
ipsec.conf

./ipsec.d:
cacerts
private
crls
certs
aacerts
acerts
ocspcerts
reqs

./ipsec.d/cacerts:
./ipsec.d/private:
./ipsec.d/crls:
./ipsec.d/certs:
./ipsec.d/aacerts:
./ipsec.d/acerts:
./ipsec.d/ocspcerts:
./ipsec.d/reqs:

Nastavení IPSec je možné snadno exportovat v podobě XML souboru ipsec-config-apu.domena.cz-20160818113025.xml nebo jako zálohu celého routeru  config-apu.domena.cz-20160818113251.xml.

Na statusové stránce Status / IPsec / Overview máme možnost sledovat stav tunelu, zda je navázáno spojení a v dalších záložkách můžeme vidět tabulky s hodnotami SAD a SPD.

IPSec Mobile

Další volbou IPSec je VPN / IPsec / Mobile Clients. V minulosti jsem mobilní IPSec provozoval s klientem SHREW SOFT VPN Client. Je to funkční alternativa k OpenVPN. Mobilní IPSec je též možné zprovoznit v mobilních zařízeních s Androidem a iOS. Obě platformy mají IPSec v sobě implementován a není tedy nutné instalovat aplikaci pro VPN jako je např. OpenVPN Connect.

pfSense jako řešení vysoké dostupnosti

I open-source firewall pfSense disponuje funkcionalitou High Availability, neboli vysoké dostupnosti. Pokud máme dva routery, můžeme je nakonfigurovat tak, aby při vypnutí nebo výpadku jednoho převzal funkci druhý.

Tato funkcionalita je samozřejmě nabízena spolu s hardware přímo na eshopu pfsense. Poskytují dva modely SG-4860 1U a SG-8860 1U, které jsou patřičně předkonfigurované pro fungování v HA režimu. Pokud máme vlastní hardware, např. v podobě nějakého 1U serveru, můžeme si tuto funkcionalitu zprovoznit podle patřičného návodu.

pfSense.3 CARP schema

pfSense.3 CARP schema

V roce 2011 jsem měl možnost podle tohoto návodu postavit prostředí ve VMware pro vyzkoušení jako řešení pro jednu zakázku. Měl jsem k dispozici veřejné IPv4 pro obě strany. Instaloval jsem tedy 4× pfSense, vždy dva v jiné lokalitě. HA umělo jak NAT, synchronizaci pravidel a aliasů, ale zároveň byl v HA režimu konfigurován i IPSec tunel. Popis z té doby je u mě na blogu. Od té doby jsem tuto konfiguraci nikde neinstaloval.

Základem tohoto HA řešení je protokol CARP. Poskytuje obdobné funkcionality jako protokoly VRRP a Cisco Systems proprietární protokol, HSRP. CARP vznikl díky projektu OpenBSD jako svobodná implementace VRRP a HSRP. Dále je v HA režimu použit pfsync. Tento mechanizmus zajišťuje synchronizaci pravidel a jiných nastavení s druhým nodem HA routeru.

Tuto službu lze použít v případě, že provozujeme routery s obdobným nastavením a například si synchronizujeme jen aliasy mezi nakonfigurovanými routery.

Závěr

V dalším díle seriálu o pfSense si povíme o projektu OPNsense a pokusíme se srovnat aktuální rozdíly tohoto mladého forku pfSense. Dále si řekneme podrobnosti o monitorování pfSense pomocí Zabbixu.

Našli jste v článku chybu?

29. 8. 2016 16:22

Moznost nahrat nejaky vlastni script mozne je. Ale je otazkou zda bude mit user opravneni atd. Ja mel na mysli nejake scriptovani v kontextu s WebGUI. Reset states asi mozny bude. Okrajovou praci s pfctl jsem lehce popisoval. Ale ne vse jde obdobne jako na klasickem serveru s FreeBSD. WebGUI casto provadi aplikovani zmen atd.
Sheduler a Queues je tez tema na dalsi clanek ... Bohuzel jsem Queues pouyil jen jednou a fungovalo to dobre.


29. 8. 2016 10:33

risototh (neregistrovaný)

Pozrel som si to, ale ten load balancing sa tyka cohosi ineho. Konkretnejsie napriklad web load balancing, alebo multiple wan if load balancing. Problem je, ze ked sa nad tym tak zamyslim, tak to predsa nemoze byt riesene na PFku, pretoze ten traffic co sa ma podelit, sa musi podelit este pred pf-kom. Skor to bola otazka, ci nieco niekto take neriesil uz na Ciscu, v spojeni s PFkom...

A skriptovanie som nemyslel priamo v pfsense, ale ci je tam taka moznost, spustat dajme tomu cronom shellove sc…

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Podnikatel.cz: Vrátí zvýhodnění, ale výrazně omezí paušály

Vrátí zvýhodnění, ale výrazně omezí paušály

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

DigiZone.cz: Flix TV má set-top box s HEVC

Flix TV má set-top box s HEVC

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Podnikatel.cz: Babiš: E-shopy z EET možná vyjmeme

Babiš: E-shopy z EET možná vyjmeme

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky