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.

Turinys

  1. OS ir taikomosios programinės įrangos diegimas
  2. Kriptografijos nustatymas
  3. „OpenVPN“ nustatymas
  4. AD autentifikavimas
  5. Paleidimas ir diagnostika
  6. Sertifikato išdavimas ir atšaukimas
  7. Tinklo sąranka
  8. Kas toliau?

OS ir taikomosios programinės įrangos diegimas

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

$ sudo yum install epel-release
$ sudo yum install openvpn openvpn-auth-ldap easy-rsa vim

Virtualioje mašinoje naudinga įdiegti svečio agentą:

$ sudo yum install open-vm-tools

VMware ESXi pagrindiniams kompiuteriams arba oVirt

$ sudo yum install ovirt-guest-agent

Kriptografijos nustatymas

Eikite į easy-rsa katalogą:

$ cd /usr/share/easy-rsa/3/

Sukurkite kintamąjį failą:

$ sudo vim vars

toks turinys:

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

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

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

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.

Sukurkite konfigūracijos failą:

/etc/openvpn/ldap.conf

sekantį turinį

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

Pagrindiniai parametrai:

  • URL „ldap://ldap.abc.ru“ - domeno valdiklio adresas;
  • BindDN “CN=bindUsr,CN=Users,DC=abc,DC=ru“ – kanoninis susiejimo su LDAP pavadinimas (UZ – bindUsr konteineryje abc.ru/Users);
  • Slaptažodis b1ndP@SS — vartotojo slaptažodis susiejimui;
  • BaseDN „OU=allUsr,DC=abc,DC=ru“ — kelias, nuo kurio pradėti ieškoti vartotojo;
  • BaseDN „OU=myGrp,DC=abc,DC=ru“ – leidžiančios grupės konteineris (grupė myVPNUsr konteineryje abc.rumyGrp);
  • SearchFilter „(cn=myVPNUsr)“ yra leidžiančios grupės pavadinimas.

Paleidimas ir diagnostika

Dabar galime pabandyti įjungti ir paleisti serverį:

$ sudo systemctl enable [email protected]
$ sudo systemctl start [email protected]

Paleidimo patikra:

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.

Leidžiami ryšiai vietinėje užkardoje:

$ sudo firewall-cmd --add-service=openvpn
$ sudo firewall-cmd --add-service=openvpn --permanent

Tada įgalinkite IP srauto nukreipimą:

$ sudo sysctl net.ipv4.ip_forward=1
$ sudo echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/50-sysctl.conf

Į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ą:

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

Apytikslis failo turinys yra:

<?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>

Paaiškinimai

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

Stabilus ryšys!

Šaltinis: www.habr.com

Добавить комментарий