OpenVPN – instalacja, konfiguracja

26 lipca 2015

VPN – tunel, przez który płynie ruch w ramach sieci prywatnej pomiędzy klientami końcowymi za pośrednictwem publicznej sieci. Przesyłane dane mogą być kompresowane i szyfrowane. Jest to rozwiązanie często stosowane w firmach, w których zdalni użytkownicy pracują ze swoich domów na niezabezpieczonych łączach.

OpenVPN jest pakietem oprogramowania, które umożliwia tworzenie bezpiecznych tuneli VPN. Do szyfrowania danych i kanałów kontrolnych używa bibliotek OpenSSL. Obsługuje kilka metod uwierzytelniania :

– z użyciem pliku klucza współdzielonego (ten sam klucz dla serwera oraz klienta)
– z użyciem certyfikatów SSL
– z użyciem loginu oraz hasła (Autoryzacja PAM, LDAP)

Został udostępniony na licencji GNU GPL.

INSTALACJA

Przykład instalacji serwera OpenVPN na systemie Debian/Ubuntu :

Wykonujemy :

apt-get update && apt-get install openvpn

KLUCZ WSPÓŁDZIELONY

Tak jak już wcześniej napisałem, OpenVPN obsługuje kilka metod uwierzytelniania klientów. Jeżeli chcemy uwierzytelniać klienta za pomocą klucza współdzielonego, który jest identyczny dla klienta i serwera, należy na serwerze lub kliencie wykonać :

openvpn --genkey --secret static.key

W następnej kolejności kopiujemy ten sam klucz na serwer i na maszynę klienta.

W obu plikach konfiguracyjnych (na serwerze i na maszynie klienckiej) dodajemy dyrektywę secret :

secret podajemy_ścieżkę_do_klucza.key

Jest to proste i szybkie rozwiązanie. Wadą jest że ogranicza się praktycznie do jednego urządzenia-klienta.

Metodę można stosować przy zestawianiu dwóch sieci. Dobrym przykładem jest łączenie oddziału firmy z centralą.

CERTYFIKATY

Poniżej przedstawiam uwierzytelnianie za pomocą certyfikatów. Metoda bardzo dobrze się sprawdza przy tworzeniu zdalnego dostępu dla pracowników z domu do firmy. Należy wygenerować główny certyfikat oraz klucz CA. Za pomocą niego będziemy generować certyfikaty dla serwera oraz klientów.

Zaczynamy od utworzenia własnego Centrum Certyfikacji :

– wykorzystujemy do tego celu gotowe skrypty OpenVPN – EASYRSA

cd /usr/share/easy-rsa
cp -r /usr/share/easy-rsa /etc/openvpn
cd /etc/openvpn/easy-rsa

Modyfikujemy plik vars (zamieniamy domyślne wartości na własne, które będą dostępne podczas tworzenia certyfikatów):

nano /etc/openvpn/easy-rsa/vars

Wartości, które należy zmienić : KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, KEY_EMAIL

Przykładowe wartości :

export KEY_COUNTRY="PL"
export KEY_PROVINCE="DOLNOSLASKIE"
export KEY_CITY="WROCLAW"
export KEY_ORG="EPROIT"
export KEY_EMAIL="admin@eproit.pl"

Wykonujemy następnie :

source ./vars
./clean-all

Tworzymy certyfikat oraz klucz CA :

./build-ca

Jako Common Name można podać dowolną nazwę centrum np. “OpenVPN-CA”

Utworzymy w ten sposób w katalogu keys dwa pliki :

ca.crt – publiczny certyfikat główny CA

ca.key – prywatny klucz CA. Jest to plik, który musimy chronić !

Dla celów bezpieczeństwa robimy kopię tych plików :

mkdir /home/certyfikaty

cp /etc/openvpn/easy-rsa/keys/ca.crt /home/certyfikaty

cp /etc/openvpn/easy-rsa/keys/ca.key /home/certyfikaty

cp /etc/openvpn/easy-rsa/keys/index.txt /home/certyfikaty

cp /etc/openvpn/easy-rsa/keys/serial /home/certyfikaty

Tworzymy certyfikat oraz klucz dla serwera :

./build-key-server podajemy_nazwę_serwera

np. (dla nazwy serwera – openvpn)

./build-key-server openvpn

Większość parametrów pozostaje domyślna.
Jedynie w polu Common Name podajemy własną nazwę serwera np. openvpn

