VPN: differenze tra le versioni

Da Webmobili Wiki.
Nessun oggetto della modifica
 
(32 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 una macchina virtuale ([[Macchina Services|services]]) basata su Debian; sono disponibili client per Windows, Linux e Android.  
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-get install openvpn easy-rsa
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''' (non so se da root o meno)
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 --secret /etc/openvpn/easy-rsa/pki/ta.key
sudo openvpn --genkey secret /etc/openvpn/easy-rsa/pki/ta.key
</syntaxhighlight>
</syntaxhighlight>


Riga 109: Riga 111:
client-to-client
client-to-client
keepalive 10 120
keepalive 10 120
tls-auth ta.key 0 # This file is secret
tls-auth ta.key 0 # Su server 0, sui client 1
cipher AES-256-CBC
cipher AES-256-CBC
comp-lzo
comp-lzo
Riga 121: Riga 123:
</syntaxhighlight>
</syntaxhighlight>


'''Port Forwarding'''<br/>
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>
ufw allow 1317/udp
sudo ufw allow 1317/udp
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 153: Riga 171:
</syntaxhighlight>
</syntaxhighlight>


== Webmobili Torino ==
Permettere l'inoltro dal file del firewall
<syntaxhighlight lang="bash">
sudo nano /etc/default/ufw
</syntaxhighlight>
andando a cercare la riga <code>DEFAULT_FORWARD_POLICY</code> mettendo il valore qua sotto
<syntaxhighlight lang="bash">
DEFAULT_FORWARD_POLICY="ACCEPT"
</syntaxhighlight>


{| class="wikitable"
===== IPTABLES (solo se non si usa UFW) =====
|+VPN Webmobili Torino
Prima dell'esistenza di '''UFW''' si usava sto casino descritto sotto (non utilizzare se funziona UFW)<br/>
|-
!scope="row"|Indirizzo IP del server
|89.96.52.243
|-
!scope="row"|Porta
|1318
|-
!scope="row"|Indirizzo locale del server
|10.13.18.1
|-
!scope="row"|Indirizzo LAN del server
|10.13.17.21
|}


Non è attivata la redirezione completa dell'intero traffico del client attraverso la VPN: solo il traffico diretto verso alcuni indirizzi IP viene inviato sulla connessione VPN. Per aggiungere o rimuovere indirizzi da questa lista, bisogna modificare il file <code>/etc/openvpn/openvpn.conf</code>.
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>


== Creazione di un nuovo client ==
Verificare con
Si tratta di creare un client certificato.<br/>
<syntaxhighlight lang="bash">
Dalla macchina '''Jarvis'''
iptables -L
<syntaxhighlight>
</syntaxhighlight>
cd /opt/shared/bash
sudo ./vpncreateuser


# 1- Scrivi il tuo nome: digitare nomecognome in minuscolo
E se tutto va bene salvare con
<syntaxhighlight lang="bash">
iptables-save > /etc/iptables.up.rules
</syntaxhighlight>


# 2- Enter PEM pass phrase scrivere la password e confermare
Poi è necessario istruire la macchina per avere queste regole nei riavvi successivi


# 3- Compilare come segue
<syntaxhighlight lang="bash">
# !!molto importante!! il campo Common Name deve essere esattamente Webmobili S.R.L. per matchare il server
nano /etc/network/if-pre-up.d/iptables
Country Name: IT
</syntaxhighlight>
State or Province Name: TO
Locality Name: Torino
Organization Name: Webmobili S.R.L.
Organizational Unit Name: Team MESS
Common Name: Webmobili S.R.L.
Name: NomeCognome
Email Address: email@dominio.est


# 4- invio su challenge password e optional company name
e aggiungerci
<syntaxhighlight lang="bash">
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.up.rules
</syntaxhighlight>


# 5- Digitare y alle 2 domande successive (importante, invio senza digitare equivale a n )
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>
</syntaxhighlight>


Se tutto è andato bene ci ritroviamo la cartella di configurazione VPN pronta proprio nella Working Directory.<br/>
=== Creazione di un client ===
Assegniamo i permessi
Il file di configurazione (<code>.ovpn</code>) dev'essere simile a questo
<syntaxhighlight>
<syntaxhighlight>
sudo chown www-data:www-data Webmobili-nomecognome/ -R
client
sudo chmod 775 Webmobili-nomecognome/ -R
dev tap
mv Webmobili-nomecognome /opt/shared/VPN
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-delay
</syntaxhighlight>
</syntaxhighlight>
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">
cd /opt/shared/bash
sudo ./vpncreateuser
</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 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/>
Ora è pronta.
Ora è pronta.
=== Cambiamento di Easy-RSA ===
Hanno aggiornato Easy-RSA, non esiste più la cartella <code>keys</code>, sostituita da <code>pki</code> e le operazioni per generare un client VPN sono cambiate.<br/>
https://www.howtoforge.com/tutorial/how-to-install-and-configure-openvpn-server-on-debian-10/<br/>
Questo articoletto va migliorato


[[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 SHA512

Abilitare 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

Aggiungere al Firewall la regola per la porta

sudo ufw allow 1317/udp
sudo ufw allow OpenSSH
sudo ufw allow Samba
sudo ufw enable

Verificare lo stato di UFW con

sudo ufw status

Capire 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-delay

Importante 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.