Instalacja i konfiguracja serwera OpenVPN w systemie CentOS 7

OpenVPN – to w pełni darmowe rozwiązanie, pozwalające tworzyć wirtualne sieci prywatne

OpenVPN – to w pełni darmowe rozwiązanie, pozwalające tworzyć wirtualne sieci prywatne.

Aby poznać dłuższą definicję, zainteresowanych odsyłam na Wikipedię.

https://pl.wikipedia.org/wiki/OpenVPN

Właściwe co daje nam prywatny VPN?

Pozwala ukryć nasz prawdziwy adres IP

Nie oznacza to jednak, że połączenie będzie w pełni anonimowe. Będziemy dalej rozpoznawalni w sieci tylko pod innym adresem IP. Czasami jest to przydane, gdy na przykład będąc poza Polską chcemy korzystać z usług dostępnych tylko na terenie naszego kraju. Niestety zakładając własny serwer VPN na komercyjnym VPS (Virtual Private Server) nawet z polskim adresem IP, nie zadziałają takie usługi jak Netflix, Showmax czy NC+ Go. Ich algorytmy prawdopodobnie wykryją, że nasz adres IP nie jest tym od usługodawcy. Mogą zablokować dostęp, gdyż adres IP jest w bazie adresów przydzielonych do VPS.

Szyfruje ruch pomiędzy urządzeniem a serwerem VPN

W takim przypadku usługodawca internetowy nie będzie w stanie podsłuchać naszego ruchu. Wielu operatorów analizuje ruch sieciowy pod kątem przesyłanych treści. Dla usług typu VoIP lub streaming video ruch może być sztucznie spowolniony, tak, aby „zrobić miejsce” dla innych usług. Jest to wbrew zasadzie mówiące o neutralności sieci. W Polsce jednak nie ma żadnych regulacji prawnych zabraniających takich praktyk. Krótko mówiąc korzystając z prywatnego VPN można sprawić, że YouTube będzie dział szybciej.

Wymagania

  • własny serwer z publicznym IP i systemem CentOS 7
  • dostęp do root
  • urządzenie klienckie typu telefon komórkowy z Androidem lub zwykły PC

Krok – 1 Aktualizacja systemu

Przed rozpoczęciem konfiguracji usługi OpenVPN niezbędnym jest aktualizacja systemu.

yum update -y        

Po wykonanej aktualizacji uruchamiamy ponownie maszynę.

reboot

Krok 2 – Instalacja niezbędnych pakietów

OpenVPN nie jest dostępny w domyślnych repozytoriach systemu CentOS, wobec tego należy zainstalować go z dodatkowego repozytorium (Extra Packages for Enterprise Linux), które zawiera niestandardowe, niemniej popularne pakiety.

yum install epel-release -y

Po instalacji odświeżamy listę pakietów w systemie.

yum update -y

Następnie przechodzimy do instalacji niezbędnych do uruchomienia serwera VPN pakietów.

yum install -y openvpn wget nano

Pakiety wget oraz nano są opcjonalne, gdyż mogą być już dostępne w systemie.

wget – program służący do pobierania plików z Internetu za pośrednictwem protokołów HTTP

nano – prosty edytor tekstowy

Jeżeli instalator OpenVPN nie utworzył nowego folderu /etc/openvpn, należy stworzyć go samodzielnie. W tym folderze przechowywane będą pliki konfiguracyjne serwera VPN.

mkdir /etc/openvpn

Do tego folderu należy skopiować domyślny plik konfiguracyjny usługi.

cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn

Następnie instalujemy „Easy RSA”. Jest to narzędzie służące do tworzenia i zarządzania certyfikatami dla potrzeb OpenVPN.

yum install easy-rsa -y

Narzędzie „Easy RSA” prawdopodobnie zainstaluje się w najnowszej – trzeciej wersji. Mimo to, z uwagi na liczną dokumentacje oraz wsparcie innych użytkowników dla starszych wersji, polecam instalację tego oprogramowania oznaczoną numerem 2.3.3.

Starszą wersje można pobrać w poniższy sposób:

wget -O /tmp/easyrsa https://github.com/OpenVPN/easy-rsa-old/archive/2.3.3.tar.gz

