SMB-szervezet távoli munkájának megszervezése OpenVPN-en

Probléma nyilatkozat

A cikk leírja az alkalmazottak távoli hozzáférésének megszervezését a nyílt forráskódú termékeken, és egy teljesen autonóm rendszer felépítésére is használható, és hasznos lesz a bővítéshez, ha a meglévő kereskedelmi rendszerben hiányzik a licenc, vagy annak teljesítménye nem kielégítő.

A cikk célja egy teljes rendszer megvalósítása a szervezet távoli hozzáférésének biztosítására, ami alig több, mint „az OpenVPN telepítése 10 perc alatt”.

Ennek eredményeként egy olyan rendszert kapunk, amelyben a tanúsítványok és (opcionálisan) a vállalati Active Directory segítségével hitelesítik a felhasználókat. Hogy. kapunk egy rendszert két ellenőrző tényezővel - amivel rendelkezem (tanúsítvány) és amit tudok (jelszó).

Annak jele, hogy a felhasználó jogosult csatlakozni, a myVPNUsr csoportban való tagsága. A tanúsító hatóság offline módban lesz használva.

A megoldás megvalósításának költsége csak kis hardvererőforrás és 1 óra rendszergazdai munka.

A CetntOS 3 rendszeren OpenVPN és Easy-RSA 7-as verziójú virtuális gépet fogunk használni, amelyhez 100 kapcsolatonként 4 vCPU és 4 GiB RAM tartozik.

A példában szervezetünk hálózata 172.16.0.0/16, amelyben a 172.16.19.123 címû VPN-szerver a 172.16.19.0/24 szegmensben, a 172.16.16.16 és 172.16.17.17 DNS-szerverek, valamint a 172.16.20.0. .23/XNUMX van lefoglalva a VPN-kliensek számára .

A külső csatlakozáshoz a 1194/udp porton keresztüli kapcsolatot használjuk, és a szerverünk DNS-ében létrejött egy A-rekord gw.abc.ru.

A SELinux letiltása szigorúan nem javasolt! Az OpenVPN a biztonsági házirendek letiltása nélkül működik.

Tartalom

  1. OS és alkalmazási szoftverek telepítése
  2. A kriptográfia beállítása
  3. Az OpenVPN konfigurálása
  4. AD-hitelesítés
  5. Indítás és diagnosztika
  6. Tanúsítvány kiadása és visszavonása
  7. Hálózati konfiguráció
  8. Mi a következő

OS és alkalmazási szoftverek telepítése

A CentOS 7.8.2003 disztribúciót használjuk. Az operációs rendszert minimális konfigurációban kell telepítenünk. Kényelmes ezt a segítségével megtenni kezdőrúgás, egy korábban telepített operációs rendszer lemezkép klónozása és egyéb eszközök.

A telepítés után a hálózati interfészhez címet rendelve (a 172.16.19.123 feladat feltételei szerint) frissítjük az operációs rendszert:

$ sudo yum update -y && reboot

Arra is ügyelnünk kell, hogy az időszinkronizálás megtörténjen a gépünkön.
Az alkalmazásszoftver telepítéséhez főszerkesztőként az openvpn, openvpn-auth-ldap, easy-rsa és vim csomagokra van szükség (szükség lesz az EPEL-tárra).

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

Hasznos vendégügynök telepítése egy virtuális géphez:

$ sudo yum install open-vm-tools

VMware ESXi gazdagépekhez vagy oVirthez

$ sudo yum install ovirt-guest-agent

A kriptográfia beállítása

Lépjen az easy-rsa könyvtárba:

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

Hozzon létre egy változó fájlt:

$ sudo vim vars

a következő tartalom:

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

Az ABC LLC feltételes szervezet paraméterei itt vannak leírva, ezeket helyesbítheti a valósra, vagy elhagyhatja a példából. A paraméterek között a legfontosabb az utolsó sor, amely meghatározza a tanúsítvány érvényességi idejét napokban. A példa a 10 év értéket használja (365*10+2 szökőév). Ezt az értéket módosítani kell a felhasználói tanúsítványok kiadása előtt.

