Een VPN opzetten met FreeBSD gateways tussen twee netwerken die gescheiden zijn door Internet.
Deze paragraaf is een gids in het proces van het opzetten van IPsec. Voordat IPsec opgezet kan worden dient de lezer bekend te zijn met de concepten die nodig zijn om een aangepaste kernel te bouwen (zie Hoofdstuk 9, De FreeBSD-kernel instellen).
IPsec is een protocol dat bovenop de Internet Protocol (IP) laag ligt. Hiermee kunnen twee of meer host op een veilige manier communiceren (vandaar de naam). De FreeBSD IPsec “netwerk wachtrij (stack)” is gebaseerd op de KAME-implementatie, die zowel de protocolfamilies IPv4 als de IPv6 ondersteunt.
IPsec bestaat uit twee subprotocollen:
Encapsulated Security Payload (ESP) beschermt de IP-pakketdata tegen inmenging door een derde partij door de inhoud te versleutelen met symmetrische versleutelingsalgoritmes (zoals Blowfish en 3DES).
Authentication Header (AH) beschermt de IP-pakketkop tegen inmenging door een derde partij en spoofing door een cryptografische checksum te berekenen en de IP-pakketkopvelden te hashen met een veilige hashfunctie. Hierna wordt een extra kop ingevoegd die de hash bevat zodat de informatie in het pakket geautenticeerd kan worden.
ESP en AH kunnen samen of apart gebruikt worden, afhankelijk van de omgeving.
IPsec kan gebruikt worden om het verkeer tussen twee hosts direct te versleutelen (dat heet Transport Mode) of door “virtuele tunnels” te bouwen tussen twee subnetten die gebruikt kunnen worden voor veilige communicatie tussen twee bedrijfsnetwerken (dat heet Tunnel Mode). De laatste versie staat beter bekend als Virtual Private Network (VPN). In ipsec(4) staat gedetailleerde informatie over het IPsec subsysteem in FreeBSD.
Voor ondersteuning voor IPsec in de kernel zijn de volgende opties nodig in het kernelinstellingenbestand:
Als er ook fouten in IPsec (debugging) verwijderd moeten kunnen worden, dan is de volgende optie ook nodig:
Er bestaat geen standaard voor wat een VPN is. VPN's kunnen opgezet worden met behulp van een aantal verschillende technologieën die allemaal hun eigen voor- en nadelen hebben. Dit onderdeel bevat een scenario en de strategieën die gebruikt kunnen worden voor het implementeren van een VPN in iedere situatie.
Dit is het uitgangspunt:
Er zijn tenminste twee locaties
Beide locaties gebruiken IP
Beide locaties hebben een Internetverbinding via een gateway waarop FreeBSD draait.
De gateway op ieder netwerk heeft tenminste één publiek IP-adres.
De interne adressen van de twee netwerken mogen
publieke of private IP-adressen zijn,
dat maakt niet uit. Ze mogen alleen niet botsen;
bijvoorbeeld: ze mogen niet beide 192.168.1.x
gebruiken.
Om te beginnen moet de port security/ipsec-tools
geïnstalleerd zijn vanuit de Portscollectie. Dit
softwarepakket van een derde partij biedt een aantal applicaties
die helpen de configuratie te ondersteunen.
De volgende benodigdheid is om twee gif(4)
pseudo-apparaten aan te maken om de pakketten te tunnelen en
beide netwerken in staat stellen om op een juiste wijze te
communiceren. Draai als root
de volgende
commando's, waarbij de items intern
en extern
met de echte interne en
externe gateways:
#
ifconfig gif0 create
#
ifconfig gif0 intern1 intern2
#
ifconfig gif0 tunnel extern1 extern2
Het publieke IP van het
LAN van de onderneming is bijvoorbeeld
172.16.5.4
en het heeft een
privaat IP 10.246.38.1
. Het publieke
IP van het LAN van huis is
192.168.1.12
met een intern
privaat IP 10.0.0.5
.
Dit kan verwarrend lijken, dus bekijk de volgende voorbeeld van het commando ifconfig(8):
Eenmaal compleet zouden beide private IP's bereikbaar moeten zijn met het commando ping(8) zoals de volgende uitvoer suggereert:
Zoals verwacht hebben beide kanten de mogelijkheid om ICMP-pakketten te verzenden en te ontvangen van de privaat geconfigureerde adressen. Vervolgens dient aan beide gateways verteld te worden hoe pakketten te routeren om op de juiste wijze verkeer van een van de netwerken te versturen. Het volgende commando doet dit:
#
corp-net# route add 10.0.0.0 10.0.0.5 255.255.255.0
#
corp-net# route add net 10.0.0.0: gateway 10.0.0.5
#
priv-net# route add 10.246.38.0 10.246.38.1 255.255.255.0
#
priv-net# route add host 10.246.38.0: gateway 10.246.38.1
Op dit moment dienen interne machines bereikbaar te zijn vanuit elke gateway alsook als vanuit machines achter de gateways. Dit is eenvoudig te zien aan het volgende voorbeeld:
De tunnels opzetten is het eenvoudige deel. Het
configureren van een veilige verbinding is een veel diepgaander
proces. De volgende configuratie gebruikt vooraf gedeelde
(PSK) RSA-sleutels.
Afgezien van de IP-adressen zijn beide
bestanden /usr/local/etc/racoon/racoon.conf
identiek en zien ze er ongeveer als volgt uit:
Het uitleggen van elke beschikbare optie, samen met diegenen in deze voorbeelden valt buiten het bereik van dit document. De configuratiehandleiding van racoon staat vol relevante informatie.
De SPD-beleiden moeten geconfigureerd worden zodat FreeBSD en racoon in staat zijn om netwerkverkeer tussen hosts te versleutelen en te ontsleutelen.
Deze taak kan met een eenvoudig shellscript zoals het
volgende dat op de gateway van de onderneming staat worden
uitgevoerd. Dit bestand wordt gebruikt tijdens de
systeeminitialisatie en dient bewaard te worden als
/usr/local/etc/racoon/setkey.conf
.
Eenmaal aanwezig kan racoon op beide gateways gestart worden met het volgende commando:
#
/usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.log
De uitvoer moet ongeveer gelijk zijn aan de volgende:
Om er zeker van te zijn dat de tunnel correct werkt, dient
naar een ander console geschakeld te worden en tcpdump(1)
gebruikt te worden om hiermee het netwerkverkeer te bekijken.
Vervang em0
door de netwerkinterfacekaart
indien nodig.
#
tcpdump -i em0 host 172.16.5.4 and dst 192.168.1.12
Gegevens lijkend op de volgende zouden op het console moeten verschijnen. Indien niet, dan is er iets aan de hand, en is het nodig om de teruggegeven gegevens te debuggen.
Op dit punt zouden beide netwerken beschikbaar moeten zijn en deel lijken van hetzelfde netwerk. Waarschijnlijk zijn beide netwerken beschermt door een firewall, zoals het hoort. Om verkeer tussen hen toe te staan, moeten er regels worden toegevoegd om pakketten heen en terug door te laten. Voeg voor de firewall ipfw(8) de volgende regels toe aan het instellingenbestand van de firewall:
Afhankelijk van de huidige hostconfiguratie dienen de regelnummers gewijzigd te worden.
Voor gebruikers van pf(4) of ipf(8) zouden de volgende regels moeten volstaan:
Ter afsluiting, voeg de volgende regels toe aan
/etc/rc.conf
om de machine toe te staan om
ondersteuning voor het VPN te starten tijdens
de systeeminitialisatie: