SMB-organisaation etätyön organisointi OpenVPN:ssä

Ongelma

Artikkeli kuvaa työntekijöiden etäkäytön organisointia avoimen lähdekoodin tuotteissa ja sitä voidaan käyttää sekä täysin itsenäisen järjestelmän rakentamiseen, että siitä on hyötyä laajentamiseen, kun olemassa olevasta kaupallisesta järjestelmästä on pulaa lisensseistä tai sen suorituskyky on riittämätön.

Artikkelin tavoitteena on toteuttaa täydellinen järjestelmä organisaation etäkäytön tarjoamiseksi, mikä ei ole muuta kuin "OpenVPN:n asentaminen 10 minuutissa".

Tuloksena saamme järjestelmän, jossa varmenteita ja (valinnaisesti) yrityksen Active Directorya käytetään käyttäjien todentamiseen. Että. saamme järjestelmän, jossa on kaksi vahvistustekijää - mitä minulla on (sertifikaatti) ja mitä tiedän (salasana).

Merkki siitä, että käyttäjä saa yhteyden, on hänen jäsenyys myVPNUsr-ryhmään. Varmenneviranomaista käytetään offline-tilassa.

Ratkaisun käyttöönottokustannukset ovat vain pienet laitteistoresurssit ja 1 tunti järjestelmänvalvojan työtä.

Käytämme CetntOS 3:ssä virtuaalikonetta OpenVPN- ja Easy-RSA-versiolla 7, jolle on varattu 100 vCPU:ta ja 4 GiB RAM 4 yhteyttä kohti.

Esimerkissä organisaatiomme verkko on 172.16.0.0/16, jossa VPN-palvelin osoitteella 172.16.19.123 sijaitsee segmentissä 172.16.19.0/24, DNS-palvelimet 172.16.16.16 ja 172.16.17.17 sekä subnet 172.16.20.0. .23/XNUMX on varattu VPN-asiakkaille .

Yhteyden muodostamiseen ulkopuolelta käytetään yhteyttä portin 1194/udp kautta ja palvelimemme DNS:ään on luotu A-tietue gw.abc.ru.

SELinuxin poistamista käytöstä ei ehdottomasti suositella! OpenVPN toimii ilman suojauskäytäntöjen poistamista käytöstä.

Pitoisuus

  1. Käyttöjärjestelmän ja sovellusohjelmistojen asennus
  2. Salauksen määrittäminen
  3. OpenVPN-asennus
  4. AD-todennus
  5. Käynnistys ja diagnostiikka
  6. Varmenteen myöntäminen ja peruuttaminen
  7. Verkon asetukset
  8. Mitä seuraavaksi

Käyttöjärjestelmän ja sovellusohjelmistojen asennus

Käytämme CentOS 7.8.2003 -jakelua. Meidän on asennettava käyttöjärjestelmä minimaalisessa kokoonpanossa. Tämä on kätevää tehdä käyttämällä lähtölaukaus, kloonataan aiemmin asennettu käyttöjärjestelmäkuva ja muut keinot.

Asennuksen jälkeen, määrittämällä osoitteen verkkoliittymälle (tehtävän 172.16.19.123 mukaisesti), päivitämme käyttöjärjestelmän:

$ sudo yum update -y && reboot

Meidän on myös varmistettava, että aikasynkronointi suoritetaan koneellamme.
Sovellusohjelmiston asentamiseen tarvitset paketit openvpn, openvpn-auth-ldap, easy-rsa ja vim pääeditorina (tarvitset EPEL-arkiston).

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

On hyödyllistä asentaa vierasagentti virtuaalikoneen:

$ sudo yum install open-vm-tools

VMware ESXi -isännille tai oVirtille

$ sudo yum install ovirt-guest-agent

Salauksen määrittäminen

Siirry easy-rsa-hakemistoon:

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

Luo muuttujatiedosto:

$ sudo vim vars

seuraava sisältö:

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

Ehdollisen organisaation ABC LLC:n parametrit on kuvattu tässä, voit korjata ne oikeiksi tai jättää ne esimerkistä. Parametreissa tärkeintä on viimeinen rivi, joka määrittää varmenteen voimassaoloajan päivinä. Esimerkissä käytetään arvoa 10 vuotta (365*10+2 karkausvuotta). Tätä arvoa on säädettävä ennen kuin käyttäjävarmenteita myönnetään.