Ezután konfigurálunk egy autonóm hitelesítési hatóságot.

A beállítás magában foglalja a változók exportálását, a CA inicializálását, a CA gyökérkulcsának és tanúsítványának, a Diffie-Hellman kulcsnak, a TLS-kulcsnak, valamint a szerverkulcsnak és -tanúsítványnak a kiadását. A CA-kulcsot gondosan védeni és titokban kell tartani! Minden lekérdezési paraméter alapértelmezettként hagyható.

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

Ezzel befejeződik a kriptográfiai mechanizmus beállításának fő része.

Az OpenVPN konfigurálása

Lépjen az OpenVPN könyvtárba, hozzon létre szolgáltatási címtárakat, és adjon hozzá egy hivatkozást az easy-rsa-hoz:

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/

Hozza létre a fő OpenVPN konfigurációs fájlt:

$ sudo vim server.conf

a következő tartalmat

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

Néhány megjegyzés a paraméterekkel kapcsolatban:

  • ha az igazolás kiadásakor más nevet adtak meg, azt jelezni kell;
  • adja meg a feladatainak megfelelő címkészletet*;
  • lehet egy vagy több útvonal és DNS-kiszolgáló;
  • Az utolsó 2 sor az AD** hitelesítés megvalósításához szükséges.

*A példában kiválasztott címtartomány akár 127 kliens egyidejű csatlakozását teszi lehetővé, mert a /23 hálózat ki van választva, és az OpenVPN minden ügyfél számára létrehoz egy alhálózatot a /30 maszk használatával.
Ha különösen szükséges, a port és a protokoll módosítható, azonban figyelembe kell venni, hogy a portszám megváltoztatása a SELinux beállítását vonja maga után, a tcp protokoll használata pedig megnöveli a költségeket, mert A TCP-csomagok kézbesítésének vezérlése már az alagútba beágyazott csomagok szintjén történik.

**Ha nincs szükség hitelesítésre az AD-ben, írja be megjegyzésekkel, hagyja ki a következő részt és a sablonban távolítsa el az auth-user-pass sort.

AD-hitelesítés

A második tényező támogatása érdekében fiókellenőrzést fogunk használni az AD-ben.

Szükségünk van egy fiókra a domainben egy hétköznapi felhasználó jogaival és egy csoporttal, amelynek tagsága meghatározza a csatlakozási képességet.

Hozzon létre egy konfigurációs fájlt:

/etc/openvpn/ldap.conf

a következő tartalmat

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

Alapvető paraméterek:

  • URL „ldap://ldap.abc.ru” – tartományvezérlő címe;
  • BindDN “CN=bindUsr,CN=Felhasználók,DC=abc,DC=ru” – kanonikus név az LDAP-hoz való kötéshez (UZ – bindUsr az abc.ru/Users tárolóban);
  • Jelszó b1ndP@SS — felhasználói jelszó a kötéshez;
  • BaseDN „OU=allUsr,DC=abc,DC=ru” — az útvonal, ahonnan el kell kezdeni a felhasználó keresését;
  • BaseDN „OU=myGrp,DC=abc,DC=ru” – az engedélyező csoport tárolója (a myVPNUsr csoport az abc.rumyGrp tárolóban);
  • SearchFilter "(cn=myVPNUsr)" az engedélyező csoport neve.

Indítás és diagnosztika

Most megpróbálhatjuk engedélyezni és elindítani a szerverünket:

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

Indítási ellenőrzés:

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

Tanúsítvány kiadása és visszavonása

Mert Magukon a tanúsítványokon kívül kulcsokra és egyéb beállításokra van szüksége, nagyon kényelmes mindezt egy profilfájlba csomagolni. Ez a fájl ezután átkerül a felhasználóhoz, és a profil importálódik az OpenVPN kliensbe. Ehhez létrehozunk egy beállítássablont és egy szkriptet, amely létrehozza a profilt.

Hozzá kell adnia a profilhoz a gyökértanúsítvány (ca.crt) és a TLS kulcs (ta.key) fájl tartalmát.

