VPN: differenze tra le versioni
Nessun oggetto della modifica |
|||
| (27 versioni intermedie di 2 utenti non mostrate) | |||
| Riga 5: | Riga 5: | ||
== Informazioni generali == | == Informazioni generali == | ||
La VPN aziendale è stata realizzata con [https://openvpn.net OpenVPN], un software open source cross-platform. Il server è implementato da | La VPN aziendale è stata realizzata con [https://openvpn.net OpenVPN], un software open source cross-platform. Il server è implementato da un Raspberry aziendale basato su Debian. | ||
=== Installare e configurare una rete VPN === | === Installare e configurare una rete VPN === | ||
| Riga 13: | Riga 13: | ||
Installiamo il programma | Installiamo il programma | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
sudo apt | sudo apt install openvpn easy-rsa | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Copiamo la cartella di Easy-RSA nei file di conf di openvpn per essere sicuri che un aggiornamento non vada | Copiamo la cartella di Easy-RSA nei file di conf di openvpn per essere sicuri che un aggiornamento non vada | ||
| Riga 27: | Riga 27: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Trovare, scommentare e sistemare questi valori | Trovare, scommentare e sistemare questi valori <br/> | ||
<code>EASYRSA_CERT_EXPIRE</code> indica la data di scadenza dei certificati | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
set_var EASYRSA_REQ_COUNTRY "IT" | set_var EASYRSA_REQ_COUNTRY "IT" | ||
| Riga 35: | Riga 36: | ||
set_var EASYRSA_REQ_EMAIL "info@designbest.com" | set_var EASYRSA_REQ_EMAIL "info@designbest.com" | ||
set_var EASYRSA_REQ_OU "Team MESS" | set_var EASYRSA_REQ_OU "Team MESS" | ||
set_var EASYRSA_CERT_EXPIRE 3650 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Inizializzare la cartella '''pki''' | Inizializzare la cartella '''pki''' | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
sudo ./easyrsa init-pki | sudo ./easyrsa init-pki | ||
| Riga 60: | Riga 62: | ||
una sicurezza in più che genera <code>/etc/openvpn/easy-rsa/pki/ta.key</code> | una sicurezza in più che genera <code>/etc/openvpn/easy-rsa/pki/ta.key</code> | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
sudo openvpn --genkey | sudo openvpn --genkey secret /etc/openvpn/easy-rsa/pki/ta.key | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Riga 121: | Riga 123: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Abilitare OpenVPN al system boot | |||
<syntaxhighlight lang="bash"> | |||
sudo systemctl enable --now openvpn-server@server | |||
sudo systemctl restart openvpn | |||
ip a | |||
</syntaxhighlight> | |||
==== Port Forwarding ==== | |||
Abilitarlo | Abilitarlo | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Riga 132: | Riga 141: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===== UFW ===== | |||
Aggiungere al Firewall la regola per la porta | Aggiungere al Firewall la regola per la porta | ||
<syntaxhighlight> | <syntaxhighlight> | ||
sudo ufw allow 1317/udp | sudo ufw allow 1317/udp | ||
sudo ufw allow OpenSSH | sudo ufw allow OpenSSH | ||
sudo ufw allow Samba | |||
sudo ufw enable | |||
</syntaxhighlight> | |||
Verificare lo stato di UFW con | |||
<syntaxhighlight> | |||
sudo ufw status | |||
</syntaxhighlight> | </syntaxhighlight> | ||
| Riga 163: | Riga 180: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===== IPTABLES (solo se non si usa UFW) ===== | |||
Prima dell'esistenza di '''UFW''' si usava sto casino descritto sotto (non utilizzare se funziona UFW)<br/> | |||
Tutto questo va fatto '''da root'' | |||
<syntaxhighlight lang="bash"> | |||
sudo -s | |||
iptables -A FORWARD -i enp3s0 -o tap0 -m state --state ESTABLISHED,RELATED -j ACCEPT | |||
iptables -A FORWARD -s 10.13.19.0/24 -o enp3s0 -j ACCEPT | |||
iptables -t nat -A POSTROUTING -s 10.13.19.0/24 -o enp3s0 -j MASQUERADE | |||
</syntaxhighlight> | |||
Verificare con | |||
<syntaxhighlight lang="bash"> | |||
iptables -L | |||
</syntaxhighlight> | |||
E se tutto va bene salvare con | |||
<syntaxhighlight lang="bash"> | |||
iptables-save > /etc/iptables.up.rules | |||
</syntaxhighlight> | |||
Poi è necessario istruire la macchina per avere queste regole nei riavvi successivi | |||
<syntaxhighlight lang="bash"> | |||
nano /etc/network/if-pre-up.d/iptables | |||
</syntaxhighlight> | |||
e aggiungerci | |||
<syntaxhighlight lang="bash"> | |||
#!/bin/sh | |||
/sbin/iptables-restore < /etc/iptables.up.rules | |||
</syntaxhighlight> | |||
infine bisogna dargli i permessi di esecuzione (e uscire da root) | |||
<syntaxhighlight lang="bash"> | |||
chmod +x /etc/network/if-pre-up.d/iptables | |||
exit | |||
</syntaxhighlight> | |||
=== Creazione di un client === | === Creazione di un client === | ||
Il file di configurazione (<code>.ovpn</code>) dev'essere simile a questo | |||
<syntaxhighlight> | <syntaxhighlight> | ||
client | client | ||
dev tap | dev tap | ||
proto udp | proto udp | ||
remote | remote 2.35.4.82 1316 | ||
resolv-retry infinite | resolv-retry infinite | ||
nobind | nobind | ||
| Riga 188: | Riga 242: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Importante avere il file ta.key e il valore '''1''' per i client ('''0''' solo sul server) | Importante avere il file ta.key e il valore '''1''' per i client ('''0''' solo sul server) | ||
<br/><br/> | |||
Abbiamo creato uno '''script automatico''' per generare il client VPN. | |||
<syntaxhighlight lang="bash"> | |||
<syntaxhighlight> | |||
cd /opt/shared/bash | cd /opt/shared/bash | ||
sudo ./vpncreateuser | sudo ./vpncreateuser | ||
</syntaxhighlight> | </syntaxhighlight> | ||
alla domanda rispondere utilizzando <code>nomecognome</code> dell'utente tutto minuscolo senza spazi né caratteri speciali. | |||
Se tutto è andato bene ci ritroviamo la cartella di configurazione VPN pronta | Se tutto è andato bene ci ritroviamo la cartella di configurazione VPN pronta nella <code>/opt/shared/VPN</code>.<br/> | ||
p.s. è implicito che tutti gli utenti samba siano nel gruppo www-data (altrimenti <code>sudo adduser pincopallino www-data</code>).<br/> | |||
< | |||
sudo | |||
</ | |||
Ora è pronta. | Ora è pronta. | ||
[[Category:IT]] | [[Category:IT]] | ||
Versione attuale delle 11:16, 9 dic 2024
Una Virtual Private Network (VPN) consente di redirigere in tutto o in parte il proprio traffico internet verso un server VPN, permettendo così l'accesso a reti locali o a servizi remoti protetti da firewall con whitelist sull'indirizzo IP.
Per maggiori informazioni generali, si veda Wikipedia.
Informazioni generali
[modifica]La VPN aziendale è stata realizzata con OpenVPN, un software open source cross-platform. Il server è implementato da un Raspberry aziendale basato su Debian.
Installare e configurare una rete VPN
[modifica]Per installare una rete VPN, è stata seguita principalmente questa guida OpenVPN.
Installiamo il programma
sudo apt install openvpn easy-rsa
Copiamo la cartella di Easy-RSA nei file di conf di openvpn per essere sicuri che un aggiornamento non vada ad intaccare le configurazioni
sudo cp -r /usr/share/easy-rsa /etc/openvpn/
Settiamo i valori default da includere nel certificato
cd /etc/openvpn/easy-rsa
sudo cp vars.example vars
sudo nano vars
Trovare, scommentare e sistemare questi valori
EASYRSA_CERT_EXPIRE indica la data di scadenza dei certificati
set_var EASYRSA_REQ_COUNTRY "IT"
set_var EASYRSA_REQ_PROVINCE "TO"
set_var EASYRSA_REQ_CITY "Torino"
set_var EASYRSA_REQ_ORG "Webmobili S.R.L."
set_var EASYRSA_REQ_EMAIL "info@designbest.com"
set_var EASYRSA_REQ_OU "Team MESS"
set_var EASYRSA_CERT_EXPIRE 3650
Inizializzare la cartella pki
sudo ./easyrsa init-pki
Creiamo i certificati principali /etc/openvpn/easy-rsa/pki/ca.crt e /etc/openvpn/easy-rsa/pki/private/ca.key
sudo ./easyrsa build-ca nopass
mettendo come Common Name: Webmobili S.R.L.
Generiamo il Diffie Hellman per l'handshaking della chiave creando /etc/openvpn/easy-rsa/pki/dh.pem
sudo ./easyrsa gen-dh
Per generare certificato e chiave privata del Server OpenVPN server /etc/openvpn/easy-rsa/pki/issued/server.crt and /etc/openvpn/easy-rsa/pki/private/server.key
sudo ./easyrsa build-server-full server nopass
Generate Hash-based Message Authentication Code (HMAC) key,
una sicurezza in più che genera /etc/openvpn/easy-rsa/pki/ta.key
sudo openvpn --genkey secret /etc/openvpn/easy-rsa/pki/ta.key
Copiamo tutti i certificati appena generati nella cartella /etc/openvpn/server/
sudo cp -rp /etc/openvpn/easy-rsa/pki/{ca.crt,dh.pem,ta.key,crl.pem,issued,private} /etc/openvpn/server/
Configuriamo OpenVPN Server
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server/
cd /etc/openvpn/server/
sudo gunzip server.conf.gz
Ora editiamo server.conf
con una configurazione simile a questa:
port 1317
proto udp
dev tun
ca ca.crt
cert issued/server.crt
key private/server.key # This file should be kept secret
dh dh.pem
topology subnet
server 10.13.19.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
;push "redirect-gateway def1 bypass-dhcp"
push "route 10.13.17.0 255.255.255.0"
push "route 10.13.19.0 255.255.255.0"
push "route 62.173.163.218 255.255.255.255"
push "route 62.173.163.235 255.255.255.255"
push "route 62.173.163.234 255.255.255.255"
push "route 62.173.163.236 255.255.255.255"
push "route 62.173.163.237 255.255.255.255"
push "route 93.62.58.208 255.255.255.255"
push "route 185.81.1.164 255.255.255.255"
push "route 40.68.37.158 255.255.255.255"
push "route 52.236.184.163 255.255.255.255"
push "route 191.237.232.75 255.255.255.255"
push "route 104.40.168.105 255.255.255.255"
push "dhcp-option DNS 10.13.17.20"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
client-to-client
keepalive 10 120
tls-auth ta.key 0 # Su server 0, sui client 1
cipher AES-256-CBC
comp-lzo
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1
auth SHA512Abilitare OpenVPN al system boot
sudo systemctl enable --now openvpn-server@server
sudo systemctl restart openvpn
ip a
Port Forwarding
[modifica]Abilitarlo
sudo nano /etc/sysctl.conf
cercando e abilitando la riga con
net.ipv4.ip_forward = 1
sudo sysctl -p
UFW
[modifica]Aggiungere al Firewall la regola per la porta
sudo ufw allow 1317/udp
sudo ufw allow OpenSSH
sudo ufw allow Samba
sudo ufw enableVerificare lo stato di UFW con
sudo ufw statusCapire il nome della scheda di rete col comando
ip route get 8.8.8.8
e poi modificare
sudo nano /etc/ufw/before.rules
aggiungendo le seguenti righe appena prima della sezione *filter
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.13.19.0/24 -o enp3s0 -j MASQUERADE
COMMIT
Permettere l'inoltro dal file del firewall
sudo nano /etc/default/ufw
andando a cercare la riga DEFAULT_FORWARD_POLICY mettendo il valore qua sotto
DEFAULT_FORWARD_POLICY="ACCEPT"
IPTABLES (solo se non si usa UFW)
[modifica]Prima dell'esistenza di UFW si usava sto casino descritto sotto (non utilizzare se funziona UFW)
Tutto questo va fatto 'da root
sudo -s
iptables -A FORWARD -i enp3s0 -o tap0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -s 10.13.19.0/24 -o enp3s0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.13.19.0/24 -o enp3s0 -j MASQUERADE
Verificare con
iptables -L
E se tutto va bene salvare con
iptables-save > /etc/iptables.up.rules
Poi è necessario istruire la macchina per avere queste regole nei riavvi successivi
nano /etc/network/if-pre-up.d/iptables
e aggiungerci
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.up.rules
infine bisogna dargli i permessi di esecuzione (e uscire da root)
chmod +x /etc/network/if-pre-up.d/iptables
exit
Creazione di un client
[modifica]Il file di configurazione (.ovpn) dev'essere simile a questo
client
dev tap
proto udp
remote 2.35.4.82 1316
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert christian.crt
tls-auth ta.key 1
key christian.key
cipher AES-256-CBC
auth SHA512
key-direction 1
comp-lzo
verb 3
route-delayImportante avere il file ta.key e il valore 1 per i client (0 solo sul server)
Abbiamo creato uno script automatico per generare il client VPN.
cd /opt/shared/bash
sudo ./vpncreateuser
alla domanda rispondere utilizzando nomecognome dell'utente tutto minuscolo senza spazi né caratteri speciali.
Se tutto è andato bene ci ritroviamo la cartella di configurazione VPN pronta nella /opt/shared/VPN.
p.s. è implicito che tutti gli utenti samba siano nel gruppo www-data (altrimenti sudo adduser pincopallino www-data).
Ora è pronta.