Távmunka szervezése SMB szervezetek számára OpenVPN-nel

Lépjünk át a kitűzött feladatra: írjunk egy XDP mechanizmust SYN cookie-kkal.

A cikk leírja a távoli hozzáférés megszervezését nyílt forráskódú termékeken keresztül, és felhasználható teljesen autonóm rendszerek létrehozására, vagy hasznos lehet a kereskedelmi rendszerek bővítésekor, amikor a meglévő licencből kifogyunk, vagy a teljesítmény elégtelenné válik.

A cikk célja egy befejezett távoli hozzáférési rendszer bevezetése a szervezet számára, ami kissé több, mint 'OpenVPN telepítése 10 perc alatt'.

Ennek eredményeként egy olyan rendszert kapunk, amely a felhasználók hitelesítésére tanúsítványokat és (opcionálisan) vállalati Active Directory katalógust használ. Így egy kéttényezős hitelesítési rendszert kapunk - amit birtoklok (tanúsítvány) és amit tudok (jelszó).

A felhasználó csatlakozási engedélyét jelzi, hogy tagsága van a myVPNUsr csoportban. Az önálló tanúsítvány-kibocsátó központot fogunk használni.

A megoldás bevezetésének ára csupán néhány kis hardver-erőforrás és 1 óra rendszergazda munka.

Egy virtuális gépet fogunk használni OpenVPN-nel és Easy-RSA 3-as verzióval CentOS 7-en, amely 100 csatlakozásra 4 vCPU-t és 4 GiB RAM-ot kapott.

A példában a szervezetünk hálózata 172.16.0.0/16, ahol a VPN szerver 172.16.19.123 címmel a 172.16.19.0/24 szegmensen helyezkedik el, a DNS szerverek 172.16.16.16 és 172.16.17.17, a VPN kliensek számára pedig a 172.16.20.0/23 alhálózat lett kijelölve.

Külső csatlakozáshoz a 1194/udp porton történő kapcsolatot használjuk, a DNS-ben pedig egy A rekordot hoztunk létre a szerverünkhöz: gw.abc.ru.

Határozottan nem ajánlott a SELinux letiltása! Az OpenVPN a biztonsági politikák letiltása nélkül is működik.

Tartalom

  1. Operációs rendszer és alkalmazás szoftver telepítése
  2. Kryptográfia beállítása
  3. OpenVPN beállítása
  4. Hitelesítés az AD-ben
  5. Indítás és diagnosztika
  6. Tanúsítvány kiadása és visszavonása
  7. Hálózat beállítása
  8. Mi következik

Operációs rendszer és alkalmazás szoftver telepítése

A CentOS 7.8.2003 disztribúciót használjuk. Minimalista konfigurációval szeretnénk telepíteni az operációs rendszert. Ezt kényelmesen elvégezhetnénk kickstart, az előzőleg telepített operációs rendszer képmásolásával és egyéb eszközökkel.

A telepítés után, a hálózati interfész címének beállítását (a feladatfeltételek szerint 172.16.19.123) követően frissítjük az operációs rendszert:

$ sudo yum update -y && reboot

Azt is ellenőrizni kell, hogy a gépünk időszinkronizálása meg legyen oldva.
Az alkalmazás szoftver telepítéséhez szükséges csomagok: openvpn, openvpn-auth-ldap, easy-rsa és a vim mint fő szövegszerkesztő (szükség van az EPEL tárolóra).

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

A virtuális gépre érdemes telepíteni a vendégügynököt:

$ sudo yum install open-vm-tools

VMware ESXi gazdákhoz, vagy oVirt-hez

$ sudo yum install ovirt-guest-agent

Kryptográfia beállítása

Lépjünk az easy-rsa könyvtárba:

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

Létrehozzuk a változókat tartalmazó fájlt:

$ sudo vim vars

a következő tartalommal:

export KEY_COUNTRY="HU"
export KEY_PROVINCE="MyRegion"
export KEY_CITY="MyCity"
export KEY_ORG="ABC LLC"
export KEY_EMAIL="admin@abc.hu"
export KEY_CN="allUsers"
export KEY_OU="allUsers"
export KEY_NAME="gw.abc.hu"
export KEY_ALTNAMES="abc-openvpn-server"
export EASYRSA_CERT_EXPIRE=3652