Plik zostanie pobrany do katalogu tymczasowego, przechodzimy do niego.

cd /tmp

Należy wypakować pobrane archiwum.

tar xfz /tmp/easyrsa

Tworzymy nowy folder i kopiujemy do niego pliki z wypakowanego archiwum.

mkdir /etc/openvpn/easy-rsa
cp -rf easy-rsa-old-2.3.3/easy-rsa/2.0/* /etc/openvpn/easy-rsa

Krok 3 – Konfiguracja serwera

Przechodzimy do edycji domyślnego pliku konfiguracji serwera OpenVPN.

nano /etc/openvpn/server.conf

W pliku konfiguracyjnym należy zmienić treść kilku linijek, zwykle usuwając średnik z początku linii.

Pierwsza linijki, którą należy odszukać jest:

push "redirect-gateway def1 bypass-dhcp"

Oczywiście usuwamy średnik z początku wyrażenia. Dzięki temu ustawieniu klient przekieruje cały ruch przez serwer OpenVPN. Uwaga, jeżeli w systemie posiadamy już inne niestandardowe konfiguracje związane z siecią, włącznie tej funkcji może spowodować problemy z działaniem niektórych usług sieciowych, na przykład z SSH.

Łącząc się z serwerem VPN nie będziemy mogli korzystać z domyślnych serwerów DNS dostarczonych przez dostawcę usług internetowych (jego ruch zostanie przekierowany), musimy zatem wskazać, które serwery DNS będą wykorzystywane do połączenia się z OpenVPN. Można wskazać dowolne, najczęściej użytkownicy polecają serwery DNS od Google (8.8.8.8 oraz 8.8.4.4). Polecam skorzystanie z adresów OpenDNS (208.67.222.222 i 208.67.220.220)

OpenDNS dodatkowo oferuje adresy DNS 208.67.222.123 oraz 208.67.220.123, które blokują strony pornograficzne oraz złośliwe oprogramowanie. Pozytywnym efektem ubocznym w OpenDNS jest blokowanie niektórych reklam w serwisach VOD.

W pliku konfiguracyjnym szukamy dwóch wierszy zaczynających się od:

;push "dhcp-option DNS …"

Zamieniamy ich treść, wpisując wybrane przez nas adresy DNS.

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Następnie zmieniamy ustawienia tak, aby usługa OpenVPN na naszym serwerze mogła być uruchomiona bez żadnych dodatkowych przywilejów, wobec to szukamy poniższych linijek, w których usuwamy średnik.

user nobody
group nobody

Opcjonalnie w pliku konfiguracyjnym można zmienić numer portu usługi. Jest to dodatkowe zabezpieczenie przed atakami na serwer VPN.

port 1194

1194 zamieniamy na przykład na 11194. Numer port musi być większy od 1024, aby serwer mógł działać bez uprawnień root.

Zapisujemy zmiany w pliki i zamykamy go.

Krok 4 – Generowanie kluczy i certyfikatów

Tworzymy katalog, w którym przechowywane będą klucze oraz certyfikaty.

mkdir /etc/openvpn/easy-rsa/keys

Edytujemy plik, w którym znajdują się informacje na temat wydawcy certyfikatów.

nano /etc/openvpn/easy-rsa/vars

Szukamy linijek (prawdopodobnie są na samym końcu pliku), zawierających słowo export

export KEY_COUNTRY="CA"
export KEY_PROVINCE="QC"
export KEY_CITY="Montreal"
export KEY_ORG="Globotech"
export KEY_EMAIL="abuse@example.com"
export KEY_OU="IT"
export KEY_NAME="hostname"

Zamieniamy hostname (lub inne) na server w wyrażeniu KEY_NAME

export KEY_NAME="server"

Pozostałe parametry można opcjonalnie zmienić, dostosowując je do naszych potrzeb.

export KEY_COUNTRY="PL"
export KEY_PROVINCE="Malopolskie"
export KEY_CITY="Krakow"
export KEY_ORG="VPN"
export KEY_EMAIL="vpn@nazwanaszejstrony.pl"
export KEY_OU="VPN"
export KEY_NAME="server"

Zapisujemy plik i zamykamy go.

Kopiujemy plik konfiguracyjny OpenSSL do innej ścieżki.

cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

Nadszedł czas na wygenerowanie kluczy i certyfikatów. Przechodzimy pod wskazany folder i wykonujemy poniższą komendę.

cd /etc/openvpn/easy-rsa
source ./vars

Uruchamiamy skrypt czyszczący wszystkie poprzednio wygenerowane certyfikaty dla serwera i klientów.

./clean-all

Tworzymy urząd certyfikacji. Podczas wykonywania skryptu zostaniemy zapytani o wcześniej wprowadzone wartości. Za każdym razem należy kliknąć klawisz ENTER.

./build-ca

Powyższy skrypt wygeneruje plik ca.key. Jest to tzw. klucz prywatny używany do podpisywania certyfikatów serwera i klientów. Jeżeli utracimy dostęp do tego pliku, nie będzie można wygenerować nowych certyfikatów. Jeśli dostęp do pliku otrzymają osoby niepowołane, to będą mogły połączyć się z serwerem VPN bez naszej wiedzy.

Zaleca się, aby plik przechowywać w dobrze zabezpieczonej lokalizacji. Nawet bez dostępu do sieci.

Następnie tworzymy certyfikat dla serwera. W tym przypadku również zostaniemy poproszeni o potwierdzenia danych certyfikatu. Za każdym razem należy kliknąć ENTER. Dodatkowo program zapyta o hasło i opcjonalną nazwę firmy. Oba pola można pozostawić puste. Gdy wpiszemy hasło, podczas łączenia klienta z serwerem VPN będzie trzeba je podać. Na samym końcu potwierdzamy stworzenie certyfikatu klikając Y.

./build-key-server server

Ostatnią częścią tworzenia kluczy dla serwera jest wygenerowanie pliku wymiany (kluczy Diffiego-Hellmana). Poniższa operacja może trwać kilka minut.

./build-dh

Wygenerowane klucze kopiujemy do głównego folderu konfiguracji OpenVPN

cd /etc/openvpn/easy-rsa/keys
cp dh2048.pem ca.crt server.crt server.key /etc/openvpn

Każdy klient, który będzie łączył się z OpenVPN również potrzebuje klucza i certyfikatu, aby serwer mógł go uwierzytelnić. Przechodzimy do katalogu easy-rsa

cd /etc/openvpn/easy-rsa

Uruchamiamy program tworzący certyfikaty dla klienta. Słowo „client” to nazwa użytkownika, można je dowolnie zmienić. Jeżeli spodziewamy się wielu klientów – nazwę można określić jako nazwę hosta np. „pcdom” lub nazwę urządzenia np. „android”. Krok ten można wykonać wielokrotnie – w zależności od liczby spodziewanych klientów.

./build-key pcdom
./build-key android

Klucze i certyfikaty w postaci plików zostaną wygenerowane na serwerze. Należy je skopiować do urządzeń klienckich, wykonamy to w ostatnim kroku.

Krok 5 – Routing

Domyślnie CentOS korzysta z narzędzia o nazwie firewalld, które zapewnia dynamiczne zarządzanie zaporą sieciową. Ze względu na brak doświadczenia w pracy z tym narzędziem polecam skorzystanie z narzędzia iptables.

Instalujemy narzędzie iptables

yum install iptables-services -y

Po instalacji nowego programu wyłączamy usługę związaną z firewalld

systemctl mask firewalld
systemctl stop firewalld

Włączamy nową usługę.

systemctl enable iptables
systemctl start iptables

Dodatkowo profilaktycznie czyścimy konfigurację iptalbles

iptables –flush

Dodajemy nową regułę związaną z uruchomieniem serwisu OpenVPN

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables

Następnie edytujemy plik

nano /etc/sysctl.conf

w którym dodajemy linijkę, która odpowiada za przekazywanie adresów IP

net.ipv4.ip_forward = 1

Dodanie powyższej linijki spowoduje przekierowanie całego ruchu internetowego z klienta na adres IP serwera, a publiczny adres IP klienta zostanie skutecznie ukryty.

Krok 6 – Uruchomienie usług

W systemie CentOS włączamy i uruchamiamy usługę VPN.

systemctl -f enable openvpn@server.service
systemctl start openvpn@server.service

Aby sprawdzić status uruchomionej usługi należy wpisać

systemctl status openvpn@server.service

W przypadku poprawnie uruchomionej usługi, na ekranie powinniśmy zobaczyć między innymi fragment tekstu:

Active: active (running) 

Jeżeli usługa nie została uruchomiona poprawnie, można sprawdzić czy plik konfiguracyjny jest na pewno prawidłowy.

openvpn --config /etc/openvpn/server.conf

Skrypt wskaże nam ewentualne błędy w pliku konfiguracyjnym usługi.

Krok 7 – Konfiguracja klienta i łączenie z serwerem OpenVPN

Niezależnie od systemu operacyjnego klienta, aby połączyć się z serwerem OpenVPN należy mieć dostęp do klucza oraz certyfikatów wygenerowanych dla danego klienta. Żądane pliki są w poniższej lokalizacji

/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/pcdom.crt
/etc/openvpn/easy-rsa/keys/pcdom.key
/etc/openvpn/easy-rsa/keys/android.crt
/etc/openvpn/easy-rsa/keys/android.key

Aby połączyć się z serwerm OpenVPN, należy użyć oprogramowania klienckiego. W zależności od systemu operacyjnego

Dla systemu Windows program można pobrać ze strony:

Plik: openvpn-install-2.4.5-I601.exe (lub podobny)

Tworzymy plik pcdom.ovpn

client
dev tun
proto udp
remote ADRES_IP_SERWERA PORT_USŁUGI
resolv-retry infinite
nobind
persist-key
persist-tun
verb 3
<ca>
//Tutaj tak wklejamy zawartość pliku ca.crt
</ca>
<crt>
//Tutaj wklejamy zawartość pliku np. pcdom.crt
</crt>
<key>
//Tutaj wklejamy zawartość pliku np. pcdom.key
</key>

Podmieniamy adres IP serwera oraz numer portu usługi.

W znaczniki ca, cert oraz key, wklejamy odpowiednio zawartość plików ca.crt, pcdom.crt, pcdom.key

Dla systemu Android polecam aplikację „OpenVPN for Android”

https://play.google.com/store/apps/details?id=de.blinkt.openvpn

Informacje na temat liczby połączeń z serwerem VPN można sprawdzić przy pomocy:

cat /etc/openvpn/openvpn-status.log

3 komentarze do “Instalacja i konfiguracja serwera OpenVPN w systemie CentOS 7”

  1. Cześć, mam mały problem z instalacją openvpn na Centosie 8 – po instalacji owszem, tworzy się katalog /etc/openvpn oraz jego podkatalogi /client i /server, jednak nie ma tam ani jednego pliku konfiguracyjnego usługi (server.conf etc.) – moje pytanie brzmi, czy istnieje to kwestia dociągnięcia jakichś dodatkowych zasobów, a jeśli nie, to czy istnieje gdzieś w necie jakaś oficjalna templatka, którą można przekleić do nowo utworzonego pliku konfiguracyjnego?

    Pozdrawiam,
    JS

  2. Zaczynam pracę z OpenVPN. Nie mam żadnego doświadczenia. Uruchamiam na Centos 7. Mam zainstalowaną sambę. Chciałbym udostępnić odpowiednie zasoby do pracy z zewnątrz.
    OpenVPN uruchomiłem. Mam sytuację : Internet dostaję od dostawcy zarządzającego budynkiem ( pierwszy router ), ja jestem w sieci lokalnej odcięty drugim routerem od sieci w budynku.
    Moje pytanie jak skonfigurować routery ( pierwszy i drugi)? O co muszę poprosić zarządzającego budynkiem by mi ustawił na pierwszym routerze ( ma adres publiczny stały ) – używam portu 11194 dla OpenVPN. Router drugi ma stały adres sieci wewnętrznej. Poproszę o podpowiedz. Dziękuję za pomoc. Pozdrawiam Leon W.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.