Formulimi i detyrës
Artikullin përshkruan organizimin e aksesit të largët për punonjësit në produkte me kod të hapur dhe mund të përdoret si për ndërtimin e një sistemi të plotë autonom, ashtu edhe do të jetë e dobishme për zgjerimin, kur sistemi komercial ekzistues ka mungesë licencash ose produktiviteti të pamjaftueshëm.
Qëllimi i artikullit është nënshtrimi i një sistemi të përfunduar për ofrimin e aksesit të largët në institucion, që është më shumë se thjesht "instaloni OpenVPN në 10 minuta".
Si rezultat, ne do tĂ« kemi njĂ« sistem ku pĂ«r autentifikimin e pĂ«rdoruesve do tĂ« pĂ«rdoren certifikatat dhe (opsional) katalogu i korporatĂ«s Active Directory. KĂ«shtu, ne do tĂ« kemi njĂ« sistem me dy faktorĂ« verifikimi â çfarĂ« kam (certifikata) dhe çfarĂ« di (fjalĂ«kalimi).
Një tregues se përdoruesi është i lejuar të lidhet është anëtarësia e tij në grupin myVPNUsr. Qendra e certifikimit do të përdoret autonom.
Ămimi i implementimit tĂ« zgjidhjes Ă«shtĂ« vetĂ«m burime tĂ« vogla harduerike dhe 1 orĂ« pune tĂ« administratorit tĂ« sistemit.
Ne do të përdorim një makinë virtuale me OpenVPN dhe Easy-RSA versionin 3 në CentOS 7, e cila, sipas llogaritjeve për 100 lidhje, ka të dhëna 4 vCPU dhe 4 GiB RAM.
Në shembullin tonë, rrjeti i organizatës sonë është 172.16.0.0/16, ku serveri VPN me adresë 172.16.19.123 është i vendosur 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ë nënrrjet 172.16.20.0/23.
Për lidhjen nga jashtë, përdoret lidhja në portin 1194/udp, dhe për serverin tonë është krijuar një regjistrim A në DNS, gw.abc.ru.
Kategorikisht nuk rekomandohet të fikni SELinux! OpenVPN funksionon pa fikjen e politikave të sigurisë.
Përmbajtja
Instalimi i sistemit operativ dhe softuerit aplikativ
PĂ«rdorim i distribucionit CentOS 7.8.2003. Na nevojitet instalimi i sistemit operativ nĂ« konfigurim minimal. ĂshtĂ« e pĂ«rshtatshme ta bĂ«jmĂ« kĂ«tĂ« duke pĂ«rdorur , klonimin e njĂ« imazhi tĂ« mĂ«parshĂ«m tĂ« instaluar dhe mjete tĂ« tjera.
Pas instalimit, caktimit të adresës për ndërfaqen rrjetë (sipash kushteve të detyrës 172.16.19.123), kryejmë përditësimin e sistemit operativ:
$ sudo yum update -y && reboot
Gjithashtu duhet të sigurohemi që koha në makinën tonë të sinkronizohet.
Për instalimin e softuerit aplikativ nevojiten paketat openvpn, openvpn-auth-ldap, easy-rsa dhe vim si redaktori 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ë instaloni agjentin e mysafirit:
$ sudo yum install open-vm-toolspër hostet VMware ESXi, ose për oVirt
$ sudo yum install ovirt-guest-agent
Konfigurimi i kriptografisë
Kaluam në katalogun easy-rsa:
$ cd /usr/share/easy-rsa/3/Krijojmë skedarin e variablave:
$ sudo vim varsusers.module.ts
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 janë përshkruar parametrat për organizatën fiktive LLC "ABC", mund t'i rregulloni ata për të vërtetat ose t'i lini nga shembulli. E rëndësishme në parametrat është rreshti i fundit, që përcakton periudhën e vlefshmërisë së certifikatës në ditë. Në shembuj është përdorur vlera 10 vjet (365*10+2 vitet e brishta). Kjo vlerë duhet të rregullohet përpara lëshimit të certifikatave të përdoruesve.
Më pas konfigurojmë qendrën e certifikimit autonome.
Konfigurimi pĂ«rfshin eksportimin e variablave, inicializimin e PKI, lĂ«shimin e çelĂ«sit dhe certifikatĂ«s sĂ« rrĂ«njĂ«s, çelĂ«sit Diffie-Hellman, çelĂ«sit TLS, si dhe çelĂ«sit dhe certifikatĂ«s sĂ« serverit. ĂelĂ«si i qendrĂ«s sĂ« certifikimit duhet mbrojtur me kujdes dhe mbajtur sekret! TĂ« gjitha parametrat gjatĂ« kĂ«rkesave mund tĂ« lihen nĂ« vlerat e paracaktuara.
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
Këtu përfundon pjesa kryesore e konfigurimit të mekanizmit kriptografik.
Konfigurimi i OpenVPN
Kaluam në katalogun OpenVPN, krijojmë katalogët e shërbimit dhe shtojmë lidhjen 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 për OpenVPN:
$ sudo vim server.confi përmbajtjes së 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Ă« certifikatĂ«s u tregua njĂ« emĂ«r tjetĂ«r â jepni atĂ«;
- pool adresash caktoni sipas detyrave tuaja*;
- rrugët dhe serverat DNS mund të jenë një ose më shumë;
- 2 rreshtat e fundit janë të nevojshëm për realizimin e autentifikimit në AD**.
*Gama e adresave e zgjedhur në shembull do të lejojë lidhjen e deri në 127 klientëve, pasi është zgjedhur rrjeti /23, dhe OpenVPN krijon një nënshtresë për çdo klient me maskën /30.
Nëse është e nevojshme, porta dhe protokolli mund të Ndryshohen, megjithatë duhet të mbahet mend se ndryshimi i numrit të portës do të sjellë 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 në tunel.
**NĂ«se nuk nevojitet autentikimi nĂ« AD, komenton ato, kaloni seksionin e ardhshĂ«m â dhe nĂ« modelin hiqni rreshtin auth-user-pass.
Autentifikimi në AD
Për mbështetje të faktorëve të dytë do të përdorim verifikimin e llogarisë në AD.
Na nevojitet një llogari në domain me të drejtat e një përdoruesi të zakonshëm dhe një grup, anëtarësia në të cilin do të përcaktojë mundësinë e lidhjes.
Krijojmë skedarin e konfigurimit:
/etc/openvpn/ldap.confi përmbajtjes së 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 lidhje me LDAP (PĂ«rdoruesi â bindUsr nĂ« enĂ«n abc.ru/Users);
- Password b1ndP@SS â fjalĂ«kalimi i pĂ«rdoruesit pĂ«r lidhje;
- BaseDN "OU=allUsr,DC=abc,DC=ru" â rruga pĂ«r tĂ« filluar kĂ«rkimin e pĂ«rdoruesve;
- BaseDN "OU=myGrp,DC=abc,DC=ru" â enĂ« e grupit tĂ« lejuar (grupi myVPNUsr nĂ« enĂ«n abc.ru/myGrp);
- SearchFilter "(cn=myVPNUsr)" â emri i grupit tĂ« lejuar.
Fillimi dhe diagnostikimi
Tani mund të provojmë të aktivizojmë dhe nisim serverin tonë:
$ sudo systemctl enable openvpn@server.service
$ sudo systemctl start openvpn@server.service
Kontrolli i nisjes:
systemctl status openvpn@server.service
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Lëshimi dhe revokimi i certifikatës
Duke qenë se nevojiten përveç vetë certifikatave, çelësat dhe konfigurimet e tjera, është shumë komode t'i mbështjellim të gjitha këto në një skedar të profilit. Ky skedar më pas iu kalon përdoruesve dhe profili importohet në klientin OpenVPN. Për këtë do të krijojmë një model konfigurimi dhe një skript që formon profilin.
Në profil duhet të shtohet përmbajtja e skedarëve të certifikatës kryesore (ca.crt) dhe çelësi TLS (ta.key).
Para lëshimit të certifikatave për përdoruesit mos u siguroni se keni përcaktuar afatin e vlefshmërisë së certifikatave në skedarin e parametrave. Nuk duhet ta bëni shumë të gjatë, rekomandoj të kufizohet 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-----
VENDOSNI CERTIFIKATEN TUAJ CA (ca.crt) KETU
-----END CERTIFICATE-----
key-direction 1
-----BEGIN OpenVPN Static key V1-----
VENDOSNI ĂELSIN TUAJ TA (ta.key) KETU
-----END OpenVPN Static key V1-----
Vërejtje:
- rreshta VENDOSNI BOTEN TUAJ... ndërrohet me përmbajtjen e tuaja certifikatave;
- në direktorinë remote specifikoni emrin/adresën e portës tuaj;
- direktiva auth-user-pass përdoret për autentifikim të jashtëm të shtuar.
Në katalogun tuaj të shtëpisë (ose në ndonjë vend të përshtatshëm) krijoni një skenar për kërkesën e certifikatave dhe krijimin e profilit:
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 ekzekutues:
chmod a+x ~/make.profile.shDhe mund të lëshojmë certifikatën tonë të parë.
~/make.profile.sh my-first-userRishikimi
Në rast të kompromentimit të certifikatës (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 e lëshuara dhe të revokuara, mjafton të shihni skedarin indeks:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Shpjegime:
- rreshti i parë ka certifikatën e serverit;
- simboli i parë
- V (Valid) â i vlefshĂ«m;
- R (Revoked) â i revokuar.
Konfigurimi i rrjetit
Hapat e fundit â konfigurimi i rrjetit tĂ« transmetimit â routing dhe firewall.
Lehtësimi i lidhjeve në firewall-in lokal:
$ sudo firewall-cmd --add-service=openvpn
$ sudo firewall-cmd --add-service=openvpn --permanent
Pastaj, aktivizoni routing-un 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 korporativ ka sigurisht një ndarje në subnet dhe na nevojitet të njoftojmë router-in(si) se si të dërgojmë paketa, të drejtuara klientëve tanë VPN. Në komandën e linjës ekzekutoni një komandë në mënyrën (varet nga pajisja e përdorur):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123dhe ruani konfigurimin.
Përveç kësaj, në ndërfaqen e router-it kufitar, ku shërbehet adresa e jashtme gw.abc.ru, është e nevojshme të lejohet kalimi i paketimeve udp/1194.
NĂ« rast se organizata juaj ka rregulla strikte sigurie, Ă«shtĂ« e nevojshme tĂ« konfigurohet gjithashtu njĂ« firewall nĂ« serverin tonĂ« VPN. Sipas mendimit tim, fleksibilitetin mĂ« tĂ« madh e jep konfigurimi i zinxhirĂ«ve FORWARD nĂ« iptables, ndonĂ«se Ă«shtĂ« mĂ« pak i pĂ«rshtatshĂ«m pĂ«r t'u konfiguruar. MĂ« shumĂ« detaje rreth konfigurimit tĂ« tyre. PĂ«r kĂ«tĂ«, Ă«shtĂ« mĂ« mirĂ« tĂ« pĂ«rdoren "rregullat direkte" â direct rules, tĂ« ruajtura nĂ« njĂ« skedar. /etc/firewalld/direct.xml. Konfiguracionin aktual tĂ« rregullave mund ta merrni kĂ«shtu:
$ sudo firewall-cmd --direct --get-all-rulePara se të ndryshoni skedarin, bëni një kopje rezervë të tij:
cp /etc/firewalld/direct.xml /etc/firewalld/direct.xml.`date +%F.%T`.bakPërmbajtja e skedarit ë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 '
Shpjegime
Në thelb, këto janë rregulla të zakonshme iptables, ndryshe të paketizuara pas shfaqjes së firewalld.
Interfaci i caktuar në konfigurimet e paracaktuara është tun0, ndërsa ai jashtë për tunelin mund të jetë ndryshe, për shembull, ens192, në varësi të platformës së përdorur.
Rreshti i fundit është për regjistrimin e paketimeve të hequra. Për të funksionuar regjistrimi, në konfigurimin e firewalld është e nevojshme të ndryshohet niveli i debulimit:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
Zbatimi i konfigurimeve â njĂ« komandĂ« e zakonshme firewalld pĂ«r tĂ« ripĂ«rtypur konfigurimet:
$ sudo firewall-cmd --reloadPakot e hequra mund të shihen kështu:
grep forward_fw /var/log/messages
ĂfarĂ« pason
Mbaroi konfigurimi!
Tani mbetet të instaloni softuerin e klientit në anën e klientit, të importoni profilin dhe të lidheni. Për sistemet operative të tipit Windows, distribucioni është vendosur në .
Përfundimisht, lidhim serverin tonë të ri me sistemet e monitorimit dhe arkivimit dhe nuk harrojmë të instalojmë rregullisht azhurnime.
Konnekton stabil!
Burimi: habr.com
