SMB organisatsiooni kaugtöö korraldamine OpenVPN-is

Probleemi avaldus

Artiklis kirjeldatakse avatud lähtekoodiga toodete töötajate kaugjuurdepääsu korraldamist ja seda saab kasutada nii täiesti autonoomse süsteemi ehitamiseks kui ka laienemiseks, kui olemasolevas kommertssüsteemis napib litsentse või selle jõudlus on ebapiisav.

Artikli eesmärk on juurutada terviklik süsteem organisatsioonile kaugjuurdepääsu pakkumiseks, mis pole midagi enamat kui "OpenVPN-i installimine 10 minutiga".

Selle tulemusena saame süsteemi, milles kasutajate autentimiseks kasutatakse sertifikaate ja (valikuliselt) ettevõtte Active Directoryt. See. saame süsteemi, millel on kaks kontrolltegurit - mis mul on (sertifikaat) ja mida ma tean (parool).

Märk, et kasutajal on lubatud ühendust luua, on tema kuulumine gruppi myVPNUsr. Sertifikaadi väljastamist kasutatakse võrguühenduseta.

Lahenduse juurutamise maksumuseks on vaid väikesed riistvararessursid ja 1 tund süsteemiadministraatori tööd.

Kasutame CetntOS 3-s OpenVPN-i ja Easy-RSA versiooniga 7 virtuaalset masinat, millele on eraldatud 100 vCPU-d ja 4 GiB RAM-i 4 ühenduse kohta.

Näites on meie organisatsiooni võrk 172.16.0.0/16, milles VPN-server aadressiga 172.16.19.123 asub segmendis 172.16.19.0/24, DNS-serverid 172.16.16.16 ja 172.16.17.17, alamvõrk 172.16.20.0. .23/XNUMX on eraldatud VPN-i klientidele .

Väljastpoolt ühendamiseks kasutatakse ühendust pordi 1194/udp kaudu ning meie serveri DNS-is on loodud A-kirje gw.abc.ru.

SELinuxi keelamine ei ole rangelt soovitatav! OpenVPN töötab ilma turvapoliitikat keelamata.

Sisu

  1. OS-i ja rakendustarkvara installeerimine
  2. Krüptograafia seadistamine
  3. OpenVPN-i konfigureerimine
  4. AD autentimine
  5. Käivitamine ja diagnostika
  6. Sertifikaadi väljastamine ja tühistamine
  7. Võrgu konfiguratsioon
  8. mis edasi

OS-i ja rakendustarkvara installeerimine

Kasutame CentOS 7.8.2003 distributsiooni. Peame installima OS-i minimaalses konfiguratsioonis. Seda on mugav teha kasutades stardipauk, varem installitud OS-i kujutise kloonimine ja muud vahendid.

Pärast installimist, võrguliidesele aadressi määramist (vastavalt ülesande 172.16.19.123 tingimustele), värskendame OS-i:

$ sudo yum update -y && reboot

Samuti peame tagama, et meie masinas toimuks aja sünkroonimine.
Rakendustarkvara installimiseks vajate peamise redaktorina pakette openvpn, openvpn-auth-ldap, easy-rsa ja vim (vajate EPEL-i hoidlat).

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

Kasulik on installida virtuaalmasina külalisagent:

$ sudo yum install open-vm-tools

VMware ESXi hostide või oVirt jaoks

$ sudo yum install ovirt-guest-agent

Krüptograafia seadistamine

Minge easy-rsa kataloogi:

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

Loo muutuv fail:

$ sudo vim vars

järgmine sisu:

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

Siin on kirjeldatud tingimusliku organisatsiooni ABC LLC parameetreid, saate need korrigeerida tegelikeks või jätta need näitest välja. Kõige olulisem parameetrites on viimane rida, mis määrab sertifikaadi kehtivusaja päevades. Näites kasutatakse väärtust 10 aastat (365*10+2 liigaastat). Seda väärtust tuleb enne kasutajasertifikaatide väljastamist kohandada.

Järgmisena konfigureerime autonoomse sertifitseerimisasutuse.

Seadistamine hõlmab muutujate eksportimist, CA lähtestamist, CA juurvõtme ja sertifikaadi, Diffie-Hellmani võtme, TLS-võtme ning serveri võtme ja sertifikaadi väljastamist. CA võtit tuleb hoolikalt kaitsta ja hoida salajas! Kõik päringu parameetrid saab jätta vaikeväärtusteks.

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

See lõpetab krüptomehhanismi seadistamise põhiosa.

OpenVPN-i konfigureerimine

Minge OpenVPN-i kataloogi, looge teenusekataloogid ja lisage easy-rsa link:

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/

Looge peamine OpenVPN-i konfiguratsioonifail:

$ sudo vim server.conf

järgmine 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 tunnistuse väljastamisel oli märgitud muu nimi, siis märkida see;
  • määrake oma ülesannetele sobiv aadresside kogum*;
  • marsruute ja DNS-servereid võib olla üks või mitu;
  • Viimased 2 rida on vajalikud autentimise rakendamiseks AD**-s.

*Näites valitud aadresside vahemik võimaldab üheaegselt ühenduse luua kuni 127 kliendil, sest valitakse võrk /23 ja OpenVPN loob iga kliendi jaoks alamvõrgu, kasutades maski /30.
Eriti vajadusel saab porti ja protokolli muuta, kuid tuleb meeles pidada, et pordi pordi numbri muutmine eeldab SELinuxi seadistamist ja tcp-protokolli kasutamine suurendab ülekulu, kuna TCP-pakettide edastamise juhtimine toimub juba tunnelisse kapseldatud pakettide tasemel.

**Kui AD-s autentimist pole vaja, kommenteerige neid, jätke järgmine jaotis vahele ja mallis eemalda auth-user-pass rida.

AD autentimine

Teise teguri toetamiseks kasutame AD-s konto kinnitamist.

Vajame domeenis tavakasutaja õigustega kontot ja gruppi, mille liikmelisus määrab ühenduse loomise võimaluse.

Looge konfiguratsioonifail:

/etc/openvpn/ldap.conf

järgmine sisu

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

Põhiparameetrid:

  • URL "ldap://ldap.abc.ru" - domeenikontrolleri aadress;
  • BindDN “CN=bindUsr,CN=Kasutajad,DC=abc,DC=ru” – kanooniline nimi LDAP-ga sidumiseks (UZ – bindUsr konteineris abc.ru/Users);
  • Parool b1ndP@SS — kasutaja parool sidumiseks;
  • BaseDN “OU=allUsr,DC=abc,DC=ru” — tee, millelt kasutaja otsimist alustada;
  • BaseDN “OU=myGrp,DC=abc,DC=ru” – lubava rühma konteiner (grupp myVPNUsr konteineris abc.rumyGrp);
  • Otsingufilter "(cn=myVPNUsr)" on lubava rühma nimi.

Käivitamine ja diagnostika

Nüüd saame proovida oma serverit lubada ja käivitada:

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

Käivitamise kontroll:

systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log

Sertifikaadi väljastamine ja tühistamine

Sest Lisaks sertifikaatidele on teil vaja võtmeid ja muid seadeid, väga mugav on see kõik ühte profiilifaili pakkida. See fail edastatakse seejärel kasutajale ja profiil imporditakse OpenVPN-i klienti. Selleks loome seadete malli ja skripti, mis genereerib profiili.

Peate profiilile lisama juursertifikaadi (ca.crt) ja TLS-võtme (ta.key) failide sisu.

Enne kasutajasertifikaatide väljastamist ärge unustage määrata sertifikaatidele nõutavat kehtivusaega parameetrite failis. Te ei tohiks seda liiga pikaks teha; soovitan piirduda 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

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

Märkused:

  • read PANE OMA... muuta sisuks nende sertifikaadid;
  • kaugkäskkirjas määrake oma lüüsi nimi/aadress;
  • Täiendavaks väliseks autentimiseks kasutatakse käskkirja auth-user-pass.

Kodukataloogis (või muus mugavas kohas) koostame 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 ~

Faili käivitatavaks muutmine:

chmod a+x ~/make.profile.sh

Ja me saame väljastada oma esimese tunnistuse.

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

Vaadata

Sertifikaadi ohustamise korral (kaotsiminek, vargus) on vaja see sertifikaat kehtetuks tunnistada:

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

Vaadake väljaantud ja kehtetuks tunnistatud sertifikaate

Väljastatud ja kehtetuks tunnistatud sertifikaatide vaatamiseks vaadake lihtsalt registrifaili:

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

Selgitus:

  • esimene rida on serveri sertifikaat;
  • esimene tegelane
    • V (Kehtiv) - kehtiv;
    • R (Tühistatud) – tagasi kutsutud.

Võrgu konfiguratsioon

Viimased sammud on edastusvõrgu konfigureerimine – marsruutimine ja tulemüürid.

Ühenduste lubamine kohalikus tulemüüris:

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

Järgmisena lubage IP-liikluse suunamine:

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

Ettevõttekeskkonnas on tõenäoliselt alamvõrk ja me peame ruuteri(te)le ütlema, kuidas saata meie VPN-i klientidele mõeldud pakette. Käsureal täidame käsu järgmiselt (olenevalt kasutatavast seadmest):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

ja salvestage konfiguratsioon.

Lisaks on piirimarsruuteri liideses, kus serveeritakse välisaadressi gw.abc.ru, vaja lubada udp/1194 pakettide läbimist.

Kui organisatsioonil on ranged turvareeglid, tuleb meie VPN-serveris konfigureerida ka tulemüür. Minu arvates pakub suurimat paindlikkust iptablesi FORWARDi kettide seadistamine, kuigi nende seadistamine pole nii mugav. Veidi lähemalt nende seadistamisest. Selleks on kõige mugavam kasutada "otsereegleid" - otsereegleid, mis on salvestatud faili /etc/firewalld/direct.xml. Reeglite praegune konfiguratsioon on järgmine:

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

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

Selgitused

Need on sisuliselt tavalised iptablesi reeglid, muidu pakitud pärast tulemüüri tulekut.

Vaikesätetega sihtliides on tun0 ja tunneli väline liides võib olenevalt kasutatavast platvormist olla erinev, näiteks ens192.

Viimane rida on langenud pakettide logimiseks. Logimise toimimiseks peate tulemüüri konfiguratsioonis muutma silumimistaset:

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

Seadete rakendamine on tavaline tulemüüri käsk sätete uuesti lugemiseks:

$ sudo firewall-cmd --reload

Kukkunud pakette saate vaadata järgmiselt:

grep forward_fw /var/log/messages

mis edasi

See lõpetab seadistamise!

Jääb vaid installida kliendi poolele klienditarkvara, importida profiil ja ühendada. Windowsi operatsioonisüsteemide puhul asub jaotuskomplekt aadressil arendaja sait.

Lõpuks ühendame oma uue serveri seire- ja arhiveerimissüsteemidega ning ärge unustage regulaarselt värskendusi installida.

Stabiilne ühendus!

Allikas: www.habr.com

Lisa kommentaar