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