SMB organisatsiooni kaugtoimingute seadmine OpenVPN-is

Ülesande seadmine

Artikkel kirjeldab töötajate kaugjuurdepääsu korraldamist avatud lähtekoodiga toodete kaudu ning seda saab kasutada nii täieliku iseseisva süsteemi ülesehitamiseks kui ka laiendamiseks, kui olemasolevas kaubanduslikus süsteemis tekib litsentside puudus või selle jõudlus osutub ebapiisavaks.

Artikli eesmärk on rakendada lõpuleviidud kaugjuurdepääsu süsteem organisatsioonile, mis ulatub kaugemale kui "OpenVPN-i seadistamine 10 minutiga".

Tulemuseks on süsteem, kus kasutajate autentimiseks kasutatakse sertifikaate ja (valikuliselt) ettevõtte Active Directory katalooge. Seega saame süsteemi, kus on kaks kontrollifaktorit — see, mida mul on (sertifikaat) ja see, mida ma tean (parool).

Kasutajale ühendamise lubamise tunnuseks on tema kuuluvus rühma myVPNUsr. Sertifitseerimiskeskus toimib iseseisvalt.

Lahenduse rakendamise hind — ainult väikesed riistvaranõuded ja 1 tunni töö infosüsteemide administratori poolt.

Kasutame virtuaalset masinat OpenVPN-i ja Easy-RSA 3. versiooniga CentOS 7, millel on 100 ühenduse jaoks välja antud 4 vCPU ja 4 GiB RAM.

Käesolevas näites on meie organisatsiooni võrk 172.16.0.0/16, kus VPN-serveri aadress 172.16.19.123 asub segmendis 172.16.19.0/24. DNS-serverid on 172.16.16.16 ja 172.16.17.17 ning VPN-klientidele on eraldatud alamvõrk 172.16.20.0/23.

Väljapoole ühendamiseks kasutatakse porti 1194/udp. Meie serveri jaoks on DNS-is loodud A-kirje gw.abc.ru.

SELinuxi väljalülitamine on kategooriliselt ebatõenäoline! OpenVPN töötab ilma turvapoliitikate väljalülitamiseta.

Sisu

  1. Operatsioonisüsteemi ja rakendustarkvara installimine
  2. Krüptograafia seadistamine
  3. OpenVPN-i seadistamine
  4. Autentimine AD-s
  5. Käivitamine ja diagnoosimine
  6. Sertifikaadi väljastamine ja tühistamine
  7. Võrgu seadistamine
  8. Mis edasi

Operatsioonisüsteemi ja rakendustarkvara installimine

Kasutame distributsiooni CentOS 7.8.2003. Me vajame operatsioonisüsteemi minimaalset konfigureerimist. Mugav on seda teha kasutades kickstart, eelnevalt installitud OS-pildi kloonimise ja teiste vahendite abil.

Pärast installimist ja IP-aadressi määramist võrgu liidesele (ülesande tingimuste järgi 172.16.19.123) teeme operatsioonisüsteemi värskenduse:

$ sudo yum update -y && reboot

Samuti on oluline veenduda, et meie masinal toimub aja sünkroniseerimine.
Rakenduste installimiseks on vajalikud paketid openvpn, openvpn-auth-ldap, easy-rsa ja vim, milleks on peamine redigeerija (vajalik on EPEL-repo).

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

Virtuaalmasina jaoks on kasulik paigaldada külaliste agent:

$ sudo yum install open-vm-tools

VMware ESXi hostide või oVirt jaoks

$ sudo yum install ovirt-guest-agent

Krüptograafia seadistamine

Liigume katalooge easy-rsa:

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

Loome muutujate faili:

$ sudo vim vars

järgnevate sisu:

export KEY_COUNTRY="EE"
export KEY_PROVINCE="MyRegion"
export KEY_CITY="MyCity"
export KEY_ORG="ABC LLC"
export KEY_EMAIL="admin@abc.ee"
export KEY_CN="allUsers"
export KEY_OU="allUsers"
export KEY_NAME="gw.abc.ee"
export KEY_ALTNAMES="abc-openvpn-server"
export EASYRSA_CERT_EXPIRE=3652