Itt találhatóak a példás szervezet, az ABC Kft. paraméterei, amelyeket helyettesíthet a valós adatokkal, vagy hagyhatja a példa szerint. A legfontosabb paraméter az utolsó sor, amely meghatározza a tanúsítvány érvényességi idejét napokban. A példában 10 év (365*10+2 szökőév) került használatra. Ezt az értéket az ügyfél tanúsítványainak kiadása előtt szükséges módosítani.

Ezután beállítjuk a független tanúsítvány-kibocsátót.

A beállítás magában foglalja a változók exportálását, a PKI inicializálását, a gyökér kulcs és tanúsítvány kibocsátását, a Diffie-Hellman kulcsot, a TLS kulcsot, valamint a szerver kulcsát és tanúsítványát. A tanúsítvány-kibocsátó kulcsát gondosan meg kell őrizni és titokban kell tartani! Az összes paramétert az alapértelmezett értékeken lehet hagyni a kéréseknél.

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ődött a titkosító mechanizmus alapvető beállítása.

OpenVPN beállítása

Lépjünk az OpenVPN könyvtárba, hozzuk létre a szükséges könyvtárakat, és adjunk linket 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/

Létrehozzuk az OpenVPN alapértelmezett konfigurációs fájlját:

$ sudo vim server.conf

a következő tartalommal

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éterekhez:

  • ha a tanúsítvány kiadásakor másik nevet adtak meg — azt tüntesse fel;
  • az IP-címek tartományát a saját igényei szerint határozza meg*;
  • route-ok és DNS-szerverek egy vagy több lehet;
  • az utolsó 2 sor a AD** autentikációnak a megvalósításához szükséges.

*A példa tartomány, amelyet kiválasztottunk, lehetővé teszi, hogy egyszerre legfeljebb 127 kliens csatlakozzon, mivel a /23 hálózat van kiválasztva, és az OpenVPN minden klienshez egy /30 maszkkal rendelkező alhálózatot hoz létre.
Szükség esetén a port és a protokoll megváltoztatható, azonban figyelembe kell venni, hogy a port számának megváltoztatása a SELinux beállításainak módosítását vonja maga után, és a TCP protokoll használata növeli a többletköltségeket, mivel a TCP-csomagok kézbesítési ellenőrzése már a csatornába ágyazott csomagok szintjén megtörténik.

**Ha az AD hitelesítés nem szükséges, akkor kommentálja ki őket, hagyja ki a következő részt, és a sablonban törölje az auth-user-pass sort..

Hitelesítés az AD-ben

A második tényező támogatásához az AD-ben való fiók ellenőrzését fogjuk használni.

Szükségünk van egy felhasználói szintű jogokkal rendelkező domain fiókra és egy csoportra, amelynek tagsága meghatározza a csatlakozási lehetőséget.

Hozzuk létre a konfigurációs fájlt:

/etc/openvpn/ldap.conf

a következő tartalommal

URL             "ldap://ldap.abc.hu"
        BindDN          "CN=bindUsr,CN=Users,DC=abc,DC=hu"
        Password        b1ndP@SS
        Timeout         15
        TLSEnable       no
        FollowReferrals yes


        BaseDN          "OU=allUsr,DC=abc,DC=hu"
        SearchFilter    "(sAMAccountName=%u)"
        RequireGroup    true
        
                BaseDN          "OU=myGrp,DC=abc,DC=hu"
                SearchFilter    "(cn=myVPNUsr)"
                MemberAttribute "member"

Főbb paraméterek:

  • URL „ldap://ldap.abc.hu” — a domainvezérlő címe;
  • BindDN „CN=bindUsr,CN=Users,DC=abc,DC=hu” — a LDAP-hoz való hozzárendelés kanonikus neve (a bindUsr a abc.hu/Users konténerben);
  • Password b1ndP@SS — a hozzárendeléshez szükséges felhasználói jelszó;
  • BaseDN „OU=allUsr,DC=abc,DC=hu” — a felhasználói keresés kezdeti elérési útja;
  • BaseDN „OU=myGrp,DC=abc,DC=hu” — az engedélyező csoport konténere (myVPNUsr csoport az abc.hu/myGrp konténerben);
  • SearchFilter "(cn=myVPNUsr)" — az engedélyező csoport neve.

Indítás és diagnosztika

Most próbálkozhatunk a szerverünk engedélyezésével és elindításával:

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