Jako Organizational Unit Name możemy podać że jest to Serwer OpenVPN.

Jeżeli wyskoczy informacja o podanie hasła, to nic nie podajemy. Nie chcemy przecież za każdym razem podawać hasła przy starcie serwera OpenVPN.

Na koniec dostaniemy informację czy chcemy podpisać certyfikat przez własne Centrum Certyfikacyjne. Wpisujemy Yes.

Po tej operacji w katalogu keys powinny pojawić się pliki openvpn.key i openvpn.crt . Są to kolejne pliki, które będą niezbędne do konfiguracji serwera.

Robimy kopię tych plików :

cp /etc/openvpn/easy-rsa/keys/openvpn.key /home/certyfikaty

cp /etc/openvpn/easy-rsa/keys/openvpn.crt /home/certyfikaty

chmod 400 /home/certyfikaty

Tworzymy certyfikaty dla klientów :

Dla przykładu przedstawiam tworzenie certyfikatów oraz kluczy dla 3 użytkowników (jeżeli potrzebujesz dla większej liczby użytkowników, tworzysz certyfikaty i klucze w podobny sposób):

cd /etc/openvpn/easy-rsa
./build-key jnowak
./build-key kkowalska
./build-key akowalski

Jeżeli chcemy hasłem zabezpieczyć klucz klienta, należy użyć skrypt build-key-pass zamiast build-key.
W przypadku kradzieży lub zagubienia certyfikatu, zmniejszamy ryzyko że jakaś nieuprawniona osoba dostanie się do naszej sieci. Wadą tego rozwiązania jest to że przy każdym łączeniu się z serwerem OpenVPN trzeba będzie wpisać hasło.

Przykład tworzenia certyfikatu zabezpieczonego hasłem dla użytkownika eproit :

./build-key-pass eproit

Dla każdego klienta należy wpisać inną nazwę w Common Name np.

“jnowak”, “kkowalska”, or “akowalski”

Generujemy klucz dla algorytmu Diffie-Hellmana:

Jest to klucz, który posłuży do zabezpieczenia procesu podczas przekazywania klucza w procesie uzgadniania tunelu.

Wykonujemy :

./build-dh


Przechodzimy do katalogu z kluczami i certyfikatami. Sprawdzamy czy wszystkie posiadamy.

Należy odpowiednio zabezpieczyć dostęp do kluczy.

cd /etc/openvpn/easy-rsa/keys

Ostatni krok to skopiowanie certyfikatów oraz kluczy dla każdego klienta.

Dla przykładu dla użytkownika jnowak kopiujemy następujące pliki :

ca.crt – Certyfikat CA

jnowak.crt – Certyfikat klienta jnowak

jnowak.key – Klucz klienta jnowak

ODWOŁYWANIE CERTYFIKATÓW

– w przypadku kradzieży sprzętu, zagubienia lub wygenerowania nowego

Do odwoływania certyfikatów używamy polecenie revoke-full.

Procedura jest następująca :

1) Przechodzimy do katalogu ze skryptami :

cd /etc/openvpn/easy-rsa

Wczytujemy parametry konfiguracyjne :

source ./vars

2) Wykonujemy polecenie revoke-full z parametrem, którym jest nazwa certyfikatu do odwołania.

np. (dla nazwy certyfikatu “eproit”)

revoke-full eproit

W pliku /etc/openvpn/easy-rsa/keys/crl.pem powinien się znajdować certyfikat, który został odwołany.

3) Edytujemy konfigurację serwera (tylko przy pierwszym odwołaniu certyfikatu):

nano /etc/openvpn/server.conf

Dodajemy ścieżkę do pliku crl.pem :

crl-verify /etc/openvpn/easy-rsa/keys/crl.pem

4) Resetujemy serwer OpenVPN

KONFIGURACJA SERWERA OPENVPN

Należy skopiować gotowy plik konfiguracyjny z /usr/share/doc/openvpn/examples/sample-config-files do /etc/openvpn :

cd /usr/share/doc/openvpn/examples/sample-config-files
gunzip server.conf.gz
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn


Edycja pliku konfiguracyjnego :

cd /etc/openvpn
nano server.conf

Domyślna konfiguracja :

– OpenVPN używa interfejsu TUN (dla routingu)