Siin on kirjeldatud tingimusliku organisatsiooni OÜ "ABC" parameetreid, mida saab kohandada reaalsuse kohaselt või jätta näidisena. Parameetrites on kõige olulisem viimane rida, mis määrab sertifikaadi kehtivuse päevades. Näidises on kasutatud väärtust 10 aastat (365 * 10 + 2 üleaastat). Seda väärtust tuleb kohandada enne kasutajate sertifikaatide väljastamist.

Seejärel seadistame iseseisva sertifitseerimiskeskuse.

Seade sisaldab muutujate eksportimist, CA initsialiseerimist, juurik võtme ja CA sertifikaadi väljastamist, Diffie-Hellmani võtit, TLS võtit, samuti serveri võtit ja sertifikaati. Sertifikaadi keskuse võtit tuleb hoida hoolikalt ja saladuses! Kõiki parameetreid päringutes saab jätta vaikimisi.

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

Sellel on peamine osa krüptograafilise mehhanismi seadistamisest lõpetatud.

OpenVPN-i seadistamine

Liigume OpenVPN katalooge, loome teenuskaustad ja lisame viite easy-rsa-le:

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/

Loome OpenVPN põhikonfiguratsioonifaili:

$ sudo vim server.conf

järgmise sisuga

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

Mõned märkused parameetrite kohta:

  • kui sertifikaadi väljastamisel on kasutatud teistsugust nime — märkige see;
  • aadresside vahemikku seadke vastavalt oma vajadustele*;
  • marsruute ja DNS-servereid võib olla üks või mitu;
  • 2 viimast rida on vajalikud AD-s autentimise rakendamiseks**.

*Valitud näites suurusjärk võimaldab üheaegselt ühendada kuni 127 klienti, kuna valitud on võrk /23, ja OpenVPN loob iga kliendi jaoks alavõrgu maskiga /30.
Er特殊 vajadusega võivad pordi ja protokolli muuta, kuid tuleb silmas pidada, et pordi numbri muutmine toob kaasa SELinux'i seadistamise ning tcp-protokolli kasutamine suurendab kulusid, kuna tcp-pakettide kohaletoimetamise kontroll toimub juba tunnelis kapseldatud pakettide tasemel.

**Kui AD autentimist ei vajata, kommenteerige need välja, järgmise osa — jätke vahele ning mallis kustutage rida auth-user-pass.

Autentimine AD-s

Teise teguri toetamiseks kasutame AD konto kontrolle.

Meil on vajalik domeenis konto, millel on tavalise kasutaja õigused ja grupp, mille liikmelisus määrab ühenduse loomise võimaluse.

Loome konfiguratsioonifaili:

/etc/openvpn/ldap.conf

järgmise sisuga

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"

Peamised parameetrid:

  • URL «ldap://ldap.abc.ru» — domeeni kontrollija aadress;
  • BindDN «CN=bindUsr,CN=Users,DC=abc,DC=ee» — LDAP-i sidumise kanoniline nimi (kasutaja — bindUsr kaustas abc.ee/Users);
  • Parool b1ndP@SS — sidumise kasutaja parool;
  • BaseDN «OU=allUsr,DC=abc,DC=ee» — tee, kust alustada kasutaja otsingut;
  • BaseDN «OU=myGrp,DC=abc,DC=ee» — lubava grupi konteiner (rühm myVPNUsr konteineris abc.ee/myGrp);
  • SearchFilter "(cn=myVPNUsr)" — lubava grupi nimi.

Käivitamine ja diagnoosimine

Nüüd saame proovida meie serveri активировать и запустить:

$ sudo systemctl enable openvpn@server.service
$ sudo systemctl start openvpn@server.service

Käivitamise kontroll:

systemctl status openvpn@server.service
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log

Sertifikaadi väljastamine ja tühistamine

Kuna lisaks sertifikaatidele on vajalikud ka võti ja kõik muud seadistused, on väga mugav kõik see ühte profiilifaili kokku panna. See fail antakse pärast kasutajale edasi ja profiil imporditakse OpenVPN kliendis. Selle jaoks loome seadistuste mall ja skripti, mis genereerib profiili.

Profiili tuleb lisada juursertifikaadi (ca.crt) ja TLS võtme (ta.key) sisu.

Enne kasutajate sertifikaatide väljastamist ärge unustage seada nõutud sertifikaatide kestvust seadistusfailis. Ei tohiks teha seda liiga pikaks, soovitan piirata maksimaalselt 180 päevaga.

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


-----BEGIN CERTIFICATE-----
PUT YOUR CA CERT (ca.crt) HERE
-----END CERTIFICATE-----


key-direction 1

-----BEGIN OpenVPN Static key V1-----
PUT YOUR TA KEY (ta.key) HERE
-----END OpenVPN Static key V1-----

Märkused:

  • read PUT YOUR… asendame sisuga oma sertifikaate;
  • remote direktiivis märkige oma värava nimi/aadress;
  • auth-user-pass direktiiv on kasutusel täiendava välist autentimise jaoks.

Kodu kataloogis (või muus mugavas kohas) loome skripti sertifikaadi taotlemiseks ja profiili loomiseks:

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 ~

Teeme fail täidetavaks:

chmod a+x ~/make.profile.sh

Ja meil on võimalik välja anda meie esimene sertifikaat.

~/make.profile.sh my-first-user

Keeldumine

Sertifikaadi (kaotsimine, vargus) kompromiteerimise korral on vaja see sertifikaat tühistada:

cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl

Väljastatud ja tühistatud sertifikaatide vaatamine

Väljastatud ja tühistatud sertifikaatide vaatamiseks piisab indeksifaili vaatamisest:

cd /usr/share/easy-rsa/3/
cat pki/index.txt

Selgitused:

  • esimeses reas on serveri sertifikaat;
  • esimene märk
    • V (Kehtiv) — kehtiv;
    • R (Revoked) — tühistatud.

Võrgu seadistamine

Viimased sammud — edastusvõrgu seadistamine — marsruutimine ja tulemüürid.

Ühenduste lubamine kohalikus tulemüüris:

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

Edasi, lubame IP liikluse marsruutimise:

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

Ettevõtte keskkonnas on kindlasti alamvõrkude jaotamine ning peame teavitama marsruuterit (-eid), kuidas edastada pakette, mis on suunatud meie VPN klientidele. Käskude rida sisestame käsu järgmiselt (sõltub kasutatavast varustusest):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

ja salvestame seadistuse.

Lisaks sellele peab piiritletud marsruuteri liideses, kus teenindatakse välist aadressi gw.abc.ru, lubama udp/1194 pakettide edastamise.

Kui organisatsioonis on rangelt järgitud turvareegleid, peab meie VPN serveris olema samuti seadistatud tulemüür. Minu arvates annab kõige rohkem paindlikkust iptables'i FORWARD ahelate seadistamine, kuigi nende seadistamine on vähem mugav. Veidi rohkem nende seadistamisest. Selleks on kõige lihtsam kasutada "otse reegleid" — direct rules, mis on salvestatud faili. /etc/firewalld/direct.xml. Aktiivse reegli konfiguratsiooni saab teada järgmistel viisidel:

$ sudo firewall-cmd --direct --get-all-rule

Enne faili muutmist tehke sellest varukoopia:

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

Faili ligikaudne sisu on järgmine:


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

Selgitused

Sisuliselt on need tavalised iptables reeglid, mis on pärast firewalldi kasutuselevõttu korraldatud.

Vaikeseadetest on sihtliides tun0, välisseade tunnelile võib olla erinev, nt ens192, sõltuvalt kasutatavast platvormist.

Viimane rida on ette nähtud kõrvaldatud pakkide logimiseks. Logimise hõlbustamiseks tuleb firewalld konfiguratsioonis muuta tõrkeotsingu taset:

vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2

Seadete rakendamine — tavaline käsk firewalld'i seadete uuesti lugemiseks:

$ sudo firewall-cmd --reload

Kõrvaldatud pakkide vaatamine toimub nii:

grep forward_fw /var/log/messages

Mis edasi

Sellel seadistamine lõppes!

Kliendi poolel tuleb paigaldada klientrakendus, importida profiil ja luua ühendus. Windowsi operatsioonisüsteemide jaoks on pakett saadaval arendaja veebisaidil.

Lõpuks ühendame meie uue serveri monitooringu ja arhiveerimissüsteemidega ning ei tohi unustada regulaarselt värskendusi installida.

Stabiilset ühendust!

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster