Organizácia vzdialenej práce organizácie SMB na OpenVPN
Vyhlásenie o probléme
Článok popisuje organizáciu vzdialeného prístupu pre zamestnancov na open source produktoch a dá sa použiť jednak na vybudovanie úplne autonómneho systému, jednak bude užitočný pri rozširovaní, keď je v existujúcom komerčnom systéme nedostatok licencií alebo je jeho výkon nedostatočný.
Cieľom článku je implementovať kompletný systém na poskytovanie vzdialeného prístupu organizácii, čo je o niečo viac ako „inštalácia OpenVPN za 10 minút“.
V dôsledku toho získame systém, v ktorom sa na autentifikáciu používateľov budú používať certifikáty a (voliteľne) podnikový Active Directory. To. získame systém s dvoma overovacími faktormi – čo mám (certifikát) a čo viem (heslo).
Znakom toho, že používateľ má povolené pripojenie, je jeho členstvo v skupine myVPNUsr. Certifikačná autorita sa bude používať offline.
Náklady na implementáciu riešenia sú len malé hardvérové prostriedky a 1 hodina práce správcu systému.
Na CetntOS 3 použijeme virtuálny stroj s OpenVPN a Easy-RSA verzie 7, ktorý má pridelené 100 vCPU a 4 GiB RAM na 4 pripojení.
V príklade je sieť našej organizácie 172.16.0.0/16, v ktorej sa VPN server s adresou 172.16.19.123 nachádza v segmente 172.16.19.0/24, DNS servery 172.16.16.16 a 172.16.17.17. .172.16.20.0/23 je pridelená pre klientov VPN.
Na pripojenie zvonku sa používa pripojenie cez port 1194/udp a v DNS pre náš server bol vytvorený A-záznam gw.abc.ru.
Dôrazne sa neodporúča deaktivovať SELinux! OpenVPN funguje bez vypnutia bezpečnostných zásad.
Používame distribúciu CentOS 7.8.2003. Musíme nainštalovať OS v minimálnej konfigurácii. Je vhodné to urobiť pomocou nakopnúť, klonovanie predtým nainštalovaného obrazu OS a ďalšie prostriedky.
Po inštalácii, priradení adresy k sieťovému rozhraniu (podľa podmienok úlohy 172.16.19.123), aktualizujeme OS:
$ sudo yum update -y && reboot
Musíme sa tiež uistiť, že na našom stroji prebieha synchronizácia času.
Na inštaláciu aplikačného softvéru potrebujete balíky openvpn, openvpn-auth-ldap, easy-rsa a vim ako hlavný editor (budete potrebovať úložisko EPEL).
Parametre pre podmienenú organizáciu ABC LLC sú popísané tu, môžete ich opraviť na skutočné alebo ich nechať z príkladu. V parametroch je najdôležitejší posledný riadok, ktorý určuje dobu platnosti certifikátu v dňoch. V príklade je použitá hodnota 10 rokov (365*10+2 priestupné roky). Túto hodnotu bude potrebné upraviť pred vydaním používateľských certifikátov.
Ďalej nakonfigurujeme autonómnu certifikačnú autoritu.
Nastavenie zahŕňa export premenných, inicializáciu CA, vydanie koreňového kľúča a certifikátu CA, kľúča Diffie-Hellman, kľúča TLS a kľúča a certifikátu servera. Kľúč CA je potrebné starostlivo chrániť a uchovávať v tajnosti! Všetky parametre dopytu môžu byť ponechané ako predvolené.
Tým sa dokončí hlavná časť nastavenia kryptografického mechanizmu.
Nastavenie OpenVPN
Prejdite do adresára OpenVPN, vytvorte adresáre služieb a pridajte 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/
Vytvorte hlavný konfiguračný súbor OpenVPN:
$ sudo vim server.conf
nasledujúci 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
Niekoľko poznámok k parametrom:
ak bol pri vydávaní certifikátu uvedený iný názov, uveďte ho;
špecifikujte skupinu adries tak, aby vyhovovala vašim úlohám*;
môže existovať jedna alebo viac trás a serverov DNS;
Posledné 2 riadky sú potrebné na implementáciu autentifikácie v AD**.
*Rozsah adries zvolených v príklade umožní súčasné pripojenie až 127 klientom, pretože je vybratá sieť /23 a OpenVPN vytvorí podsieť pre každého klienta pomocou masky /30.
Ak je to obzvlášť potrebné, port a protokol je možné zmeniť, treba však mať na pamäti, že zmena čísla portu si vyžiada konfiguráciu SELinuxu a použitie protokolu tcp zvýši réžiu, pretože Riadenie doručovania paketov TCP sa už vykonáva na úrovni paketov zapuzdrených v tuneli.
**Ak overenie v AD nie je potrebné, zakomentujte ich, preskočte nasledujúcu časť a v šablóne odstráňte linku auth-user-pass.
Autentifikácia AD
Na podporu druhého faktora použijeme overenie účtu v AD.
Potrebujeme účet v doméne s právami bežného používateľa a skupinu, členstvo v ktorej bude určovať možnosť pripojenia.
systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Vydanie a zrušenie certifikátu
Pretože Okrem samotných certifikátov potrebujete kľúče a ďalšie nastavenia, to všetko je veľmi vhodné zabaliť do jedného profilového súboru. Tento súbor sa potom prenesie používateľovi a profil sa importuje do klienta OpenVPN. Na tento účel vytvoríme šablónu nastavení a skript, ktorý vygeneruje profil.
Do profilu musíte pridať obsah súborov koreňového certifikátu (ca.crt) a kľúča TLS (ta.key).
Pred vydaním užívateľských certifikátov nezabudnite nastaviť požadovanú dobu platnosti certifikátov v súbore parametrov. Nemali by ste to robiť príliš dlho, odporúčam vám obmedziť sa 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
<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>
Poznámky:
čiary DAJ TVOJ... zmeniť obsah ich certifikáty;
vo vzdialenej direktíve zadajte názov/adresu vašej brány;
direktíva auth-user-pass sa používa na dodatočnú externú autentifikáciu.
V domovskom adresári (alebo inom vhodnom mieste) vytvoríme skript na vyžiadanie 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 ~
Vytvorenie spustiteľného súboru:
chmod a+x ~/make.profile.sh
A môžeme vydať náš prvý certifikát.
~/make.profile.sh my-first-user
Recenzia
V prípade kompromitácie certifikátu (strata, krádež) je potrebné tento certifikát zneplatniť:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
Zobraziť vydané a zrušené certifikáty
Ak chcete zobraziť vydané a zrušené certifikáty, jednoducho si pozrite indexový súbor:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Vysvetlenie:
prvý riadok je certifikát servera;
prvý znak
V (Platné) - platné;
R (Revoked) - odvolaný.
Nastavenie siete
Poslednými krokmi je konfigurácia prenosovej siete – routingu a firewallov.
V podnikovom prostredí je pravdepodobné, že dôjde k podsieti a musíme smerovačom povedať, ako majú odosielať pakety určené pre našich klientov VPN. Na príkazovom riadku vykonáme príkaz spôsobom (v závislosti od použitého zariadenia):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123
a uložte konfiguráciu.
Navyše na rozhraní hraničného smerovača, kde je obsluhovaná externá adresa gw.abc.ru, je potrebné povoliť prechod paketov udp/1194.
V prípade, že má organizácia prísne bezpečnostné pravidlá, musí byť na našom serveri VPN nakonfigurovaný aj firewall. Podľa môjho názoru najväčšiu flexibilitu poskytuje nastavenie reťazcov iptables FORWARD, aj keď ich nastavenie je menej pohodlné. Trochu viac o ich nastavení. Na tento účel je najvhodnejšie použiť „priame pravidlá“ - priame pravidlá uložené v súbore /etc/firewalld/direct.xml. Aktuálnu konfiguráciu pravidiel nájdete takto:
$ sudo firewall-cmd --direct --get-all-rule
Pred zmenou súboru si vytvorte jeho záložnú kópiu:
Toto sú v podstate bežné pravidlá iptables, inak zabalené po príchode firewalld.
Cieľové rozhranie s predvolenými nastaveniami je tun0 a externé rozhranie pre tunel sa môže líšiť, napríklad ens192, v závislosti od použitej platformy.
Posledný riadok je na zaznamenávanie zahodených paketov. Aby prihlasovanie fungovalo, musíte zmeniť úroveň ladenia v konfigurácii brány firewall:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
Použitie nastavení je obvyklý príkaz brány firewall na opätovné načítanie nastavení:
$ sudo firewall-cmd --reload
Zahodené pakety môžete zobraziť takto:
grep forward_fw /var/log/messages
čo ďalej
Týmto je nastavenie dokončené!
Zostáva len nainštalovať klientsky softvér na strane klienta, importovať profil a pripojiť sa. Pre operačné systémy Windows sa distribučná súprava nachádza na web pre vývojárov.
Nakoniec pripájame náš nový server k monitorovacím a archivačným systémom a nezabúdame na pravidelnú inštaláciu aktualizácií.