SMB organizacijos nuotolinio darbo organizavimas naudojant OpenVPN
Problemos teiginys
Straipsnyje aprašomas darbuotojų nuotolinės prieigos prie atvirojo kodo produktų organizavimas ir gali būti naudojamas tiek kuriant visiškai autonomišką sistemą, tiek pravers plečiantis, kai esamoje komercinėje sistemoje pritrūks licencijų arba jos našumas yra nepakankamas.
Straipsnio tikslas – įdiegti visą nuotolinės prieigos prie organizacijos sistemą, kuri yra šiek tiek daugiau nei „OpenVPN įdiegimas per 10 minučių“.
Dėl to mes gausime sistemą, kurioje sertifikatai ir (pasirinktinai) įmonės Active Directory bus naudojami naudotojų autentifikavimui. Tai. gausime sistemą su dviem patikros faktoriais – ką turiu (sertifikatas) ir ką žinau (slaptažodis).
Ženklas, kad vartotojui leidžiama prisijungti, yra jo narystė myVPNUsr grupėje. Sertifikato institucija bus naudojama neprisijungus.
Sprendimo diegimo kaina yra tik nedideli aparatūros resursai ir 1 valandos sistemos administratoriaus darbo.
„CetntOS 3“ naudosime virtualią mašiną su „OpenVPN“ ir „Easy-RSA“ 7 versija, kuriai 100 jungčių skirti 4 vCPU ir 4 GiB RAM.
Pavyzdyje mūsų organizacijos tinklas yra 172.16.0.0/16, kuriame VPN serveris su adresu 172.16.19.123 yra segmente 172.16.19.0/24, DNS serveriai 172.16.16.16 ir 172.16.17.17 subnet.172.16.20.0. .23/XNUMX yra skirta VPN klientams .
Norint prisijungti iš išorės, naudojamas ryšys per prievadą 1194/udp, o mūsų serverio DNS yra sukurtas A įrašas gw.abc.ru.
Griežtai nerekomenduojama išjungti SELinux! OpenVPN veikia neišjungus saugos politikos.
Mes naudojame CentOS 7.8.2003 platinimą. Turime įdiegti OS minimalia konfigūracija. Tai patogu daryti naudojant pradžia, klonuoti anksčiau įdiegtą OS vaizdą ir kitomis priemonėmis.
Įdiegę, tinklo sąsajai priskyrę adresą (pagal užduoties 172.16.19.123 sąlygas), atnaujiname OS:
$ sudo yum update -y && reboot
Taip pat turime užtikrinti, kad mūsų įrenginyje būtų atliktas laiko sinchronizavimas.
Norėdami įdiegti taikomąją programinę įrangą, kaip pagrindinį redaktorių jums reikia paketų openvpn, openvpn-auth-ldap, easy-rsa ir vim (jums reikės EPEL saugyklos).
Čia aprašyti sąlyginės organizacijos ABC LLC parametrai, kuriuos galite pataisyti į tikrus arba palikti iš pavyzdžio. Parametruose svarbiausia paskutinė eilutė, kuri nusako sertifikato galiojimo laiką dienomis. Pavyzdyje naudojama reikšmė 10 metų (365*10+2 keliamieji metai). Šią reikšmę reikės pakoreguoti prieš išduodant vartotojo sertifikatus.
Tada sukonfigūruojame autonominę sertifikavimo instituciją.
Sąranka apima kintamųjų eksportavimą, CA inicijavimą, CA šakninio rakto ir sertifikato, Diffie-Hellman rakto, TLS rakto ir serverio rakto bei sertifikato išdavimą. CA raktas turi būti kruopščiai apsaugotas ir laikomas paslaptyje! Visi užklausos parametrai gali būti palikti kaip numatytieji.
Tai užbaigia pagrindinę kriptografinio mechanizmo nustatymo dalį.
„OpenVPN“ nustatymas
Eikite į OpenVPN katalogą, sukurkite paslaugų katalogus ir pridėkite nuorodą į 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/
Sukurkite pagrindinį OpenVPN konfigūracijos failą:
$ sudo vim server.conf
sekantį turinį
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
Kai kurios pastabos dėl parametrų:
jeigu išduodant pažymėjimą buvo nurodytas kitas pavadinimas, nurodyti jį;
nurodykite adresų grupę, kad ji atitiktų jūsų užduotis*;
gali būti vienas ar daugiau maršrutų ir DNS serverių;
Paskutinės 2 eilutės reikalingos autentifikavimui įgyvendinti AD**.
*Pavyzdyje pasirinktas adresų diapazonas leis vienu metu prisijungti iki 127 klientų, nes pasirenkamas /23 tinklas, o OpenVPN sukuria potinklį kiekvienam klientui, naudodamas /30 kaukę.
Jei ypač reikia, prievadą ir protokolą galima pakeisti, tačiau reikia turėti omenyje, kad pakeitus prievado prievado numerį reikės konfigūruoti SELinux, o naudojant tcp protokolą padidės išlaidos, nes TCP paketų pristatymo kontrolė jau vykdoma tunelyje esančių paketų lygiu.
**Jei autentifikavimo AD nereikia, pakomentuokite juos, praleiskite kitą skyrių ir šablone pašalinkite eilutę auth-user-pass.
AD autentifikavimas
Norėdami paremti antrąjį veiksnį, naudosime paskyros patvirtinimą AD.
Mums reikia paskyros domene su paprasto vartotojo ir grupės teisėmis, kurios narystė lems galimybę prisijungti.
systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Sertifikato išdavimas ir atšaukimas
Nes Be pačių sertifikatų, reikia raktų ir kitų nustatymų, labai patogu visa tai suvynioti į vieną profilio failą. Tada šis failas perkeliamas vartotojui, o profilis importuojamas į OpenVPN klientą. Norėdami tai padaryti, sukursime nustatymų šabloną ir scenarijų, kuris generuoja profilį.
Prie profilio turite pridėti šakninio sertifikato (ca.crt) ir TLS rakto (ta.key) failų turinį.
Prieš išduodant vartotojo sertifikatus nepamirškite nustatyti reikiamo sertifikatų galiojimo termino parametrų faile. Neturėtumėte to padaryti per ilgai; rekomenduoju apsiriboti iki 180 dienų.
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>
Pastabos:
stygos PADĖK SAVO... pakeisti į turinį pačių sertifikatai;
nuotolinėje direktyvoje nurodykite savo šliuzo pavadinimą/adresą;
direktyva auth-user-pass naudojama papildomam išoriniam autentifikavimui.
Namų kataloge (ar kitoje patogioje vietoje) sukuriame sertifikato užklausos ir profilio sukūrimo scenarijų:
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 ~
Padaryti failą vykdomąjį:
chmod a+x ~/make.profile.sh
Ir mes galime išduoti savo pirmąjį sertifikatą.
~/make.profile.sh my-first-user
Atsiliepimai
Pažeidus pažymėjimą (pametus, pavogus), šią pažymą būtina panaikinti:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
Peržiūrėkite išduotus ir atšauktus sertifikatus
Norėdami peržiūrėti išduotus ir atšauktus sertifikatus, tiesiog peržiūrėkite indekso failą:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Paaiškinimas:
pirmoji eilutė yra serverio sertifikatas;
pirmasis veikėjas
V (Galioja) – galioja;
R (Atšauktas) – atšauktas.
Tinklo sąranka
Paskutiniai žingsniai yra perdavimo tinklo konfigūravimas – maršruto parinkimas ir ugniasienės.
Įmonės aplinkoje greičiausiai bus antrinis tinklas ir mes turime nurodyti maršruto parinktuvui (-ams), kaip siųsti paketus, skirtus mūsų VPN klientams. Komandų eilutėje komandą vykdome tokiu būdu (priklausomai nuo naudojamos įrangos):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123
ir išsaugokite konfigūraciją.
Be to, pasienio maršrutizatoriaus sąsajoje, kurioje aptarnaujamas išorinis adresas gw.abc.ru, būtina leisti perduoti udp/1194 paketus.
Jei organizacija taiko griežtas saugumo taisykles, ugniasienė taip pat turi būti sukonfigūruota mūsų VPN serveryje. Mano nuomone, didžiausią lankstumą suteikia iptables FORWARD grandinių nustatymas, nors jas nustatyti yra mažiau patogu. Šiek tiek daugiau apie jų nustatymą. Norėdami tai padaryti, patogiausia naudoti „tiesiogines taisykles“ - tiesiogines taisykles, saugomas faile /etc/firewalld/direct.xml. Dabartinę taisyklių konfigūraciją galima rasti taip:
$ sudo firewall-cmd --direct --get-all-rule
Prieš keisdami failą, pasidarykite atsarginę jo kopiją:
Iš esmės tai yra įprastos iptables taisyklės, skirtingai supakuotos po ugniasienės atsiradimo.
Paskirties sąsaja su numatytaisiais nustatymais yra tun0, o išorinė tunelio sąsaja gali skirtis, pavyzdžiui, ens192, priklausomai nuo naudojamos platformos.
Paskutinė eilutė skirta numestų paketų registravimui. Kad prisijungimas veiktų, ugniasienės konfigūracijoje turite pakeisti derinimo lygį:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
Nustatymų taikymas yra įprasta ugniasienės komanda, skirta iš naujo nuskaityti nustatymus:
$ sudo firewall-cmd --reload
Numestus paketus galite peržiūrėti taip:
grep forward_fw /var/log/messages
Kas toliau?
Tai užbaigia sąranką!
Belieka įdiegti kliento programinę įrangą kliento pusėje, importuoti profilį ir prisijungti. „Windows“ operacinėms sistemoms platinimo rinkinys yra kūrėjo svetainė.
Galiausiai, mes prijungiame savo naują serverį prie stebėjimo ir archyvavimo sistemų ir nepamirštame reguliariai įdiegti naujinimų.