SMB organisatsioonide kaug-töötamise korraldamine OpenVPN-i kaudu

Ülesande seadmine

Artikkel kĂ€sitleb töötajate kaugjuurdepÀÀsu korraldamist avatud lĂ€htekoodiga toodete abil ja seda saab kasutada nii tĂ€ielikult iseseisva sĂŒsteemi loomiseks kui ka olemasoleva kommertsĂŒsteemi laiendamiseks, kui litsentsidest on puudu vĂ”i sĂŒsteemi jĂ”udlus on ebapiisav.

Artikli eesmĂ€rk on rakendada valmiskujul kaugjuurdepÀÀsu sĂŒsteem organisatsioonis, mis on veidi rohkem kui "OpenVPN-i seadistamine 10 minutiga".

LĂ”pptulemusena saame sĂŒsteemi, kus kasutajate autentimiseks kasutatakse sertifikaate ja (valikuliselt) ettevĂ”tte Active Directory katalooge. Seega saame kahefaktorilise autentimise sĂŒsteemi — mida omame (sertifikaat) ja mida teame (parool).

Tunnuseks, et kasutajal on lubatud ĂŒhendus, on tema kuuluvus myVPNUsr gruppi. Kasutatakse iseseisvat sertifitseerimiskeskust.

Lahenduse rakendamise hind on ainult vĂ€ikesed riistvaralised ressursid ja 1 tunni töö sĂŒsteemiadministraatorilt.

Kasutame virtuaalset masinat OpenVPN-i ja Easy-RSA 3. versiooniga CentOS 7-l, mille puhul on 100 ĂŒhenduse arvestuses antud 4 vCPU ja 4 GiB RAM-i.

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 172.16.16.16 ja 172.16.17.17 ning VPN-klientidele on eraldatud alamvÔrk 172.16.20.0/23.

VĂ€ljaspool ĂŒhendamiseks kasutatakse aadressi 1194/udp ning meie serveri jaoks on DNS-is loodud A-kiri gw.abc.ru.

Selgelt ei soovitata SELinuxi vĂ€lja lĂŒlitada! OpenVPN töötab turvapoliitika keeldu vĂ€lja lĂŒlitamata.

Sisukord

  1. OperatsioonisĂŒsteemi ja rakendustarkvara installimine
  2. KrĂŒptograafia seadistamine
  3. OpenVPN-i seadistamine
  4. Autentimine AD-s
  5. KĂ€ivitamine ja diagnoosimine
  6. Sertifikaatide vĂ€ljastamine ja tĂŒhistamine
  7. VÔrgu seadistamine
  8. Mis edasi

OperatsioonisĂŒsteemi ja rakendustarkvara installimine

Kasutame CentOS 7.8.2003 ja me vajame operatsioonisĂŒsteemi minimaalset seadistust. Soovitatav on teha seda kasutades kickstart, varasema installitud operatsioonisĂŒsteemi kloonimise ja teiste vahendite kaudu.

PĂ€rast installimist ja IP-aadressi mÀÀramist vĂ”rgu liidesele (ĂŒlesande tingimuste kohaselt 172.16.19.123), teeme operatsioonisĂŒsteemi vĂ€rskenduse:

$ sudo yum update -y && reboot

Samuti on vajalik veenduda, et meie masinas toimuks ajasĂŒnkroniseerimine.
Rakendustarkvara installimiseks on vajalikud paketid openvpn, openvpn-auth-ldap, easy-rsa ja vim kui peamine redaktor (vajalik on EPEL-repositoorium).

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

Virtuaalmasina jaoks on kasulik paigaldada kĂŒlalisagent:

$ sudo yum install open-vm-tools

VMware ESXi hostide vÔi oVirt jaoks

$ sudo yum install ovirt-guest-agent

KrĂŒptograafia seadistamine

Liigume easy-rsa kataloogi:

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

Loodame muutuja faili:

$ sudo vim vars

jÀrgneva sisu:

export KEY_COUNTRY="EE"
export KEY_PROVINCE="MyRegion"
export KEY_CITY="MyCity"
export KEY_ORG="ABC OÜ"
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 mÀÀratletud parameetrid nĂ€iliseks organisatsiooniks OÜ «ABC», neid saab muuta tĂ”eliseks vĂ”i jĂ€tta nĂ€idise jĂ€rgi. KĂ”ige olulisem parametrites on viimane rida, mis mÀÀrab sertifikaadi kehtivuse pĂ€evades. NĂ€ites on kasutatud vÀÀrtust 10 aastat (365*10+2 liigaasta). Seda vÀÀrtust tuleb kasutajate sertifikaatide vĂ€ljastamisel kohandada.

JĂ€tkame iseseisva sertifitseerimiskeskuse seadistamist.

Seadistus hÔlmab muutujaid eksportimist, CA initsialiseerimist, juure vÔtme ja CA sertifikaadi vÀljastamist, Diffie-Hellmani vÔtme, TLS vÔtme ning serveri vÔtme ja sertifikaadi loomist. Sertifitseerimiskeskuse vÔti peab olema hoolikalt kaitstud ja salajas hoitud! KÔik parameetrid 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

Selle etapiga on krĂŒptograafilise mehhanismi peamine seadistamine lĂ”petatud.

OpenVPN-i seadistamine

Liigume OpenVPN katalooge, loome teeninduskatalooge ja lisame lingi 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/

Loodame OpenVPN peamise seadistuste faili:

$ sudo vim server.conf

jÀrgnev sisu

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 oli mÀÀratud teine nimi — esitage see;
  • aadressipool peab olema kohandatud vastavalt teie vajadustele*;
  • marsruute ja DNS servereid vĂ”ib olla ĂŒks vĂ”i mitu;
  • 2 viimast rida on vajalikud AD autentimise rakendamiseks.

*Valitud nĂ€idisvahemik vĂ”imaldab korraga ĂŒhenduda kuni 127 kliendiga, kuna on valitud /23 vĂ”rk ja OpenVPN loob iga kliendi kohta alavĂ”rgu /30 maskiga.
Eriti vajadusel saab porti ja protokolli muuta, kuid tuleb arvestada, et sadama numbri muutmine toob kaasa SELi teabe seadistamise, ja TCP protokolli kasutamine suurendab kulusid, kuna TCP-pakettide kohaletoimetamise kontroll tehakse juba tunneli pakettide tasemel.

**Kui AD autentimine ei ole vajalik, kommenteerige need vÀlja, jÀrgmise lahtri vÔib vahele jÀtta ja mallis eemaldage rida auth-user-pass..

Autentimine AD-s

Teise teguri toe jaoks kasutame konto kontrollimist AD-s.

Meile on vajalik domeeni konto tavakasutaja Ă”igustega ja grupp, mille kuuluvus mÀÀrab ĂŒhenduse vĂ”imaluse.

Loome seadistusfaili:

/etc/openvpn/ldap.conf

jÀrgnev sisu

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"

PÔhilised parameetrid:

  • URL "ldap://ldap.abc.ru" — domeeni kontrolleri aadress;
  • BindDN "CN=bindUsr,CN=Users,DC=abc,DC=ru" — kanoniline nimi LDAP-iga seondumiseks (kasutaja - bindUsr konteineris abc.ru/Users);
  • Password b1ndP@SS — kasutaja parool seondumiseks;
  • BaseDN "OU=allUsr,DC=abc,DC=ru" — tee, kust alustada kasutaja otsimist;
  • BaseDN "OU=myGrp,DC=abc,DC=ru" — rĂŒhma konteiner, mis annab Ă”igusi (rĂŒhm myVPNUsr konteineris abc.ru/myGrp);
  • SearchFilter "(cn=myVPNUsr)" — lubatud rĂŒhma nimi.

KĂ€ivitamine ja diagnoosimine

NĂŒĂŒd saame proovida meie serverit lubada ja kĂ€ivitada:

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

KĂ€ivituse kontroll:

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

Sertifikaatide vĂ€ljastamine ja tĂŒhistamine

