Hlavní navigace

Firewall pfSense: VPN IPSec tunely a HA režim

17. 8. 2016
Doba čtení: 5 minut

Sdílet

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.

root_podpora

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.

Byl pro vás článek přínosný?

Autor článku

Pracuje jako systém administrátor – UNIX/Linux systémů. Vystudoval VOŠ Liberec, obor Počítačové systémy. Ve svém oboru prosazuje otevřená řešení IT infrastruktury.