17 lut

Jak skonfigurować serwer OpenVPN na Debian 8? – część 1

Blog - serwer_OpenVPN_Debian 8

OpenVPN jest open source VPN aplikacją, która pozwala na tworzenie i podłączanie do bezpiecznej sieci prywatnej za pośrednictwem Internetu publicznego. Krótko mówiąc, pozwala to użytkownikowi na zamaskowanie połączeń i na bardziej bezpiecznie poruszanie niezaufaną siecią.

Wymagania

Ten tutorial zakłada, że ​​posiadasz następujące elementy:

  • Nowy Debian 8.1 Droplet
  • Użytkownik root
  • Opcjonalne: Po ukończeniu tego tutorialu, do ogólnego użytku należy użyć konto z uprawnieniami sudo.

Krok #1 – Instalacja OpenVPN

Przed instalacją jakichkolwiek pakietów, zaktualizujemy indeks pakietów apt.

apt-get update

Teraz możemy zainstalować serwer OpenVPN wraz z łatwym do szyfrowania RSA.

apt-get install openvpn easy-rsa

Krok #2 – Konfiguracja OpenVPN

Przykładowy plik konfiguracji VPN serwera musi być wyodrębniony w /etc/openvpn tak, aby mogliśmy włączyć go do naszej konfiguracji. Można to zrobić za pomocą jednego polecenia:

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

Po rozpakowaniu, należy otworzyć plik konfiguracyjny serwera za pomocą nano lub innego ulubionego edytora tekstu.

nano /etc/openvpn/server.conf

W tym pliku, musimy dokonać czterech zmian (każda zostanie wyjaśniona szczegółowo):

  • Bezpieczny serwer z wysokim poziomem szyfrowania
  • Bezpośredni ruch w sieci do celu
  • Zapobieganie wyciekaniu żądań DNS poza połączeniem VPN
  • Uprawnienia instalacyjne

Po pierwsze, musimy podwoić długość klucza RSA, używanego podczas tworzenia serwerowych i klienckich kluczy. Po głównym bloku komentarza i jeszcze kilka wierszy, szukaj linii która brzmi:

/etc/openvpn/server.conf
# Diffie hellman parameters.
# Generate your own with:
#   openssl dhparam -out dh1024.pem 1024
# Substitute 2048 for 1024 if you are using
# 2048 bit keys.
dh dh1024.pem

Zmień dh1024.pem na dh2048.pem, więc teraz ten wiersz musi wyglądać następująco:

/etc/openvpn/server.conf
dh dh2048.pem

Po drugie, zadbamy o to, aby przekierować cały ruch w odpowiednie miejsce. W  server.conf znajdź następną sekcję:

/etc/openvpn/server.conf
# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# or bridge the TUN/TAP interface to the internet
# in order for this to work properly).
;push "redirect-gateway def1 bypass-dhcp"

Odkomentuj wiersz push "redirect-gateway def1 bypass-dhcp", więc serwer VPN przekazuje ruch klienta sieci web do jego przeznaczenia. Po zrobieniu to powinno to wyglądać tak:

/etc/openvpn/server.conf
push "redirect-gateway def1 bypass-dhcp"

Po trzecie, zrobimy tak, aby serwer używał OpenDNS do rozpoznawania nazw DNS, gdzie jest to możliwe. To może pomóc zapobiec wyciekowi żądań DNS poza połączeniem VPN. Natychmiast po wcześniej zmodyfikowanej sekcji, edytuj następujące:

/etc/openvpn/server.conf
# Certain Windows-specific network settings
# can be pushed to clients, such as DNS
# or WINS server addresses.  CAVEAT:
# http://openvpn.net/faq.html#dhcpcaveats
# The addresses below refer to the public
# DNS servers provided by opendns.com.
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"

Odkomentuj push "dhcp-option DNS 208.67.222.222" i push "dhcp-option DNS 208.67.220.220". Powinno to wyglądać tak:

/etc/openvpn/server.conf
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Po czwarte, będziemy definiować uprawnienia w server.conf:

/etc/openvpn/server.conf
# You can uncomment this out on
# non-Windows systems.
;user nobody
;group nogroup

Odkomentuj user nobody i group nogroup. Powinno to wyglądać tak:

/etc/openvpn/server.conf
user nobody
group nogroup

Domyślnie OpenVPN pracuje jako główny użytkownik root, dzięki czemu ma pełny dostęp do systemu. Zrobimy natomiast ograniczenie OpenVPN dla użytkownika nobody i grupy nogroup. Jest to bez uprawnień użytkownika bez możliwości domyślnego logowania, często zarezerwowany dla uruchamiania niezaufanych aplikacji, takich jak serwery www.

Teraz zapisz zmiany i wyjdź.

Krok #3 – Włączanie przekazywania pakietów

W tym kroku zrobimy tak, aby jądro serwera przekazywało ruch z usług klienckich do sieci Internet. W przeciwnym wypadku, ruch zatrzyma się na serwerze.

Włączymy przekazywanie pakietów podczas wykonywania, wpisując następujące polecenie:

echo 1 > /proc/sys/net/ipv4/ip_forward

Dalej, musimy zrobić tą konfigurację stałą, aby ona była zapisana po ponownym uruchomieniu serwera.  Otwórz plik konfiguracyjny  sysctl za pomocą nano lub innego ulubionego edytora tekstu.

nano /etc/sysctl.conf

W górnej części pliku sysctl pojawi się:

/etc/openvpn/server.conf
# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

Odkomentuj wiersz net.ipv4.ip_forward. Powinno to wyglądać tak:

/etc/openvpn/server.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

Zapisz zmiany i zamknij plik.

Krok #4 – Instalacja i konfiguracja UFW

UFW jest front-end dla IPTables. Musimy zrobić tylko kilka zasad i zmiany konfiguracji. Wtedy będziemy przełączać zaporę sieciową.

Po pierwsze, należy zainstalować pakiet ufw.

apt-get install ufw

Po drugie, należy ustawić UFW zezwolenie SSH:

ufw allow ssh

W tym tutorialu będziemy używać OpenVPN przez UDP, więc UFW musi również umożliwić ruch UDP na porcie 1194.

ufw allow 1194/udp

UFW przekazywanie polityki musi być również zainstalowane. Zrobimy to w głównym pliku konfiguracyjnym.

nano /etc/default/ufw

Spójrz na następujący wiersz:

/etc/default/ufw
DEFAULT_FORWARD_POLICY="DROP"

DROP musi być zmieniony na ACCEPT. Powinno to wyglądać tak:

/etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"

Zapisz i wyjdź.

Następnie dodamy dodatkowe zasady UFW do tłumaczenia adresów sieciowych i maskowania adresu IP podłączonych klientów.

nano /etc/ufw/before.rules

Następnie dodaj tekst zaznaczony na czerwono dla OPENVPN RULES:

/etc/ufw/before.rules
#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#
 
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

# Don't delete these required lines, otherwise there will be errors
*filter

Zapisz i wyjdź.

Wraz ze zmianami wprowadzonymi do UFW, teraz możemy go włączyć. Wpisz w wierszu poleceń:

ufw enable

Włączanie UFW zwróci następujący wiersz:

Command may disrupt existing ssh connections. Proceed with operation (y|n)?

Wpisz y. Wynik będzie następujący:

Firewall is active and enabled on system startup

Aby sprawdzić podstawowe reguły zapory UFW wpisz:

ufw status

Wynik będzie wyglądał tak:

Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
1194/udp                   ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)
1194/udp (v6)              ALLOW       Anywhere (v6)

Krok #5 – Konfiguracja i budowa Certificate Authority

OpenVPN używa certyfikatów do szyfrowania ruchu.

W tym kroku skonfigurujemy nasz własny Certificate Authority (CA) w dwóch etapach: (1) Zmienne konfiguracyjne oraz (2) generowanie CA.