Seuraavaksi määritämme autonomisen varmenneviranomaisen.

Asennus sisältää muuttujien viennin, CA:n alustamisen, CA-juuriavaimen ja -sertifikaatin, Diffie-Hellman-avaimen, TLS-avaimen sekä palvelinavaimen ja varmenteen myöntämisen. CA-avain on suojattava huolellisesti ja pidettävä salassa! Kaikki kyselyparametrit voidaan jättää oletusarvoiksi.

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

Tämä päättää salausmekanismin määrittämisen pääosan.

OpenVPN-asennus

Siirry OpenVPN-hakemistoon, luo palveluhakemistoja ja lisää linkki easy-rsaan:

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/

Luo pääasiallinen OpenVPN-määritystiedosto:

$ sudo vim server.conf

seuraavaa sisältöä

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

Muutama huomautus parametreista:

  • jos varmennetta myönnettäessä on määritetty eri nimi, ilmoittakaa se;
  • määritä tehtäviisi sopiva osoitevalikoima*;
  • voi olla yksi tai useampia reittejä ja DNS-palvelimia;
  • Kaksi viimeistä riviä tarvitaan todennuksen toteuttamiseen AD**:ssa.

*Esimerkissä valittu osoitealue sallii jopa 127 asiakkaan yhteyden muodostamisen samanaikaisesti, koska /23-verkko valitaan, ja OpenVPN luo aliverkon kullekin asiakkaalle /30-maskin avulla.
Erityisen tarpeen vaatiessa porttia ja protokollaa voidaan muuttaa, mutta on syytä muistaa, että portin numeron muuttaminen edellyttää SELinuxin konfiguroimista ja tcp-protokollan käyttö lisää ylimääräisiä kustannuksia, koska TCP-pakettien toimituksen ohjaus suoritetaan jo tunneliin kapseloitujen pakettien tasolla.

**Jos todennusta AD:ssa ei tarvita, kommentoi ne, ohita seuraava osio ja malliin poista auth-user-pass -rivi.

AD-todennus

Toisen tekijän tukemiseksi käytämme AD:ssa tilin vahvistusta.

Tarvitsemme verkkotunnukseen tilin, jolla on tavallisen käyttäjän oikeudet ja ryhmä, jonka jäsenyys ratkaisee yhteyden muodostamisen.

Luo määritystiedosto:

/etc/openvpn/ldap.conf

seuraavaa sisältöä

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

Основные параметры:

  • URL "ldap://ldap.abc.ru" - toimialueen ohjaimen osoite;
  • BindDN “CN=bindUsr,CN=Käyttäjät,DC=abc,DC=ru” - kanoninen nimi LDAP:hen sitoutumiselle (UZ - bindUsr säiliössä abc.ru/Users);
  • Salasana b1ndP@SS — käyttäjän salasana sitomista varten;
  • BaseDN “OU=allUsr,DC=abc,DC=ru” — polku, josta käyttäjän etsiminen aloitetaan;
  • BaseDN “OU=myGrp,DC=abc,DC=ru” – sallivan ryhmän säilö (ryhmä myVPNUsr säilössä abc.rumyGrp);
  • SearchFilter "(cn=myVPNUsr)" on sallivan ryhmän nimi.

Käynnistys ja diagnostiikka

Nyt voimme yrittää ottaa käyttöön ja käynnistää palvelimemme:

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

Käynnistyksen tarkistus:

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

Varmenteen myöntäminen ja peruuttaminen

Koska Varmenteiden lisäksi tarvitset avaimia ja muita asetuksia, on erittäin kätevää kääriä tämä kaikki yhteen profiilitiedostoon. Tämä tiedosto siirretään sitten käyttäjälle ja profiili tuodaan OpenVPN-asiakkaaseen. Tätä varten luomme asetusmallin ja komentosarjan, joka luo profiilin.

Sinun on lisättävä profiiliin juurivarmenne (ca.crt) ja TLS-avain (ta.key) -tiedostojen sisältö.

