VPN ja SSH
Sisukord
Lihtne VPN tunnel PPP ja SSH abil
Üle võõra ja/või ebaturvalise võrgu (nt avalik wifi) oma asutsue sisevõrgule ligipääsu saamiseks on vaja mingit vahendit, et sisevõrku "pikendada" oma hetke asukohta. Sellise lahendust nimetataksegi VPN (i.k. Virtual Private Network).
VPNi kasutamine võimaldab näiteks ligipääsu asutuse sisevõrgu piiratud ressurssidele (nt intranet) või saada ühendus mingi LANiga (Local Area Network - tihti privaatseid IP numbreid kasutav võrk), mis on internetist kättesaamatu.
VPN vajab:
* serveri poolt, mis paikneb asutuse võrgu serveris ja vahendab liiklust kliendi ja sisevõrgu vahel * kliendi poolt, mis paikneb kasutaja arvutis ja algatab ühenduse serverisse. * tunnelit, mis vahendaks (soovitavalt krüptitult) VPN liiklust kliendi ja serveri vahel.
Käesolev juhend kasutab tunnelina SSH (i.k. Secure SHell) ühendust kliendi ja serveri vahel, mille sees käib PPP (i.k. Point-to-Point Protocol) link. Selline ülesehitus on väga lihtne ning ei vaja vahepealsetest tulemüüridest läbipääsemiseks eriseadistust (tavaliselt on SSH protokoll tulemüürides lubatud).
Kernel
Nii serveri kui kliendi operatsioonisüsteem peab võimaldama PPP ühendusi tekitada. Kernelisse selle toe lisamise õpetus jääb käesoleva juhendi raamest välja ja on iga operatsioonisüsteemi jaoks leitav internetist, nt Linuxi kerneli jaoks Gentoo PPTP lehelt.
Linuxi kerneli puhul, kui PPP tugi on kompileeritud moodulina, tuleb laadida vastav moodul:
modprobe ppp_mppe
Automaatse laadimise saavutamiseks tuleb saee moodul kirjutada konfifaili, mis on distributsioonist sõltuv. Gentoo Linuxi puhul:
echo "ppp_mppe" >> /etc/modules.autoload.d/kernel-2.6
Serveri pool
Kasutaja loomine
Kui serveris on kõigil VPN kasutajatel konto olemas, võib selle sammu vahele jätta. Kui aga pole, tuleks tekitada näiteks ühine vpn kasutaja, kellena kõik sisenevad (käsu täpne süntaks sõltub jällegi operatsioonisüsteemist):
adduser -c "VPN kasutaja" -m vpn
Et see kasutaja saaks käivitada pppd käsku rooduna, tuleb lisada faili /etc/sudoers käsuga visudo järgmised read:
vpn ALL=NOPASSWD: /usr/sbin/pppd
PPPD seadistus
Kuivõrd see kasutaja muud ei tee, kui käivitab PPP deemonit pppd, siis asendada /home/vpn/.bash_profile sisu järgnevaga:
sudo /usr/sbin/pppd passive proxyarp ktune logout
Siin toodud pppd võtmed tähendavad:
* passive - pppd käivitub ja jääb ootama, et klient talle käske saadaks * proxyarp - pppd lisab kliendi IP numbri ja serveri MAC numbri ARP tabelisse, et kliendi masin paistaks kohalikus LANis välja * ktune - pppd häälestab Linuxi kernelit vastavalt vajadusele, näiteks lisab ip_forward lipukese, et pakette ruutida LANist kliendile.
Tulemüür
Kui serveris on kasutusel mingi tulemüüri tarkvara, mis võib tõkestada pakettide liiklust LANist kliendi masinasse, siis tuleks ka see seadistada nimetatud liiklust lubama.
FireHOL jaoks näeb konfiguratsioon välja selline:
router pppsisevrk inface ppp+ outface eth3 policy accept
Kliendi pool
PPPD vaikeseaded
Kui ei eksisteeri, siis tuleks tekitada tühi fail /etc/ppp/options, kuna pppd tahab sealt oma vaikeseadeid lugeda. Meie PPP kanali seaded määratakse käsurealt, mistõttu sellesse faili pole vaja midagi kirjutada
Root kasutaja avalik võti
Et klienti poolel käivituv skript saaks segamatult ja automaatselt ühendust VPN serveriga, tuleb root kasutajale tekitada avaliku-salajase võtme paar, kui seda juba pole (root kasutajana):
ssh-keygen -t dsa -b 1024
See käsk tekitas /root/.ssh/id_dsa ja /root/.ssh/id_dsa.pub failid. Neist viimane, id_dsa.pub on vaja kopeerida serverisse ja lisada vpn kasutaja "võtmerõngasse" käsuga:
cat id_dsa.pub >> /home/vpn/.ssh/authorized_keys
Haldamise skript
Kopeeri see skript kliendi arvutisse (näiteks /root/vpn.sh) ja muuda # addressing ja # account"' all olevad MYPPPIP, REMOTEPPPIP, REMOTENET jt parameetrid vastavalt vajadusele.
#!/bin/sh # (C) Jason Deraleau <jldera@mac.com> - Original script at: http://www.macdevcenter.com/pub/a/mac/2002/12/20/vpn.html?page=2 # (C) Laas Toom <laas.toom@eenet.ee> - Simplification and modifications for Linux and FreeBSD # tools SSH=/usr/bin/ssh PPPD=/usr/sbin/pppd ROUTE=/sbin/route SLEEP=/bin/sleep KILL=/bin/kill HEAD=/usr/bin/head ECHO=/bin/echo SUDO=/usr/bin/sudo # addressing MYPPPIP=192.168.1.2 REMOTEPPPIP=192.168.1.1 REMOTENET=192.168.1.0 REMOTEMASK=255.255.255.0 # account REMOTEHOST=vpnserver.example.com REMOTEUN=vpn function add_route(){ UNAME=$(uname) if [ "$UNAME" == "Linux" ] then $ROUTE add -net $REMOTENET netmask $REMOTEMASK gw $REMOTEPPPIP elif [ "$UNAME" == "Darwin" -o "$UNAME" == "FreeBSD" ] then $ROUTE add -net $REMOTENET -netmask $REMOTEMASK $REMOTEPPPIP fi } if [ "$UID" -eq 0 ]; then case "$1" in start) # Start PPP $ECHO "Starting PPP daemon..." $PPPD pty "$SSH -t -l $REMOTEUN $REMOTEHOST" linkname $REMOTEUN local noauth persist updetach mtu 1492 mru 1492 $MYPPPIP:$REMOTEPPPIP $SLEEP 5 # add route $ECHO "Configuring routing..." add_route $ECHO "Done." ;; stop) # Bring down PPP $ECHO "Killing PPP daemon..." $KILL $($HEAD -n 1 /var/run/ppp-$REMOTEUN.pid) ;; *) $ECHO "Usage: vpn (start|stop)" ;; esac else $ECHO "This program should be run as root or with root privileges." $ECHO "sudo $0 $@" $SUDO $0 $@ fi
Muidugi peavad õigused paigas olema:
sudo chmod 755 /root/vpn.sh
VPN käivitamine:
sudo /root/vpn.sh start
VPN seiskamine:
sudo /root/vpn.sh stop
Viited
[1] - Wikipedia VPN leht
[2] - Käesolev juhend põhineb suuresti MacDevCenteri samanimelisel juhendil, mida on täiendatud ja lihtsustatud.
[3] - PPTP (Point-to-Point Tunnelling Protocol) kasutamine Gentool
--laas 28. jaanuar 2008, kell 14:08 (EET)