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:
# 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:
dh dh2048.pem
Po drugie, zadbamy o to, aby przekierować cały ruch w odpowiednie miejsce. W server.conf znajdź następną sekcję:
# 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:
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:
# 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:
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:
# You can uncomment this out on # non-Windows systems. ;user nobody ;group nogroup
Odkomentuj user nobody
i group nogroup
. Powinno to wyglądać tak:
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ę:
# 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:
# 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:
DEFAULT_FORWARD_POLICY="DROP"
DROP
musi być zmieniony na ACCEPT
. Powinno to wyglądać tak:
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:
#
# 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.
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:
# 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
.
# 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.
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.
Comments 2 komentarze
Mateusz
Jak komuś wali przy ./build-ca:
root@remote:/etc/openvpn/easy-rsa# ./build-ca
grep: /etc/openvpn/easy-rsa/openssl.cnf: No such file or directory
pkitool: KEY_CONFIG (set by the ./vars script) is pointing to the wrong
version of openssl.cnf: /etc/openvpn/easy-rsa/openssl.cnf
The correct version should have a comment that says: easy-rsa version 2.x
to w pliku /etc/openvpn/easy-rsa/vars trzeba zakomentować
#export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
i dopisać poniżej
export KEY_CONFIG="$EASY_RSA/openssl-1.0.0.cnf"
a potem wklepać
source vars
./clean-all
./build-ca
Adik
Dochodzę to tego polecenia:
ufw enable
i tracę połączenie w terminalu. Musze zrobić reboot aby znów nawiązać połączenie