Organizácia vzdialeného pracovného prostredia pre SMB organizáciu na OpenVPN

Stanovenie úlohy

Článok popisuje organizáciu vzdialeného prístupu zamestnancov na produktoch s otvoreným zdrojovým kódom a môže byť použitý ako na vybudovanie plne autonómneho systému, tak aj na rozšírenie, keď existujúci komerčný systém zaostáva za potrebnými licenciami alebo jeho výkon nie je dostatočný.

Cieľom článku je implementovať komplexný systém poskytovania vzdialeného prístupu organizácii, čo predstavuje niečo viac ako „inštalácia OpenVPN za 10 minút“.

Výsledkom bude systém, v ktorom sa na autentifikáciu používateľov budú používať certifikáty a (voliteľne) firemný adresár Active Directory. Tým získame systém s dvojfaktorovou autentifikáciou — čo mám (certifikát) a čo viem (heslo).

Príznakom, že užívateľovi je povolené pripojenie, je jeho členstvo v skupine myVPNUsr. Na certifikáciu sa použije autonómne certifikačné centrum.

Cena implementácie riešenia — len malé hardvérové zdroje a 1 hodina práce systémového administrátora.

Budeme používať virtuálny stroj s OpenVPN a Easy-RSA 3. verzie na CentOS 7, ktorému bolo pridelených 4 vCPU a 4 GiB RAM, pričom je počítané na 100 pripojení.

V príklade je sieť našej organizácie 172.16.0.0/16, v ktorej je VPN server s adresou 172.16.19.123 umiestnený v segmente 172.16.19.0/24, DNS servery 172.16.16.16 a 172.16.17.17 a pre VPN klientov je vyhradená podsieť 172.16.20.0/23.

Na pripojenie z vonku sa používa pripojenie na porte 1194/udp a v DNS je pre náš server vytvorená A-záznam gw.abc.ru.

Kategoricky sa neodporúča vypínať SELinux! OpenVPN funguje bez vypínania bezpečnostných politík.

Obsah

  1. Inštalácia OS a aplikačného softvéru
  2. Nastavenie kryptografie
  3. Nastavenie OpenVPN
  4. Autentifikácia v AD
  5. Spustenie a diagnostika
  6. Vydanie a odvolanie certifikátu
  7. Nastavenie siete
  8. Čo ďalej

Inštalácia OS a aplikačného softvéru

Používame distribúciu CentOS 7.8.2003. Potrebujeme inštaláciu OS v minimálnej konfigurácii. Je pohodlné to robiť s použitím kickstart, klonovaním predtým nainštalovaného obrazu OS a inými prostriedkami.

Po inštalácii, priradení adresy sieťovému rozhraniu (podľa podmienok úlohy 172.16.19.123), vykonáme aktualizáciu OS:

$ sudo yum update -y && reboot

Tiež je potrebné zabezpečiť, že na našej mašine prebieha synchronizácia času.
Na inštaláciu aplikačného softvéru sú potrebné balíky openvpn, openvpn-auth-ldap, easy-rsa a vim ako hlavný editor (bude potrebné repozitár EPEL).

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

Pre virtuálny stroj je užitočné nainštalovať hosťovského agenta:

$ sudo yum install open-vm-tools

pre hostiteľov VMware ESXi alebo pre oVirt

$ sudo yum install ovirt-guest-agent

Nastavenie kryptografie

Prejdeme do adresára easy-rsa:

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

Vytvoríme súbor premenných:

$ sudo vim vars

nasledujúceho obsahu:

export KEY_COUNTRY="SK"
export KEY_PROVINCE="MojeRegion"
export KEY_CITY="MojeMesto"
export KEY_ORG="ABC LLC"
export KEY_EMAIL="admin@abc.sk"
export KEY_CN="vsetciPouzivatelia"
export KEY_OU="vsetciPouzivatelia"
export KEY_NAME="gw.abc.sk"
export KEY_ALTNAMES="abc-openvpn-server"
export EASYRSA_CERT_EXPIRE=3652

