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.
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).
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ó.
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.
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.
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:
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.