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

Obsah

  1. Instalace OS a aplikačního softwaru
  2. Nastavení kryptografie
  3. Nastavení OpenVPN
  4. Autentizace AD
  5. Spouštění a diagnostika
  6. Vydání a zneplatnění certifikátu
  7. Nastavení sítě
  8. Co je další

Instalace OS a aplikačního softwaru

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

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

Pro virtuální počítač je užitečné nainstalovat hostujícího agenta:

$ sudo yum install open-vm-tools

pro hostitele VMware ESXi nebo oVirt

$ sudo yum install ovirt-guest-agent

Nastavení kryptografie

Přejděte do adresáře easy-rsa:

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

Vytvořte proměnný soubor:

$ sudo vim vars

následující obsah:

export KEY_COUNTRY="RU"
export KEY_PROVINCE="MyRegion"
export KEY_CITY="MyCity"
export KEY_ORG="ABC LLC"
export KEY_EMAIL="[email protected]"
export KEY_CN="allUsers"
export KEY_OU="allUsers"
export KEY_NAME="gw.abc.ru"
export KEY_ALTNAMES="abc-openvpn-server"
export EASYRSA_CERT_EXPIRE=3652

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

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

Vytvořte konfigurační soubor:

/etc/openvpn/ldap.conf

následující obsah

<LDAP>
        URL             "ldap://ldap.abc.ru"
        BindDN          "CN=bindUsr,CN=Users,DC=abc,DC=ru"
        Password        b1ndP@SS
        Timeout         15
        TLSEnable       no
        FollowReferrals yes
</LDAP>
<Authorization>
        BaseDN          "OU=allUsr,DC=abc,DC=ru"
        SearchFilter    "(sAMAccountName=%u)"
        RequireGroup    true
        <Group>
                BaseDN          "OU=myGrp,DC=abc,DC=ru"
                SearchFilter    "(cn=myVPNUsr)"
                MemberAttribute "member"
        </Group>
</Authorization>

Základní parametry:

  • URL „ldap://ldap.abc.ru“ – adresa řadiče domény;
  • BindDN “CN=bindUsr,CN=Users,DC=abc,DC=ru” - kanonický název pro vazbu na LDAP (UZ - bindUsr v kontejneru abc.ru/Users);
  • Heslo b1ndP@SS — uživatelské heslo pro vazbu;
  • BaseDN “OU=allUsr,DC=abc,DC=ru” — cesta, ze které se má začít hledat uživatele;
  • BaseDN “OU=myGrp,DC=abc,DC=ru” – kontejner povolující skupiny (skupina myVPNUsr v kontejneru abc.rumyGrp);
  • SearchFilter "(cn=myVPNUsr)" je název povolující skupiny.

Spouštění a diagnostika

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

$ sudo systemctl enable [email protected]
$ sudo systemctl start [email protected]

Kontrola spouštění:

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

Povolení připojení v místní bráně firewall:

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

Dále povolte směrování IP provozu:

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

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:

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

Před změnou souboru vytvořte jeho záložní kopii:

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

Přibližný obsah souboru je:

<?xml version="1.0" encoding="utf-8"?>
<direct>
 <!--Common Remote Services-->
  <!--DNS-->
    <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o ens192 -p udp --dport 53 -j ACCEPT</rule>
  <!--web-->
    <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -p tcp -d 172.16.19.200 --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT</rule>
    <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -p tcp -d 172.16.19.201 --dport 443 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT</rule>
  <!--Some Other Systems-->
    <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -p udp -d 172.16.19.100 --dport 7000 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT</rule>
  <!--just logging-->
    <rule priority="1" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -j LOG --log-prefix 'forward_fw '</rule>
</direct>

Vysvětlení

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

Stabilní spojení!

Zdroj: www.habr.com

Přidat komentář