– Serwer nasłuchuje połączeń klienckich na porcie UDP 1194

Na początku należy podać ścieżki do certyfikatu CA, certyfikatu oraz klucza serwera a także do klucza dla algorytmu Diffie-Hellmana:

ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/openvpn.crt
key /etc/openvpn/easy-rsa/keys/openvpn.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem

TYPY TUNELI

Serwer OpenVPN umożliwia podłączenie się do sieci na dwa sposoby. Jednym z nich jest tryb routowania (tun). Ten tryb wykorzystujemy przy łączeniu pracowników zdalnych z firmą. Używany przy konfiguracji brama + wiele klientów lub brama – brama.

Drugi sposób to połączenie w trybie mostkowania (tap).

W trybie bridge (tap) po podłączeniu do serwera OpenVPN, uzyskujemy IP z tej samej podsieci co urządzenie docelowe.

Ten tryb jest często stosowany przy łączeniu oddziałów firmy z centralą. Używany kiedy łączy się kilka sieci. Niestety posiada wady tj. :

– między sieciami przekazywany jest cały ruch (w tym pakiety rozgłoszeniowe), który może doprowadzić do obciążenia tunelu VPN.

– należy zestawić mostek pomiędzy interfejsem wirtualnym (tap0) z interfejsem mającym dostęp do sieci LAN serwera np. eth0.

Jeżeli chcemy używać tryb mostkowy tap, należy zainstalować pakiet bridge-utils (w przypadku systemu Debian/Ubuntu) na serwerze OpenVPN.

Należy również zmienić w pliku konfiguracyjnym serwera, parametr dev tun na dev tap.

####Pozostałe ustawienia####

Jeżeli chcemy aby serwer OpenVPN nasłuchiwał na porcie TCP, należy zmienić parametr proto udp na proto tcp.
Jeśli chcemy aby OpenVPN nasłuchiwał na porcie TCP i UDP, należy uruchomić dwie oddzielne instancje OpenVPN. Można je uruchomić na tej samej maszynie przy użyciu oddzielnych plików konfiguracyjnych (server.conf).

Aby zmienić wirtualny zakres adresów IP dla klientów VPN, należy zmodyfikować dyrektywę server.
Zakres adresów powinien zawierać prywatne adresy IP i nie powinny być one obecnie używane w sieci lokalnej.

server 192.168.28.0 255.255.255.0

Aby klienci VPN mogli się łączyć bezpośrednio ze sobą należy odkomentować parametr :

client-to-client

Domyślnie klienci mogą się łączyć tylko z serwerem.

Aby zwiększyć bezpieczeństwo należy odkomentować dyrektywy :

user nobody i group nobody

(w przypadku używania systemów Linux/Unix, BSD).

Po każdej zmianie konfiguracji należy wykonać restart serwera OpenVPN:

/etc/init.d/openvpn restart

Tak wygląda przykładowa konfiguracja serwera, przy uwierzytelnianiu użytkowników za pomocą certyfikatów :

– OpenVPN działa w trybie routowania (dev tun)
– podsiecią do której będą przynależeć klienci VPN jest : 192.168.28.0/24

port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/openvpn.crt
key /etc/openvpn/easy-rsa/keys/openvpn.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
server 192.168.28.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3

URUCHAMIANIE SERWERA ORAZ LOGI

– upewnij się czy czy OpenVPN jest dostępny z Internetu. Sprawdź firewall. Otwórz port UDP/TCP 1194 (lub inny jeśli został skonfigurowany) na firewall.

– sprawdź czy interfejs TUN/TAP nie jest za firewallem.

W celu rozwiązywania ewentualnych problemów można uruchomić serwer OpenVAS w trybie debug :

service openvas stop
openvpn /etc/openvpn/server.conf

Wynik poprawnego uruchomienia serwera :

