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 këtij artikulli është të zbatojë një sistem të plotë për të siguruar akses në distancë për një organizatë, i cili është pak më shumë se "instalimi". 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.
Do të përdorim një makinë virtuale me OpenVPN dhe Easy-RSA versioni 3 në CetntOS 7, të cilit i janë ndarë 4 vCPU, 4 GiB RAM për 100 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ë.
Rekomandohet fuqimisht të mos çaktivizoni SE-në.Linux! OpenVPN Funksionon pa çaktivizuar politikat e sigurisë.
Përmbajtje
Instalimi i sistemit operativ dhe softuerit aplikativ
Ne përdorim shpërndarjen CentOS 7.8.2003. Duhet ta instalojmë sistemin operativ në një konfigurim minimal. Është e përshtatshme ta bëjmë këtë duke përdorur , 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).
$ sudo yum install epel-release
$ sudo yum install openvpn openvpn-auth-ldap easy-rsa vim
Është e dobishme të instaloni një agjent të ftuar për një makinë virtuale:
$ sudo yum install open-vm-toolspër hostet VMware ESXi, ose për oVirt
$ sudo yum install ovirt-guest-agent
Vendosja e kriptografisë
Shkoni te drejtoria easy-rsa:
$ cd /usr/share/easy-rsa/3/Krijoni një skedar të ndryshueshëm:
$ sudo vim varspërmbajtjen 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
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.
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
Kjo përfundon pjesën kryesore të konfigurimit të mekanizmit kriptografik.
rregullim OpenVPN
Shkoni te katalogu OpenVPN, krijoni drejtori shërbimesh dhe shtoni një lidhje te 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/
Krijo një skedar konfigurimi kryesor OpenVPN:
$ sudo vim server.confpë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**.
*Diapazoni i adresave të zgjedhura në shembull do të lejojë që deri në 127 klientë të lidhen njëkohësisht, meqenëse është zgjedhur rrjeti /23, dhe OpenVPN krijon një nënrrjet me maskë /30 për secilin klient.
Nëse lind një nevojë e veçantë, porta dhe protokolli mund të ndryshohen, megjithatë, duhet të theksohet se ndryshimi i numrit të portit do të kërkojë konfigurimin e SE.Linux, dhe përdorimi i protokollit TCP do të rrisë kostot e përgjithshme, pasi kontrolli i shpërndarjes së paketave TCP kryhet tashmë në nivelin e paketave të enkapsuluara 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.
Krijo një skedar konfigurimi:
/etc/openvpn/ldap.confpërmbajtjet e mëposhtme
<LDAP>
URL "ldap://ldap.abc.ru"
BindDN "CN=bindUsr,CN=Users,DC=abc,DC=ru"
Password b1ndP@SS
Timeout 15
TLSEnable no
FollowReferrals yes
</LDAP>
<Authorization>
BaseDN "OU=allUsr,DC=abc,DC=ru"
SearchFilter "(sAMAccountName=%u)"
RequireGroup true
<Group>
BaseDN "OU=myGrp,DC=abc,DC=ru"
SearchFilter "(cn=myVPNUsr)"
MemberAttribute "member"
</Group>
</Authorization>
Parametrat kryesorë:
- URL "ldap://ldap.abc.ru" - adresa e kontrolluesit të domenit;
- BindDN "CN=bindUsr,CN=Përdoruesit,DC=abc,DC=ru" - emri kanonik për lidhjen me LDAP (UZ - bindUsr në kontejnerin abc.ru/Users);
- Fjalëkalimi b1ndP@SS - fjalëkalimi i përdoruesit për lidhje;
- BaseDN “OU=allUsr,DC=abc,DC=ru” — rruga nga e cila fillon kërkimi për përdoruesin;
- BaseDN “OU=myGrp,DC=abc,DC=ru” - kontejner i grupit lejues (grupi myVPNUsr në kontejnerin abc.rumyGrp);
- SearchFilter "(cn=myVPNUsr)" është emri i grupit lejues.
Fillimi dhe diagnostikimi
Tani mund të përpiqemi të aktivizojmë dhe të nisim serverin tonë:
$ sudo systemctl enable openvpn@server.service
$ sudo systemctl start openvpn@server.service
Kontrolli i fillimit:
systemctl status openvpn@server.service
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Lëshimi dhe revokimi i certifikatës
Meqenëse çelësat dhe cilësimet e tjera janë të nevojshme përveç vetë certifikatave, është shumë e përshtatshme të mblidhen të gjitha në një skedar të vetëm profili. Ky skedar më pas transferohet te përdoruesi dhe profili importohet në klient. OpenVPNPër ta bërë këtë, do të krijojmë një shabllon cilësimesh dhe një skript që gjeneron një profil.
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.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
<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.shDhe ne mund të lëshojmë certifikatën tonë të parë.
~/make.profile.sh my-first-userrisjell
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.
Lejimi i lidhjeve në murin e zjarrit lokal:
$ sudo firewall-cmd --add-service=openvpn
$ sudo firewall-cmd --add-service=openvpn --permanent
Më pas, aktivizoni drejtimin 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ë 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.123dhe 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-rulePara se të ndryshoni një skedar, bëni një kopje rezervë të tij:
cp /etc/firewalld/direct.xml /etc/firewalld/direct.xml.`date +%F.%T`.bakPërmbajtja e përafërt e skedarit është:
<?xml version="1.0" encoding="utf-8"?>
<direct>
<!--Common Remote Services-->
<!--DNS-->
<rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o ens192 -p udp --dport 53 -j ACCEPT</rule>
<!--web-->
<rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -p tcp -d 172.16.19.200 --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT</rule>
<rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -p tcp -d 172.16.19.201 --dport 443 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT</rule>
<!--Some Other Systems-->
<rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -p udp -d 172.16.19.100 --dport 7000 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT</rule>
<!--just logging-->
<rule priority="1" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -j LOG --log-prefix 'forward_fw '</rule>
</direct>
shpjegime
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 --reloadJu mund t'i shikoni paketat e lëshuara si kjo:
grep forward_fw /var/log/messages
Ç'pritet më tej
Kjo përfundon konfigurimin!
E tëra çfarë mbetet nga ana e klientit është instalimi i softuerit të klientit, importimi i profilit dhe lidhja. Për llojin e sistemit operativ Windows Shpërndarja ndodhet në .
Së fundi, ne lidhim serverin tonë të ri me sistemet e monitorimit dhe arkivimit dhe mos harroni të instaloni rregullisht përditësime.
Lidhje e qëndrueshme!
Burimi: www.habr.com
