Oppsett av VPN-tjenere på Linux er absolutt ikke umulig, men få har benyttet seg av muligheten - en stor del av problemet er nok helhetlige guider til oppsett av denne. I denne guiden tar jeg for meg oppsett av PoPToP VPN-tjener (kompilert inn støtte for MPPE/MPPC) med utgangspunkt i Slackware 9.1.
VPN-tjenere, helt kort
En VPN-tjener er tradisjonelt sett en sikker punkt-til-punkt forbindelse med det formålet å inkludere en ekstern bruker i det interne private nettverket ved hjelp av VPN-tjener og klient. Slike tjenere blir ofte brukt av ansatte uten direkte tilgang til det fysiske lokale nettet for å få tilgang til interne tjenester uten å eksponere muligens kritiske interne tjenester til omverdenen.
I utgangspunktet kan det være vanskelig å se hvordan dette kan være til noen stor hjelp for bedrifter i liten skala eller i hjemmet, men fordelene melder seg straks dersom du for eksempel skal administrere en mysql-database via phpMyAdmin uten mulighet for åpne for tilgang til tjeneren for resten av verden enten av sikkerhetsgrunner eller på grunn av sensitiv informasjon. Sikkerheten ivaretas ved at all trafikk krypteres på en måte som Microsoft Windows VPN-klienter forstår uten modifikasjon (MPPE). Dersom ikke sikkerheten er nødvendig vil laget av komprimering (MPPC) lagt på overføringskanalen faktisk være verdt bryet i seg selv – ofte viser statistikken i komprimeringsgrad på over 50% (noe som ADSL-brukere med begrenset båndbredde ut vet å sette pris på).
I disse dager er behovet for VPN-tjenester desto større ettersom trådløse nettverk per definisjon er å betrakte som untrusted (vi kan ikke stole på denne delen av nettverket av sikkerhetsgrunner), spesielt på grunn av mengdene av utstyr som kun støtter WEP (WPA er en stor forbedring, men ikke helt utbredt). En måte en da kan bringe disse maskinene inn i det interne nettverket er bruk av nettopp VPN.
VPN-tjenere, om artikkelen
Denne artikkelen tar for seg oppsett av en VPN-tjener på Linux. Det tas utgangspunkt i Slackware Linux 9.1 og endel av filene vil muligens være plassert på ett annet sted eller ikke sammenlignbart i andre distribusjoner, men hovedsaklig sett bør ikke dette utgjøre noe problem for en forholdsvis erfaren Linux-bruker. Det tas også utgangspunkt i at du allerede er kjent med temaer som IP, editering av konfigurasjonsfiler samt kompilering av programmer fra kildekode.
Steg 1: laste ned nødvendige filer
Å laste ned filer bør ikke være noen store problemer, men for at dette skal gå i en forholdsvis akseptabel hastighet gjøres dette raskest ved å utføre følgende kommandoer (dersom du ønsker å benytte en annen kernel-versjon må du laste ned annen MPPE/MPPC-patch ved å gå inn på hjemmesiden (link nederst på siden)).
wget ftp://slackware.no/linux/kernel/v2.4/linux-2.4.26.tar.bz2
wget http://www.polbox.com/h/hs001/linux-2.4.26-mppe-mppc-1.0.patch.gzwget http://www.polbox.com/h/hs001/ppp-2.4.2-mppe-mppc-1.0.patch.gz
wget ftp://ftp.samba.org/pub/ppp/ppp-2.4.2.tar.gzwget http://heanet.dl.sourceforge.net/sourceforge/poptop/pptpd-1.1.4-b4.tar.gz
Steg 2: Kompilere inn støtte for MPPE/MPPC i Linux-kjernen
tar xfvj linux-2.4.26.tar.bz2
gunzip linux-2.4.26-mppe-mppc-1.0.patch.gz
patch -p0 -i linux-2.4.26-mppe-mppc-1.0.patch
Gå inn i katalogen linux-2.4.26 og editer linje 4 av filen Makefile slik at den viser følgende (dette sørger for at denne kjernens moduler ikke blander seg med modulene til en kjerne av samme versjon (som er standard i Slackware 10.0)):
EXTRAVERSION = “-VPN”
Neste skritt er å flytte kilden til “/usr/src” og oppdatere den symbolske lenken der (du må være root for å gjennomføre disse kommandoene):
mv linux-2.4.26 /usr/src/linux-2.4.26-VPN
cd /usr/src/
ln -s linux-2.4.26-VPN/ linuxcd linux
make menuconfig
Velg “Load an alternate configuration file” og angi stien “/boot/config” – du skal nå ha en kjerne konfigurert likt den som allerede er installert på systemet ditt (dersom filene er satt opp slik det vanligvis er på Slackware-systemer). Vi skal gjøre noen få modifikasjoner på innstillingene, og fremgangsmåten for dette er som følger:
Velg menyvalget “Network device support” og sørg for at følgende blir konfigurert som moduler, (mesteparten vil allerede være lagt til dersom konfigurasjonen som ble lastet inn isted var fra kjernen som følger med systemet):
- PPP (point-to-point protocol) support
- PPP support for async serial ports
- PPP support for sync tty ports
- PPP Deflate compression
- PPP BSD-Compress compression
- Microsoft PPP compression/encryption (MPPC/MPPE) (NEW)
- PPP support for async serial ports
Det oppfordres til å kutte vekk ting du vet du absolutt ikke har bruk for, men dersom du ikke føler deg helt sikker er nok bedre å bare la valgene stå slik de allerede er satt opp i kjernen – føler du likevel for å prøve vil du finne god hjelp i informasjon vist ved å gi kommandoene “dmesg”, “lspci” og “lsmod” (personlig fjernet jeg støtte for “Parallel port support”, “Multi-device support (Raid and LVM)”, “Fusion MTP device support”, “IEEE 1394 Firewire support”, “I20 support”, “Amateur Radio Support”, “irDA”, “ISDN”, “old cd-rom drivers”, “multimedia devices” (Video4linux)), “Sound card support”, “USB-support” og “Bluetooth support”. For dere veteraner der ute som liker kjerner med alt de trenger kompilert direkte inn, må jeg desverre skuffe dere ettersom valgene ovenfor ikke vil fungere skikkelig dersom de blir kompilert inn i kjernen.
Nå er endelig tiden kommet for å faktisk kompilere selve kjernen, og dette kan enkelt utføres ved å gi følgende serie av kommandoer:
make dep
make bzImage< hent kopp med kaffe >
make modules
< drikk kopp med kaffe - du kommer nå virkelig til å sette pris på de nedkuttingene du foretok på valgte moduler. >
make modules_install
cp arch/i386/boot/bzImage /boot/bzImage-2.4.26-VPN
cp System.map /boot/System.map-vpn-2.4.26
cp .config /boot/config-vpn-2.4.26cd /boot
ln -sf config-vpn-2.4.26 config
ln -sf System.map-vpn-2.4.26 System.map
For å ta den nye kjernen må oppstartlasteren konfigureres, og går her gjennom fremgansmåten for å gjøre dette med lilo (finnes sikkert mange gode guider til konfigurering av grub der ute, men går ikke gjennom denne her). Vi starter med å editere på filen “/etc/lilo.conf” der du blant annet finner følgende utdrag:
# Linux bootable partition config begins
image = /boot/vmlinuz
root = /dev/hda2
label = Linux
read-only
# Linux bootable partition config ends
Det vi nå skal gjøre er denne å ta basis i denne og legge til ett nytt valg som er nesten likens, men som isteden velger den kjernen vi nettopp kompilerte og la inn. Innholdet er nesten identisk, men legg merke til image-delen samt at du også må passe på at verdien for root er den samme som var oppgitt på teksten som allerede stod der. Resultatet (linjene som blir lagt til på slutten av filen) blir som følger:
# Linux bootable partition config begins
image = /boot/bzImage-2.4.26-VPN
root = /dev/hda2
label = “2.4.26-VPN”
read-only
# Linux bootable partition config ends
Lagre filen og avslutt editoren. Konfigurasjonsfilen er nå oppdatert, men vi er også nødt til å oppdatere oppstartlasteren (mest trolig skrevet til MBR) med endringene og det gjøres med å gi følgende kommando:
lilo
Vi skal nå ta i bruk kjernen og for å gjøre dette må du ta en omstart på maskinen (kan gjøres ved å gi kommandoen “shutdown -r now”). Når du får opp oppstartmenyen vil du se at du nå har fått opp alternativet “2.4.26-VPN” – velg denne og du skal nå være klar til å hoppe videre til neste steg av installasjonen. Dersom du ved oppstart får feilmeldinger må du gå tilbake til konfigurasjonen av kjernen og rydde opp i problemene.
Steg 3: Kompilering og installering av PPP
Installasjonen av PPP (som er user-level delen av protokollen) er ikke så direkte som den burde være ettersom det også her må patches inn støtte for MPPE/MPPC. Dersom du får kompileringsfeil som tyder på at en header “pcap.h” er manglende, vil det være tilstrekkelig å installere pakken “tcpdump” (dersom dette ikke fungerer for deg kan du benytte deg av siste betaversjon, og prøve å patche den med samme patch som vi lastet ned i steg 1).
tar xfvz ppp-2.4.2.tar.gzgunzip ppp-2.4.2-mppe-mppc-1.0.patch.gz
patch -p0 -i ppp-2.4.2-mppe-mppc-1.0.patch
cd ppp-2.4.2./configure
make
make install
Vi har valgt å kompilere ppp-delen av kjernen som moduler, og vil at disse skal lastes inn automatisk. Dette løser vi ved å sette opp endel aliaser i filen “/etc/modules.conf”, disse linjene legges til:
alias char-major-108 ppp_generic
alias tty-ldisc-3 ppp_async
alias tty-ldisc-14 ppp_synctty
alias ppp-compress-21 bsd_comp
alias ppp-compress-24 ppp_deflate
alias ppp-compress-26 ppp_deflate
alias net-pf-47 ip_grealias ppp-compress-18 ppp_mppe_mppc
Steg 4: Kompilering og installering av PoPTOP VPN-tjener
tar xfvz pptpd-1.1.4-b4.tar.gz
cd poptop-1.1.4/./configure
make
make install
cp samples/pptpd.conf /etc/
Konfigurasjonsfilen vi nettopp kopiert gjør i seg selv veldig lite ettersom den bare inneholder kommentarer og eksempler for senere referanse dersom du treffer på noen problemer, eller trenger en litt mer spesialisert konfigurasjon. I den samme filen skal vi legge til tre linjer:
option /etc/ppp/options.pptpd
localip 192.168.0.1
remoteip 192.168.0.10-20
Den første linjen angir at videre konfigurasjon av PoPToP vil være å finne i filen “/etc/ppp/options.pptpd” som vi om noen få øyeblikk skal opprette. Den andre linjen settes til maskinens ip-adresse på det private nettverket. Tredje og siste linje angir hvilke private ip-adresser som vil bli tildelt brukere tilkoblet det private nettverket via VPN-tjeneren. Opprett så en fil kalt “/etc/ppp/options.pptpd” og gi den følgende innhold (dette er egentlig direktiver for PPP, derav plasseringen av filen):
name *
lock
mtu 1450
mru 1450
proxyarp
auth
ipcp-accept-local
ipcp-accept-remote
lcp-echo-failure 3
lcp-echo-interval 5
deflate 0# Handshake Auth Method
+chap
+mschap-v2# Data Encryption Methods
mppe required
Skal ikke gå så mye inn på hva disse konfigurasjonene gjør i praksis ettersom det skjer lite utover en standard konfigurasjon – det eneste gjordt er å legge til støtte for “mschap-v2″-autentisering og til sist lagt til en linje som ber tjeneren om å kreve kryptering eller droppe klienten. En ting du bør merke deg er at dersom det er noen skrivefeil i konfigurasjonsfilene dropper pptpd-tjeneren (PoPToP) direkte til konsoll uten advarsler eller beskjeder i noen form om hva som kan være galt – så i tvil: kommenter ut en og en linje i filene “/etc/pptpd.conf” og “/etc/ppp/options.pptpd” i filene til tjeneren fungerer for å lokalisere feilen.
Neste og siste steg i installasjonen er å sette opp brukernavn og passord som angis ved innlogging på VPN-tjeneren – dette gjøres ved å editere filen “/etc/ppp/chap-secrets”. Denne filen ser slik ut (litt vanskelig å se her, men den er delt inn i fire felter for henholdsvis brukernavn, servernavn, passord og ip-adresse), og andre nye brukere legges til ved å følge i samme mønster:
# Secrets for authentication using CHAP
# client server secret IP addresses
#username servername password *
minbruker * hemmeligpassord *
Ettersom “chap-secrets” inneholder passord i klartekst er du sterkt oppfordret til å sørge for at ingen andre enn root har tilgang til denne filen, og resten av katalogen for den slags skyld. For å sikre at dette gjøres rett kan du gjøre følgende (innlogget som root):
cd /etc
chown -R root.root ppp/
chmod 700 ppp/
Selve tjeneren starter du med å gi kommandoen “pptpd”. Dersom tjeneren ikke fungerer, men starter kan du istedet starte tjeneren med kommandoen “pptpd –fg –debug” og følge med i filen “/var/log/messages” med det formålet å finne feilen.
Steg 5: Oppsett av VPN-klient i MS Windows XP Professional
Oppsett av VPN-klient er veldig enkelt og går her raskt gjennom oppsett av en slik klient i Microsoft Windows XP Professional (Engelsk Versjon). Trykk “Start”, velg “Settings” fulgt av menyvalget “Network Connections”. Her vil du finne de tilkoblingene som er tilgjengelig på maskinen for øyeblikket – vi skal opprette en ny tilkobling og velger derfor “New Connection Wizard”.
Oppgi at du skal koble til nettverket ved arbeidsplassen din (“Connect to the network at my workplace”). Velg “Virtual Private Network connection” som tilkoblingstype. Etter dette vil du bli spurt om å oppgi ett navn samt (den offentlige) adressen til VPN-tjeneren.
For å faktisk koble til velger du forbindelsen du nettopp lagde under “Network Connections” og velger “connect” i dialogen som kommer opp (etter å ha fyllt inn brukernavn/passord som vi satte opp i filen “chap-secrets” på tjeneren).
Linker
- PoPToP VPN-tjener: http://www.poptop.org/
- PPPd: http://www.samba.org/ppp/
- Kernel.org: http://www.kernel.org/
- MPPE/MPPC patch for Linux-kjerne samt PPPd: http://www.polbox.com/h/hs001/
Kilde: http://poptop.sourceforge.net/dox