Sat Jul 25 13:56:52 2015 OpenVPN 2.3.4 i586-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Dec  1 2014
Sat Jul 25 13:56:52 2015 library versions: OpenSSL 1.0.1k 8 Jan 2015, LZO 2.08
Sat Jul 25 13:56:52 2015 Diffie-Hellman initialized with 2048 bit key
Sat Jul 25 13:56:52 2015 Socket Buffers: R=[87380->131072] S=[16384->131072]
Sat Jul 25 13:56:52 2015 ROUTE_GATEWAY 192.168.3.1/255.255.255.0 IFACE=eth0 HWADDR=08:00:27:ba:78:53
Sat Jul 25 13:56:52 2015 TUN/TAP device tun0 opened
Sat Jul 25 13:56:52 2015 TUN/TAP TX queue length set to 100
Sat Jul 25 13:56:52 2015 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Sat Jul 25 13:56:52 2015 /sbin/ip link set dev tun0 up mtu 1500
Sat Jul 25 13:56:52 2015 /sbin/ip addr add dev tun0 local 192.168.28.1 peer 192.168.28.2
Sat Jul 25 13:56:52 2015 /sbin/ip route add 192.168.28.0/24 via 192.168.28.2
Sat Jul 25 13:56:53 2015 Listening for incoming TCP connection on [undef]
Sat Jul 25 13:56:53 2015 TCPv4_SERVER link local (bound): [undef]
Sat Jul 25 13:56:53 2015 TCPv4_SERVER link remote: [undef]
Sat Jul 25 13:56:53 2015 MULTI: multi_init called, r=256 v=256
Sat Jul 25 13:56:53 2015 IFCONFIG POOL: base=192.168.28.4 size=62, ipv6=0
Sat Jul 25 13:56:53 2015 ifconfig_pool_read(), in='client1,192.168.28.4', TODO: IPv6
Sat Jul 25 13:56:53 2015 succeeded -> ifconfig_pool_set()
Sat Jul 25 13:56:53 2015 ifconfig_pool_read(), in='jnowak,192.168.28.8', TODO: IPv6
Sat Jul 25 13:56:53 2015 succeeded -> ifconfig_pool_set()
Sat Jul 25 13:56:53 2015 IFCONFIG POOL LIST
Sat Jul 25 13:56:53 2015 client1,192.168.28.4
Sat Jul 25 13:56:53 2015 jnowak,192.168.28.8
Sat Jul 25 13:56:53 2015 MULTI: TCP INIT maxclients=1024 maxevents=1028
Sat Jul 25 13:56:53 2015 Initialization Sequence Completed

INSTALACJA KLIENTA NA SYSTEMIE WINDOWS

Instalacja :

1) Ściągamy klienta ze strony :

https://openvpn.net/index.php/open-source/downloads.html

2) Instalujemy :

Windows Server 2008_opnvpn_openvpn

Windows Server 2008_2_openvpn

Windows Server 2008_3_openvpn

Windows Server 2008_4_openvpn

Windows Server 2008_5_openvpn

Windows Server 2008_6_openvpn

Edycja pliku konfiguracyjnego klienta :

Kopiujemy plik konfiguracyjny (client.ovpn) z katalogu sample-config do config :

Windows Server 2008_7_openvpn

Windows Server 2008_8_openvpn

Windows Server 2008_9_openvpn

Po zainstalowaniu klienta, dla danego użytkownika kopiujemy klucz oraz certyfikaty do katalogu config.

Przechodzimy do edycji pliku konfiguracyjnego client.ovpn:

C:\Program Files\OpenVPN\config\client.ovpn

Edytujemy:

ca, cert i key

Wstawiamy ścieżki do klucza i certyfikatów, które wcześniej skopiowaliśmy z serwera.

Każdy klient powinien mieć wygenerowaną własną parę kluczy/certyfikatów.
Certyfikat CA (plik ca.crt) jest uniwersalny dla wszystkich klientów.

W następnej kolejności edytujemy dyrektywę remote. Podajemy adres IP/nazwę serwera OpenVPN oraz port na którym nasłuchuje.

Należy również sprawdzić dyrektywę dev (ustawienie tun lub tap), proto (udp lub tcp), comp-lzo i fragment. Dyrektywy muszą być zgodne z ustawieniami na serwerze OpenVPN.

Dyrektywa comp-lzo – włącza kompresję oraz zmniejsza zużycie transferu.

Tak wygląda przykładowa konfiguracja klienta :

Windows Server 2008_11_Oopenvpn

client
dev tun
proto udp
remote 192.168.3.116 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert jnowak.crt
key jnowak.key
remote-cert-tls server
comp-lzo
verb 3

Łączenie klienta OpenVPN z serwerem OpenVPN :

Windows Server 2008_12a_openvpn

Windows Server 2008_12_openvpn


Aby móc sprawdzać listę aktualnych połączeń z serwerem OpenVPN:

Odkomentuj dyrektywę w konfiguracji serwera :

status openvpn-status.log

Wykonaj restart serwera. Logi sprawdzaj w :

cat /etc/openvpn/openvpn-status.log

LOGIN I HASŁO

Aby się bardziej zabezpieczyć można zastosować uwierzytelnianie za pomocą wcześniej wygenerowanych certyfikatów + zastosowanie loginu oraz hasła.

Można wykorzystać autoryzację poprzez PAM. Są to tzw. Dołączalne Moduły Uwierzytelniania.

OpenVPN udostępnia skrypt auth-pam.pl oraz moduł openvpn-auth-pam do autoryzacji poprzez PAM.

Poniżej przedstawiam konfigurację uwierzytelniania za pomocą modułu openvpn-auth-pam.

W systemach Debian/Ubuntu moduł znajduje się w /usr/lib/openvpn/openvpn-plugin-auth-pam.so.

Aby włączyć uwierzytelnianie, należy dodać w pliku konfiguracyjnym serwera:

plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so /etc/pam.d/openvpn
Użycie skryptu auth-user-pass-verify lub pluginu openvpn-auth-pam.so spowoduje że będzie włączone podwójne uwierzytelnianie użytkownika. Aby użytkownik mógł się połączyć z serwerem OpenVPN wymagane jest aby klient posiadał certyfikat oraz znał login i hasło. Takie rozwiązanie jest zalecane z punktu zapewnienia lepszego bezpieczeństwa.
Jest możliwość uwierzytelnienia tylko za pomocą loginu i hasła (mniej bezpieczne rozwiązanie). Do konfiguracji serwera należy dodać :

client-cert-not-required
username-as-common-name

Następnie należy utworzyć plik :

touch /etc/pam.d/openvpn

Do pliku należy wstawić przykładową zawartość :

auth    required        pam_unix.so    shadow    nodelay
# uwierzytelniony zostanie użytkownik, który posiada identyfikator większy lub równy UID 1000 :
auth    requisite       pam_succeed_if.so uid >= 1000 quiet
# użytkownik musi należeć do grupy zdalni_vpn
auth    requisite       pam_succeed_if.so user ingroup zdalni_vpn quiet
# konto użytkownika zostanie zablokowane po trzech kolejnych nieudanych prób uwierzytelniania. Po dwóch minutach konto zostanie odblokowane :
auth    required        pam_tally2.so deny=3 even_deny_root unlock_time=120
account required        pam_unix.so

Po zmianie konfiguracji serwera, należy przeprowadzić restart usługi :

/etc/init.d/openvpn restart

Użytkownik VPN będzie potrzebował jeszcze konto na serwerze OpenVPN.

Utwórz grupę np. zdalni_vpn :

groupadd zdalni_vpn

Utwórz użytkowników. Na przykład użytkownika o loginie jnowak, kkowalska, akowalski :

useradd -s /bin/false -M -c "Jan Nowak" -u 1000 -g zdalni_vpn jnowak

useradd -s /bin/false -M -c "Katarzyna Kowalska" -u 1010 -g zdalni_vpn kkowalska

useradd -s /bin/false -M -c "Adam Kowalski" -u 1015 -g zdalni_vpn akowalski

Nadaj hasła użytkownikom :

passwd jnowak

passwd kkowalska

passwd akowalski

Aby móc się uwierzytelniać należy dodać w plikach konfiguracyjnych na maszynach klienckich:

auth-user-pass

Przykładowe ustawienia pliku konfiguracyjnego serwera OpenVPN (uwierzytelnianie za pomocą certyfikatów oraz loginu i hasła):

port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/openvpn.crt
key /etc/openvpn/easy-rsa/keys/openvpn.key  # kLucz powinien być chroniony
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
server 192.168.28.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3

plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so /etc/pam.d/openvpn

Przykładowe ustawienia pliku konfiguracyjnego klienta OpenVPN (uwierzytelnianie za pomocą certyfikatów oraz loginu i hasła):

client
dev tun
proto udp
remote 192.168.3.116 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert jnowak.crt
key jnowak.key
remote-cert-tls server
;tls-auth ta.key 1
comp-lzo
verb 3

auth-user-pass

Dodatkowe zabezpieczenia :

TLS-AUTH