Tu sú popísané parametre pre fiktívnu organizáciu s.r.o. „ABC“, môžete ich opraviť na skutočné alebo nechať z príkladu. Najdôležitejšia je posledná riadok určujúca dobu platnosti certifikátu v dňoch. Príklad obsahuje hodnotu 10 rokov (365*10+2 prestupné roky). Túto hodnotu bude potrebné upraviť pred vydaním certifikátov používateľov.

Ďalej nastavíme autonómne certifikačné centrum.

Nastavenie zahŕňa export premenných, inicializáciu CA, vydanie koreňových kľúčov a certifikátu CA, kľúč Diffieho-Hellmana, kľúč TLS, ako aj kľúč a certifikát servera. Kľúč certifikačného centra je potrebné starostlivo chrániť a uchovávať v tajnosti! Všetky parametre pri požiadavkách môžete nechať ako predvolené.

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ýmto je hlavná časť nastavenia kryptografického mechanizmu ukončená.

Nastavenie OpenVPN

Prejdeme do adresára OpenVPN, vytvoríme systémové adresáre a pridáme odkaz na easy-rsa:

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/

Vytvoríme hlavnú konfiguračnú súbor OpenVPN:

$ sudo vim server.conf

nasledujúcej obsah

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

Niektoré poznámky k parametrom:

  • ak bolo pri vydaní certifikátu zadané iné meno — zadajte ho;
  • Adresu poolu nastavte podle svých úkolů*;
  • může být jedna nebo více tras a DNS serverů;
  • Poslední 2 řádky jsou potřebné pro implementaci autentizace v AD**.

*Vybraný rozsah adres v příkladu umožní současné připojení až 127 klientům, protože byla vybrána síť /23, a OpenVPN vytváří pro každého klienta podsíť s maskou /30.
V případě potřeby lze změnit port a protokol, mějte však na paměti, že změna čísla portu si vyžádá úpravu SELinuxu, a použití protokolu tcp zvýší režijní náklady, protože kontrola doručení tcp paketů již probíhá na úrovni zabalitelných paketů v tunelu.

**Pokud autentizace v AD není potřeba, zakomentujte je, následující část - přeskočte, a v šabloně odstraňte řádek auth-user-pass.

Autentifikácia v AD

Pro podporu druhého faktoru budeme používat ověřování účtu v AD.

Potřebujeme účet v doméně s právy obyčejného uživatele a skupinu, jejíž členství bude určovat možnost připojení.

Vytváříme konfigurační soubor:

/etc/openvpn/ldap.conf

nasledujúcej obsah

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


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

Hlavní parametry:

  • URL „ldap://ldap.abc.sk“ — adresa řadiče domény;
  • BindDN „CN=bindUsr,CN=Users,DC=abc,DC=sk“ — kanonické jméno pro připojení k LDAP (uživatel — bindUsr v kontejneru abc.sk/Users);
  • Heslo b1ndP@SS — heslo uživatele pro připojení;
  • BaseDN „OU=allUsr,DC=abc,DC=sk“ — cesta, od které začínáme vyhledávání uživatele;
  • BaseDN „OU=myGrp,DC=abc,DC=sk“ — kontejner povolující skupinu (skupina myVPNUsr v kontejneru abc.sk/myGrp);
  • SearchFilter "(cn=myVPNUsr)" — jméno povolující skupiny.

Spustenie a diagnostika

Nyní můžeme zkusit povolit a spustit náš server:

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

Ověření spuštění:

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

Vydanie a odvolanie certifikátu

Vzhledem k tomu, že kromě samotných certifikátů jsou potřeba klíče a další nastavení, je velmi pohodlné zabalit to všechno do jednoho profilu. Tento soubor je pak předán uživateli a profil se již importuje na klientovi OpenVPN. Pro to vytvoříme šablonu nastavení a skript, který generuje profil.

