Organizimi i punës në distancë të një organizate SMB në OpenVPN
Formulimi i problemit
Artikulli përshkruan organizimin e aksesit në distancë për punonjësit në produktet me burim të hapur dhe mund të përdoret si për të ndërtuar një sistem plotësisht autonom, ashtu edhe do të jetë i dobishëm për zgjerim kur ka mungesë licencash në sistemin ekzistues tregtar ose performanca e tij është e pamjaftueshme.
Qëllimi i artikullit është të zbatojë një sistem të plotë për sigurimin e aksesit në distancë në një organizatë, i cili është pak më shumë se "instalimi i OpenVPN në 10 minuta".
Si rezultat, ne do të marrim një sistem në të cilin certifikatat dhe (opsionale) Active Directory e korporatës do të përdoren për të vërtetuar përdoruesit. Se. do të marrim një sistem me dy faktorë verifikimi - atë që kam (certifikatën) dhe atë që di (fjalëkalimin).
Një shenjë që një përdorues lejohet të lidhet është anëtarësimi i tij në grupin myVPNUsr. Autoriteti i certifikatës do të përdoret jashtë linje.
Kostoja e zbatimit të zgjidhjes është vetëm burime të vogla harduerike dhe 1 orë punë e administratorit të sistemit.
Ne do të përdorim një makinë virtuale me OpenVPN dhe Easy-RSA version 3 në CetntOS 7, së cilës i ndahen 100 vCPU dhe 4 GiB RAM për 4 lidhje.
Në shembull, rrjeti i organizatës sonë është 172.16.0.0/16, në të cilin serveri VPN me adresën 172.16.19.123 ndodhet në segmentin 172.16.19.0/24, serverët DNS 172.16.16.16 dhe 172.16.17.17, dhe nën 172.16.20.0, dhe 23. .XNUMX/XNUMX është ndarë për klientët VPN.
Për t'u lidhur nga jashtë, përdoret një lidhje përmes portit 1194/udp dhe një gw.abc.ru është krijuar në DNS për serverin tonë.
Nuk rekomandohet rreptësisht çaktivizimi i SELinux! OpenVPN funksionon pa çaktivizuar politikat e sigurisë.
Instalimi i sistemit operativ dhe softuerit aplikativ
Ne përdorim shpërndarjen CentOS 7.8.2003. Ne duhet të instalojmë OS në një konfigurim minimal. Është i përshtatshëm për ta bërë këtë duke përdorur Kickstart, klonimi i një imazhi të OS të instaluar më parë dhe mjete të tjera.
Pas instalimit, duke caktuar një adresë në ndërfaqen e rrjetit (sipas kushteve të detyrës 172.16.19.123), ne përditësojmë OS:
$ sudo yum update -y && reboot
Ne gjithashtu duhet të sigurohemi që sinkronizimi i kohës të kryhet në makinën tonë.
Për të instaluar softuerin e aplikacionit, ju nevojiten paketat openvpn, openvpn-auth-ldap, easy-rsa dhe vim si redaktues kryesor (do t'ju duhet depoja EPEL).
Parametrat për organizatën e kushtëzuar ABC LLC përshkruhen këtu; mund t'i korrigjoni ato në ato reale ose t'i lini nga shembulli. Gjëja më e rëndësishme në parametra është rreshti i fundit, i cili përcakton periudhën e vlefshmërisë së certifikatës në ditë. Shembulli përdor vlerën 10 vjet (365*10+2 vite të brishtë). Kjo vlerë do të duhet të rregullohet përpara se të lëshohen certifikatat e përdoruesit.
Më pas, ne konfigurojmë një autoritet autonom certifikues.
Konfigurimi përfshin eksportimin e variablave, inicializimin e CA, lëshimin e çelësit dhe certifikatës rrënjësore CA, çelësin Diffie-Hellman, çelësin TLS dhe çelësin dhe certifikatën e serverit. Çelësi CA duhet të mbrohet me kujdes dhe të mbahet sekret! Të gjithë parametrat e pyetjes mund të lihen si parazgjedhje.
Kjo përfundon pjesën kryesore të konfigurimit të mekanizmit kriptografik.
Konfigurimi i OpenVPN
Shkoni te drejtoria OpenVPN, krijoni drejtoritë e shërbimeve dhe shtoni një lidhje me 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/
Krijoni skedarin kryesor të konfigurimit OpenVPN:
$ sudo vim server.conf
përmbajtjet e mëposhtme
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
Disa shënime për parametrat:
nëse një emër tjetër është specifikuar gjatë lëshimit të certifikatës, tregoni atë;
specifikoni grupin e adresave që i përshtaten detyrave tuaja*;
mund të ketë një ose më shumë rrugë dhe serverë DNS;
2 rreshtat e fundit nevojiten për të zbatuar vërtetimin në AD**.
*Sfera e adresave të zgjedhura në shembull do të lejojë deri në 127 klientë të lidhen njëkohësisht, sepse zgjidhet rrjeti /23 dhe OpenVPN krijon një nënrrjet për secilin klient duke përdorur maskën /30.
Nëse është veçanërisht e nevojshme, porti dhe protokolli mund të ndryshohen, megjithatë, duhet të kihet parasysh se ndryshimi i numrit të portës do të sjellë konfigurimin e SELinux, dhe përdorimi i protokollit tcp do të rrisë shpenzimet, sepse Kontrolli i shpërndarjes së paketave TCP është kryer tashmë në nivelin e paketave të kapsuluara në tunel.
**Nëse nuk nevojitet vërtetimi në AD, komentoni ato, kapërceni seksionin tjetër dhe në shabllon hiqni linjën auth-user-pass.
Autentifikimi i AD
Për të mbështetur faktorin e dytë, ne do të përdorim verifikimin e llogarisë në AD.
Ne kemi nevojë për një llogari në domen me të drejtat e një përdoruesi të zakonshëm dhe një grupi, anëtarësimi në të cilin do të përcaktojë aftësinë për t'u lidhur.
systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Lëshimi dhe revokimi i certifikatës
Sepse Përveç vetë certifikatave, keni nevojë për çelësa dhe cilësime të tjera; është shumë i përshtatshëm për t'i mbështjellë të gjitha këto në një skedar profili. Ky skedar më pas transferohet te përdoruesi dhe profili importohet në klientin OpenVPN. Për ta bërë këtë, ne do të krijojmë një shabllon të cilësimeve dhe një skript që gjeneron profilin.
Ju duhet të shtoni përmbajtjen e skedarëve të certifikatës rrënjësore (ca.crt) dhe të çelësit TLS (ta.key) në profil.
Përpara lëshimit të certifikatave të përdoruesit mos harroni të vendosni periudhën e kërkuar të vlefshmërisë për certifikatat në skedarin e parametrave. Nuk duhet ta zgjatni shumë; unë rekomandoj të kufizoni veten në një maksimum prej 180 ditësh.
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>
Shenime:
telave VËNI TUAJ... ndryshim në përmbajtje e tyre certifikata;
në direktivën e largët, specifikoni emrin/adresën e portës suaj;
direktiva auth-user-pass përdoret për vërtetim shtesë të jashtëm.
Në drejtorinë kryesore (ose një vend tjetër të përshtatshëm) ne krijojmë një skript për të kërkuar një certifikatë dhe për të krijuar një profil:
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 ~
Bërja e skedarit të ekzekutueshëm:
chmod a+x ~/make.profile.sh
Dhe ne mund të lëshojmë certifikatën tonë të parë.
~/make.profile.sh my-first-user
risjell
Në rast të komprometimit të një certifikate (humbje, vjedhje), është e nevojshme të revokohet kjo certifikatë:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
Shikoni certifikatat e lëshuara dhe të revokuara
Për të parë certifikatat e lëshuara dhe të revokuara, thjesht shikoni skedarin e indeksit:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Shpjegimet:
rreshti i parë është certifikata e serverit;
personazhi i parë
V (e vlefshme) - e vlefshme;
R (Revokuar) - kujtohet.
Konfigurimi i rrjetit
Hapat e fundit janë konfigurimi i rrjetit të transmetimit - rrugëzimi dhe muret e zjarrit.
Në një mjedis të korporatës, ka të ngjarë të ketë nënrrjet dhe ne duhet t'i tregojmë ruterit(ve) se si të dërgojnë paketat e destinuara për klientët tanë VPN. Në vijën e komandës ne ekzekutojmë komandën në mënyrën (në varësi të pajisjes së përdorur):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123
dhe ruani konfigurimin.
Përveç kësaj, në ndërfaqen e ruterit kufitar ku shërbehet adresa e jashtme gw.abc.ru, është e nevojshme të lejohet kalimi i paketave udp/1194.
Në rast se organizata ka rregulla strikte sigurie, një mur zjarri duhet të konfigurohet gjithashtu në serverin tonë VPN. Sipas mendimit tim, fleksibiliteti më i madh sigurohet nga vendosja e zinxhirëve iptables FORWARD, megjithëse vendosja e tyre është më pak e përshtatshme. Pak më shumë rreth vendosjes së tyre. Për ta bërë këtë, është më e përshtatshme të përdorni "rregulla të drejtpërdrejta" - rregulla të drejtpërdrejta, të ruajtura në një skedar /etc/firewalld/direct.xml. Konfigurimi aktual i rregullave mund të gjendet si më poshtë:
$ sudo firewall-cmd --direct --get-all-rule
Para se të ndryshoni një skedar, bëni një kopje rezervë të tij:
Në thelb këto janë rregulla të rregullta iptables, të paketuara ndryshe pas ardhjes së firewalld-it.
Ndërfaqja e destinacionit me cilësimet e paracaktuara është tun0, dhe ndërfaqja e jashtme për tunelin mund të jetë e ndryshme, për shembull, ens192, në varësi të platformës së përdorur.
Rreshti i fundit është për regjistrimin e paketave të hedhura. Që regjistrimi të funksionojë, duhet të ndryshoni nivelin e korrigjimit në konfigurimin e murit të zjarrit:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
Aplikimi i cilësimeve është komanda e zakonshme e murit të zjarrit për të rilexuar cilësimet:
$ sudo firewall-cmd --reload
Ju mund t'i shikoni paketat e lëshuara si kjo:
grep forward_fw /var/log/messages
Ç'pritet më tej
Kjo përfundon konfigurimin!
Mbetet vetëm të instaloni softuerin e klientit në anën e klientit, të importoni profilin dhe të lidhni. Për sistemet operative Windows, kompleti i shpërndarjes ndodhet në uebsajti i zhvilluesit.
Së fundi, ne lidhim serverin tonë të ri me sistemet e monitorimit dhe arkivimit dhe mos harroni të instaloni rregullisht përditësime.