commit b54f600482858dcda04b5afc2ec17e127e71af5b Author: KDAW Date: Thu Jun 20 20:50:42 2024 +0200 add ex1 solution diff --git a/README.md b/README.md new file mode 100644 index 0000000..72c810c --- /dev/null +++ b/README.md @@ -0,0 +1,271 @@ +# Tunel OpenVPN do sieci prywatnej +![__diagram00.png](images/__diagram00.png) + +Zadanie polega na konfiguracji OpenVPN, aby umożliwić klientom (Linux i Windows, 10.10.30.0/24) dostęp do zasobów obecnych w sieci prywatnej (10.10.40.0/24). + +## Środowisko testowe +Do realizacji zadania utworzono zwirtualizowane środowisko testowe przedstawione na poniższym schemacie. Składa się ono z dwóch klientów (Windows oraz Linux), serwera OpenVPN oraz serwera WWW, na którym działa Apache2. + +![__diagram01.png](images/__diagram01.png) + +| Usługa | IP | Podsieć | OS | +| -------------- | --------------------------- | ----------------------------- | -------------------- | +| Serwer WWW | 10.10.40.141 | 10.10.40.0/24 | Ubuntu 24.04 Server LTS | +| Serwer OpenVPN | 10.10.30.140 - 10.10.40.141 | 10.10.30.0/24 - 10.10.40.0/24 | Ubuntu 24.04 Server LTS | +| Klient Windows | 10.10.30.130 | 10.10.30.0/24 | Windows 10 | +| Klient Linux | 10.10.30.131 | 10.10.30.0/24 | Ubuntu 24.04 Desktop LTS| + +## Wykonane kroki +Po utworzeniu środowiska należało je odpowiednio skonfigurować. Poniżej wypisano główne kroki, które wykonano: +1. Server OpenVPN: + * Sprawdzenie połączenia między serwerami i klientami, + * Zainstalowanie OpenVPN, + * Zainstalowanie easy-rsa, + * Zainicjowanie PKI, utworzenie certyfikatów i kluczy dla serwera i klientów. +2. Klient Linux: + * Przeniesienie utworzonych ca, crt, key oraz tc z serwera na klienta, + * Konfiguracja klienta Linux, + * Sprawdzenie połączenia. +3. Klient Windows: + * Przeniesienie utworzonych ca, crt, key oraz tc z serwera na klienta, + * Konfiguracja klienta Windows, + * Sprawdzenie połączenia. +4. Ostateczne testy: + * Sprawdzenie połączenia (z klientów do serwerów), + * Pomyślne wyświetlenie strony skonfigurowanej na serwerze WWW. + +### Komendy wykonane na serwerze OpenVPN +Poniżej zebrano wszystkie komendy wykorzystane podczas konfiguracji serwera OpenVPN. + +```bash +# ping serwera WWW +ping 10.10.40.141 + +# curl strony WWW +curl http://10.10.40.141 + +# ping klienta Windows +ping 10.10.30.130 + +# ping klienta Linux +ping 10.10.30.131 + +# instalacja OpenVPN +sudo apt install openssl openvpn ca-certificates easy-rsa + +# instalacja easy-rsa +mkdir /etc/openvpn/server/easy-rsa/ +easy_rsa_url='https://github.com/OpenVPN/easy-rsa/releases/download/v3.2.0/EasyRSA-3.2.0.tgz' +wget -qO- "$easy_rsa_url" 2>/dev/null | tar xz -C /etc/openvpn/server/easy-rsa/ --strip-components 1 + +# zmiana uprawnień plików +chown -R root:root /etc/openvpn/server/easy-rsa/ + +# inicjalizacja PKI +cd /etc/openvpn/server/easy-rsa/ +./easyrsa init-pki + +# utworzenie potrzebnych katalogów +mkdir server lnx_client win_client +mkdir lnx_client +mkdir win_client + +# zbudowanie CA +./easyrsa --batch build-ca nopass + +# zbudowanie cert i key serwera +EASYRSA_CERT_EXPIRE=3650 ./easyrsa build-server-full server nopass + +# utworzenie crl +EASYRSA_CRL_DAYS=3650 ./easyrsa gen-crl + +# utworzenie dh +openssl dhparam -out pki/dh.pem 2048 + +# utworzenie tc +openvpn --genkey --secret pki/tc.key + +# skopiowanie wszystkich potrzebnych plików do katalogu serwera +cp pki/ca.crt pki/private/ca.key pki/private/server.key pki/issued/server.crt pki/dh.pem pki/crl.pem pki/tc.key server/ + +# zbudowanie cert i key klienta Linux +EASYRSA_CERT_EXPIRE=3650 ./easyrsa build-client-full lnx_client01 + +# skopiowanie wszystkich potrzebnych plików do katalogu klienta Linux +cp pki/ca.crt pki/private/lnx_client01.key pki/tc.key pki/issued/lnx_client01.crt lnx_client/ + +# zbudowanie cert i key klienta Windows +EASYRSA_CERT_EXPIRE=3650 ./easyrsa build-client-full win_client01 + +# skopiowanie wszystkich potrzebnych plików do katalogu klienta Windows +cp pki/ca.crt pki/tc.key pki/issued/win_client01.crt pki/private/win_client01.key win_client/ + +# dodanie plików do archiwum tar +tar -cvf lnx_client.tar lnx_client/ +zip win_client.zip win_client/* + +# przeniesienie plików serwera +cp server/* ../ + +# umożliwienie przekierowywania IP +echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-openvpn-forward.conf +echo 1 > /proc/sys/net/ipv4/ip_forward +sysctl --system + +# utworzenie pliku konfiguracyjnego serwera +vim server.conf + +# zawartość pliku server.conf +local 10.10.30.140 +port 443 +proto tcp +dev tun +ca ca.crt +cert server.crt +key server.key +dh dh.pem +tls-crypt tc.key +crl-verify crl.pem +auth SHA512 +topology subnet +server 10.8.0.0 255.255.255.0 +ifconfig-pool-persist ipp.txt +route 10.10.40.0 255.255.255.0 +push "route 10.10.40.0 255.255.255.0" +push "redirect-gateway def1" +keepalive 10 120 +cipher AES-256-GCM +user nobody +group nogroup +persist-key +persist-tun +verb 3 +status /var/log/openvpn/openvpn-status.log +log-append /var/log/openvpn/openvpn.log + +# uruchomienie usługi OpenVPN +systemctl enable openvpn-server@server.service +systemctl start openvpn-server@server.serivce + +# dodanie reguły IPTABLES (opcjonalne) +iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -d 10.10.40.0/24 -j MASQUERADE +``` + + + +### Komendy wykonane na kliencie Linux +Poniżej zebrano wszystkie komendy wykorzystane podczas konfiguracji klienta Linux. + +```bash +# pobranie utworzonych plików z serwera +scp ovpnadm@10.10.30.140:/etc/openvpn/server/easy-rsa/lnx_client.tar /tmp + +# wypakowanie plików +tar --strip-components 1 -xvf /tmp/lnx_client.tar -C /etc/openvpn/client/ +ls -l /etc/openvpn/client/ + +# utworzenie pliku konfiguracyjnego klienta +vim /etc/openvpn/client/client.conf + +# zawartość pliku client.conf +client +dev tun +proto tcp +remote 10.10.30.140 443 +ca /etc/openvpn/client/ca.crt +cert /etc/openvpn/client/lnx_client01.crt +key /etc/openvpn/client/lnx_client01.key +tls-crypt /etc/openvpn/client/tc.key +askpass +resolv-retry infinite +nobind +persist-key +persist-tun +remote-cert-tls server +auth SHA512 +cipher AES-256-GCM +ignore-unknown-option block-outside-dns +block-outside-dns +verb 3 + +ls /etc/openvpn/client/ + +# uruchomienie usługi OpenVPN +systemctl disable openvpn.service +systemctl enable openvpn@client.service + +# modyfikacja pliku usługi +vim /usr/lib/systemd/system/openvpn@client.service + +# zmieniono poniższą część +--config /etc/openvpn/%i.conf + +# na taką jak poniżej +--config /etc/openvpn/client/%i.conf + +# uruchomienie usługi +systemctl start openvpn@client.service + +# utworzenie nowej usługi związanej ze zmodyfikowanym plikiem konfiguracyjnym +systemctl enable openvpn@client.service + +# przeładowanie zmian +systemctl daemon-reload +``` + +### Komendy wykonane na kliencie Windows +Poniżej zebrano wszystkie komendy wykorzystane podczas konfiguracji klienta Windows. + +```bash +# pobranie utworzonych plików z serwera +scp ovpnadm@10.10.30.140:/etc/openvpn/server/easy-rsa/win_client.zip C:\Users\windows\Desktop + +# zawartość client.ovpn +client +dev tun +proto tcp +remote 10.10.30.140 443 + +ca ca.crt +cert win_client01.crt +key win_client01.key +tls-crypt tc.key + +resolv-retry infinite +nobind +persist-key +persist-tun +remote-cert-tls server +#auth SHA512 +cipher AES-256-GCM +ignore-unknown-option block-outside-dns +block-outside-dns +verb 3 +``` + +### Zrzuty ekranu z wykonanych testów +Poniżej przedstawiono zrzuty ekranów z wykonanych testów po zakończeniu konfiguracji środowiska. Przetestowano połączenie pomiędzy klientami a serwerami, zarówno z włączonym OpenVPN i wyłączonym. + +#### Klient Linux +##### Włączony OpenVPN +![00_linux-to-private-network-ON.png](images/00_linux-to-private-network-ON.png) +![01_linux-to-private-network-www-ON.png](images/01_linux-to-private-network-www-ON.png) + +##### Wyłączony OpenVPN +![02_linux-to-private-network-OFF.png](images/02_linux-to-private-network-OFF.png) +![03_linux-to-private-network-www-OFF.png](images/03_linux-to-private-network-www-OFF.png) + +#### Klient Windows +##### Włączony OpenVPN +![04_windows-to-private-network-ON.png](images/04_windows-to-private-network-ON.png) +![05_windows-to-private-network-www-ON.png](images/05_windows-to-private-network-www-ON.png) + +##### Wyłączony OpenVPN +![06_windows-to-private-network-OFF.png](images/06_windows-to-private-network-OFF.png) +![07_windows-to-private-network-www-OFF.png](images/07_windows-to-private-network-www-OFF.png) + +Konfiguracja środowiska przebiegła pomyślnie. + +### Autorzy +* Kacper Dawidowicz 458009 +* Marcin Kielar 452666 \ No newline at end of file diff --git a/images/00_linux-to-private-network-ON.png b/images/00_linux-to-private-network-ON.png new file mode 100644 index 0000000..d82ef33 Binary files /dev/null and b/images/00_linux-to-private-network-ON.png differ diff --git a/images/00_linux-to-private-network-ON.png:Zone.Identifier b/images/00_linux-to-private-network-ON.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/images/01_linux-to-private-network-www-ON.png b/images/01_linux-to-private-network-www-ON.png new file mode 100644 index 0000000..3f7341d Binary files /dev/null and b/images/01_linux-to-private-network-www-ON.png differ diff --git a/images/01_linux-to-private-network-www-ON.png:Zone.Identifier b/images/01_linux-to-private-network-www-ON.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/images/02_linux-to-private-network-OFF.png b/images/02_linux-to-private-network-OFF.png new file mode 100644 index 0000000..39fc2b0 Binary files /dev/null and b/images/02_linux-to-private-network-OFF.png differ diff --git a/images/02_linux-to-private-network-OFF.png:Zone.Identifier b/images/02_linux-to-private-network-OFF.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/images/03_linux-to-private-network-www-OFF.png b/images/03_linux-to-private-network-www-OFF.png new file mode 100644 index 0000000..b0fc291 Binary files /dev/null and b/images/03_linux-to-private-network-www-OFF.png differ diff --git a/images/03_linux-to-private-network-www-OFF.png:Zone.Identifier b/images/03_linux-to-private-network-www-OFF.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/images/04_windows-to-private-network-ON.png b/images/04_windows-to-private-network-ON.png new file mode 100644 index 0000000..b6a746b Binary files /dev/null and b/images/04_windows-to-private-network-ON.png differ diff --git a/images/04_windows-to-private-network-ON.png:Zone.Identifier b/images/04_windows-to-private-network-ON.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/images/05_windows-to-private-network-www-ON.png b/images/05_windows-to-private-network-www-ON.png new file mode 100644 index 0000000..b48ebc1 Binary files /dev/null and b/images/05_windows-to-private-network-www-ON.png differ diff --git a/images/05_windows-to-private-network-www-ON.png:Zone.Identifier b/images/05_windows-to-private-network-www-ON.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/images/06_windows-to-private-network-OFF.png b/images/06_windows-to-private-network-OFF.png new file mode 100644 index 0000000..f36f764 Binary files /dev/null and b/images/06_windows-to-private-network-OFF.png differ diff --git a/images/06_windows-to-private-network-OFF.png:Zone.Identifier b/images/06_windows-to-private-network-OFF.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/images/07_windows-to-private-network-www-OFF.png b/images/07_windows-to-private-network-www-OFF.png new file mode 100644 index 0000000..ffb47a7 Binary files /dev/null and b/images/07_windows-to-private-network-www-OFF.png differ diff --git a/images/07_windows-to-private-network-www-OFF.png:Zone.Identifier b/images/07_windows-to-private-network-www-OFF.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/images/__diagram00.png b/images/__diagram00.png new file mode 100644 index 0000000..d07f149 Binary files /dev/null and b/images/__diagram00.png differ diff --git a/images/__diagram00.png:Zone.Identifier b/images/__diagram00.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/images/__diagram01.png b/images/__diagram01.png new file mode 100644 index 0000000..b8eae49 Binary files /dev/null and b/images/__diagram01.png differ diff --git a/images/__diagram01.png:Zone.Identifier b/images/__diagram01.png:Zone.Identifier new file mode 100644 index 0000000..e69de29