JustPaste.it

Konfiguracja szyfrowanego i kompresowanego tunelu vpn we FreeBSD na bazie vtund

WSTĘP

Czym jest vpn?

VPN (virtual private network - wirtualna sieć prywatna) - to w największym uproszczeniu sieć rozciągnięta pomiędzy wieloma zdalnymi i oddalonymi sieciami LAN, przebiegająca poprzez łącza publiczne, które z natury są mało bezpieczne i nie zapewniają poufności dla przesyłanych danych.

Chcąc zapewnić bezpieczeństwo przesyłanym danym stosuje się różnego rodzaju szyfrowanie i uwierzytelnianie, na bazie różnych systemów zarówno komercyjnych jak i OpenSource, opartych na różnych metodach i protokołach. Najpoważniejszym jest IPSec czy SUN Skip, czasami jednak nie ma potrzeby wytaczać armaty wielkiego kalibru na coś co można ustrzelić z procy. Z pomocą przyjdzie nam program Virtual Tunnel (vtund) dostępny pod adresem http://vtun.sourceforge.net a także w systemie paczek i portsów we FreeBSD (/usr/ports/net/vtun) czy dla innych systemów BSD czy też Linux'a. W przykładowej konfiguracji kompresja tunelu pozwoliła na łączu his/sdi (115200bit/sek - standartowo max 11KB/sek) "wycisnąć" podczas transmisji ftp pliku tekstowego ponad 32KB/sek. Oczywiście stopień kompresji zależy od samych przesyłanych zbiorów, JPG lub MP3 czy film już niewiele da się skompresować...

INSTALACJA

Instalację przeprowadzimy standardowym trybem, czyli:
$>cd /usr/ports/net/vtun
$>make install clean
Plik konfiguracyjny /usr/local/etc/vtund.conf powinien zawierać niezbędne parametry wymagane do zestawienia naszego tunelu pomiędzy dwiema sieciami. W celu przygotowania naszego środowiska systemu, niezbędne jest wykonanie konfiguracji firewalla (o ile go stosujemy). W przykładowej instalacji zestawiono tunel - szyfrowany i kompresowany - pomiędzy dwiema lokalnymi sieciami osiedlowymi (łącze SDI/HIS) po którym przebiega sieć Windows bazująca między innymi na Sambie. Specyfika tworzenia takiego tunelu wymusza ustalenie różnych klas adresów podsieci w łączonych sieciach, choć można także przy pomocy translacji adresów (natd czy ipnat) łączyć sieci o takich samych adresach, jednak nie jest to zalecane bowiem znacznie utrudnia późniejsze wykorzystanie sieci Windows itp. W przykładowej instalacji, obydwie sieci użytkują adresy 10.0.0.0/24 oraz 10.1.0.0/24. Końce zestawionego tunelu otrzymały adresy z podsieci 192.168.1.0/30. Vtund działa wykorzystując urządzenie systemowe /dev/tunX i dlatego musi być ono wkompilowane w nasz kernel (pseudo-device tun 4 # Packet tunnel). W systemie centralnym, vtund działa w trybie serwera obsługującego przychodzące połączenia. W systemach klienckich w trybie klienta łączącego się do systemu centralnego. W uproszczeniu odzwierciedla to poniższy schemat topologii:
LAN1------System Centralny------(.... WAN ....)------System klientowski------LAN2
\ /
\_________________tunel vpn__________________/
Konfiguracja translacji adresów systemów centralnego i klienckiego

Musimy odpowiednio skonfigurować nasz firewall (ipfw) tak aby translacja adresów dotyczyła wyłącznie ruchu kierowanego w świat a nie do naszej wirtualnej sieci. Można to zlecić samemu vtund poprzez odpowiednie wpisy w jego konfiguracji, jednak tutaj wykonane to zostało w /etc/rc.firewall. Niezbędna jest modyfikacja regułek analogiczna do niżej przedstawionej (/etc/rc.firewall sekcja simple):
case ${natd_enable} in
[Yy][Ee][Ss])
if [ -n "${natd_interface}" ]; then

#wyłączamy standartowy tryb translacji wszystkiego
#${fwcmd} add divert natd all from any to any via ${natd_interface}

#będziemy maskować tylko ruch w świat
${fwcmd} add divert natd all from ${inet}:${imask} to any via ${natd_interface}
${fwcmd} add divert natd all from any to ${oip} via ${natd_interface}
fi
;;
esac
Konfiguracja firewall'a w systemie centralnym

W celu przepuszczania ruchu pakietów pomiędzy naszymi systemami, w tym nawiązania połączenia systemów klienckich do naszego systemu centralnego (na port 5000) dodajemy poniższe regułki. W uproszczeniu, abstrachując od konkretnego przypadku, otrzymają one postać:
# Stop spoofing
# ...

# vpn połączenie klienta do serwera na port 5000
# tu należy wstawić publiczny adres IP systemu klienckiego
${fwcmd} add pass tcp from ${ipzdalnegohisa} to ${oip} 5000

# cały ruch pomiędzy sieciami LAN1 i LAN2 po interfejsie tunelu
${fwcmd} add pass ip from any to any via tun1

# Stop RFC1918 nets on the outside interface
# ...
Konfiguracja firewall'a w systemie klienckim

W celu przepuszczania ruchu pakietów pomiędzy naszymi systemami dodajemy poniższe regułki. W uproszczeniu, abstrachując od konkretnego przypadku, otrzymają one postać:
# Stop spoofing
# ...

# cały ruch pomiędzy sieciami LAN1 i LAN2 po interfejsie tunelu
${fwcmd} add pass ip from any to any via tun1

# Stop RFC1918 nets on the outside interface
# ...
Konfiguracja vtund w systemie centralnym

