Obecnie coraz częściej podstawą pracy na komputerze staje się praca zdalna. Nie stanowi to żadnego problemu przy połączeniach ssh, a nawet podłączenie się do zdalnego pulpitu, jednak pewien problem zaczyna się, gdy pottrzebujemy dostępu nie tylko do jednego zdalnego komputera, ale do całej zdalnej sieci. W takim wypadku należy się posłużyć VPN (Virtual Private Network).VPN (Virtual Private Network) czyli wirtualne sieci prywatne, to bardzo popularne narzędzie, służące do łączenia wielu komputerów ze sobą, w wirtualną sieć poprzez internet.
Działanie tego narzędzia, polega na łączeniu ze sobą dwóch sieci przez tunel, w ten sposób, aby komputery do nich wpięte widziały się nawzajem, tak jakby były połączone w jednej lokalnej sieci. Sytuacje tą najłatwiej zaprezentować na schemacie.
Dzięki zastosowaniu VPN komputery w sieci A i B widzą się nawzajem, a cała transmisja między nimi jest szyfrowana. Zapewnia to bezpieczeństwo wymiany danych.
Zastosowanie
VPN ma najczęściej zastosowanie w firmach, w których pracownicy łączą się zdalnie do sieci firmowej lub firma posiada kilka oddziałów, które wymianiają ze sobą dane.
Coraz częściej VPN znajduje zastosowanie również w rozwiązaniach niekomercyjnych, np. kiedy administrator sieci, chce mieć dostęp do niej „od wewnątrz” z komputera zdalnego w prosty sposób.
Bezpieczeństwo VPN
Cała transmisja VPN (dane i kanały kontrolne) jest szyfrowana przy użyciu bibliotek OpenSSL, dlatego dane które przesyłamy tunelem są naprawdę bezpieczne.
Pozostaje kwestia autentyfikacji klienta – openvpn daje nam tu kilka opcji.
- Klucze – jest to metoda uwierzytelniania za pomocą klucza zapisanego w pliku. Klient musi posiadać na swoim komputerze klucz, który sprawdzany jest przy logowaniu. Aby zapewnić większe bezpieczeństwo, do przechowywania klucza możemu użyć tokena. Klucze są bezpieczne i stosunkowo proste w wykorzystaniu, dlatego właśnie na nich skoncetruję się w tym tekście.
- Cerytfikat – zabezpieczenie certyfikatem jest najczęściej stosowane w bardzo dużych sieciach, w połączeniu z wykorzystaniem kluczy.
- Login i hasło – najprostsze i zarazem najmniej pewne zabezpieczenie. Często używa się go w kryzysowych sytuacjach, gdy nie mamy dostępu do klucza ani certyfikatu.
Konfiguracja serwera VPN
Serwerem VPN nazywamy komputer, do którego klienci podłączają się i dostają dostęp do sieci, w której stoi ten serwer.
W naszym przypadku to oczywiście NND, ale przedstawione tu rozwiązanie będzie identycznie zachowywać się na większości dystrybucji.
Instalujemy pakiet openvpn
# pacman -Sy openvpn
Generujemy klucz
Zdecydowałem się na autoryzację klienta za pomocą kluczy. W tym celu musimy wygenerować taki klucz na serwerze.
Na potrzeby opisu przyjąłem, że klucz będzie znajdował się w /etc/openvpn/shared.key
# cd /etc/openvpn/
# openvpn –genkey –secret static.key
W ten sposób stworzymy w lokalizacji /etc/openvpn 2048 bitowy klucz dostępu do vpn. Możemy go teraz skopiować na komputer który będzie łączył się z serwerem (nie wyrzucamy go z serwera!), będzie potrzebny do logowania do naszej wirtualnej sieci prywatnej.
Plik konfiguracyjny
Plik konfiguracyjny openvpn jest bardzo prosty i przejrzysty. Pamiętajmy, że miejsce w którym stworzymy ten plik nie ma znaczenia, ścieżkę do niego podajmy przy uruchamianiu openvpna.
Na potrzeby opisu przyjąłem, że plik konfiguracyjny serwera będzie znajdował się w /etc/openvpn/server.conf
Przykładowy plik konfiguracyjny serwera.
dev tun
ifconfig 10.8.0.1 10.8.0.2
secret /etc/openvpn/static.key
proto tcp-server
daemon
verb 4
log-append /var/log/openvpn.log
comp-lzo
Omówię teraz kolejno wszystkie wpisy
dev tun – urządzenie (interfejs) na którym openvpn stworzy most
ifconfig 10.8.0.1 10.8.0.2 – podajemy tu dwa adresy, które są dwoma końcami tunelów. Adres pierwszy, będzie występował na serwerze, drugi zaś, na klientach. Musimy zadbać, aby adresy te, nie pokrywały się z tymi, których używamy w sieci.
secret /etc/openvpn/static.key – ścieżka do klucza
proto tcp-server – za pomocą tego wpisu ustalamy dwie rzeczy – na jakim protokole będzie odbywało się przesyłanie zaszyfrowanych danych, oraz czy dany komputer ma być klientem czy serwerem. W tym przypadku protokół to tcp a komputer ten, ma być serwerem VPN
daemon – opcja ta powoduje, że openvpn będzie pracował w tle.
verb 4 – zmienna verb ustala poziom logowania zdarzeń przez openvpn
log-append /var/log/openvpn.log – plik do którego będą zapisywane logi. Warto dopisać ten plik, do logrotate.
comp-lzo – uaktywnia kompresję przesyłanych danych.
Otwieramy port
Openvpn pracuje na porcie 1194. Jeżeli używamy domyślnego firewalla w NND, port ten jest zablokowany. W celu odblokowania portu w pliku /etc/iptables/firewall dodajemy wpis, zaraz pod
# pingi pozwalamy
$i -A INPUT -p icmp –icmp-type echo-request -j ACCEPT -m limit –limit 1/sec 2>$LOGFILE
Operację tę, wykonać musimy jako użytkownik root.
Fragment ten powienien wyglądać teraz tak:
Zmieniamy /etc/iptables/firewall
# pingi pozwalamy
$i -A INPUT -p icmp –icmp-type echo-request -j ACCEPT -m limit –limit 1/sec 2>$LOGFILE
$i -A INPUT -p tcp -i $EXTIF –dport 1194 -j ACCEPT 2>$LOGFILE
#FORWARD
[ -x /etc/iptables/forward.sh ] && /etc/iptables/forward.sh
Dodana linia, została wyróżniona.
Następnie restartujemy iptables:
# /etc/rc.d/iptables restart
Uruchamiamy serwer
# openvpn /etc/openvpn/server.conf
Jeżeli wszystko poszło w porządku, nie wyświetlił się żaden błąd, oznacza to, że serwer się włączył.
Openvpn startujący razem z systemem
Aby openvpn startował razem z systemem, musimy „dopisać go” do /etc/rc.d/rc.local
Wpisujemy tam to samo polecenie, którym startowaliśmy serwer.
Konfiguracja klienta na Linuksie
Do obsługi klienta potrzebujemy również pakietu openvpn. Następnym krokiem jest skopiowanie z serwera klucza (plik static.key). W naszym przypadku wrzucamy go do lokalizacji /etc/openvpn
Plik konfiguracyjny
Plik konfiguracyjny klienta, dla odróżnienia, nazywamy klient.conf i zapisujemy również w lokalizacji /etc/openvpn
Listing 7 – Przykładowy plik konfiguracyjny klienta.
dev tun
remote 83.66.220.5 1194
ifconfig 10.8.0.2 10.8.0.1
secret /etc/openvpn/static.key
proto tcp-client
route 192.168.2.0 255.255.255.0
comp-lzo
Omówię teraz kolejno wszystkie wpisy
dev tun – urządzenie (interfejs) na którym openvpn stworzy most
remote 83.66.220.5 1194 – zewnętrzny adres ip serwera VPN. Możemy tu również podać domenę (przydatne w przypadku dynamicznego adresu IP serwera).
ifconfig 10.8.0.2 10.8.0.1 – Linia tą omówiłem dokładnie na przykładzie konfiguracji serwera. Podajemy tutaj te same IP co w konfiguracji serwera, jednak w odwrotnej kolejności.
secret /etc/openvpn/static.key – ścieżka do klucza
proto tcp-server – za pomocą tego wpisu ustalamy dwie rzeczy – na jakim protokole będzie odbywało się przesyłanie zaszyfrowanych danych, oraz czy dany komputer ma być klientem czy serwerem. W tym przypadku protokół to tcp a komputer ten, ma być serwerem VPN
daemon – opcja ta powoduje, że openvpn będzie pracował w tle.
route 192.168.1.0 255.255.255.0 – bardzo ważna linia. Musisz dostosować ją do swojej sieci. Podajemy w niej podsieć i maskę dla sieci, której adresy mają być tunelowane przez VPN. Lini tych może być kilka, jeżeli mamy parę klas. Uwaga! Jeżeli łączymy ze sobą dwie sieci ich adresacja, nie może się pokrywać.
comp-lzo – uaktywnia kompresję przesyłanych danych.
Uruchamiamy serwer (ale uwaga, tu chodzi o komputer, który będzie klientem)
# openvpn /etc/openvpn/client.conf
Sat Dec 8 20:30:54 2007 OpenVPN 2.0.9 i586-pc-linux-gnu [SSL] [LZO] built on Oct 24 2007
Sat Dec 8 20:30:54 2007 IMPORTANT: OpenVPN’s default port number is now 1194, based on an official port number assignment by IANA. OpenVPN 2.0-beta16 and earlier used 5000 as the default port.
Sat Dec 8 20:30:54 2007 LZO compression initialized
Sat Dec 8 20:30:55 2007 TUN/TAP device tun0 opened
Sat Dec 8 20:30:55 2007 /sbin/ifconfig tun0 10.8.0.2 pointopoint 10.8.0.1 mtu 1500
Sat Dec 8 20:30:55 2007 Attempting to establish TCP connection with 77.253.150.168:1194
Sat Dec 8 20:30:55 2007 TCP connection established with 77.253.150.168:1194
Sat Dec 8 20:30:55 2007 TCPv4_CLIENT link local: [undef]
Sat Dec 8 20:30:55 2007 TCPv4_CLIENT link remote: 77.253.150.168:1194
Sat Dec 8 20:30:55 2007 Peer Connection Initiated with 77.253.150.168:1194
Sat Dec 8 20:30:56 2007 Initialization Sequence Completed
Najważniejsza jest ostatnia linia, informująca nas, że połączenie działa. Możemy teraz sprawdzić funkcjonowanie tunelu, poleceniem ping.
Testujemy działanie tunelu
# ping 10.8.0.1
Jeżeli pingi dochodzą, oznacza, że wszystko działa poprawnie.
Openvpn startujący razem z systemem
Aby klient openvpn startował razem z systemem, musimy do jego pliku konfiguracyjnego dopisać opcję daemon (tak jak to miało miejsce w przypadku serwera) oraz „dopisać go” do /etc/rc.d/rc.local lub w innym miejscu typowym dla danej dystrybucji.
Konfiguracja klienta w systemie Windows
Musimy użyć programu openvpn dla Windows, zostało to opisane w następnej części artykułu o zastosowaniu certyfikatów w VPN. Plik konfiguracyjny klienta będzie taki sam jak dla Linuksa. Z jednym wyjatkiem. Zamiast wpisu:
secret /etc/openvpn/static.key
będzie np.:
secret c:static.key
Uruchamiamy następnie program i możemy już korzystać z połączenia. Warto dodać, że w Windows klikając prawym klawiszem myszy na pliku konfiguracyjnym, któremu dajemy rozszerzenie ovpn, zobaczymy opcję uruchomienia VPN na podstawie włąśnie tego pliku.
autor: Jakub Cichocki |