Organizace vzdálené práce organizace SMB na OpenVPN
Formulace problému
Článek popisuje organizaci vzdáleného přístupu pro zaměstnance na open source produktech a lze jej použít jak pro vybudování zcela autonomního systému, tak poslouží pro rozšíření, když je ve stávajícím komerčním systému nedostatek licencí nebo je jeho výkon nedostatečný.
Cílem článku je implementovat kompletní systém pro poskytování vzdáleného přístupu k organizaci, což je o něco více než „instalace OpenVPN za 10 minut“.
Ve výsledku tak získáme systém, ve kterém se budou k ověřování uživatelů používat certifikáty a (volitelně) firemní Active Directory. Že. získáme systém se dvěma ověřovacími faktory – co mám (certifikát) a co znám (heslo).
Znakem, že se uživatel může připojit, je jeho členství ve skupině myVPNUsr. Certifikační autorita bude použita offline.
Náklady na implementaci řešení jsou pouze malé hardwarové prostředky a 1 hodina práce správce systému.
Budeme používat virtuální stroj s OpenVPN a Easy-RSA verze 3 na CetntOS 7, kterému jsou přiděleny 100 vCPU a 4 GiB RAM na 4 připojení.
V příkladu je síť naší organizace 172.16.0.0/16, ve které je VPN server s adresou 172.16.19.123 umístěn v segmentu 172.16.19.0/24, DNS servery 172.16.16.16 a 172.16.17.17. .172.16.20.0/23 je přiděleno pro klienty VPN.
Pro připojení zvenčí se používá připojení přes port 1194/udp a pro náš server byl v DNS vytvořen záznam A gw.abc.ru.
Přísně se nedoporučuje deaktivovat SELinux! OpenVPN funguje bez deaktivace zásad zabezpečení.
Používáme distribuci CentOS 7.8.2003. Potřebujeme nainstalovat OS v minimální konfiguraci. Je vhodné to provést pomocí kickstart, klonování dříve nainstalovaného obrazu operačního systému a další prostředky.
Po instalaci, přiřazení adresy síťovému rozhraní (podle podmínek úlohy 172.16.19.123) aktualizujeme OS:
$ sudo yum update -y && reboot
Musíme se také ujistit, že na našem stroji probíhá synchronizace času.
K instalaci aplikačního softwaru potřebujete jako hlavní editor balíčky openvpn, openvpn-auth-ldap, easy-rsa a vim (budete potřebovat úložiště EPEL).
Parametry pro podmíněnou organizaci ABC LLC jsou popsány zde, můžete je opravit na skutečné nebo je ponechat z příkladu. V parametrech je nejdůležitější poslední řádek, který určuje dobu platnosti certifikátu ve dnech. V příkladu je použita hodnota 10 let (365*10+2 přestupné roky). Tuto hodnotu bude nutné upravit před vydáním uživatelských certifikátů.
Dále nakonfigurujeme autonomní certifikační autoritu.
Nastavení zahrnuje export proměnných, inicializaci CA, vydání kořenového klíče a certifikátu CA, klíče Diffie-Hellman, klíče TLS a klíče a certifikátu serveru. Klíč CA musí být pečlivě chráněn a uchováván v tajnosti! Všechny parametry dotazu lze ponechat jako výchozí.
Tím je hlavní část nastavení kryptografického mechanismu dokončena.
Nastavení OpenVPN
Přejděte do adresáře OpenVPN, vytvořte adresáře služeb a přidejte 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/
Vytvořte hlavní konfigurační soubor OpenVPN:
$ sudo vim server.conf
následující 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
Pár poznámek k parametrům:
pokud bylo při vydávání certifikátu uvedeno jiné jméno, uveďte jej;
specifikujte fond adres, aby vyhovoval vašim úkolům*;
může existovat jedna nebo více cest a serverů DNS;
Poslední 2 řádky jsou potřeba k implementaci ověřování v AD**.
*Rozsah adres zvolený v příkladu umožní současné připojení až 127 klientům, protože je vybrána síť /23 a OpenVPN vytvoří podsíť pro každého klienta pomocí masky /30.
Pokud je to zvláště nutné, lze port a protokol změnit, je však třeba mít na paměti, že změna čísla portu bude vyžadovat konfiguraci SELinuxu a použití protokolu tcp zvýší režii, protože Řízení doručování paketů TCP se již provádí na úrovni paketů zapouzdřených v tunelu.
**Pokud ověření v AD není potřeba, zakomentujte je, přeskočte další část a v šabloně odstraňte linku auth-user-pass.
Autentizace AD
Pro podporu druhého faktoru použijeme ověření účtu v AD.
Potřebujeme účet v doméně s právy běžného uživatele a skupinu, jejíž členství bude určovat možnost připojení.
systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Vydání a zneplatnění certifikátu
Protože Kromě samotných certifikátů potřebujete klíče a další nastavení, to vše je velmi vhodné zabalit do jednoho profilového souboru. Tento soubor se poté přenese uživateli a profil se importuje do klienta OpenVPN. K tomu vytvoříme šablonu nastavení a skript, který vygeneruje profil.
Do profilu musíte přidat obsah souborů kořenového certifikátu (ca.crt) a klíče TLS (ta.key).
Před vydáním uživatelských certifikátů nezapomeňte nastavit požadovanou dobu platnosti certifikátů v souboru parametrů. Neměli byste to dělat příliš dlouho, doporučuji omezit se na maximálně 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:
linky DEJ SVŮJ... změnit na obsah Oheň certifikáty;
ve vzdálené direktivě zadejte název/adresu vaší brány;
direktiva auth-user-pass se používá pro další externí autentizaci.
V domovském adresáři (nebo na jiném vhodném místě) vytvoříme skript pro vyžádání certifikátu a vytvoření 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 ~
Vytvoření spustitelného souboru:
chmod a+x ~/make.profile.sh
A můžeme vystavit první certifikát.
~/make.profile.sh my-first-user
odvolání
V případě kompromitace certifikátu (ztráta, krádež) je nutné tento certifikát zneplatnit:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
Zobrazit vydané a zrušené certifikáty
Chcete-li zobrazit vydané a zrušené certifikáty, jednoduše si prohlédněte soubor indexu:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Vysvětlení:
první řádek je certifikát serveru;
první postava
V (Platné) - platné;
R (Revoked) - odvoláno.
Nastavení sítě
Posledními kroky je konfigurace přenosové sítě – routingu a firewallů.
V podnikovém prostředí pravděpodobně existuje podsíť a my musíme směrovačům sdělit, jak posílat pakety určené pro naše klienty VPN. Na příkazovém řádku provedeme příkaz způsobem (v závislosti na použitém zařízení):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123
a uložte konfiguraci.
Navíc na rozhraní hraničního routeru, kde je obsluhována externí adresa gw.abc.ru, je nutné povolit průchod paketů udp/1194.
V případě, že má organizace přísná bezpečnostní pravidla, musí být na našem VPN serveru nakonfigurován také firewall. Podle mého názoru největší flexibilitu poskytuje nastavení řetězců iptables FORWARD, i když jejich nastavení je méně pohodlné. Trochu více o jejich nastavení. K tomu je nejvhodnější použít „přímá pravidla“ – přímá pravidla, uložená v souboru /etc/firewalld/direct.xml. Aktuální konfiguraci pravidel naleznete takto:
Toto jsou v podstatě běžná pravidla iptables, jinak zabalená po příchodu firewallu.
Cílové rozhraní s výchozím nastavením je tun0 a externí rozhraní pro tunel se může lišit, například ens192, v závislosti na použité platformě.
Poslední řádek je pro protokolování zahozených paketů. Aby protokolování fungovalo, musíte změnit úroveň ladění v konfiguraci brány firewall:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
Použití nastavení je obvyklý příkaz brány firewall pro opětovné načtení nastavení:
$ sudo firewall-cmd --reload
Zahozené pakety můžete zobrazit takto:
grep forward_fw /var/log/messages
Co je další
Tím je nastavení dokončeno!
Zbývá pouze nainstalovat klientský software na straně klienta, importovat profil a připojit se. U operačních systémů Windows je distribuční sada umístěna na vývojářský web.
Nakonec připojujeme náš nový server k monitorovacím a archivačním systémům a nezapomínáme na pravidelnou instalaci aktualizací.