Indítás ellenőrzése:

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

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

Mivel a tanúsítványok mellett szükség van kulcsokra és egyéb beállításokra is, rendkívül kényelmes minden információt egy profilfájlba csomagolni. Ezt a fájlt ezután a felhasználónak adjuk át, és a profilt már az OpenVPN kliensben importálják. Ehhez készítünk egy beállítási sablont és egy scriptet, amely létrehozza a profilt.

A profilba bele kell illeszteni a gyökértanúsítvány (ca.crt) és a TLS kulcs (ta.key) fájlok tartalmát.

A felhasználói tanúsítványok kiadása előtt. Ne felejtsd el beállítani a tanúsítványok szükséges lejárati idejét. a paraméterfájlban. Ne állítsd túl hosszúra, ajánlom, hogy maximum 180 napig korlátozd.

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

Megjegyzések:

  • sorok PUT YOUR… cseréljük az alábbi tartalomra saját tanúsítványainkat;
  • az remote direktívában add meg a saját átjáród nevét/címét;
  • az auth-user-pass direktíva külső hitelesítést használ.

A saját könyvtárban (vagy más kényelmes helyen) létrehozunk egy tanúsítványkérő és profilgeneráló szkriptet:

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ájlt futtathatóvá tesszük:

chmod a+x ~/make.profile.sh

És kiadásra kerülhet az első tanúsítványunk.

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

Vélemény

Tanúsítvány kompromittálódása (elvesztés, lopás) esetén szükséges a tanúsítvány visszavonása:

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

Kibocsátott és visszavont tanúsítványok megtekintése

A kibocsátott és visszavont tanúsítványok megtekintéséhez elegendő az indexfájl megtekintése:

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

Magyarázatok:

  • az első sor a szerver tanúsítványát tartalmazza;
  • az első karakter
    • V (Valid) — érvényes;
    • R (Revoked) — visszavonva.

Hálózat beállítása

Az utolsó lépések - a hálózati forgalom - irányítása és tűzfal beállítása.

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

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

Ezután engedélyezzük 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

A vállalati környezetben biztosan létezik alhálózatok elválasztása, és tájékoztatni kell az útválasztót (-okat), hogyan küldje el a VPN ügyfelekhez meghatározott csomagokat. A parancssorban a következő parancsot hajtjuk végre (ez a használt hardvertől függ):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

és mentjük a konfigurációt.

Ezen kívül, a határ-útválasztó interfészén, ahol a külső cím gw.abc.ru található, engedélyezni kell a udp/1194 csomagok áthaladását.

Ha a szervezetben szigorú biztonsági szabályok érvényesek, akkor a VPN szerverünkön is be kell állítani a tűzfalat. Véleményem szerint a legnagyobb rugalmasságot az iptables FORWARD láncainak beállítása nyújtja, bár ezek beállítása kevésbé kényelmes. Egy kicsit részletesebben a beállításukról. Ehhez a legegyszerűbb a "direkt szabályok" — direct rules, amelyek egy fájlban tárolódnak. /etc/firewalld/direct.xml. A hatályos szabályzatot így lehet megtudni:

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

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

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

A fájl körülbelül a következőket tartalmazza:


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

Magyarázatok

Alapvetően ezek a szokásos iptables szabályok, amelyek a firewalld megjelenése után lettek becsomagolva.

Az alapértelmezett beállításoknál a cél interfész tun0, míg a terepi interfész eltérhet, például ens192, a használt platformtól függően.

Az utolsó sor a kidobott csomagok naplózására szolgál. A naplózás működéséhez a firewalld konfigurációban meg kell változtatni a naplózási szintet:

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

A beállítások alkalmazása — a firewalld hagyományos parancsa a beállítások újraolvasására:

$ sudo firewall-cmd --reload

A kidobott csomagokat így lehet megtekinteni:

grep forward_fw /var/log/messages

Mi következik

Ezzel a beállítás véget ért!

Most a kliens oldalon telepíteni kell a kliens szoftvert, importálni a profilt és csatlakozni. Windows típusú operációs rendszer esetén a disztribúció a következő címen található: fejlesztői webhelyen.

Végül csatlakoztatjuk új szerverünket a megfigyelő és archiváló rendszerekhez, és ne felejtsük el rendszeresen telepíteni a frissítéseket.

Stabil kapcsolatot!

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster