Vendosja e detyrës
Artikulli përshkruan organizimin e aksesit të largët për punonjësit duke përdorur produkte me burim të hapur dhe mund të përdoret ose për ndërtimin e një sistemi të plotë autonom, ose do të jetë e dobishme për zgjerimin, kur në sistemin komercial ekzistues ka mungesë licencash ose performanca e saj është e pamjaftueshme.
Qëllimi i artikullit është të zbatojë një sistem të plotë për ofrimin e aksesit të largët për organizatën, që është pak më shumë se "instalimi i OpenVPN në 10 minuta".
Si rezultat, ne do tĂ« kemi njĂ« sistem ku pĂ«r autentikimin e pĂ«rdoruesve do tĂ« pĂ«rdoren çertifikata dhe (opsionale) katalogu korporativ Active Directory. KĂ«shtu, ne do tĂ« kemi njĂ« sistem me dy faktorĂ« verifikimi â çfarĂ« kam (çertifikata) dhe çfarĂ« e di (fjalĂ«kalimi).
Të qenit anëtar i grupit myVPNUsr është një shenjë se përdoruesit janë të autorizuar për t'u lidhur. Qendra e çertifikimit do të jetë autonome.
Ămimi i zbatimit tĂ« zgjidhjes Ă«shtĂ« vetĂ«m burime tĂ« vogla harduerike dhe 1 orĂ« pune e administratĂ«s sistemike.
Ne do të përdorim një makinë virtuale me OpenVPN dhe Easy-RSA versioni 3 në CentOS 7, e cila për 100 lidhje ka dhënë 4 vCPU dhe 4 GiB RAM.
Në këtë shembull, rrjeti i organizatës sonë është 172.16.0.0/16, ku serveri VPN me adresë 172.16.19.123 ndodhet në segmentin 172.16.19.0/24, serverët DNS janë 172.16.16.16 dhe 172.16.17.17, dhe për klientët VPN është ndarë një subjekt 172.16.20.0/23.
Për lidhjen nga jashtë përdoret lidhja përmes portit 1194/udp, dhe në DNS për serverin tonë është krijuar një regjistrim A gw.abc.ru.
Kategorikisht nuk rekomandohet të shkëputet SELinux! OpenVPN funksionon pa çaktivizimin e politikave të sigurisë.
Përmbajtja
Instalimi i sistemit të operimit dhe softuerit aplikativ
Ne pĂ«rdorim distribucionin CentOS 7.8.2003. Na nevojitet instalimi i OS nĂ« konfigurimin minimal. ĂshtĂ« e pĂ«rshtatshme ta bĂ«jmĂ« kĂ«tĂ« duke pĂ«rdorur , klonimin e njĂ« imazhi tĂ« instaluar mĂ« parĂ« dhe mjete tĂ« tjera.
Pas instalimit, caktimin e adresës për ndërfaqen rrjetërore (sipas kushteve të detyrës, 172.16.19.123), ne bëjmë përditësimin e sistemit të operimit:
$ sudo yum update -y && reboot
Gjithashtu, është e nevojshme të sigurohemi se në makinën tonë po kryhet sinkronizimi i kohës.
Për instalimin e softuerit aplikativ, na duhen paketat openvpn, openvpn-auth-ldap, easy-rsa dhe vim si editori kryesor (do të nevojitet depoja EPEL).
$ sudo yum install epel-release
$ sudo yum install openvpn openvpn-auth-ldap easy-rsa vim
Për makinën virtuale është e dobishme të instalohet agjenti gazdë:
$ sudo yum install open-vm-toolspër hostët VMware ESXi, ose për oVirt
$ sudo yum install ovirt-guest-agent
Konfigurimi i kriptografisë
Kalojmë në katalogun easy-rsa:
$ cd /usr/share/easy-rsa/3/Krijojmë skedarin e variablave:
$ sudo vim varspërmbajtja e mëposhtme:
export KEY_COUNTRY="RU"
export KEY_PROVINCE="MyRegion"
export KEY_CITY="MyCity"
export KEY_ORG="ABC LLC"
export KEY_EMAIL="admin@abc.ru"
export KEY_CN="allUsers"
export KEY_OU="allUsers"
export KEY_NAME="gw.abc.ru"
export KEY_ALTNAMES="abc-openvpn-server"
export EASYRSA_CERT_EXPIRE=3652
Këtu përshkruhen parametrat për organizatën fiktive LLC "ABC", mund t'i korrigjoni ato në të vërtetat ose t'i lini nga shembulli. Më e rëndësishmja në parametrat është rreshti i fundit, që përcakton periudhën e vlefshmërisë së çertifikatës në ditë. Në shembuj është përdorur vlera për 10 vjet (365*10+2 vitet e shkurtër). Kjo vlerë do të duhet të rregullohet përpara lëshimit të çertifikatave të përdoruesve.
Më pas konfiguroni qendrën autonome të çertifikimit.
Konfigurimi pĂ«rfshin eksportimin e variablave, inicializimin e CA, lĂ«shimin e çelĂ«sit kryesor dhe çertifikĂ«s CA, çelĂ«si Diffie-Hellman, çelĂ«si TLS, si dhe çelĂ«si dhe çertifikata e serverit. ĂelĂ«si i qendrĂ«s sĂ« çertifikimit duhet tĂ« ruhet me kujdes dhe tĂ« mbahet nĂ« fshehtĂ«si! TĂ« gjitha parametrat nĂ« kĂ«rkesa mund tĂ« lihen nĂ« parazgjedhje.
cd /usr/share/easy-rsa/3/
. ./vars
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-dh
./easyrsa gen-req myvpngw nopass
./easyrsa sign-req server myvpngw
./easyrsa gen-crl
openvpn --genkey --secret pki/ta.key
Me këtë, pjesa kryesore e konfigurimeve të mekanizmit të kriptografisë ka përfunduar.
Konfigurimi i OpenVPN
Kalojmë në katalogun OpenVPN, krijojmë katalogët e shërbimeve dhe shtojmë një lidhje në 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/
Krijojmë skedarin kryesor të konfigurimit të OpenVPN:
$ sudo vim server.confme përmbajtjen 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 vërejtje mbi parametrat:
- nĂ«se gjatĂ« lĂ«shimit tĂ« çertifikatĂ«s u tregua njĂ« emĂ«r tjetĂ«r â tregoni atĂ«;
- pulin e adresave tregoni sipas nevojave tuaja*;
- mund të ketë një ose disa rrugë dhe serverë DNS;
- 2 rreshtat e fundit janë të nevojshme për zbatimin e autentikimit në AD**.
*Shkalla e adresave e zgjedhur në shembuj do të lejojë lidhjen e deri në 127 klientëve në të njëjtën kohë, pasi është zgjedhur rrjeti /23, dhe OpenVPN krijon një subplot për çdo klient me maskën /30.
Në rast nevoje të veçantë, porta dhe protokolli mund të ndryshohen, megjithatë duhet të kihet parasysh se ndryshimi i numrit të portës do të kërkojë konfigurimin e SELinux, dhe përdorimi i protokollit tcp do të rrisë kostot, pasi kontrolli i dorëzimit të paketave tcp tashmë kryhet në nivelin e paketave të inkapsuluara brenda tunelit.
**Nëse autentikimi në AD nuk është i nevojshëm, shkruani komentin për ta, kaloni seksionin e mëparshëm dhe në template fshini rreshtin auth-user-pass.
Autentikimi në AD
Për mbështetje të faktorëve të dytë do të përdorim verifikimin e llogarive në AD.
Na nevojitet një llogari në domen me të drejtat e një përdoruesi të zakonshëm dhe një grup, anëtarësia e të cilit do të përcaktojë mundësinë e lidhjes.
Krijojmë skedarin e konfigurimit:
/etc/openvpn/ldap.confme përmbajtjen e mëposhtme
URL "ldap://ldap.abc.ru"
BindDN "CN=bindUsr,CN=Users,DC=abc,DC=ru"
Password b1ndP@SS
Timeout 15
TLSEnable no
FollowReferrals yes
BaseDN "OU=allUsr,DC=abc,DC=ru"
SearchFilter "(sAMAccountName=%u)"
RequireGroup true
BaseDN "OU=myGrp,DC=abc,DC=ru"
SearchFilter "(cn=myVPNUsr)"
MemberAttribute "member"
Parametrat kryesorë:
- URL "ldap://ldap.abc.ru" â adresa e kontrolluesit tĂ« domenit;
- BindDN "CN=bindUsr,CN=Users,DC=abc,DC=ru" â emri kanonik pĂ«r lidhjen me LDAP (PĂ«rdoruesi â bindUsr nĂ« konteinerin abc.ru/Users);
- Password b1ndP@SS â shk parola pĂ«r pĂ«rdoruesin gjatĂ« lidhjes;
- BaseDN "OU=allUsr,DC=abc,DC=ru" â rruga nga e cila fillon kĂ«rkimin e pĂ«rdoruesve;
- BaseDN "OU=myGrp,DC=abc,DC=ru" â konteineri i grupit tĂ« lejuar (grupi myVPNUsr nĂ« konteinerin abc.rumyGrp);
- SearchFilter "(cn=myVPNUsr)" â emri i grupit tĂ« lejuar.
Startimi dhe diagnostikimi
Tani mund të provojmë të aktivizojmë dhe të nisim serverin tonë:
$ sudo systemctl enable openvpn@server.service
$ sudo systemctl start openvpn@server.service
Kontrollimi i nisjes:
systemctl status openvpn@server.service
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Lëshimi dhe tërheqja e çertifikatës
Duke pasur parasysh se përveç vetë certifikatave nevojiten çelët dhe konfiguratat e tjera, është shumë e dobishme të paketosh të gjithë këtë në një skedar profili. Ky skedar më pas i kalon përdoruesit dhe profili importohet në klientin OpenVPN. Për këtë, do të krijojmë një template të konfigurimeve dhe një skript që krijon profilin.
Në profil duhet të shtoni përmbajtjen e skedarëve të certifikatës kryesore (ca.crt) dhe çelësin TLS (ta.key).
Para lëshimit të certifikatave për përdoruesit mos harroni të vendosni afatin e vlefshmërisë së certifikatave në skedarin e parametrave. Nuk duhet të jetë shumë i gjatë, rekomandoj të kufizoheni në maksimum 180 ditë.
vim /usr/share/easy-rsa/3/vars...
export EASYRSA_CERT_EXPIRE=180
vim /usr/share/easy-rsa/3/client/template.ovpnclient
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
-----BEGIN CERTIFICATE-----
PUT YOUR CA CERT (ca.crt) HERE
-----END CERTIFICATE-----
key-direction 1
-----BEGIN OpenVPN Static key V1-----
PUT YOUR TA KEY (ta.key) HERE
-----END OpenVPN Static key V1-----
Shënime:
- rreshta PUT YOUR⊠ndryshoni me përmbajtjen e certifikatave tuaja; në direktivën remote specifikoni emrin/adresën e kalimit tuaj;
- direktiva auth-user-pass përdoret për autentifikimin e jashtëm të shtuar.
- Në katalogun e shtëpisë (ose në ndonjë vend tjetër të përshtatshëm) krijoni një skript për kërkesën e certifikatës dhe krijimin e profilit:
vim ~/make.profile.sh
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 ~
E bëjmë skedarin ekzekutiv:
chmod a+x ~/make.profile.shDhe mund të lëshojmë certifikatën tonë të parë.
~/make.profile.sh my-first-userRishikim
Në rast se certifikata është kompromentuar (humje, vjedhje) është e nevojshme të revokohet kjo certifikatë:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
Shikimi i certifikatave të lëshuara dhe të revokuara
Për të parë certifikat që janë lëshuar dhe revokuar, mjafton të shikoni skedarin indekse:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Shpjegime:
- në rreshtin e parë është certifikata e serverit;
- simboli i parë
- V (Valid) â e vlefshme;
- R (Revoked) â e revokuar.
Konfigurimi i rrjetit
Hapat e fundit â konfigurimi i rrjetit tĂ« transmetimit â ruterĂ«ve dhe firewall-eve.
Lejimi i lidhjeve në firewall-in lokal:
$ sudo firewall-cmd --add-service=openvpn
$ sudo firewall-cmd --add-service=openvpn --permanent
Pastaj, aktivizojmë ruterimin e trafikut IP:
$ sudo sysctl net.ipv4.ip_forward=1
$ sudo echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/50-sysctl.conf
Në një ambient kompanie, me siguri ekziston ndarje në nënrrjeta dhe na nevojitet të informojmë ruterin (-ët) se si të dërgojmë paketat e drejtuara drejt klientëve tanë VPN. Në komandën e linjës së komandës ekzekutojmë një komandë si (varet nga pajisja që përdoret):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123dhe ruajmë konfigurimin.
Përveç kësaj, në ndërfaqen e ruterit të kufirit, ku shërbehet adresa e jashtme gw.abc.ru, duhet të lejohet kalimi i paketave udp/1194.
NĂ«se organizata ka rregulla tĂ« rrepta tĂ« sigurisĂ«, Ă«shtĂ« e nevojshme tĂ« konfigurohet gjithashtu njĂ« firewall nĂ« serverin tonĂ« VPN. Sipas mendimit tim, fleksibiliteti mĂ« i madh jepet nga konfigurimi i zinxhirĂ«ve FORWARD tĂ« iptables, megjithatĂ«, konfigurimi i tyre Ă«shtĂ« mĂ« pak i pĂ«rshtatshĂ«m. MĂ« shumĂ« detaje mbi konfigurimin e tyre. PĂ«r kĂ«tĂ«, Ă«shtĂ« mĂ« e lehtĂ« tĂ« pĂ«rdoren "rregullat direkte" â direct rules, tĂ« ruajtura nĂ« njĂ« skedĂ«. /etc/firewalld/direct.xml. Konfigurimi aktual i rregullave mund tĂ« merret kĂ«shtu:
$ sudo firewall-cmd --direct --get-all-rulePara se të ndryshoni skedën, bëni një kopje rezervë të saj:
cp /etc/firewalld/direct.xml /etc/firewalld/direct.xml.`date +%F.%T`.bakPërmbajtja e zakonshme e skedës është si më poshtë:
-i tun0 -o ens192 -p udp --dport 53 -j ACCEPT
-i tun0 -o eth0 -p tcp -d 172.16.19.200 --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-i tun0 -o eth0 -p tcp -d 172.16.19.201 --dport 443 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-i tun0 -o eth0 -p udp -d 172.16.19.100 --dport 7000 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-i tun0 -o eth0 -j LOG --log-prefix 'forward_fw '
Sqarime
Në thelb, këto janë rregulla standard të iptables, të paketuar ndryshe pas shfaqjes së firewalld.
Interfaci i caktuar në cilësimet e paracaktuara është tun0, ndërsa jashtë për tunelin mund të jetë tjetër, për shembull, ens192, në varësi të platformës së përdorur.
Rreshti i fundit është për regjistrimin e pakot e hedhura. Për të aktivizuar regjistrimin, në konfigurimin e firewalld duhet të ndryshohet niveli i ndihmës:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
Aplikimi i konfigurimeve është një komandë standarde firewalld për rileximin e konfigurimeve:
$ sudo firewall-cmd --reloadPakot e hedhura mund të shihen kështu:
grep forward_fw /var/log/messages
ĂfarĂ« ndodh mĂ« pas
Me këtë, konfigurimi është përfunduar!
Tani mbetet të instaloni softuerin klient, të importoni profilin dhe të lidhni. Për sistemet operative të tipit Windows, distribucioni është vendosur në .
Në fund, lidhim serverin tonë të ri me sistemet e monitorimit dhe arkivimit, dhe mos harrojmë të instalojmë rregullisht përditësimet.
Një lidhje të qëndrueshme!
Burimi: habr.com
