Slijede razlike između dviju inačica stranice.
Starije izmjene na obje strane Starija izmjena Novija izmjena | Starija izmjena | ||
racfor_wiki:android:wireguard_protokol [2020/01/09 23:24] lkudra završeno poglavlje o praktičnom dijelu |
racfor_wiki:android:wireguard_protokol [2024/12/05 12:24] (trenutno) |
||
---|---|---|---|
Redak 1: | Redak 1: | ||
====== Wireguard protokol ====== | ====== Wireguard protokol ====== | ||
- | Uredi | ||
- | |||
- | Uredi | ||
===== Sažetak ===== | ===== Sažetak ===== | ||
Redak 15: | Redak 12: | ||
Keywords: **VPN**; **Wireguard** | Keywords: **VPN**; **Wireguard** | ||
- | Uredi | ||
- | |||
- | Uredi | ||
===== Uvod u VPN ===== | ===== Uvod u VPN ===== | ||
Redak 25: | Redak 19: | ||
{{: | {{: | ||
- | Uredi | ||
- | |||
- | Uredi | ||
===== Postojeći VPN protokoli ===== | ===== Postojeći VPN protokoli ===== | ||
Redak 77: | Redak 68: | ||
* koristi UDP port 500 za početnu razmjenu ključeva, UDP port 1701 za početnu L2TP konfiguraciju i UDP port 4500 za prolazak kroz NAT. Zbog korištenja fiksnih port-ova lakše ga je blokirati od protokola koji ne koriste fiksne port-ove. | * koristi UDP port 500 za početnu razmjenu ključeva, UDP port 1701 za početnu L2TP konfiguraciju i UDP port 4500 za prolazak kroz NAT. Zbog korištenja fiksnih port-ova lakše ga je blokirati od protokola koji ne koriste fiksne port-ove. | ||
- | Uredi | ||
- | |||
- | Uredi | ||
===== Wireguard ===== | ===== Wireguard ===== | ||
Redak 172: | Redak 160: | ||
S obzirom da se Wireguard protokol još uvijek naglo razvija i ima mali broj korisnika nije prošao niti približan broj revizija i sigurnosnih provjera kao primjerice OpenVPN koji je dokazano siguran protokol. Na Wireguard-ovoj web stranici stoji upozorenje svim korisnicima da je ovaj projekt još uvijek u razvoju i da nema stabilnu verziju ([[https:// | S obzirom da se Wireguard protokol još uvijek naglo razvija i ima mali broj korisnika nije prošao niti približan broj revizija i sigurnosnih provjera kao primjerice OpenVPN koji je dokazano siguran protokol. Na Wireguard-ovoj web stranici stoji upozorenje svim korisnicima da je ovaj projekt još uvijek u razvoju i da nema stabilnu verziju ([[https:// | ||
- | Osim što je protokol trenutno " | + | Osim što je protokol trenutno " |
=== Problemi sa zaštitom privatnosti === | === Problemi sa zaštitom privatnosti === | ||
Redak 187: | Redak 174: | ||
* Ako napadač snimi sav promet prema poslužitelju i od poslužitelja te zatim provali u poslužitelj i sazna Wireguard-ov privatni ključ moći će povezati snimljeni promet sa specifičnim korisnicima. | * Ako napadač snimi sav promet prema poslužitelju i od poslužitelja te zatim provali u poslužitelj i sazna Wireguard-ov privatni ključ moći će povezati snimljeni promet sa specifičnim korisnicima. | ||
- | Uredi | ||
- | |||
- | Uredi | ||
===== Postavljanje Wireguard-a na udaljenom poslužitelju ===== | ===== Postavljanje Wireguard-a na udaljenom poslužitelju ===== | ||
Redak 208: | Redak 192: | ||
=== Instalacija Wireguard-a === | === Instalacija Wireguard-a === | ||
- | Najprije je potrebno instalirati Wireguard s obzirom da još uvijek ne dolazi s kernel-om. U ovom slučaju korišten je Ubuntu 18.04 i proces instalacije je sljedeći:< | + | Najprije je potrebno instalirati Wireguard s obzirom da još uvijek ne dolazi s kernel-om. U ovom slučaju korišten je Ubuntu 18.04 i proces instalacije je sljedeći: |
- | # apt-get update'' | + | |
- | '' | + | < |
+ | # add-apt-repository ppa: | ||
+ | # apt-get update | ||
+ | # apt-get install wireguard-dkms wireguard-tools linux-headers-$(uname -r) | ||
</ | </ | ||
+ | |||
=== Generiranje ključeva poslužitelja === | === Generiranje ključeva poslužitelja === | ||
- | <wp-block-preformatted> | + | <code> |
# wg genkey | tee privatekey | wg pubkey> publickey | # wg genkey | tee privatekey | wg pubkey> publickey | ||
- | </wp-block-preformatted> | + | </code> |
=== Konfiguracija poslužitelja === | === Konfiguracija poslužitelja === | ||
- | Potrebno je stvoriti datoteku ''/ | + | Potrebno je stvoriti datoteku ''/ |
+ | [Interface] | ||
+ | Address = 10.200.200.1/ | ||
+ | SaveConfig = true | ||
+ | PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; iptables -A FORWARD -o %i -j ACCEPT | ||
+ | PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; iptables -D FORWARD -o %i -j ACCEPT | ||
+ | ListenPort = 51820 | ||
+ | PrivateKey = <server private key> | ||
- | < | + | [Peer] |
- | **[**Interface**]** | + | PublicKey = <client public key> |
- | Address **=** **10.200.200.1** /24 | + | AllowedIPs = 10.200.200.2/ |
- | SaveConfig **=** **true** | + | Endpoint = < |
- | PostUp = iptables -A FORWARD -i **%i** | + | </code> |
- | PostDown = iptables -D FORWARD -i **%i** | + | |
- | ListenPort **=** **51820** | + | |
- | PrivateKey **=** **< | + | |
- | + | ||
- | **[**Peer**]** | + | |
- | PublicKey | + | |
- | AllowedIPs | + | |
- | Endpoint = **< | + | |
- | </wp-block-preformatted> | + | |
Objašnjenje konfiguracije: | Objašnjenje konfiguracije: | ||
- | **Address = 10.200.200.1/ | + | **Address = 10.200.200.1/ |
- | **SaveConfig = true: | + | **SaveConfig = true:** spremi konfiguraciju da ostane trajna i nakon prekida veze. |
- | **ListenPort = 51820: | + | **ListenPort = 51820:** UDP port na kojem VPN čeka nadolazeći promet, može biti i neki drugi broj. |
- | **PrivateKey = <server private key>: | + | **PrivateKey = <server private key>:** ovo je sadržaj prethodno stvorene datoteke na poslužitelju '' |
- | **PublicKey = <client public key>: | + | **PublicKey = <client public key>:** ovo je sadržaj datoteke publickey datoteke na klijentu |
- | **AllowedIPs = 10.200.200.2/ | + | **AllowedIPs = 10.200.200.2/ |
- | **Endpoint = < | + | **Endpoint = < |
- | + | <code> | |
- | <wp-block-preformatted> | + | PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; iptables -A FORWARD -o %i -j ACCEPT |
- | PostUp = iptables -A FORWARD -i **%i** | + | PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; iptables -D FORWARD -o %i -j ACCEPT |
- | PostDown = iptables -D FORWARD -i **%i** | + | </code> |
- | </wp-block-preformatted> | + | |
- | + | ||
- | **PostUp **opisuje koja se pravila izvode kada se VPN veza uspostavlja: | + | |
- | **PostDown** opisuje koja se pravila izvode kada se VPN veza prekida. Pravila | + | **PostUp |
+ | **PostDown** opisuje koja se pravila izvode kada se VPN veza prekida. Pravila su jednaka kao i u **PostUp** samo što se ovdje brišu (zastavica -D) umjesto da se dodaju (zastavica -A). | ||
=== Omogućavanje Wireguard mrežnog sučelja na poslužitelju === | === Omogućavanje Wireguard mrežnog sučelja na poslužitelju === | ||
Najprije se postave ispravne dozvole na konfiguracijskim datotekama. | Najprije se postave ispravne dozvole na konfiguracijskim datotekama. | ||
- | <wp-block-preformatted> | + | <code> |
# chown -v root:root / | # chown -v root:root / | ||
# chmod -v 600 / | # chmod -v 600 / | ||
- | </wp-block-preformatted> | + | </code> |
Nakon toga se podigne Wireguard sučelje: | Nakon toga se podigne Wireguard sučelje: | ||
- | <wp-block-preformatted> | + | <code> |
# systemctl enable wg-quick@wg0.service | # systemctl enable wg-quick@wg0.service | ||
- | </wp-block-preformatted> | + | </code> |
- | Zatim je potrebno postaviti //IP forwarding// | + | Zatim je potrebno postaviti //IP forwarding// |
- | + | <code> | |
- | <wp-block-preformatted> | + | |
# sed -i ' | # sed -i ' | ||
- | </wp-block-preformatted> | + | </code> |
Kako se ne bi moralo ponovno pokrenuti poslužitelja mogu se izvršiti ove dvije naredbe. | Kako se ne bi moralo ponovno pokrenuti poslužitelja mogu se izvršiti ove dvije naredbe. | ||
- | <wp-block-preformatted> | + | <code> |
# sysctl -p | # sysctl -p | ||
# echo 1> / | # echo 1> / | ||
- | </wp-block-preformatted> | + | </code> |
=== Postavljanje firewall-a na poslužitelju === | === Postavljanje firewall-a na poslužitelju === | ||
Praćenje VPN konekcije: | Praćenje VPN konekcije: | ||
- | <wp-block-preformatted> | + | <code> |
- | # iptables -A INPUT -m conntrack | + | # iptables -A INPUT -m conntrack |
- | # iptables -A FORWARD -m conntrack | + | # iptables -A FORWARD -m conntrack |
- | </wp-block-preformatted> | + | </code> |
Prihvati promet na UDP port-u kojeg koristi Wireguard: | Prihvati promet na UDP port-u kojeg koristi Wireguard: | ||
- | <wp-block-preformatted> | + | <code> |
- | # iptables -A INPUT -p udp -m udp --dport 51820 -m conntrack | + | # iptables -A INPUT -p udp -m udp –dport 51820 -m conntrack |
- | </wp-block-preformatted> | + | </code> |
Dozvoli rekurzivni TCP i UDP DNS promet: | Dozvoli rekurzivni TCP i UDP DNS promet: | ||
- | <wp-block-preformatted> | + | <code> |
- | # iptables -A INPUT -s 10.200.200.0/ | + | # iptables -A INPUT -s 10.200.200.0/ |
- | # iptables -A INPUT -s 10.200.200.0/ | + | # iptables -A INPUT -s 10.200.200.0/ |
- | </wp-block-preformatted> | + | </code> |
Dopusti prijenos podataka koji su u VPN tunelu (možda nije potrebno jer već postoji u Wireguard konfiguraciji, | Dopusti prijenos podataka koji su u VPN tunelu (možda nije potrebno jer već postoji u Wireguard konfiguraciji, | ||
- | <wp-block-preformatted> | + | <code> |
- | # iptables -A FORWARD -i wg0 -o wg0 -m conntrack | + | # iptables -A FORWARD -i wg0 -o wg0 -m conntrack |
- | </wp-block-preformatted> | + | </code> |
Postavi nat (možda nije potrebno jer već postoji u Wireguard konfiguraciji, | Postavi nat (možda nije potrebno jer već postoji u Wireguard konfiguraciji, | ||
- | <wp-block-preformatted> | + | <code> |
# iptables -t nat -A POSTROUTING -s 10.200.200.0/ | # iptables -t nat -A POSTROUTING -s 10.200.200.0/ | ||
- | </wp-block-preformatted> | + | </code> |
Spremi pravila da ostanu i nakon ponovnog pokretanja računala: | Spremi pravila da ostanu i nakon ponovnog pokretanja računala: | ||
- | <wp-block-preformatted> | + | <code> |
# apt-get install iptables-persistent | # apt-get install iptables-persistent | ||
# systemctl enable netfilter-persistent | # systemctl enable netfilter-persistent | ||
# netfilter-persistent save | # netfilter-persistent save | ||
- | </wp-block-preformatted> | + | </code> |
=== DNS postavke === | === DNS postavke === | ||
- | Dobra je praksa osigurati da DNS promet bude siguran. Korištenjem ove konfiguracije štitimo naš poslužitelj od curenja DNS podataka, lažnih // | + | Dobra je praksa osigurati da DNS promet bude siguran. Korištenjem ove konfiguracije štitimo naš poslužitelj od curenja DNS podataka, lažnih //proxy// konfiguracija i raznik // |
Najprije moramo instalirati // | Najprije moramo instalirati // | ||
- | + | <code> | |
- | <wp-block-preformatted> | + | |
# apt-get install unbound unbound-host | # apt-get install unbound unbound-host | ||
- | + | </code> | |
- | </wp-block-preformatted> | + | |
Zatim preuzmemo listu korijenskih DNS poslužitelja: | Zatim preuzmemo listu korijenskih DNS poslužitelja: | ||
- | <wp-block-preformatted> | + | <code> |
# curl -o / | # curl -o / | ||
+ | </ | ||
- | </ | + | Nakon toga moramo napisati konfiguraciju ''/ |
- | + | <code> | |
- | Nakon toga moramo napisati konfiguraciju ''/ | + | |
- | + | ||
- | <wp-block-preformatted> | + | |
server: | server: | ||
Redak 397: | Redak 379: | ||
prefetch: yes | prefetch: yes | ||
prefetch-key: | prefetch-key: | ||
- | + | </code> | |
- | </wp-block-preformatted> | + | |
Na kraju je samo još potrebno postaviti dozvole i pokrenuti // | Na kraju je samo još potrebno postaviti dozvole i pokrenuti // | ||
- | + | <code> | |
- | <wp-block-preformatted> | + | |
# chown -R unbound: | # chown -R unbound: | ||
# systemctl enable unbound | # systemctl enable unbound | ||
+ | </ | ||
+ | |||
- | </ | ||
==== Postavke na osobnom računalu (klijentu) ==== | ==== Postavke na osobnom računalu (klijentu) ==== | ||
Redak 415: | Redak 396: | ||
=== Generiranje ključeva klijenta === | === Generiranje ključeva klijenta === | ||
- | <wp-block-preformatted> | + | <code> |
# wg genkey | tee privatekey | wg pubkey> publickey | # wg genkey | tee privatekey | wg pubkey> publickey | ||
- | </wp-block-preformatted> | + | </code> |
- | === Konfiguracija klijenta === | + | |
- | Potrebno je stvoriti datoteku ''/ | + | === Konfiguracija klijenta === |
- | <wp-block-preformatted> | + | Potrebno je stvoriti datoteku ''/ |
[Interface] | [Interface] | ||
- | Address = **10.200.200.2** /24 | + | Address = 10.200.200.2/ |
- | PrivateKey = **<client private key>** | + | PrivateKey = <client private key> |
- | DNS = **10.200.200.1** | + | DNS = 10.200.200.1 |
[Peer] | [Peer] | ||
- | PublicKey = **<server public key>** | + | PublicKey = <server public key> |
- | Endpoint = **<server ip>:51820** | + | Endpoint = <server_public_ip>: |
- | AllowedIPs = **0.0.0.0/0** | + | AllowedIPs = 0.0.0.0/0 |
- | PersistentKeepalive = **21** | + | PersistentKeepalive = 21 |
- | </wp-block-preformatted> | + | </code> |
Objašnjenje konfiguracije: | Objašnjenje konfiguracije: | ||
- | **Address = 10.200.200.2/ | + | **Address = 10.200.200.2/ |
- | **PrivateKey = <client private key>: | + | **PrivateKey = <client private key>:** sadržaj prethodno stvorene datoteke privatekey na klijentu. |
- | **DNS = 10.200.200.1: | + | **DNS = 10.200.200.1: |
- | **PublicKey = <server public key>: | + | **PublicKey = <server public key>: **sadržaj datoteke publickey na poslužitelju. |
- | **Endpoint = <server ip>: | + | **Endpoint = <server_public_ip>: |
- | **AllowedIPs = 0.0.0.0/ | + | **AllowedIPs = 0.0.0.0/ |
- | + | ||
- | **PersistentKeepalive = 21:** pošalji autentificirani prazni paket //peer//-u svakih 21 sekundu da se spriječe potencijalni problemi s firewall-om ili NAT-om. | + | |
+ | **PersistentKeepalive = 21:** pošalji autentificirani prazni paket //peer//-u svakih 21 sekundu da se spriječe potencijalni problemi s firewall-om ili NAT-om. | ||
=== Spajanje na VPN === | === Spajanje na VPN === | ||
Kako bi se spojili na VPN potrebno je aktivirati mrežno sučelje '' | Kako bi se spojili na VPN potrebno je aktivirati mrežno sučelje '' | ||
- | + | <code> | |
- | <wp-block-preformatted> | + | |
$ sudo wg-quick up wg0 | $ sudo wg-quick up wg0 | ||
- | </wp-block-preformatted> | + | </code> |
Nakon izvođenja ove naredbe trebali bi biti spojeni na VPN. Status možete provjeriti ovako: | Nakon izvođenja ove naredbe trebali bi biti spojeni na VPN. Status možete provjeriti ovako: | ||
- | <wp-block-preformatted> | + | <code> |
$ sudo wg | $ sudo wg | ||
- | </ | ||
Dobije se ispis: | Dobije se ispis: | ||
- | < | ||
interface: wg0 | interface: wg0 | ||
public key: <public client key> | public key: <public client key> | ||
private key: (hidden) | private key: (hidden) | ||
- | listening port: 45858 | + | listening port: 32801 |
fwmark: 0xca6c | fwmark: 0xca6c | ||
Redak 477: | Redak 453: | ||
endpoint: < | endpoint: < | ||
allowed ips: 0.0.0.0/0 | allowed ips: 0.0.0.0/0 | ||
- | latest handshake: | + | latest handshake: |
- | transfer: | + | transfer: |
persistent keepalive: every 21 seconds | persistent keepalive: every 21 seconds | ||
- | + | </code> | |
- | </wp-block-preformatted> | + | |
VPN se može ugasiti naredbom: | VPN se može ugasiti naredbom: | ||
- | <wp-block-preformatted> | + | <code> |
$ sudo wg-quick down wg0 | $ sudo wg-quick down wg0 | ||
- | </wp-block-preformatted> | + | </code> |
- | Za provjeru je li VPN upaljen može se koristiti alate // | + | Za provjeru je li VPN upaljen može se koristiti alate // |
VPN isključen: | VPN isključen: | ||
- | <wp-block-preformatted> | + | <code> |
$ traceroute google.com | $ traceroute google.com | ||
- | </wp-block-preformatted> | + | </code> |
- | <wp-block-preformatted> | + | |
+ | <code> | ||
traceroute to google.com (216.58.207.174), | traceroute to google.com (216.58.207.174), | ||
| | ||
Redak 514: | Redak 490: | ||
15 * 209.85.252.235 (209.85.252.235) | 15 * 209.85.252.235 (209.85.252.235) | ||
16 muc11s04-in-f14.1e100.net (216.58.207.174) | 16 muc11s04-in-f14.1e100.net (216.58.207.174) | ||
- | </wp-block-preformatted> | + | </code> |
VPN uključen: | VPN uključen: | ||
- | <wp-block-preformatted> | + | <code> |
$ traceroute google.com | $ traceroute google.com | ||
- | </wp-block-preformatted> | + | </code> |
- | <wp-block-preformatted> | + | |
+ | <code> | ||
traceroute to google.com (172.217.22.46), | traceroute to google.com (172.217.22.46), | ||
| | ||
Redak 530: | Redak 507: | ||
| | ||
| | ||
- | </wp-block-preformatted> | + | </code> |
Vidimo da je s uključenim VPN-om prvi skok na adresu 10.200.200.1 što je adresa našeg poslužitelja u VPN-u. | Vidimo da je s uključenim VPN-om prvi skok na adresu 10.200.200.1 što je adresa našeg poslužitelja u VPN-u. | ||
- | Uredi | ||
- | |||
- | Uredi | ||
===== Literatura ===== | ===== Literatura ===== | ||
- | Ovo je literatura. | + | [1] [[https:// |
+ | |||
+ | [2] [[https:// | ||
+ | |||
+ | [3] [[https:// | ||
+ | |||
+ | [4] [[https:// | ||
+ | |||
+ | [5] [[https:// | ||
+ | |||
+ | [6] [[https:// | ||
+ | |||
+ | [7] [[https:// | ||
+ | |||
+ | [8] [[https:// | ||
- | Uredi | + | [9] [[https:// |
- | Uredi | + | [10] [[https:// |