Zainstaluj i skonfiguruj serwer OpenVPN na CentOS 7

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

VPN - Zestaw technologii, które pozwalają zbudować bezpieczną sieć w oparciu o sieci publiczne lub InterTet. Korzystając z VPN, możesz łączyć segmenty sieci oddzielone od Internetu w jedną sieć lokalną..

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

Jeśli używasz iptables bez zapora ogniowa, następnie musisz uruchomić następujące polecenia:

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.