VPN-Howto-hu
Sziasztok!
Ime a sokak altal kert VPN leiras.
Tegyunk fel openssh csomagot. (Ha minden igaz sima ssh-val is felkerul)
Mindket oldalon eljatszhato a kovetkezo muvelet, nemcsak a szerveroldalon.
Keszitsunk SSL kulcsot:
openssl req -new -x509 -days 365 -nodes -config /etc/ssl/openssl.cnf \
-out /etc/ssl/certs/stunnel.pem -keyout /etc/ssl/certs/stunnel.pem
Egy kis segitseg a kerdesek kitoltesehez:
Kerdes Valasz(ok)
Country name HU
State or Province name Hungary
Locality Budapest, Szolnok, stb.
Organization Name BIGFISH Ltd.
Organizational Unit Name Sysadmin, Development
Common Name (FQDN) www.ezaszerverem.hu
Generation of Diffie-Hellman Parameters. Ez a nagyobb biztonsagert
hozzatesz egy nagyon nagy primszamot a kulcs vegehez.
openssl gendh 512 >>/etc/ssl/certs/stunnel.pem
Hogy amit eddig csinaltunk mire volt jo, az a leiras vegen kiderul. :)
Szedjunk le headereket az stunnel forditasahoz. Sajnos szukseg van
ra hogy ujat forditsunk, mivel a potatos stunnel nem tudja a -L
parametert. Hogy miert van a -L-re szukseg, lentebb szinten leirom.
FONTOS! Mindket oldalon szukseg van ppp tamogatasra!
apt-get install libssl09-dev, meg amit meg akar azt feltenni
wget http://drumman.rulez.org/stunnel-3.8p4.tgz
Aki nem bizna az enaltalam leszedett stunnelben, annak
http://www.stunnel.org/ leszedheti maganak :)
mv stunnel-3.8p4.tgz /usr/src
cd /usr/src
tar xzf stunnel-3.8p4.tgz
cd stunnel-3.8p4
./configure --with-cert-dir=/etc/ssl/certs --with-pem-dir=/etc/ssl/certs
Makefile elejet a kovetkezore modositani (debianosabba tesszuk):
---
prefix=/usr
exec_prefix=${prefix}
sbindir=${exec_prefix}/sbin
libdir=${exec_prefix}/lib
man8dir=${prefix}/man/man8
piddir=/var/run/
ssldir=/usr
PEM_DIR=/etc/ssl/certs
(a tobbi ami ezalatt van jo)
---
make
make install
------------------------------
szerver oldalon kovetkezok:
- /etc/ppp/peers/clientconnect tartalma:
---
ipcp-accept-local # A szerver ppp altal kapott ipcimet a masik oldal
# hatarozza meg
ipcp-accept-remote # A masik oldal elarulja a sajat ip-jet, ezt elfogadjuk
# Ures sor :)
lcp-echo-interval 30 # Line Control Protocol Echoreq-ek 30 masodpercenkent
lcp-echo-failure 4 # 4 megvalaszolatlan echoreq utan pppd kilepes,
# "vonalbontas"
+pap # PAP-al autentikalunk
-chap # Nem CHAP-al :)
noipx # Nem fog a ppp kapcsolaton ipx atmenni
---
- /etc/pap-secrets legaljara, vagy az "INBOUND connections" ala a
kovetkezo bejegyzes:
loginnev itteniserverneve "jelszo" *
Csinalunk egy usert ami majd futtatja az stunnelt
adduser pppuser
adduser pppuser dip
Utana passwd -l pppuser, vagy a /etc/shadowban a cryptelt password
helyere egy *-t teszunk.
Csinaljunk inditofajlt:
/etc/init.d/stunnel tartalma ennyi:
---
#!/bin/sh
# Egy kis magyarazat a parameterekhez:
#
# su - pppuser -c ""
# At "su"-zunk a pppuser kornyezetebe, a stunnelt innen inditjuk:
#
# -P ~/pppd.pid
# A pid (program futasat jelzo) file a pppuser homejaba kell keruljon,
# mashova nem tud ui. irni
#
# -p /etc/ssl/certs/stunnel.pem
# Hasznaljuk a /etc/ssl/certs/stunnel.pem -ben levo korabban mar generalt
# kulcsunkat
#
# -d 2020
# A 2020-as porton fogja az stunnel a beerkezo konnekteket varni.
#
# -L /usr/sbin/pppd
# Ezt a programot inditjuk :) FONTOS! A programnak muszaj -L parameterrel
# indulnia,
# ezzel a stunnel egy pty-t (pseudo-terminal) ker neki, kulonben a pppd
# nem fut. Sima modemezesnel ez a pseudo-terminal maga a modem device.
#
# -- pppd file /etc/ppp/peers/clientconnect
# Atadott parameterek, az elso kivetelevel. Az elso parameter ugyanis a
# stunnel-nek mondja meg hogy milyen programkent logolja a syslogba
# A masodik es harmadik parameter azt hatarozza meg hogy a pppd honnan
# vegye a beallitasait. Ez a korabban megcsinalt file.
su - pppuser -c "/usr/sbin/stunnel -P ~/pppd.pid -p \
/etc/ssl/certs/stunnel.pem -d 2020 -L /usr/sbin/pppd -- pppd file \
/etc/ppp/peers/clientconnect"
#
# Valaszthato izles szerint hogy mas szamara ne tartsuk nyitva ezt a portot:
# (szukseges hozza a kernelben a firewalling beallitasa)
# A lista elejere engedes:
ipchains -I input -j ACCEPT -s <kliens szerver> -d <halokartyaip>
# A lista vegere tiltas:
ipchains -A input -j REJECT -l -s 0.0.0.0/0.0.0.0 \
-d <halokartyaip>/255.255.255.255 -p tcp --dport 2020
---
(ne felejtsunk el chmod u+x-et tenni a /etc/init.d/stunnel-ra.
utana csinalunk symlinket /etc/rc2.d-be hogy el is induljon inditaskor:
cd /etc/rc2.d # (debianban 2 a default runlevel)
ln -s ../init.d/stunnel S89stunnel # Symlink az /etc/init.d/stunnel-re
aztan szerveroldalon elindithatjuk:
/etc/init.d/stunnel
oke, ezzel a szerver oldal kesz.
------------------------------
Kliens oldalon a kovetkezok:
En tobb szerverre is hasznalom ezt, ezert szamoztam be (nalam nem pont
ugyanez a neve)
- /etc/ppp/peers/serverconnect1 tartalma
---
192.168.1.1:192.168.1.2
linkname serverconnect1
user loginnev
---
Itt adhatjuk meg a pppd-nek hogy ertesse meg a masik oldallal miszerint
az o ipje 192.168.1.2, a mienk pedig 192.168.1.1. Ennek az elfogadasat
a masik oldalon pedig mar bekonfiguraltuk.
A linkname a /var/run alatt letrehozott pidfile miatt lenyeges, a
kesobbiekben ezt fogjuk cronbol vizsgalni a kapcsolat megletet illetoen.
Csinaljunk egy scrtiptet ami ellenorzi a kapcsolat megletet:
en igy hivom:
-- /sbin/eleszt.sh
---
#!/bin/sh -i
DATUM=`date +%Y-%m-%d\ %H:%M:%S`
if [ ! -e /var/run/ppp-serverconnect1.pid ]; then
echo "ppp-serverconnect1 nem fut, ujrainditottam: $DATUM"
/usr/sbin/stunnel -c -r big.hu:2020 -L /usr/sbin/pppd -- pppd \
call serverconnect1 &
fi
---
Ezt a filet be lehet rakni crontabba, igy lebontas utan 5 percen belul
ura probalja felepiteni a kapcsolatot:
0-55/5 * * * * /sbin/eleszt.sh
Nehany megjegyzes:
- Ha megfigyeled, az eleszt.sh-ban a shell -i-vel hivodik meg. Ez
tapasztalataim szerint szukseges, mert a -L-el az stunnel is csak igy tud
pty-t kerni a pppd szamara.
- A sebessegcsokkenes nem veheto eszre (maximum lassu gepeknel 100M-s
etherneten), viszont a pppd alapbol hasznalja a deflate es a bsdcomp
tomoritesi algoritmusokat(?), tehat a tunnelen atmeno forgalom nemcsak
kodolt lesz, hanem tomoritett is :)
- A kulcs generalasanal (level eleje) 1 ev (365 nap) a kulcs lejarati
ideje. Ugyelj arra hogy a kulcs mindig aktualis maradjon.
- Info kiiratasa a kulcsrol:
openssl x509 -subject -dates -fingerprint -in /etc/ssl/certs/stunnel.pem
- En ket gepre csinalom ezt az stunnelezest egy szerverrol, es a pppd-nek
local ip-re mindket helyen meg lehetett adni ugyanazt az ip-t, tokeletesen
mukodik. Amikor a kapcsolat elindul, a route magatol tesz fel host routet.
- Celszeru megnezni mi van a /etc/ppp/ip-up.d/ konyvtarban, mert inditaskor
a pppd vegrehajtja azokat a parancsfileokat.
- Celszeru tovabba legalabb /etc/hosts-ba aliasokat tenni a pppd altal
beallitott IP-kre, igy barmifele csatlakozas meggyorsul az stunnelen
keresztul. (last /etc/hosts.deny legaljan az ALL:PARANOID sort)
=========
Es a vegere jojjon egy kis "bonus" nyalanksag:
POP3S Keszites (secure pop3):
Ezt a pop3 tipust az m$ outlook kliensek tamogatjak, tehat ezert celszeru
hasznalni!
Ha mar megvan a /etc/init.d/stunnel akkor ezt meg bele lehet tenni
stunnel -p /etc/ssl/certs/stunnel.pem -d 995 -l /usr/sbin/in.qpopper -- \
in.qpopper -s -T 60
Azt hiszem a parameterek jelenteset nem magyarazom el :) Viszont megjegyzem,
hogy a \ karakterek csak arra szolgalnak hogy az ami itt nem fert el
egy sorban, az egerrel masolas utan is mukodjon. Tehat ha a backslasht
kiveszed es egy sorba irod az egeszet, akkor (is) mukodni fog. A qpoppert
sajat szajizem szerint parametereztem.
A pop3s-el kapcsolatban:
Outlooknal megneztem, harom fontos dolog van. Az egyik, hogy a pop3 server
neve pontosan _ugyanaz_ legyen mint amit az ssh kulcsgenerelasnal megadtunk!
A masik az, hogy beallitsuk az advanced fulnel (tools -> accounts ->
properties -> advanced) hogy a pop3-hoz a kliens secure protokollt
hasznaljon, a bejeloleskor a portszam 995-re fog valtozni, de ez igy jo,
ez a default. A harmadik dolog az, hogy ha ezt a metodust hasznalod, akkor
ugyelned kell arra hogy a gep oraja jol legyen bellitva, hiszen a kulcs
ervenyesseget a gep ellenorzi, es mindenfele ablakokat fog kidobalni
mail lekereskor ha nem ervenyes a kulcs, vagy csak amiatt nem ervenyes
mert a geped oraja rosszul jar. Ugyanilyen ablakokat dobal majd akkor is
ki, ha a szerver nevet nem ugyanannak allitottad be mint a kulcs
generalasakor.
Remelem segitettem :)
Udv.:
Karolyi Laszlo
drumman@drumman.rulez.org
Administrator, BIGFISH Internet