Ennen käyttäjävarmenteiden myöntämistä älä unohda asettaa varmenteille vaadittua voimassaoloaikaa parametritiedostossa. Sinun ei pitäisi tehdä siitä liian pitkää; suosittelen rajoittamaan itsesi enintään 180 päivään.

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>

Huomautuksia:

  • linjat LAITA SINUN... vaihtaa sisältöön oma todistukset;
  • määritä etäkäskyssä yhdyskäytäväsi nimi/osoite;
  • auth-user-pass -käskyä käytetään ylimääräiseen ulkoiseen todentamiseen.

Kotihakemistoon (tai muuhun sopivaan paikkaan) luomme skriptin varmenteen pyytämistä ja profiilin luomista varten:

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 ~

Tiedoston tekeminen suoritettavaksi:

chmod a+x ~/make.profile.sh

Ja voimme antaa ensimmäisen todistuksemme.

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

Arvostelu

Varmenteen vaarantuessa (kato, varkaus), tämä varmenne on peruutettava:

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

Tarkastele myönnettyjä ja peruutettuja varmenteita

Voit tarkastella myönnettyjä ja peruutettuja varmenteita yksinkertaisesti katsomalla hakemistotiedostoa:

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

Selitys:

  • ensimmäinen rivi on palvelimen varmenne;
  • ensimmäinen hahmo
    • V (voimassa) - voimassa;
    • R (Peruttu) - peruttu.

Verkon asetukset

Viimeiset vaiheet ovat siirtoverkon konfigurointi - reititys ja palomuurit.

Yhteyksien salliminen paikallisessa palomuurissa:

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

Ota seuraavaksi IP-liikenteen reititys käyttöön:

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

Yritysympäristössä on todennäköisesti aliverkkoa, ja meidän on kerrottava reitittimille, kuinka VPN-asiakkaillemme tarkoitetut paketit lähetetään. Suoritamme komennon komentorivillä tavalla (käytetystä laitteesta riippuen):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

ja tallenna asetukset.

Lisäksi rajareitittimen rajapinnassa, jossa ulkoista osoitetta gw.abc.ru palvellaan, on sallittava udp/1194-pakettien kulku.

Mikäli organisaatiolla on tiukat turvallisuussäännöt, palomuuri on määritettävä myös VPN-palvelimellemme. Mielestäni suurimman joustavuuden tarjoaa iptables FORWARD -ketjujen asettaminen, vaikka niiden asettaminen onkin vähemmän kätevää. Hieman lisää niiden asettamisesta. Tätä varten on kätevintä käyttää "suoria sääntöjä" - suoria sääntöjä, jotka on tallennettu tiedostoon /etc/firewalld/direct.xml. Sääntöjen nykyinen kokoonpano löytyy seuraavasti:

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

Ennen kuin muutat tiedostoa, tee siitä varmuuskopio:

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

Tiedoston likimääräinen sisältö 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>

selitykset

Nämä ovat pohjimmiltaan tavallisia iptables-sääntöjä, jotka muuten pakataan palomuurin käyttöönoton jälkeen.

Kohdeliitäntä oletusasetuksilla on tun0, ja tunnelin ulkoinen liitäntä voi olla erilainen, esimerkiksi ens192, riippuen käytetystä alustasta.

Viimeinen rivi on pudonneiden pakettien kirjaamiseen. Jotta kirjautuminen toimisi, sinun on muutettava debug-tasoa palomuurikokoonpanossa:

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

Asetusten käyttöönotto on tavallinen palomuurikomento, jolla asetukset luetaan uudelleen:

$ sudo firewall-cmd --reload

Voit tarkastella pudonneita paketteja seuraavasti:

grep forward_fw /var/log/messages

Mitä seuraavaksi

Tämä viimeistelee asennuksen!

Jäljelle jää vain asentaa asiakasohjelmisto asiakaspuolelle, tuoda profiili ja muodostaa yhteys. Windows-käyttöjärjestelmissä jakelusarja sijaitsee osoitteessa kehittäjäsivusto.

Lopuksi yhdistämme uuden palvelimemme valvonta- ja arkistointijärjestelmiin ja muista asentaa päivityksiä säännöllisesti.

Vakaa yhteys!

Lähde: will.com

Lisää kommentti