Urganizazione di u travagliu remoto di una urganizazione SMB in OpenVPN
Formulazione di u prublema
L'articulu descrive l'urganizazione di l'accessu remotu per l'impiegati nantu à i prudutti open source è pò esse usatu sia per custruisce un sistema completamente autònumu, è serà utile per espansione quandu ci hè una mancanza di licenze in u sistema cummerciale esistente o u so rendimentu hè insufficiente.
U scopu di l'articulu hè di implementà un sistema cumpletu per furnisce l'accessu remotu à una urganizazione, chì hè pocu più di "installà OpenVPN in 10 minuti".
In u risultatu, averemu un sistema in quale i certificati è (opcionalmente) l'Active Directory corporativu seranu utilizati per autentificà l'utilizatori. Chì. averemu un sistema cù dui fattori di verificazione - ciò chì aghju (certificatu) è ciò chì cunnoscu (password).
Un signu chì un utilizatore hè permessu di cunnette hè a so appartenenza à u gruppu myVPNUsr. L'autorità di certificazione serà aduprata offline.
U costu di l'implementazione di a suluzione hè solu risorsi di hardware petite è 1 ora di travagliu di l'amministratore di u sistema.
Utilizemu una macchina virtuale cù OpenVPN è Easy-RSA versione 3 in CetntOS 7, chì hè attribuita 100 vCPU è 4 GiB RAM per 4 cunnessione.
In l'esempiu, a reta di a nostra urganizazione hè 172.16.0.0/16, in quale u servitore VPN cù l'indirizzu 172.16.19.123 si trova in u segmentu 172.16.19.0/24, servitori DNS 172.16.16.16 è 172.16.17.17, è 172.16.20.0 sub.net. .23/XNUMX hè attribuitu per i clienti VPN.
Per cunnette da l'esternu, una cunnessione via u portu 1194/udp hè utilizatu, è un A-record gw.abc.ru hè statu creatu in u DNS per u nostru servitore.
Hè strettamente micca cunsigliatu di disattivà SELinux! OpenVPN funziona senza disattivà e pulitiche di sicurezza.
Avemu aduprà a distribuzione CentOS 7.8.2003. Avemu bisognu di stallà u SO in una cunfigurazione minima. Hè cunvenutu per fà questu usu kickstart, clonà una maghjina OS installata prima è altri mezi.
Dopu a stallazione, assignendu un indirizzu à l'interfaccia di a rete (sicondu i termini di u compitu 172.16.19.123), aghjurnà u SO:
$ sudo yum update -y && reboot
Avemu ancu bisognu di assicurà chì a sincronizazione di u tempu hè realizata nantu à a nostra macchina.
Per installà u software di l'applicazione, avete bisognu di i pacchetti openvpn, openvpn-auth-ldap, easy-rsa è vim cum'è editore principale (avete bisognu di u repository EPEL).
I paràmetri per l'urganizazione cundizionale ABC LLC sò descritti quì; pudete correggerli à i veri o lascià da l'esempiu. A più impurtante in i paràmetri hè l'ultima linea, chì determina u periodu di validità di u certificatu in ghjorni. L'esempiu usa u valore 10 anni (365 * 10 + 2 anni bisestili). Stu valore deve esse aghjustatu prima chì i certificati d'utilizatori sò emessi.
Dopu, cunfiguremu una autorità di certificazione autonoma.
L'installazione include l'esportazione di variabili, l'inizializazione di a CA, l'emissione di a chjave di a radica CA è u certificatu, a chjave Diffie-Hellman, a chjave TLS è a chjave di u servitore è u certificatu. A chjave CA deve esse prutetta cù cura è tenuta sicreta! Tutti i paràmetri di dumanda ponu esse lasciati predeterminati.
Questu cumpleta a parte principale di a creazione di u mecanismu criptograficu.
Configurazione di OpenVPN
Andate à u cartulare OpenVPN, create cartulari di serviziu è aghjunghje un ligame à easy-rsa:
cd /etc/openvpn/
mkdir /var/log/openvpn/ /etc/openvpn/ccd /usr/share/easy-rsa/3/client
ln -s /usr/share/easy-rsa/3/pki/ /etc/openvpn/
Crea u schedariu principale di cunfigurazione OpenVPN:
$ sudo vim server.conf
seguenti cuntenutu
port 1194
proto udp
dev tun
ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/issued/myvpngw.crt
key /etc/openvpn/pki/private/myvpngw.key
crl-verify /etc/openvpn/pki/crl.pem
dh /etc/openvpn/pki/dh.pem
server 172.16.20.0 255.255.254.0
ifconfig-pool-persist ipp.txt
push "route 172.16.0.0 255.255.255.0"
push "route 172.17.0.0 255.255.255.0"
client-config-dir ccd
push "dhcp-option DNS 172.16.16.16"
push "dhcp-option DNS 172.16.17.17"
keepalive 10 120
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1
username-as-common-name
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so /etc/openvpn/ldap.conf
Alcune note nantu à i paràmetri:
se un nome differente hè statu specificatu quandu emette u certificatu, indicà;
specificà u pool di indirizzi per adattà à i vostri compiti *;
pò esse una o più rotte è servitori DNS;
L'ultimi 2 linee sò necessarii per implementà l'autentificazione in AD**.
* A gamma di indirizzi selezziunati in l'esempiu permetterà finu à i clienti 127 per cunnette simultaneamente, perchè a rete / 23 hè sceltu, è OpenVPN crea una subnet per ogni cliente utilizendu a maschera / 30.
S'ellu hè particularmente necessariu, u portu è u protokollu pò esse cambiatu, però, deve esse cunsideratu chì cambià u numeru di u portu di u portu implicarà a cunfigurazione di SELinux, è l'usu di u protokollu tcp aumenterà l'overhead, perchè U cuntrollu di consegna di pacchetti TCP hè digià realizatu à u livellu di i pacchetti incapsulati in u tunnel.
**Se l'autentificazione in AD ùn hè micca necessariu, cummentate, saltate a sezione dopu, è in u mudellu caccià a linea auth-user-pass.
Autentificazione AD
Per sustene u sicondu fattore, avemu aduprà a verificazione di u contu in AD.
Avemu bisognu di un contu in u duminiu cù i diritti di un utilizatore ordinariu è un gruppu, l'appartenenza in quale determinarà a capacità di cunnette.
systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Emissione di certificatu è revocazione
Perchè In più di i certificati stessi, avete bisognu di chjavi è altri paràmetri; hè assai cunvenutu per imballà tuttu questu in un schedariu di prufilu. Stu schedariu hè dopu trasferitu à l'utilizatore è u prufilu hè impurtatu nantu à u cliente OpenVPN. Per fà questu, creeremu un mudellu di paràmetri è un script chì genera u prufilu.
Avete bisognu di aghjunghje u cuntenutu di u certificatu radicali (ca.crt) è i schedarii di chjave TLS (ta.key) à u prufilu.
Prima di emissione di certificati d'utilizatore ùn vi scurdate di stabilisce u periodu di validità necessariu per i certificati in u schedariu di paràmetri. Ùn duvete micca fà troppu longu; vi cunsigliu di limità à un massimu di 180 ghjorni.
vim /usr/share/easy-rsa/3/vars
...
export EASYRSA_CERT_EXPIRE=180
vim /usr/share/easy-rsa/3/client/template.ovpn
client
dev tun
proto udp
remote gw.abc.ru 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3
auth-user-pass
<ca>
-----BEGIN CERTIFICATE-----
PUT YOUR CA CERT (ca.crt) HERE
-----END CERTIFICATE-----
</ca>
key-direction 1
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
PUT YOUR TA KEY (ta.key) HERE
-----END OpenVPN Static key V1-----
</tls-auth>
Noti:
corde Mettite u vostru... cambià à u cuntenutu a so certificati;
in a direttiva remota, specifica u nome / indirizzu di a vostra porta;
a direttiva auth-user-pass hè aduprata per l'autentificazione esterna supplementaria.
In u cartulare di casa (o un altru locu cunvene) creemu un script per dumandà un certificatu è creà un prufilu:
vim ~/make.profile.sh
#!/bin/bash
if [ -z "$1" ] ; then
echo Missing mandatory client name. Usage: $0 vpn-username
exit 1
fi
#Set variables
basepath=/usr/share/easy-rsa/3
clntpath=$basepath/client
privpath=$basepath/pki/private
certpath=$basepath/pki/issued
profile=$clntpath/$1.ovpn
#Get current year and lowercase client name
year=`date +%F`
client=${1,,}
echo Processing $year year cert for user/device $client
cd $basepath
if [ -f client/$client* ]; then
echo "*** ERROR! ***"
echo "Certificate $client already issued!"
echo "*** ERROR! ***"
exit 1
fi
. ./vars
./easyrsa --batch --req-cn=$client gen-req $client nopass
./easyrsa --batch sign-req client $client
#Make profile
cp $clntpath/template.ovpn $profile
echo "<key>" >> $profile
cat $privpath/$1.key >> $profile
echo "</key>" >> $profile
echo -e "n" >> $profile
openssl x509 -in $certpath/$1.crt -out $basepath/$1.crt
echo "<cert>" >> $profile
cat $basepath/$1.crt >> $profile
echo "</cert>" >> $profile
echo -e "n" >> $profile
#remove tmp file
rm -f $basepath/$1.crt
echo Complete. See $profile file.
cd ~
Fendu u schedariu eseguibile:
chmod a+x ~/make.profile.sh
È pudemu emette u nostru primu certificatu.
~/make.profile.sh my-first-user
Feedback
In casu di cumprumissu di un certificatu (perdita, furtu), hè necessariu di revocà stu certificatu:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
Vede i certificati emessi è revocati
Per vede i certificati emessi è revocati, basta à vede u schedariu index:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Пояснения:
a prima linea hè u certificatu di u servitore;
primu caratteru
V (Valid) - validu;
R (Revocatu) - ricurdatu.
Cunfigurazione di rete
L'ultimi passi sò di cunfigurà a reta di trasmissione - routing è firewalls.
In un ambiente corporativu, ci hè prubabile di esse subnetting è avemu bisognu di dì à u router (s) cumu mandà pacchetti destinati à i nostri clienti VPN. Nantu à a linea di cumanda, eseguimu u cumandamentu in a manera (secondu l'equipaggiu utilizatu):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123
è salvà a cunfigurazione.
Inoltre, nantu à l'interfaccia di u router di cunfini induve l'indirizzu esternu gw.abc.ru hè servutu, hè necessariu di permette u passaghju di pacchetti udp/1194.
In casu chì l'urganizazione hà regule strette di sicurità, un firewall deve ancu esse cunfiguratu in u nostru servitore VPN. In u mo parè, a più grande flessibilità hè furnita da a creazione di catene iptables FORWARD, ancu s'ellu hè menu cunvene. Un pocu di più nantu à a stallazione. Per fà questu, hè più cunvenutu di utilizà "reguli diretti" - regule dirette, guardate in un schedariu /etc/firewalld/direct.xml. A cunfigurazione attuale di e regule pò esse truvata cusì:
$ sudo firewall-cmd --direct --get-all-rule
Prima di cambià un schedariu, fate una copia di salvezza:
Quessi sò essenzialmente reguli iptables regulari, altrimenti imballati dopu l'avventu di firewalld.
L'interfaccia di destinazione cù i paràmetri predeterminati hè tun0, è l'interfaccia esterna per u tunnel pò esse diversa, per esempiu, ens192, secondu a piattaforma utilizata.
L'ultima linea hè per a registrazione di i pacchetti sguassati. Per u logging per travaglià, avete bisognu di cambià u livellu di debug in a cunfigurazione firewalld:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
L'applicazione di i paràmetri hè u cumandimu di firewalld abituale per rileghje i paràmetri:
$ sudo firewall-cmd --reload
Pudete vede i pacchetti abbandunati cusì:
grep forward_fw /var/log/messages
Chì vene
Questu cumpleta a stallazione!
Tuttu ciò chì resta hè di stallà u software di u cliente da u cliente, impurtà u prufilu è cunnette. Per i sistemi operativi Windows, u kit di distribuzione hè situatu situ di sviluppatore.
Infine, cunnettemu u nostru novu servitore à i sistemi di monitoraghju è archiviu, è ùn vi scurdate di stallà regularmente l'aghjurnamenti.