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 cleanPlik 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 ;; esacKonfiguracja 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 fiUruchomienie 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.
No comments:
Post a Comment