A felhasználói tanúsítványok kiadása előtt ne felejtse el beállítani a tanúsítványok szükséges érvényességi idejét a paraméterfájlban. Ne tegye túl hosszúra, azt javaslom, hogy korlátozza magát maximum 180 napra.

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>

Megjegyzések:

  • húrok TEDD A... tartalomra váltani az ő tanúsítványok;
  • a távoli direktívában adja meg az átjáró nevét/címét;
  • az auth-user-pass direktíva további külső hitelesítésre szolgál.

A kezdőkönyvtárban (vagy más kényelmes helyen) létrehozunk egy szkriptet a tanúsítvány kéréséhez és a profil létrehozásához:

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 ~

A fájl futtathatóvá tétele:

chmod a+x ~/make.profile.sh

És kiállíthatjuk az első bizonyítványunkat.

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

Áttekintése

Tanúsítvány sérülése (elvesztés, lopás) esetén a tanúsítványt vissza kell vonni:

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

Kiadott és visszavont tanúsítványok megtekintése

A kiadott és visszavont tanúsítványok megtekintéséhez egyszerűen tekintse meg az indexfájlt:

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

Magyarázat:

  • az első sor a szervertanúsítvány;
  • első karakter
    • V (Érvényes) - érvényes;
    • R (Visszavonva) – visszahívták.

Hálózati konfiguráció

Az utolsó lépések az átviteli hálózat konfigurálása - az útválasztás és a tűzfalak.

Kapcsolatok engedélyezése a helyi tűzfalban:

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

Ezután engedélyezze az IP-forgalom irányítását:

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

Vállalati környezetben valószínűleg van alhálózat, és meg kell mondanunk az útválasztó(k)nak, hogyan küldjék el a VPN-klienseinknek szánt csomagokat. A parancssorban a következő módon hajtjuk végre a parancsot (a használt berendezéstől függően):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

és mentse el a konfigurációt.

Ezenkívül a határmenti útválasztó felületén, ahol a gw.abc.ru külső címet szolgálják ki, engedélyezni kell az udp/1194 csomagok áthaladását.

Abban az esetben, ha a szervezet szigorú biztonsági szabályokkal rendelkezik, a VPN szerverünkön tűzfalat is be kell állítani. Véleményem szerint a legnagyobb rugalmasságot az iptables FORWARD láncok beállítása biztosítja, bár ezek beállítása kevésbé kényelmes. Egy kicsit többet a beállításukról. Ehhez a legkényelmesebb a „közvetlen szabályok” használata - a fájlban tárolt közvetlen szabályok /etc/firewalld/direct.xml. A szabályok jelenlegi konfigurációja a következőképpen érhető el:

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

A fájl módosítása előtt készítsen biztonsági másolatot róla:

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

A fájl hozzávetőleges tartalma:

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

magyarázatok

Ezek lényegében szokványos iptables szabályok, egyébként a tűzfal megjelenése után csomagolták őket.

A cél interfész alapértelmezett beállításokkal a tun0, és az alagút külső interfésze eltérő lehet, például ens192, a használt platformtól függően.

Az utolsó sor az elejtett csomagok naplózására szolgál. A naplózás működéséhez módosítania kell a hibakeresési szintet a tűzfal konfigurációjában:

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

A beállítások alkalmazása a szokásos tűzfalparancs a beállítások újraolvasásához:

$ sudo firewall-cmd --reload

Az elejtett csomagokat így tekintheti meg:

grep forward_fw /var/log/messages

Mi a következő

Ezzel a beállítás befejeződött!

Nincs más hátra, mint a kliens szoftver telepítése a kliens oldalon, a profil importálása és a csatlakozás. Windows operációs rendszerek esetén az elosztókészlet a következő helyen található: fejlesztői weboldal.

Végül új szerverünket csatlakoztatjuk a megfigyelő és archiváló rendszerekhez, és ne feledkezzünk meg a frissítések rendszeres telepítéséről sem.

Stabil kapcsolat!

Forrás: will.com

Hozzászólás