Kuna lisaks sertifikaatidele on vajalikud vĂ”tmed ja muud seaded, on vĂ€ga mugav kĂ”ik see ĂŒhte profiilifaili kokku pakkida. See fail edastatakse seejĂ€rel kasutajale ja profiil imporditakse OpenVPN kliendil. Selleks loome seadete malli ja skripti, mis genereerib profiili.

Profiili tuleb lisada juuresertifikaadi (ca.crt) ja TLS vÔtme (ta.key) failide sisu.

Kasutaja sertifikaatide vĂ€ljastamisel Ă€rge unustage mÀÀrata sertifikaatide nĂ”utud kehtivusaega parameetrite failis. Ärge tehke seda liiga pikaajaliseks, soovitan piirduda maksimum 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 sisu oma sertifikaadid;
  • remote direktiivis mÀÀrake oma vĂ€rava nimi/aadress;
  • auth-user-pass direktiiv loodi tĂ€iendavaks vĂ€lishaavatavuseks.

Kodu kataloogis (vÔi mÔnes 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 faili tÀitmiseks:

chmod a+x ~/make.profile.sh

Ja nĂŒĂŒd saame vĂ€ljastada oma esimese sertifikaadi.

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

TĂŒhistamine

Sertifikaadi kompromiteerimisel (kaotus, vargus) on tungiv vajadus 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, kui teha indeksifailist:

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

Selgitused:

  • esimese real on serveri sertifikaat;
  • esimene mĂ€rk
    • V (Valid) — kehtiv;
    • R (Revoked) — tĂŒhistatud.

VÔrgu seadistamine

Viimased sammud — vĂ”rguarhitektuuri - marsruutimise ja tulemĂŒĂŒride seadistamine.

KĂ€ivitage ĂŒhenduste lubamine kohalikus tulemĂŒĂŒris:

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

JĂ€rgmiseks 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 eksisteerib tÔenÀoliselt alamvÔrkude eristamine ning peame edastama ruuterile (-itele), kuidas suunata pakette, mis on suunatud meie VPNi klientidele. KÀivita kÀsureas jÀrgnev kÀsk (sÔltuvalt kasutatavast varustusest):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

ja salvestage konfiguratsioon.

Lisaks peab piiri ruuteri liideses, kus teenindatakse vÀlist aadressi gw.abc.ru, lubama UDP/1194 pakettide lÀbimist.

Kui organisatsioonis kehtivad ranged turvareeglid, tuleb meie VPN-serveris seadistada ka tulemĂŒĂŒr. Minu arvates pakuvad kĂ”ige suuremat paindlikkust iptablesi FORWARD ahelate seadistamine, kuigi nende seadistamine on vĂ€hem mugav. Veidi rohkem nende seadistamisest. KĂ”ige mugavam on kasutada „otseseid reegleid“ — direct rules, mis salvestatakse faili /etc/firewalld/direct.xml. Aktiivset reeglite konfiguratsiooni saab teada jĂ€rgmiselt:

$ 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

Tegelikult on need tavalised iptablesi reeglid, mis on muudetud pÀrast firewalldi ilmumist.

Sihtliidese seadistamine on vaikimisi tun0, vÀlise tunneli liides vÔib olla muu, nÀiteks ens192, sÔltuvalt kasutatavast platvormist.

Viimane rida on ette nÀhtud mahajÀetud pakettide logimiseks. Logimise toimimiseks tuleb firewalldi konfiguratsioonis muuta silumise taset:

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

Seadistuste rakendamine — tavaline firewalldi kĂ€sk seadistuste uuesti lugemiseks:

$ sudo firewall-cmd --reload

MahajÀetud pakette saab vaadata jÀrgmiselt:

grep forward_fw /var/log/messages

Mis edasi

Sellega on seadistamine lÔpetatud!

Kliendipoolt tuleb nĂŒĂŒd installida klientprogramm, importida profiil ja ĂŒhenduda. Windowsi taustaga operatsioonisĂŒsteemide jaoks on jaotus saadaval arendaja veebisaidil.

LĂ”petuseks ĂŒhendada meie uus server jĂ€lgimis- ja arhiveerimissĂŒsteemidega ning mitte unustada regulaarselt uuendusi installida.

Stabiilset ĂŒhendust!

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster