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ë.

Përmbajtje

  1. Instalimi i sistemit operativ dhe softuerit aplikativ
  2. Vendosja e kriptografisë
  3. Konfigurimi i OpenVPN
  4. Autentifikimi i AD
  5. Fillimi dhe diagnostikimi
  6. Lëshimi dhe revokimi i certifikatës
  7. Konfigurimi i rrjetit
  8. Ç'pritet më tej

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).

$ 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-tools

pë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 vars

përmbajtjen e mëposhtme:

export KEY_COUNTRY="RU"
export KEY_PROVINCE="MyRegion"
export KEY_CITY="MyCity"
export KEY_ORG="ABC LLC"
export KEY_EMAIL="[email protected]"
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.

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.

Krijo një skedar konfigurimi:

/etc/openvpn/ldap.conf

pë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 [email protected]
$ sudo systemctl start [email protected]

Kontrolli i fillimit:

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.

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.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:

cp /etc/firewalld/direct.xml /etc/firewalld/direct.xml.`date +%F.%T`.bak

Pë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 --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.

Lidhje e qëndrueshme!

Burimi: www.habr.com

Shto një koment