OpenVPN obsługuje dwukierunkowe uwierzytelnianie na podstawie certyfikatów, oznacza to, że klient powinien sprawdzić autentyczność certyfikatu serwera, a serwer musi sprawdzić autentyczność certyfikatu klienta do tworzenia wzajemnego zaufania. Będziemy wykorzystywać skrypty Easy RSA, aby to zrobić.

Najpierw skopiujemy egzemplarz skryptów generacji Easy-RSA.

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

Następnie należy utworzyć katalog domowy kluczy.

mkdir /etc/openvpn/easy-rsa/keys

Następnie będziemy ustawiać parametry dla naszych certyfikatów. Otwórz plik  zmiennych za pomocą nano lub ulubionego edytora tekstu.

nano /etc/openvpn/easy-rsa/vars

Zmienne poniżej zaznaczone na czerwono powinny zostać zmienione zgodnie z własnymi preferencjami.

/etc/openvpn/easy-rsa/vars
export KEY_COUNTRY="US"

export KEY_PROVINCE="TX"

export KEY_CITY="Dallas"

export KEY_ORG="My Company Name"

export KEY_EMAIL="sammy@example.com"

export KEY_OU="MYOrganizationalUnit"

W tym samym pliku vars, również edytowujemy linię pokazaną poniżej. Dla uproszczenia będziemy używać server jako nazwę klucza. Jeśli chcesz użyć innej nazwy, będzie trzeba także zaktualizować pliki konfiguracyjne OpenVPN, które odwołują się do server.key i server.crt.

Poniżej, w tym samym pliku, zostanie podany odpowiedni certyfikat. Znajdź wiersz, zaraz po wcześniej zmodyfikowanym bloku:

/etc/openvpn/easy-rsa/vars
# X509 Subject Field
export KEY_NAME="EasyRSA"

Zmień wartość domyślną KEY_NAME na żądaną nazwę serwera. W tym tutorialu będziemy używać nazwy server.

/etc/openvpn/easy-rsa/vars
# X509 Subject Field
export KEY_NAME="server"

Zapisz i wyjdź.

Dalej będziemy generować parametry Diffie-Helman z użyciem wbudowanego narzędzia OpenSSL o nazwie dhparam; to może zająć kilka minut.

Flaga -out określa gdzie zapisać nowe parametry.

openssl dhparam -out /etc/openvpn/dh2048.pem 2048

Nasz certyfikat jest generowany, i teraz możemy wygenerować klucz.

Po pierwsze, przełączymy się do katalogu easy-rsa.

cd /etc/openvpn/easy-rsa

Teraz możemy rozpocząć konfigurowanie CA. Najpierw inicjalizujemy Public Key Infrastructure (PKI).

Należy zwrócić uwagę na kropkę (.) i spację przed poleceniem ./vars. To oznacza bieżący katalog roboczy (źródło).

. ./vars

Dalej, oczyścimy wszystkie pozostałe klucze, które mogą przeszkadzać w naszej instalacji.

./clean-all

Wreszcie będziemy budować CA przy użyciu polecenia OpenSSL. Polecenie to poprosi o potwierdzenie “Distinguished Name” zmiennych, które zostały wprowadzone wcześniej. Naciśnij ENTER, aby zaakceptować istniejące wartości.

./build-ca

Naciśnij ENTER, aby przejść przez każdy wiersz, ponieważ wystarczy zainstalować ich wartości w pliku vars.

Uwaga: Jeżeli przy ./build-ca powstaje błąd z KEY_CONFIG może pomóc: ln -s openssl-1.0.0.cnf openssl.cnf .
Przy braku pliku /etc/openvpn/nazwa.key może pomóc polecenie: openvpn --genkey --secret /etc/openvpn/nazwa.key

Certificate Authority teraz jest skonfigurowany.

O następnych krokach czytaj w drugiej części tutorialu – Jak skonfigurować serwer OpenVPN na Debian 8? – część 2.