W pliku konfiguracyjnym vtund (/usr/local/etc/vtund.conf) umieszczamy poniższą konfigurację:
options {
# Przyjmowanie połączenia na porcie 5000
port 5000;

# Syslog facility
syslog daemon;

# Scieżki do programów
ifconfig /sbin/ifconfig;
route /sbin/route;
}

# Domyślne parametry sesji
default {
compress yes; # Włączenie kompresji
speed 0; # Przepustowość maksymalna bez limitowania
}
# vpn do systemu klienckiego
vpn1 {
pass mojetajnehaslo; # Password
type tun; # IP tunnel
proto tcp; # TCP protocol
comp zlib:9; # LZO compression level 9
encr yes; # Encryption
keepalive yes; # Keep connection alive
stat yes; # statistics in /var/log/vtund/

# co zrobić przy zestawieniu łącza
up {
# Connection is Up
# 192.168.1.1 - local, 192.168.1.2 - remote
ifconfig "%% 192.168.1.1 192.168.1.2 netmask 255.255.255.252 mtu 1450";
route "add -net 10.0.0.1/24 192.168.1.2";
};
# co zrobić przy zrzuceniu łącza
down {
# Connection is down
# 192.168.1.1 - local, 192.168.1.2 - remote
ifconfig "%% down";
ifconfig "%% delete";
route "delete -net 10.0.0.0/24";
};
}
Konfiguracja vtund w systemie klienckim

W pliku konfiguracyjnym vtund (/usr/local/etc/vtund.conf) umieszczamy poniższą konfigurację:
options {
# Przyjmowanie połączenia na porcie 5000
port 5000;

# Syslog facility
syslog daemon;

# Scieżki do programów
ifconfig /sbin/ifconfig;
route /sbin/route;
}

# Domyślne parametry sesji
default {
compress yes; # Włączenie kompresji
speed 0; # Przepustowość maksymalna bez limitowania
}

# vpn do systemu klienckiego
vpn1 {
pass mojetajnehaslo; # Password
type tun; # IP tunnel
proto tcp; # TCP protocol
comp zlib:9; # LZO compression level 9
encr yes; # Encryption
keepalive yes; # Keep connection alive
stat yes; # statistics

# co zrobić przy zestawieniu łącza
up {
# Connection is Up
# 192.168.1.2 - local, 192.168.1.1 - remote
ifconfig "%% 192.168.1.2 192.168.1.1 netmask 255.255.255.252 mtu 1450";
route "add -net 10.1.0.1/24 192.168.1.1";
};

# co zrobić przy zrzuceniu łącza
down {
# Connection is down
# 192.168.1.2 - local, 192.168.1.1 - remote
ifconfig "%% down";
ifconfig "%% delete";
route "delete -net 10.1.0.0/24";
};
}
Uruchomienie vtund w systemie centralnym

W systemie centralnym, vtund musi działać w trybie serwera i dlatego należy go uruchamiać w sposób typowy dla samodzielnych daemonów np. z /usr/local/etc/rc.d/ przykładowo:
$/usr/local/etc/rc.d>ls -l vpn*
-rwxr-x--- 1 root wheel 206 16 Sty 11:48 vpn-server.sh

$/usr/local/etc/rc.d>cat vpn-server.sh
#!/bin/sh
vpn=/usr/local/sbin/vtund

# start
if [ "x$1" = "x" -o "x$1" = "xstart" ]; then
if [ -f $vpn ]; then
echo -n ' vpn'
$vpn -s vpn1
fi
# stop
elif [ "x$1" = "xstop" ]; then
killall vtund
fi
Uruchomienie vtund w systemie klienckim

W systemie klienckim, vtund musi działać w trybie klienta nawiązującego i uprzymującego połączenie z systemem centralnym. Należy go uruchamiać w sposób typowy dla samodzielnych daemonów np. z /usr/local/etc/rc.d/ przykładowo:
$/usr/local/etc/rc.d>ls -l vpn*
-rwxr-x--- 1 root wheel 322 Jan 16 11:49 vpn-client.sh

$/usr/local/etc/rc.d>cat vpn-client.sh
#!/bin/sh
vpn=/usr/local/sbin/vtund

# start
if [ "x$1" = "x" -o "x$1" = "xstart" ]; then
if [ -f $vpn ]; then
echo -n ' vpn'
# tu należy wstawić publiczny adres IP systemu centralnego
$vpn -p vpn1 ${iphisacentralnego}
fi

# stop
elif [ "x$1" = "xstop" ]; then
killall vtund
fi
"5, 4, 3, ..." Odpalamy!

Czas to wszystko uruchomić, bądź "z palca", bądź poprzez restart systemów. Testowo można "popingować" przeciwległe końce tunelu oraz hosty w zdalnej sieci. Jeśli wszystko działa jak należy, możemy się zabrać za szlifowanie regułek firewalli, rzeźbienie sieci Windows i Samby (jeden wspólny serwer wins niezbędny). Nie jest prostym zadaniem poprawne "wyrzeźbienie" regułek tak aby wszystko działało idealnie w konkretnym środowisku, stąd proponuję rozpocząć od cytowanych ustawień firewalla. Z pewnością napotkacie specyficzne problemy nad którymi przyjdzie wam spędzić wiele czasu ;-)


Dokumentacja jest umieszczona na stronie domowej Virtual Tunnel (vtund) http://vtun.sourceforge.net manuale dostępne w systemie po zainstalowaniu oprogramowania (man vtund). Na stronie domowej projektu jest także dostępne FAQ oraz archiwum grupy dyskusyjnej.

 

Źródło: http://blog.siebab.net/2006/12/konfiguracja-szyfrowanego-i.html