Configurazione del router/firewall open source VyOS per la connessione ai server openvpn free di ProtonVPN.
VyOS
VyOS è un router/firewall open source molto apprezzato per la facilità e la velocità di utilizzo basato sul sistema operativo Debian GNU/Linux. La prima versione è stata rilasciata nel 2013 ed è stata creata da un fork di Vyatta Core 6.6 R1.
Le principali features di questo network operating system sono:
- Routing;
- VPN;
- Firewall e NAT;
- Network Services;
- Multiple versioni delle configurazioni salvate;
- Open Source su github.
VyOS può essere installato sia su sistemi bare metal, sia su sistemi virtualizzati (Hiper-V, Kvm, Proxmox, VMWare e altri), sia su sistemi cloud (Amazon Web Services, Microsoft Azure, Google Cloud Platform, Oracle Cloud Infrastructure, Alibaba Cloud e altri ancora).
La bontà del progetto è stata, inoltre, confermata da Ubiquity che ha scelto Vyatta come base per i suoi router/firewall con prestazioni elevate EdgeRouter che installano al loro interno l’OS EdgeOS.
We fundamentally believe that internet access is as vital to our human development as air, food, water, and healthcare. Built by engineers for engineers, VyOS is an open source software company that democratizes how we access networks so that the many, not the few, benefit from building solutions without limitations and prohibitive fees. We do this as VyOS through our open source software and virtual platforms.
ProtonVPN
ProtonVPN è una VPN gratis con sede in Svizzera ad alta velocità che salvaguarda i dati personali. Avendo sede in Svizzera, come provider VPN ProtonVPN non sono tenuti a mantenere logs e quindi non registrano le attività degli utenti rispettando la privacy, protegge giornalisti o attivisti e combatte la censura in quei Paesi in cui esiste.
È una VPN progettata per essere sicura e mette a disposizione degli utenti i codice sorgenti delle app su github.
Sicurezza Internet per tutti
Il nostro obiettivo è rendere la privacy online accessibile a tutti. Per fare ciò, ci siamo concentrati sul rendere la tecnologia di sicurezza avanzata in ProtonVPN facile da usare e disponibile gratuitamente.
VPN Gratis
ProtonVPN dispone di 2 tipologie di fruizione del servizio: una gratis e una a pagamento.
In questo articolo vorrei parlare solamente della versione gratis in cui non si nessun limite di velocità e/o dati scaricati e la privacy è rispettata come in quella a pagamento. Logicamente ci sono meno opzioni disponibili:
- Si ha la possibilità di collegarsi a 3 server in diverse nazioni:
- Stati Uniti con 5 servers,
- Olanda con 9 servers,
- Giappone con 3 servers.
- 1 solo collegamento simultaneo;
- Velocità media (causata da server utilizzati da molte persone) ma per navigazione classica - web - più che sufficiente.
Mancano funzioni premium quali:
- Maggiori nazioni a cui connettersi, tra cui l’Italia;
- Blocco della pubblicità;
- Support per P2P filesharing/BitTorrent;
- Blocco di siti;
- Streaming;
- Tor over VPN.
Configurazione VyOS
Ci sono vari vantaggi a installare una VPN a livello del router tra i quali:
- Non c’è bisogno di configurare una VPN in ogni device;
- Si proteggono i devices anche se non supportano una connessione VPN;
- Automaticamente si rende più sicuro tutto il traffico Internet;
- Si protegge tutta la casa o l’ufficio con solo un device.
Credenziali
Dopo essersi registrati sul sito di ProtonVPN entrare nella sezione privata e segnarsi le credenziali fornite dal sito per accedere alla VPN.
A questo punto spostarsi nella shell di Vyos e utilizzare vi
per creare un file in /config/protonvpn
dal nome credenziali.txt
contente nella prima riga l’username e nella seconda la password:
username
password
Certificati
VyOS richiede che venga specificato un certificato CA, la chiave statica tls, un certificato host e la sua relativa chiave privata. ProtonVPN non controlla gli ultimi due files, ma sono necessari lo stesso in quanto per VyOS sono obbligatori altrimenti otterremmo un errore nella configurazione senza poter utilizzare la VPN.
Per ottenere i primi 2 certificati, bisogna scaricare il file .ovpn
della località desiderata nella sezione download.
Individuare i certificati richiesti è semplice e sono inseriti come testo nel file .ovpn
scaricato in precedenza.
Certificato CA
Per il certificato CA bisogna copiare il testo compreso nei tag <ca>
e </ca>
presente nel file .ovpn
scaricato:
-----BEGIN CERTIFICATE-----
MIIFozCCA4ugAwIBAgIBATANBgkqhkiG9w0BAQ0FADBAMQswCQYDVQQGEwJDSDEV
MBMGA1UECasdMTUxNDM4MDBaFw0yNzAyMTUxNDM4MDBaMEAxCzAJBgNVBAYTAkNI
MRUwEwYDVQQKEwxQcm90b25WUE4gQUcxGjAYBgNVBAMTEVByb3RvblZQTiBSb290
IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAt+BsSsZg7+AuqTq7
vDbPzfygtl9f8fLJqO4amsyOXlI7pquL5IsEZhpWyJIIvYybqS4s1/T7BbvHPLVE
wlrq8A5DBIXcfuXrBbKoYkmpICGc2u1KYVGOZ9A+PH9z4Tr6OXFfXRnsbZToie8t
2Xjv/dZDdUDAqeW89I/mXg3k5x08m2nfGCQDm4gCanN1r5MT7ge56z0MkY3FFGCO
qRwspIEUzu1ZqGSTkG1eQiOYIrdOF5cc7n2APyvBIcfvp/W3cpTOEmEBJ7/14RnX
nHo0fcx61Inx/6ZxzKasdssaGGQF3tF6u2M0FjVN0lLH9S0ul1TgoOS56yEJ34hr
JSRTqHuar3t/xdCbKFZjyXFZFNsXVvgJu34CNLrHHTGJj9jiUfFnxWQYMo9UNUd4
a3PPG1HnbG7LAjlvj5JlJ5aqO5gshdnqb9uIQeR2CdzcCJgklwRGCyDT1pm7eoiv
WV19YBd81vKulLzgPavu3kRRe83yl29It2hwQ9FMs5w6ZV/X6ciTKo3etkX9nBD9
ZzJPsGQsBUy7CzO1j34545453ItmQS+1s4xtcFxdFY8o/q1zoqBlxpe5MQIWN6Qa
lryiET74gMHE/S5WrPlsq/gehxsdgc6GDUXG4dk8vn6OUMa6wb5wRO3VXGEc67IY
m4mDFTYiPvLaFOxtndlUWuCruKcCAwEAAaOBpzCBpDAMBgNVHRMEBTADAQH/MB0G
A1UdDgQWBBSDkIaYhLV443533344NB2qV0gkVDBoBgNVHSMEYTBfgBSDkIaYhLVZ
TwyLNTetNB2qV0gkVKFEpEIwQDELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFByb3Rv
blZQTiBBRzEaMBgGA1UEAxMRUHJvdG9uVlBOIFJvb3QgQ0GCAQEwCwYDVR0PBAQD
AgEGMA0GCSqGSIb3DQEBDQUAA4ICAQCYr7LpvnfZXBCxVIVc2ea1fjxQ6vkTj0zM
htFs3qfeXpMRf+g1NAh4vv1UIwLsczilMt87SjpJ25pZPyS3O+/VlI9ceZMvtGXd
MGfXhTDp//zRoL1cbzSHee9tQlmEm1tKFxB0wfWd/inGRjZxpJCTQh8oc7CTziHZ
ufS+Jkfpc4Rasr31fl7mHhJahF1j/ka/OOWmFbiHBNjzmNWPQInJm+0ygFqij5qs
51OEvubR8yh5Mdq4TNuWhFuTxpqoJ87VKaSOx/Aefca44Etwcj4gHb7LThidw/ky
zysZiWjyrbfX/31RX7345544334543ZaWi/lMfsl5O+6E2lJ1vo4xv9pW8225B5X
eAeXHCfjV/vrrCFqeCprNF6a3Tn/LX6VNy3jbeC+167QagBOaoDA01XPOx7Odhsb
Gd7cJ5VkgyycZgLnT9zrChgwjx59JQosFEG1DsaAgHfpEl/N3YPJh68N7fwN41Cj
zsk39v6iZdfuet/sP7oiP5/gLmA/CIPNhdIYxaojbLjFPkftVjVPn49RqwqzJJPR
N8BOyb94yhQ7KO4F3IcLrt44545t4trgrterthyerth54gwegwt55T/y/d345677
kjjjyjyerherth56iRjHnJt0Zcm23O2Q3RphpU+1SO3XixsXpOVOYP6rJIXW9bMZ
A1gTTlpi7A==
-----END CERTIFICATE-----
incollarlo in un file che sarà chiamato ca.crt
e caricarlo tramite FTP nella cartella /config/protonvpn
..
Chiave Statica TLS
Similmente al certificato CA, cercare i tag <tls-auth>
</tls-auth>
e copiare il contenuto:
-----BEGIN OpenVPN Static key V1-----
3434f34f34f3f34ffbbd03e53b187727
423cea742242106cb2916a8a4c829756
3d22c7e5cef430b1103c6f66eb1fc5b3
75a672f158e2e2e936c3faa48b035a6d
e17bewe4r43443f410b868d53d03521d
8ba115059da777a60cbfd7b2c9c57472
78a15b8f6e68a3ef7fd583ec9f398c8b
d4735dab40cbd1e3c62a822e97489186
c30a032f34f3f3f3f323rrrg6th56554
f33f3f3g3465gh35bwc3d2777a3395e1
0c0b6080f56309192ab5aacd4b45f55d
a61fc77af39bd81a19218a79762c3386
2df55785075f37d8c71dc8a42097ee43
344739a0dd48d03025b0450cf1fb5e8c
aeb834r3f34f34f3f3f343c4dcb40ee3
16672ea16c012664f8a9f11255518deb
-----END OpenVPN Static key V1-----
in un file con nome di tls.key
e caricarlo tramite FTP nella cartella /config/protonvpn
.
Creazione Certificato Host e Chiave Privata
Dalla cartella /config/protonvpn
nella shell di VyOS eseguire i seguenti comandi per generare un certificato auto firmato e la sua chiave:
openssl genrsa -out host.key 2048
openssl req -new -key host.key -out csr.crt
openssl req -x509 -days 365 -key host.key -in csr.crt -out cert.crt
chmod 700 host.key
Interfaccia VPN
Nella sezione download di ProtonVPN vengono prodotte varie configurazioni in base alla piattaforma e protocollo scelto. Nel punto 1, la piattaforma da scegliere, cliccare su GNU/Linux; nel punto 2, il protocollo da utilizzare, selezionare udp e, nel punto 3, la tipologia di server è free.
Presupponendo di aver scelto come server a cui collegarci quello olandese #1, eseguire questi comandi in modalità configurazione nella shell di VyOS per impostare l’interfaccia vtun :
set interfaces openvpn vtun0 description 'ProtonVPN Server NL 1'
set interfaces openvpn vtun0 encryption cipher 'aes256'
set interfaces openvpn vtun0 hash sha512
set interfaces openvpn vtun0 mode 'client'
set interfaces openvpn vtun0 openvpn-option '--auth-user-pass /config/protonvpn/credenziali.txt'
set interfaces openvpn vtun0 openvpn-option '--verb 3'
set interfaces openvpn vtun0 openvpn-option '--tun-mtu 1500'
set interfaces openvpn vtun0 openvpn-option '--tun-mtu-extra 32'
set interfaces openvpn vtun0 openvpn-option '--mssfix 1450'
set interfaces openvpn vtun0 openvpn-option '--persist-key'
set interfaces openvpn vtun0 openvpn-option '--persist-tun'
set interfaces openvpn vtun0 openvpn-option '--reneg-sec 0'
set interfaces openvpn vtun0 openvpn-option '--remote-cert-tls server'
set interfaces openvpn vtun0 openvpn-option '--nobind'
set interfaces openvpn vtun0 openvpn-option '--comp-lzo'
set interfaces openvpn vtun0 openvpn-option '--route-method exe'
set interfaces openvpn vtun0 openvpn-option '--key-direction 1'
set interfaces openvpn vtun0 openvpn-option '--route-delay 2'
set interfaces openvpn vtun0 openvpn-option '--fast-io'
set interfaces openvpn vtun0 openvpn-option '--route-nopull'
set interfaces openvpn vtun0 persistent-tunnel
set interfaces openvpn vtun0 protocol 'udp'
set interfaces openvpn vtun0 remote-host 'nl-free-01.protonvpn.com'
set interfaces openvpn vtun0 remote-port '1194'
set interfaces openvpn vtun0 tls ca-cert-file '/config/protonvpn/ca.crt'
set interfaces openvpn vtun0 tls auth-file '/config/protonvpn/tls.key'
set interfaces openvpn vtun0 tls cert-file '/config/protonvpn/cert.crt'
set interfaces openvpn vtun0 tls key-file '/config/protonvpn/host.key'
Regole Firewall
Creare le seguenti regole firewall per l’interfaccia appena impostata:
set firewall name vtun0-IN default-action 'drop'
set firewall name vtun0-IN rule 1 action 'accept'
set firewall name vtun0-IN rule 1 description 'Allow established and related'
set firewall name vtun0-IN rule 1 state established 'enable'
set firewall name vtun0-IN rule 1 state related 'enable'
set firewall name vtun0-IN rule 2 action 'drop'
set firewall name vtun0-IN rule 2 description 'Drop invalid'
set firewall name vtun0-IN rule 2 state invalid 'enable'
set firewall name vtun0-LOCAL default-action 'drop'
set firewall name vtun0-LOCAL rule 1 action 'accept'
set firewall name vtun0-LOCAL rule 1 description 'Allow established and related'
set firewall name vtun0-LOCAL rule 1 state established 'enable'
set firewall name vtun0-LOCAL rule 1 state related 'enable'
set firewall name vtun0-LOCAL rule 2 action 'drop'
set firewall name vtun0-LOCAL rule 2 description 'Drop invalid'
set firewall name vtun0-LOCAL rule 2 state invalid 'enable'
Associare queste nuove regole all’interfaccia vtun0
di openvpn:
set interfaces openvpn vtun0 firewall in name 'vtun0-IN'
set interfaces openvpn vtun0 firewall local name 'vtun0-LOCAL'
NAT
Creare una regola NAT per il traffico in uscita dalla rete locale (192.168.1.0/24 in questo esempio)
set nat source rule 200 outbound-interface 'vtun0'
set nat source rule 200 source address '192.168.1.0/24'
set nat source rule 200 translation address 'masquerade'
Testare la Connessione
Attraverso il comando commit
si salvano tutte le regole appena impostate e la connessione a ProtonVPN dovrebbe inizializzarsi.
Attraverso il comando run show interfaces
si può controllare se l’interfaccia vtun0
ha acquisito un IP di tipo 10.x dal server VPN.
Si può eseguire anche il comando run show log openvpn
per vedere i dettagli della connessione. Se l’interfaccia rimane offline, quel comando mostrerà i motivi del malfunzionamento.
Routing
Le modalità di inoltro del traffico locale nel tunnel VPN sono molteplici. L’esempio che segue invia tutto il traffico passante nell’interfaccia eth1
del device con IP 192.168.1.101
nel tunnel VPN.
set policy route vpn-tunnel rule 10 destination address '0.0.0.0/0'
set policy route vpn-tunnel rule 10 set table '1'
set policy route vpn-tunnel rule 10 source address '192.168.1.101/32'
set protocols static table 1 interface-route 0.0.0.0/0 next-hop-interface 'vtun0'
set interfaces ethernet eth1 policy route 'vpn-tunnel'
Se si vogliono aggiungere altri IPs al tunnel si può creare un gruppo di indirizzi:
set firewall network-group LAN-Tunneled description 'Devices nel tunnel VPN'
set firewall network-group LAN-Tunneled address '192.168.1.102/32'
set firewall network-group LAN-Tunneled address '192.168.1.110/32'
set firewall network-group LAN-Tunneled address '192.168.1.132/32'
e inserirli nella route vpn-tunnel
.
Blocco Internet Locale
Se si vuole essere sicuri che i devices utilizzino solamente il tunnel VPN e nel caso in cui esso sia down non utilizzino la linea internet diretta bisogna creare una regola firewall aggiuntiva:
set firewall name Block_WAN description "Blocca navigazione se VPN è offline"
set firewall name Block_WAN rule 9 action accept
set firewall name Block_WAN rule 9 state established enable
set firewall name Block_WAN rule 9 state related enable
set firewall name Block_WAN rule 99 action reject
set firewall name Block_WAN rule 99 source address 192.168.1.101/32
e applicare questa regola all’interfaccia WAN (in questo caso eth0):
set interface ethernet eth0 firewall out name Block_WAN
In tale modo il traffico in uscita dall’interfaccia eth0
per l’indirizzo IP 192.168.1.101
verrà bloccato e quel device potrà navigare solo se vtun0
sarà online, ovvero la connessione VPN con ProtonVPN sarà funzionante.
Conclusioni
I passaggi appena illustrati sono solamente quelli necessari per far funzionare il tunnel VPN. Ci sono infinite modifiche che si possono apportare e migliorare la configurazione in uso.
Per esempio si potrebbe utilizzare il tunnel per tutto il range della subnet 192.168.0.0/24
cosicché in automatico ogni devices connesso venga reindirizzato alla VPN.
Altra miglioria potrebbe essere quella di inserire nella configurazione iniziale l’indirizzo IP o IPs del server a cui bisogna connettersi e non il DNS nl-free-01.protonvpn.com
in modo da evitare di lasciare traccia in qualche server DNS esterno della ricerca. il sito MXToolbox è utile perché restituisce tutti gli IPs associati a un DNS.
Con la configurazione proposta in questa guida c’è il rischio di DNS Leak.
Chi utilizza spesso i servizi VPN forniti dai diversi provider avrà già incontrato il termine DNS leak. La traduzione italiana è francamente un po’ approssimativa - “perdite DNS” - ma con questo termine si fa riferimento a una problematica relativa ai server DNS in uso (responsabili della risoluzione dei nomi a dominio; vedere ad esempio DNS Google, ecco come funzionano e perché sono utili) che potrebbero fornire a terzi indicazioni utili sulla posizione geografica e sull’identità dell’utente.
Questo capita quando la richiesta di DNS non passa attraverso il tunnel VPN ma viene instradata in modo diretto rischiando di perdere la privacy che si ricerca utilizzando una VPN. Il server DNS di ProtonVPN è all’indirizzo 10.1.0.1
.