Dyrektywa tls-auth, dodaje dodatkową warstwę zabezpieczenia. Ma na celu weryfikację spójności pakietów, kiedy nawiązywane jest połączenie z serwerem OpenVPN.
Po włączeniu tego zabezpieczenia, każdy klient który nie będzie posiadał pliku ta.key nie będzie mógł nawiązać połączenia z serwerem OpenVPN.

Metoda pozwala uchronić przed :

– atakiami DoS

– chroni przed skanowaniem portu na którym działa OpenVPN

– chroni przed przepełnieniem bufora w implementacji SSL/TLS

Aby móc skorzystać z tego zabezpieczenia należy wygenerować klucz ta.key :

Wykonaj na serwerze OpenVPN :

cd /etc/openvpn/easy-rsa
openvpn --genkey --secret ta.key

Klucz zostanie wygenerowany w :

/etc/openvpn/easy-rsa/ta.key

W następnej kolejności należy dodać do konfiguracji serwera :

tls-auth /etc/openvpn/easy-rsa/ta.key 0

Ten sam plik ta.key należy przesłać każdemu klientowi.

Do konfiguracji klienta należy dodać :

tls-auth podajemy_tutaj_ścieżkę_do_ta.key 1

Coś na dodatek 😉

Przykładowa konfiguracja polityki dostępu dla różnych grup użytkowników.

Przykładowe dane :

Administratorzy IT mają mieć dostęp do wszystkich urządzeń w sieci. Mają mieć przypisane stałe adresy IP.
Pracownicy mogą uzyskać dostęp tylko do serwera plików oraz poczty.
Handlowcy mogą mieć dostęp tylko do serwera handlowców. Mają mieć przypisane stałe adresy IP.

Przykładowa konfiguracja :

Każda z grup będzie się znajdować w innej podsieci wirtualnej.

Pracownicy – 192.168.28.0/24 – dostęp tylko do serwera plików oraz poczty (adres serwera 192.168.3.200)

Administratorzy IT – 192.168.29.0/24 – dostęp do całej podsieci : 192.168.3.0/24

Handlowcy – 192.168.30.0/24 – dostęp tylko do “serwera handlowców” o adresie IP 192.168.3.210

Konfiguracja pliku serwera (/etc/openvpn/server.conf) :

– określamy statyczny numer dla interfejsu tun. Będzie potrzebny do konfiguracji zapory firewall

dev tun0

– definiujemy pulę adresów IP dla pracowników :

server 192.168.28.0 255.255.255.0

– dodajemy trasę dla Administratorów IT oraz Handlowców

route 192.168.29.0 255.255.255.0

route 192.168.30.0 255.255.255.0

– konfigurujemy stałe adresy IP dla administratorów :

Używamy do tego celu katalogu konfiguracji klienta (ccd). Jest to katalog wspólny dla wszystkich użytkowników. Dodajemy do konfiguracji serwera :

client-config-dir /etc/openvpn/ccd

Tworzymy podkatalog ccd :

mkdir /etc/openvpn/ccd
cd /etc/openvpn/ccd

Tworzymy osobny plik konfiguracyjny dla każdego użytkownika, który ma mieć przydzielony stały adres IP (jeśli jest włączone podwójne uwierzytelnianie, czyli jest wymagany certyfikat klienta + login i hasło, należy pamiętać aby nazwa pliku użytkownika w katalogu ccd odpowiadała polu Common Name certyfikatu tego użytkownika).

Pliki tworzymy wg. schematu :

Common Name -> nazwa_certyfikatu_uzytkownika
np.
client1 -> client1.crt

Tworzymy plik dla użytkownika jnowak (Administrator) :

touch jnowak
nano jnowak

Do pliku wrzucamy :

ifconfig-push 192.168.29.1 192.168.29.2

Należy pamiętać że polecenie ifconfig-push konfiguruje adresy IP tunelu.
Każda para adresów musi się znajdować w jednej podsieci – maska /30 (255.255.255.252)

Adresy można dobierać wg. poniższego zestawu :

[  1,  2] [  5,  6] [  9, 10] [ 13, 14] [ 17, 18]
[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]

Tak samo postępujemy przy kolejnych użytkownikach (Handlowcy):

touch akowalski
nano akowalski

Do pliku wrzucamy :

ifconfig-push 192.168.30.1 192.168.30.2
touch kkowalska
nano kkowalska

Do pliku wrzucamy :

ifconfig-push 192.168.30.5 192.168.30.6

Dla pozostałych użytkowników, nieposiadających swojego pliku konfiguracyjnego w katalogu ccd, zostanie przydzielony adres z puli server (server 192.168.28.0 255.255.255.0).

Należy pamiętać że istnieje również inna metoda przydzielania adresów statycznych klientowi OpenVPN. Domyślnie w pliku konfiguracyjnym serwera jest włączona dyrektywa :

ifconfig-pool-persist ipp.txt

Dyrektywa mówi serwerowi aby tworzył i utrzymywał listę adresów IP, które są przydzielane klientom VPN. Kiedy klient połączy się ponownie z serwerem OpenVPN, otrzyma taki sam adres IP co przy ostatnim połączeniu.

– na końcu dodajemy reguły zapory do ustawienia polityki dostępu

przykładowe ustawienia dla domyślnego firewall Linux :

# Dla pracowników

iptables -A FORWARD -i tun0 -s 192.168.28.0/24 -d 192.168.3.200 -j ACCEPT

# Dla administratorów

iptables -A FORWARD -i tun0 -s 192.168.29.0/24 -d 192.168.3.0/24 -j ACCEPT

# Dla Handlowców

iptables -A FORWARD -i tun0 -s 192.168.30.0/24 -d 192.168.3.210 -j ACCEPT

W następnym artykule przedstawię konfigurację przekierowania całego ruchu klienta (w tym internetowego) przez VPN.

Rozwiązania przetestowałem na systemie Debian oraz Windows Server 2008.
Systemy zostały uruchomione na VirtualBox.

Źródło :

https://openvpn.net/index.php/open-source/documentation/howto.html#examples

Zapraszam do komentowania !

Pomogłem ? Masz jakieś pytania ?

Napisz proszę komentarz 🙂

markos
Specjalizuję się w systemach komputerowych Windows oraz Linux. Oprócz wykonywanej pracy w zawodzie, informatyka jest moją pasją.

6
Dodaj komentarz

avatar
3 Comment threads
3 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
5 Comment authors
Marek KościelnytomekuseproitAdamCzytelnik Recent comment authors
  Subscribe  
najnowszy najstarszy oceniany
Powiadom o
Czytelnik
Gość
Czytelnik

Świetny artykuł. Dawno tutaj byłem.

Nie znalazłem informacji na temat : Jak odwołać certyfikaty ?.

Może warto dopisać 🙂 ?

eproit
Gość

Procedura jest następująca :

1) Przechodzimy do katalogu ze skryptami :

cd /etc/openvpn/easy-rsa

Wczytujemy parametry konfiguracyjne :

source ./vars

2) Wykonujemy polecenie revoke-full z nazwą certyfikatu do odwołania.

np. (dla nazwy certyfikatu “eproit”)

revoke-full eproit

W pliku /etc/openvpn/easy-rsa/keys/crl.pem powinien się znajdować certyfikat, który został odwołany.

3) Edytujemy konfigurację serwera (tylko przy pierwszym odwołaniu certyfikatu):

nano /etc/openvpn/server.conf

Dodajemy ścieżkę do pliku crl.pem :

crl-verify /etc/openvpn/easy-rsa/keys/crl.pem

4) Resetujemy serwer OpenVPN

Adam
Gość
Adam

Będę w ten sposób sprawdzać monitoring w domu 😉

eproit
Gość

Procedura jest następująca :

1) Przechodzimy do katalogu ze skryptami :

cd /etc/openvpn/easy-rsa

Wczytujemy parametry konfiguracyjne :

source ./vars

2) Wykonujemy polecenie revoke-full z nazwą certyfikatu do odwołania.

np. (dla nazwy certyfikatu “eproit”)

revoke-full eproit

W pliku /etc/openvpn/easy-rsa/keys/crl.pem powinien się znajdować certyfikat, który został odwołany.

3) Edytujemy konfigurację serwera (tylko przy pierwszym odwołaniu certyfikatu):

nano /etc/openvpn/server.conf

Dodajemy ścieżkę do pliku crl.pem :

crl-verify /etc/openvpn/easy-rsa/keys/crl.pem

4) Resetujemy serwer OpenVPN

tomekus
Gość
tomekus

Witam,

Czy ta konfiguracja będzie również działać z klientami OpenVPN na Linux Mint ?

Pozdrawiam,
Tomek