Do profilu je potrebné pridať obsah súborov koreňového certifikátu (ca.crt) a TLS kľúča (ta.key).

Pred vydaním certifikátov pre používateľov nezabudnite nastaviť požadovanú dobu platnosti certifikátov v súbore parametrov. Nemal by byť príliš dlhý, odporúčam obmedziť ho na maximálne 180 dní.

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

Poznámky:

  • riadky PUT YOUR… meníme na obsah svojich certifikátov;
  • v direktíve remote uveďte meno/adresu vášho brány;
  • direktíva auth-user-pass sa používa na dodatočné externé overenie.

V domácom adresári (alebo inom pohodlnom mieste) vytvorte skript pre požiadavku certifikátu a vytvorenie profilu:

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 ~

Robíme súbor spustiteľným:

chmod a+x ~/make.profile.sh

A môžeme vypustiť náš prvý certifikát.

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

Odvolanie

V prípade kompromitácie certifikátu (strata, krádež) je potrebné tento certifikát odvolať:

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

Zobrazenie vydaných a odvolaných certifikátov

Na zobrazenie vydaných a odvolaných certifikátov stačí zobraziť indexový súbor:

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

Vysvetlenia:

  • prvým riadkom ide certifikát servera;
  • prvý symbol
    • V (Valid) — platný;
    • R (Revoked) — odvolaný.

Nastavenie siete

Posledné kroky — nastavenie siete prenosu — smerovania a firewallov.

Povolenie pripojení v lokálnom firewalle:

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

Ďalej zapneme smerovanie IP prevádzky:

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

V korporátnom prostredí sa určite nachádza delenie na podsiete a je potrebné oznámiť smerovaču(-om), akým spôsobom posielať pakety, adresované našim VPN klientom. V príkazovom riadku vykonajte príkaz podobne (závisí od používaného zariadenia):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

a uložiť konfiguráciu.

Okrem toho na rozhraní okrajového smerovača, kde sa spravuje externá adresa gw.abc.ru, je potrebné povoliť prechod paketov udp/1194.

Ak v organizácii platia prísne bezpečnostné pravidlá, je potrebné na našom VPN serveri nastaviť aj firewall. Z môjho pohľadu poskytuje najväčšiu flexibilitu konfigurácia reťazcov iptables FORWARD, aj keď ich nastavenie je menej pohodlné. Trochu podrobnejšie o ich nastavení. Na tento účel je najlepšie použiť „priame pravidlá“ — direct rules, uložené v súbore /etc/firewalld/direct.xml. Aktuálnu konfiguráciu pravidiel môžete zistiť takto:

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

Pred zmenou súboru si vytvorte jeho zálohu:

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

Príkladné obsah súboru je nasledujúce:


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

Vysvetlenia

Vo svojej podstate sa jedná o bežné pravidlá iptables, inak zabalené po príchode firewalld.

Priradené rozhranie pri predvolenom nastavení je tun0, a vonkajšie pre tunel môže byť iné, napr. ens192, v závislosti od použitej platformy.

Posledný riadok je určený na zaznamenávanie odmietnutých paketov. Aby zaznamenávanie fungovalo, je potrebné zmeniť úroveň laditeľnosti v konfigurácii firewalld:

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

Aplikácia nastavení — bežný príkaz firewalld pre prečítanie nastavení:

$ sudo firewall-cmd --reload

Odmietnuté pakety môžete zobraziť takto:

grep forward_fw /var/log/messages

Čo ďalej

Týmto je nastavenie dokončené!

Je potrebné na strane klienta nainštalovať klientský softvér, importovať profil a pripojiť sa. Pre systémy Windows je distribúcia umiestnená na stránke vývojára.

Na záver pripojíme náš nový server k systémom monitorovania a archívovania a nezabudneme pravidelne inštalovať aktualizácie.

Stabilné pripojenie!

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster