W tym artykule rozważymy instalację i konfigurację serwera OpenVPN opartego na Linux CentOS 7 i pokażemy, jak używać skonfigurowanego serwera OpenVPN do łączenia dwóch zdalnych komputerów (lub biur) zlokalizowanych za NAT w jednej sieci. Przeprowadzimy uwierzytelnianie klientów VPN zgodnie z certyfikatami.
Treść
- Zainstaluj OpenVPN i Easy-RSA
- Łatwa konfiguracja RSA i wydawanie certyfikatów
- Tworzymy klucze i certyfikaty dla serwera OpenVPN
- Konfigurowanie serwera OpenVPN: plik konfiguracyjny, zapora ogniowa
- Łączymy kilka biur (komputerów) za pomocą OpenVPN
Openvpn - jedna z implementacji technologii VPN typu open source opartej na SSL / TLS (w oparciu o bibliotekę OpenSSL). Korzystając z OpenVPN, możesz połączyć zarówno zdalne biura, jak i pojedyncze lokalne komputery znajdujące się za NAT w jedną sieć.
Zainstaluj OpenVPN i Easy-RSA
Pierwszym krokiem jest podłączenie repozytorium EPEL i aktualizacja systemu:
mniam zainstalować epel-release -y
mniam aktualizacja -y
Po zaktualizowaniu systemu należy zainstalować za pomocą menedżera pakietów yum Openvpn i Easy-RSA (będziemy go potrzebować do wdrożenia infrastruktury kluczy PKI na serwerze VPN).
mniam zainstalować openvpn easy-rsa -y
Łatwa konfiguracja RSA i wydawanie certyfikatów
Skopiuj wszystkie skrypty easy-rsa do katalogu / etc / openvpn /:
cp -r / usr / share / easy-rsa / etc / openvpn /
Przejdźmy do katalogu / etc / openvpn / easy-rsa / 3 / i stwórz tam plik Vars:
cd / etc / openvpn / easy-rsa / 3 /
nano vars
Dodaj zawartość pliku (możesz to naprawić samodzielnie):
set_var EASYRSA "$ PWD" set_var EASYRSA_PKI "$ EASYRSA / PKI" set_var EASYRSA_DN "cn_only" set_var EASYRSA_REQ_COUNTRY "RU" set_var EASYRSA_REQ_PROVINCE "MSK" set_var EASYRSA_REQ_CITY "MSK" set_var EASYRSA_REQ_ORG "IT-Company" set_var EASYRSA_REQ_EMAIL „[email protected]. ru "set_var EASYRSA_REQ_OU" działu "set_var EASYRSA_KEY_SIZE 4096 set_var EASYRSA_ALGO RSA set_var EASYRSA_CA_EXPIRE 7500 set_var EASYRSA_CERT_EXPIRE 3650 set_var EASYRSA_NS_SUPPORT" nie "set_var EASYRSA_NS_COMMENT" Certificate Authority "set_var EASYRSA_EXT_DIR" $ EASYRSA / X509-typy "set_var EASYRSA_SSL_CONF" $ EASYRSA / openssl-1.0 .cnf „set_var EASYRSA_DIGEST” sha512 ”
Dane w pliku mogą być pobierane dowolnie, nie wpłynie to na konfigurację i dalszą obsługę serwera.
Plik musi być wykonywalny, więc:
chmod + x vars
Tworzymy klucze i certyfikaty dla serwera OpenVPN
Przed utworzeniem klucza musimy zainicjować katalog PKI i stwórz klucz CA.cd / etc / openvpn / easy-rsa / 3 /
# ./easyrsa init-pki
Uwaga: przy użyciu konfiguracji Easy-RSA z: ./vars init-pki complete; możesz teraz utworzyć urząd certyfikacji lub żądania. Twój nowo utworzony katalog PKI to: / etc / openvpn / easy-rsa / 3 / pki
Utwórz klucz CA:
./ easyrsa build-ca
Po uruchomieniu polecenia będziemy musieli podać hasło, aby wygenerować certyfikaty i klucz. W przyszłości będzie wymagane hasło do podpisywania certyfikatów.
Utwórz klucz serwera (nazwa serwera server.vpn.ru):
opcja nopass - wyłącz hasło dla server.vpn.ru
# ./easyrsa gen-req server.vpn.ru nopass
Uwaga: za pomocą konfiguracji Easy-RSA z: ./vars Korzystanie z SSL: openssl OpenSSL 1.0.2k-fips 26 stycznia 2017 Generowanie 4096-bitowego klucza prywatnego RSA ... ++ ... ++ zapisywanie nowego klucza prywatnego do '/ etc / openvpn / easy -rsa / 3 / pki / private / server.vpn.ru.key.R4IYCbD1zP '----- Zostaniesz poproszony o podanie informacji, które zostaną uwzględnione w żądaniu certyfikatu. To, co masz zamiar wprowadzić, to tak zwana nazwa wyróżniająca lub nazwa wyróżniająca. Jest sporo pól, ale możesz zostawić puste. W przypadku niektórych pól będzie domyślna wartość. Jeśli wpiszesz „.”, Pole pozostanie puste. ----- Nazwa pospolita (np .: nazwa użytkownika, hosta lub serwera) [server.vpn.ru]: Zakończono żądanie pary kluczy i certyfikatu. Twoje pliki to: req: /etc/openvpn/easy-rsa/3/pki/reqs/server.vpn.ru.req klucz: /etc/openvpn/easy-rsa/3/pki/private/server.vpn.ru .key
W trakcie wydawania certyfikatu w kolumnie Nazwa zwyczajowa trzeba kliknąć Enter,.
Podpisamy klucz server.vpn.ru za pomocą naszego certyfikatu CA:
./ easyrsa sign-req server server.vpn.ru
Podczas podpisywania certyfikatu będziesz potrzebować hasła, które ustalimy podczas wystawiania certyfikatu CA:
Jak wskazano na zrzucie ekranu, w procesie musisz wejść tak i hasło od CA.
Aby sprawdzić, czy certyfikaty zostały wygenerowane bez błędów, uruchom polecenie:
# openssl zweryfikuj -CAfile pki / ca.crt pki / emitowane / server.vpn.ru.crt
pki / emitowane / server.vpn.ru.crt: OK
Wszystkie utworzone certyfikaty serwera OpenVPN.
- Certyfikat główny znajduje się: „pki / ca.crt”
- Klucz prywatny serwera znajduje się: „pki / private / server.vpn.ru.key”
- Znajduje się certyfikat serwera: „pki / wystawione / server.vpn.ru.crt”
Aby wygenerować klucz klienta, musisz uruchomić polecenie:
./ easyrsa gen-req nazwa klienta nopass
Wygeneruj klucz klienta admin1:
# ./easyrsa gen-req admin1 nopass
Uwaga: za pomocą konfiguracji Easy-RSA z: ./vars Korzystanie z SSL: openssl OpenSSL 1.0.2k-fips 26 stycznia 2017 Generowanie 4096-bitowego klucza prywatnego RSA ... ++ ... ++ zapisywanie nowego klucza prywatnego do '/ etc / openvpn / easy -rsa / 3 / pki / private / admin1.key.R5OY6reT2e '----- Masz zamiar wprowadzić informacje, które zostaną uwzględnione w żądaniu certyfikatu. To, co masz zamiar wprowadzić, to tak zwana nazwa wyróżniająca lub nazwa wyróżniająca. Jest sporo pól, ale możesz zostawić puste. W przypadku niektórych pól będzie domyślna wartość. Jeśli wpiszesz „.”, Pole pozostanie puste. ----- Nazwa pospolita (np .: nazwa użytkownika, hosta lub serwera) [admin1]: Zakończono żądanie pary kluczy i certyfikatu. Twoje pliki to: req: /etc/openvpn/easy-rsa/3/pki/reqs/admin1.req key: /etc/openvpn/easy-rsa/3/pki/private/admin1.key
Podobnie jak w przypadku klucza serwera, musisz go podpisać przy użyciu certyfikatu CA:
./ easyrsa sign-req client admin1
Certyfikat utworzony dla użytkownika.
Dodatkowo musisz wygenerować klucz Diffie-Hellmana, który będzie używany podczas wymiany kluczy:
./ easyrsa gen-dh
Jest generowany przez długi czas:
Następnie generujemy certyfikat TLS:
openvpn --genkey --secret ta.key
Jeśli w przyszłości planujemy odwołać certyfikaty klienta, musimy wygenerować klucz CRL:
# ./easyrsa gen-crl
Uwaga: przy użyciu konfiguracji Easy-RSA z: ./vars Przy użyciu SSL: openssl OpenSSL 1.0.2k-fips 26 stycznia 2017 Przy użyciu konfiguracji z /etc/openvpn/easy-rsa/3/pki/safessl-easyrsa.cnf Wprowadź hasło dla /etc/openvpn/easy-rsa/3/pki/private/ca.key: Utworzono zaktualizowaną listę CRL. Plik CRL: /etc/openvpn/easy-rsa/3/pki/crl.pem
Aby unieważnić certyfikat, wykonaj polecenie:
./ easyrsa revoke admin1
- gdzie admin1 to jest nazwa certyfikatu
Utworzono niezbędne certyfikaty do pracy, skopiuj je do katalogów roboczych:
Certyfikaty serwera:
cp pki / ca.crt / etc / openvpn / server /
cp pki / wydane / server.vpn.ru.crt / etc / openvpn / server /
cp pki / private / server.vpn.ru.key / etc / openvpn / server /
cp pki / private / dh.pem / etc / openvpn / server /
cp pki / private / ta.key / etc / openvpn / server /
cp pki / crl.pem / etc / openvpn / server /
Certyfikaty klienta:
cp pki / wydane / admin1.crt / etc / openvpn / client /
cp pki / private / admin1.key / etc / openvpn / client /
Konfigurowanie serwera OpenVPN: plik konfiguracyjny, zapora ogniowa
Przejdźmy do ustawień pliku konfiguracyjnego OpenVPN. Najpierw utwórz plik konfiguracyjny OpenVPN server.conf:
cd / etc / openvpn / && nano server.conf
Zmień zawartość pliku na:
# Podaj port, protokół i port urządzenia 1194 proto udp dev tun # Podaj ścieżkę do certyfikatu serwera ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/server.vpn.ru.crt key / etc / openvpn /server/server.vpn.ru.key # Ścieżki do klawiszy CRL i DH dh /etc/openvpn/server/dh.pem crl-Verified /etc/openvpn/server/crl.pem # Określ ustawienia sieci IP, adresy, z których Klienci VPN będą otrzymywać serwer 15.10.2.0 255.255.255.0 push „bramka przekierowująca def1” # Podaj docelowy serwer DNS push „dhcp-opcja DNS 77.88.8.8„ push ”opcja dhcp DNS 8.8.4.4„ # Zezwól na połączenie różnych klientów, z tym samym kluczem duplikat-cn # Ochrona TLS tls-auth /etc/openvpn/server/ta.key 0 szyfr AES-256-CBC tls-wersja-min 1.2 tls-szyfr TLS-DHE-RSA-WITH-AES-256- GCM-SHA384: TLS- DHE-RSA-WITH-AES-256-CBC-SHA256: TLS-DHE-RSA-WITH-AES-128-GCM-SHA256: TLS-DHE-RSA-WITH-AES-128-CBC-SHA256 aut SHA512 auth-nocache # Inna konfiguracja dla keepalive 20 60 persist-key persist-tun comp-lzo tak użytkownik demona nikt grupa nikt nikt # Ścieżka do pliku dziennika app-app /var/log/openvpn.log czasownik 3
Następnie zapisz plik. Podałem standardowy port UDP 1194 dla serwera VPN, ale dla OpenVPN możesz określić dowolny wolny port na serwerze.
Pozostaje skonfigurować reguły zapory, aby umożliwić połączenie i routing między segmentami.
Jeśli używasz Firewalld, musisz najpierw aktywować moduł jądra spedycja:
# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
# sysctl -p
net.ipv4.ip_forward = 1
Dodaj usługę openvpn do zapora ogniowa, i interfejs tun0 do strefy zaufanej
firewall-cmd --permanent --add-service = openvpn
firewall-cmd --permanent --zone = zaufany --add-interface = tun0
Aktywuj „MASQUERADE” dla strefy zaufanej zapora ogniowa:firewall-cmd --permanent --zone = zaufany --add-masquerade
Aktywuj NAT:
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 15.10.2.0/24 -o Adres IP serwera -j MASQUERADE
firewall-cmd -reload
iptables -t nat -A POSTROUTING -s 15.10.2.0/24 -o eth0 -j MASQUERADE
iptables -A WEJŚCIE -p tcp -port 1194 -j AKCEPTUJ
usługa iptables zapisać
Uruchom OpenVPN i dodaj go do uruchamiania Linuxa:
systemctl uruchom openvpn @ server
systemctl włącza openvpn @ server
Sprawdź, czy usługa nasłuchuje portu 1194:
# lsof -i: 1194
POLECENIE PID UŻYTKOWNIK TYP FD ROZMIAR URZĄDZENIA / WYŁ. NAZWA NAZWA openvpn 11887 nikt 5u IPv4 45892 0t0 UDP *: openvpn
Sprawdźmy ustawienia IP interfejsu sieciowego:
# ip a
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3: tun0: mtu 1500 qdisc pfifo_fast stan UNKNOWN grupa domyślna qlen 100 link / none inet 15.10 .2.1 peer 15.10.2.2/32 zakres globalny tun0 valid_lft na zawsze preferowany_lft na zawsze inet6 fe80 :: db7c: 7fed: 6d4f: 70d2 / 64 zakres łącza flagi 800 ważny_lft na zawsze preferowany_lft na zawsze
Jak widać na urządzeniu tun0 dodana jest sieć określona podczas konfiguracji.
Są to minimalne ustawienia, które należy wprowadzić, aby OpenVPN działał..
Łączymy kilka biur (komputerów) za pomocą OpenVPN
Zastanów się, jak połączyć się z serwerem OpenVPN z dwóch zdalnych komputerów podłączonych do Internetu przez NAT i zorganizuj wspólną sieć między nimi. Aby połączyć się z komputera z systemem Windows do serwera OpenVPN, używam oficjalnego klienta od programistów. Możesz pobrać go na oficjalnej stronie, nie skupimy się na tym, ale przejdziemy od razu do konfiguracji.
Po zainstalowaniu klienta musisz przejść do pliku konfiguracyjnego, który musisz utworzyć wzdłuż ścieżki:
C: \ Program Files \ OpenVPN \ config \
Utworzyłem plik klient i dodał do niego następującą treść:
klient dev tun proto udp zdalny 182.122.41.12 1194 resolv-ponów próbę nieskończony nobind blok-poza-dns klucz-up-zachowaj-tun mute-powtór-ostrzeżenia zdalny-cert-tls serwer tls-klient auth SHA512 tls-auth "C: \\ Pliki programów \\ OpenVPN \\ config \\ ta.key "1 remote-cert-eku" Uwierzytelnianie serwera TLS Web "ca" C: \\ Pliki programów \\ OpenVPN \\ config \\ ca.crt "cert" C: \\ Program Files \\ OpenVPN \\ config \\ admin1.crt "key" C: \\ Program Files \\ OpenVPN \\ config \\ admin1.key "szyfr AES-256-CBC comp-lzo czasownik 3
Do skonfigurowania potrzebujemy wcześniej utworzonych certyfikatów klienta, bezpieczeństwa i serwera. Należy je pobrać z serwera i umieścić w dogodnym dla Ciebie katalogu, po czym musisz podać ścieżkę do nich w pliku konfiguracyjnym klienta OpenVPN.
Po połączeniu za pomocą skrótu klienta Open VPN na pasku zadań:
Połączyłem się i dostałem następujący adres IP dla mojego komputera:
Adres IPv4 ...: 10.15.2.14 Maska podsieci ...: 255.255.255.252
Na drugim komputerze dla NAT wykonałem te same kroki, po utworzeniu certyfikatu dla drugiego użytkownika, kiedy podłączyłem drugi komputer, otrzymałem również adres IP z sieci:
Adres IPv4 ...: 15.10.2.6 Maska podsieci ...: 255.255.255.252
Po połączeniu oba komputery znajdują się w tej samej sieci i widzą się nawzajem.
Uruchom ping na drugim komputerze:
Wymiana pakietów od 10.15.2.14 do 32 bajtów danych: Odpowiedź od 10.15.2.14: liczba bajtów = 32 czas = 67 ms TTL = 127
Uruchom ping na pierwszym komputerze:
Wymiana pakietów od 10/15 / 2.6 do 32 bajtów danych: Odpowiedź od 10/15 / 2.6: liczba bajtów = 32 czas = 71 ms TTL = 127
Obaj podłączeni klienci VPN mogą wymieniać pakiety i przesyłać pliki bezpośrednio do siebie. Dzięki temu byliśmy w stanie połączyć dwa komputery znajdujące się w różnych częściach kraju w jedną sieć lokalną.
Na serwerze z OpenVPN możesz utworzyć nieograniczoną liczbę kluczy i certyfikatów dla użytkowników. Jeśli potrzebujesz nowego certyfikatu, uruchom następujące polecenia w katalogu / etc / openvpn / easy-rsa / 3:
./ easyrsa gen-req nazwa klienta nopass
./ easyrsa nazwa klienta klienta wymagająca podpisania znaku
Pamiętaj, aby okresowo odwoływać certyfikaty klientów, jeśli nie są one używane do zapewnienia bezpieczeństwa danych.