OpenVpn - Server: differenze tra le versioni
(Creata pagina con "== Installare OpenVpn == # apt-get install openssl # apt-get install openvpn Se abbiamo bisogno del bridging: # apt-get install bridge-utils '''Creare Certificati''...") |
Nessun oggetto della modifica |
||
(Una versione intermedia di uno stesso utente non è mostrata) | |||
Riga 145: | Riga 145: | ||
se vi trovate per esempio a casa, ed il vostro server e' sotto il vs router ADSL, dovrete inserire nel router la | se vi trovate per esempio a casa, ed il vostro server e' sotto il vs router ADSL, dovrete inserire nel router la | ||
rotta per la sottorete della vpn (10.0.0.0) senno' non potrete comunicare (manca il ritorno) | rotta per la sottorete della vpn (10.0.0.0) senno' non potrete comunicare (manca il ritorno) | ||
== File per il Firewall == | |||
Detto cio', va poi creato uno script che carichi le regole per iptables tipo: | |||
creiamo il file | |||
#nano /root/00Firew-Rout-VPN.sh | |||
e al suo interno mettiamo: | |||
#!/bin/sh | |||
PATH=/usr/sbin:/sbin:/bin:/usr/bin | |||
# | |||
# delete all existing rules. | |||
# | |||
iptables -F | |||
iptables -t nat -F | |||
iptables -t mangle -F | |||
iptables -X | |||
# Always accept loopback traffic | |||
iptables -A INPUT -i lo -j ACCEPT | |||
# Allow established connections, and those not coming from the outside | |||
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT | |||
iptables -A INPUT -m state --state NEW ! -i tun0 -j ACCEPT | |||
iptables -A FORWARD -i tun0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT | |||
# Allow outgoing connections from the LAN side. | |||
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT | |||
# Masquerade. | |||
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE | |||
# Don't forward from the outside to the inside. | |||
iptables -A FORWARD -i eth0 -o tun0 -j REJECT | |||
# Enable routing. | |||
echo 1 > /proc/sys/net/ipv4/ip_forward del tipo: | |||
(ovviamente i nomi delle interfacce vanno aggiornati in base al proprio sistema) | |||
Questo file va caricato quando viene caricata la configurazione di rete | |||
un buon posto dove richiamarlo e' negli script di inizializzazione della scheda: | |||
Editare il file | |||
#nano /etc/network/if-up.d/openvpn | |||
ed inserire la chiamata allo script. Una volta finito avremo qlc del tipo: | |||
#!/bin/sh | |||
OPENVPN=/etc/init.d/openvpn | |||
if [ ! -x $OPENVPN ]; then | |||
exit 0 | |||
fi | |||
if [ -n "$IF_OPENVPN" ]; then | |||
for vpn in $IF_OPENVPN; do | |||
$OPENVPN start $vpn | |||
done | |||
fi | |||
/root/00Firew-Rout-VPN.sh |
Versione attuale delle 17:40, 9 mar 2018
Installare OpenVpn
# apt-get install openssl # apt-get install openvpn Se abbiamo bisogno del bridging: # apt-get install bridge-utils
Creare Certificati
# cp -R /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn # cd /etc/openvpn/easy-rsa/
# nano vars export KEY_COUNTRY="IT" export KEY_PROVINCE="PI" export KEY_CITY="Pisa" export KEY_ORG="Organizzazione" export KEY_EMAIL="email@email.it"
# source ./vars
cancelliamo vecchi certificati:
# ./clean-all
Creiamo il nuovo certificate authority (ca):
# ./build-ca
Generiamo certificato per il server:
# ./build-key-server <nome completo del server>
....e la ta.key
# openvpn --genkey --secret ta.key
Generiamo i parametri Diffie-Hellman per il server:
# ./build-dh
Generiamo il certificato per il client (ripetere per ogni client che dovrà collegarsi alla VPN):
# ./build-key <nome_client>
Per comodita' , creare cartella dove mettere i certificati/chiavi del server, per esempio /etc/openvpn/keys/LocalSrv e spostiamo i file generati nella directory creata:
# cd /etc/openvpn/easy-rsa/keys # cp ca.crt /etc/openvpn/keys/LocalSrv # cp ca.key /etc/openvpn/keys/LocalSrv # cp ta.key /etc/openvpn/keys/LocalSrv # cp <server>.crt /etc/openvpn/keys/LocalSrv # cp <server.key> /etc/openvpn/keys/LocalSrv # cp dh1024.pem /etc/openvpn/keys/LocalSrv
Creiamo file di configurazione per il server:
#nano /etc/openvpn/openvpn.conf
e al suo interno mettiamo
port 61000 proto udp dev tun #Key and cert ca keys/LocalSrv/ca.crt cert keys/LocalSrv/server.crt key keys/LocalSrv/server.key dh keys/LocalSrv/dh2048.pem #Se vogliamo che venga fatto il controllo delle revoche dei certificati crl-verify keys/LocalSrv/crl.pem #Qui diamo la direzione della chiave #mettendo ta.key 0 sul server, #implica che sul client dobbiamo mettere ta.key 1 tls-auth keys/LocalSrv/ta.key 0 ifconfig-pool-persist ipp.txt # la prox riga dice che dentro la cartella StaticIp ci saranno # i files di testo (uno per client) con gli indirizzi da assegnare # ed eventuali rotte. Serve per avere indirizzi univoci per i client client-config-dir /etc/openvpn/StaticIP # Ora specifico la sottorete da usare nella vpn server 10.0.0.0 255.255.255.0 # mentre qui, metto a disposizione dei client la sottorete interna dove # e' collegato il server vpn ed eventuali dns push "route 192.168.0.0 255.255.255.0" push "explicit-exit-notify 3" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" # la prox direttiva permette la comunicazione diretta tra i # vari client connessi. Bisogna pero' abilitare il port forwarding client-to-client #duplicate-cn keepalive 10 120 comp-lzo adaptive user nobody group nogroup persist-key persist-tun cipher AES-256-CBC status openvpn-status.log verb 3 #up "/etc/openvpn/script/vpnup_tun.sh eth0" #down "/etc/openvpn/script/vpndown_tun.sh eth0" script-security 3
Abilitare il port forwarding per far comunicare i clients:
echo 1 > /proc/sys/net/ipv4/ip_forward
Dare indirizzi specifici ai client
per dare ip statici ai clients, creare un file di testo per ogni client con il nome dato al momento della generazione del certificato e al suo interno specificare l'indirizzo ed eventuali altre rotte da passare ai client. Per esempio, Creare la cartella /etc/openvpn/StaticIP
# mkdir /etc/openvpn/StaticIP # cd /etc/openvpn/StaticIP
ed al suo interno creare file di testo
# nano <nome_client> <---- questo e' il nome della macchina nonche' della chiave generata
all'interno scrivere per esempio:
ifconfig-push 10.0.0.4 255.255.255.0 push "route 192.168.0.0 255.255.255.0"
In questo caso, al client verra' assegnato l'indirizzo 10.0.0.4 nella vpn e gli viene anche fornita la rotta per la sottorete 192.168.0.0.
A questo punto riavviare openvpn per abilitare le modifiche fatte.
Revoca dei certificati
Nel caso si debba revocare un certificato per negare l'accesso alla VPN e' necessario che il file di configurazione di openvpn contenga la direttiva
crl-verify crl.pem
A questo punto dobbiamo generare/aggiornare il file crl.pem che andra' poi copiato in un luogo accessibile ad openvpn corrispondente a quello specificato nel file di configurazione. Per far cio' dobbiamo posizionarci nella directory dove si creano i certificati (v. sopra) ed eseguire i comandi:
./vars source ./vars ./revoke-full <nomecertclient>
fatto cio', nella directory keys/ troveremo il file crl.pem da dare in pasto ad openvpn. Se si copia al volo il file nella dir dove andra' a leggere openvpn, questo verrra' letto alla prossima connessione di un client (se era gia' presente la direttiva crl-verify nel file di configurazione) altrimenti andra' riavviato il servizio
NOTA
se vi trovate per esempio a casa, ed il vostro server e' sotto il vs router ADSL, dovrete inserire nel router la rotta per la sottorete della vpn (10.0.0.0) senno' non potrete comunicare (manca il ritorno)
File per il Firewall
Detto cio', va poi creato uno script che carichi le regole per iptables tipo: creiamo il file
#nano /root/00Firew-Rout-VPN.sh
e al suo interno mettiamo:
#!/bin/sh PATH=/usr/sbin:/sbin:/bin:/usr/bin # # delete all existing rules. # iptables -F iptables -t nat -F iptables -t mangle -F iptables -X # Always accept loopback traffic iptables -A INPUT -i lo -j ACCEPT # Allow established connections, and those not coming from the outside iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -m state --state NEW ! -i tun0 -j ACCEPT iptables -A FORWARD -i tun0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT # Allow outgoing connections from the LAN side. iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT # Masquerade. iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE # Don't forward from the outside to the inside. iptables -A FORWARD -i eth0 -o tun0 -j REJECT # Enable routing. echo 1 > /proc/sys/net/ipv4/ip_forward del tipo:
(ovviamente i nomi delle interfacce vanno aggiornati in base al proprio sistema)
Questo file va caricato quando viene caricata la configurazione di rete
un buon posto dove richiamarlo e' negli script di inizializzazione della scheda:
Editare il file
#nano /etc/network/if-up.d/openvpn
ed inserire la chiamata allo script. Una volta finito avremo qlc del tipo:
#!/bin/sh OPENVPN=/etc/init.d/openvpn if [ ! -x $OPENVPN ]; then exit 0 fi if [ -n "$IF_OPENVPN" ]; then for vpn in $IF_OPENVPN; do $OPENVPN start $vpn done fi /root/00Firew-Rout-VPN.sh