Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Problémy

Ještě nedávno mnozí nevěděli, jaké to je pracovat z domova. Pandemie dramaticky změnila situaci ve světě, všichni se začali přizpůsobovat současným okolnostem, konkrétně tomu, že je prostě nebezpečné vycházet z domu. A mnozí museli svým zaměstnancům rychle zorganizovat práci z domova.

Nedostatek kompetentního přístupu k výběru řešení pro práci na dálku však může vést k nevratným ztrátám. Uživatelská hesla mohou být odcizena, což útočníkovi umožní nekontrolovatelně se připojit k síti a IT zdrojům podniku.

Proto nyní vzrostla potřeba vytvářet spolehlivé podnikové sítě VPN. Povím vám o tom spolehlivý, bezpečný и jednoduchý při používání sítě VPN.

Funguje podle schématu IPsec/L2TP, které využívá k autentizaci klientů nezpřístupněné klíče a certifikáty uložené na tokenech a také přenáší data po síti v zašifrované podobě.

Jako ukázkové stojany pro konfiguraci byly použity server s CentOS 7 (adresa: centos.vpn.server.ad) a klient s Ubuntu 20.04 a také klient s Windows 10.

Popis systému

VPN bude fungovat podle schématu IPSec + L2TP + PPP. Protokol Protokol Point-to-Point (PPP) funguje na spojové vrstvě modelu OSI a zajišťuje uživatelskou autentizaci a šifrování přenášených dat. Jeho data jsou zapouzdřena v datech protokolu L2TP, který ve skutečnosti zajišťuje vytvoření spojení ve VPN síti, ale neposkytuje autentizaci a šifrování.

Data L2TP jsou zapouzdřena v protokolu IPSec, který také poskytuje autentizaci a šifrování, ale na rozdíl od PPP probíhá ověřování a šifrování na úrovni zařízení, nikoli na úrovni uživatele.

Tato funkce umožňuje ověřovat uživatele pouze z určitých zařízení. Použijeme protokol IPSec tak, jak je, a umožníme autentizaci uživatele z libovolného zařízení.

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Autentizace uživatele pomocí čipových karet bude prováděna na úrovni protokolu PPP pomocí protokolu EAP-TLS.

Podrobnější informace o provozu tohoto okruhu naleznete v tento článek.

Proč toto schéma splňuje všechny tři požadavky na dobrou síť VPN?

  1. Spolehlivost tohoto schématu prověřil čas. Od roku 2000 se používá k nasazování sítí VPN.
  2. Bezpečné ověření uživatele zajišťuje protokol PPP. Standardní implementace protokolu PPP vyvinutého Paulem Mackerrasem neposkytuje dostatečnou úroveň zabezpečení, protože Pro autentizaci se v lepším případě používá autentizace pomocí loginu a hesla. Všichni víme, že přihlašovací heslo lze špehovat, uhodnout nebo ukrást. Nicméně, na dlouhou dobu nyní developer Jan Just Keijser в jeho realizace Tento protokol tento problém opravil a přidal možnost používat k ověřování protokoly založené na asymetrickém šifrování, jako je EAP-TLS. Navíc přidal možnost používat k autentizaci čipové karty, díky čemuž byl systém bezpečnější.
    V současné době probíhají aktivní jednání o sloučení těchto dvou projektů a můžete si být jisti, že dříve či později k tomu stejně dojde. Například opravená verze PPP je v repozitářích Fedory již dlouhou dobu a používá k autentizaci zabezpečené protokoly.
  3. Až donedávna mohli tuto síť používat pouze uživatelé Windows, ale naši kolegové z Moskevské státní univerzity Vasilij Šokov a Alexander Smirnov zjistili starý projekt klienta L2TP pro Linux a upravil to. Společně jsme opravili mnoho chyb a nedostatků v práci klienta, zjednodušili instalaci a konfiguraci systému i při stavbě ze zdroje. Nejvýznamnější z nich jsou:
    • Opraveny problémy s kompatibilitou starého klienta s rozhraním nových verzí openssl a qt.
    • Odebráno pppd z předávání PIN tokenu přes dočasný soubor.
    • Opraveno nesprávné spouštění programu žádosti o heslo přes grafické rozhraní. To bylo provedeno instalací správného prostředí pro službu xl2tpd.
    • Sestavení démona L2tpIpsecVpn se nyní provádí společně se sestavením samotného klienta, což zjednodušuje proces sestavení a konfigurace.
    • Pro usnadnění vývoje je systém Azure Pipelines připojen k testování správnosti sestavení.
    • Přidána možnost vynutit si downgrade úroveň zabezpečení v kontextu openssl. To je užitečné pro správnou podporu nových operačních systémů, kde je standardní úroveň zabezpečení nastavena na 2, se sítěmi VPN, které používají certifikáty, které nesplňují bezpečnostní požadavky této úrovně. Tato možnost bude užitečná pro práci se stávajícími starými sítěmi VPN.

Opravenou verzi najdete v toto úložiště.

Tento klient podporuje použití čipových karet pro autentizaci a také co nejvíce skrývá všechny úskalí a úskalí nastavení tohoto schématu pod Linuxem, takže nastavení klienta je co nejjednodušší a nejrychlejší.

Pro pohodlné propojení PPP a klientského GUI se to samozřejmě neobešlo bez dodatečných úprav každého z projektů, ale přesto byly minimalizovány a zredukovány na minimum:

Nyní můžete začít s nastavením.

Ladění serveru

Pojďme nainstalovat všechny potřebné balíčky.

Instalace strongswan (IPsec)

Nejprve nakonfigurujeme firewall pro provoz ipsec

sudo firewall-cmd --permanent --add-port=1701/{tcp,udp}
sudo firewall-cmd --permanent --add-service=ipsec
sudo firewall-cmd --reload

Poté zahájíme instalaci

sudo yum install epel-release ipsec-tools dnf
sudo dnf install strongswan

Po instalaci je potřeba nakonfigurovat strongswan (jedna z implementací IPSec). Chcete-li to provést, upravte soubor /etc/strongswan/ipsec.conf :

config setup
    nat_traversal=yes
    virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
    oe=off
    protostack=netkey 

conn L2TP-PSK-NAT
    rightsubnet=vhost:%priv
    also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
    authby=secret
    pfs=no
    auto=add
    keyingtries=3
    rekey=no
    ikelifetime=8h
    keylife=1h
    type=transport
    left=%any
    leftprotoport=udp/1701
    right=%any
    rightprotoport=udp/%any
    ike=aes128-sha1-modp1536,aes128-sha1-modp1024,aes128-md5-modp1536,aes128-md5-modp1024,3des-sha1-modp1536,3des-sha1-modp1024,3des-md5-modp1536,3des-md5-modp1024
    esp=aes128-sha1-modp1536,aes128-sha1-modp1024,aes128-md5-modp1536,aes128-md5-modp1024,3des-sha1-modp1536,3des-sha1-modp1024,3des-md5-modp1536,3des-md5-modp1024

Nastavíme také společné přihlašovací heslo. Sdílené heslo musí znát všichni účastníci sítě pro ověření. Tato metoda je zjevně nespolehlivá, protože toto heslo se může snadno dostat do povědomí jedinců, kterým nechceme poskytnout přístup do sítě.
Ani tato skutečnost však neovlivní bezpečnost sítě, protože Základní šifrování dat a autentizace uživatele se provádí protokolem PPP. Ale spravedlivě stojí za zmínku, že strongswan podporuje bezpečnější technologie pro autentizaci, například pomocí soukromých klíčů. Strongswan má také schopnost poskytovat autentizaci pomocí čipových karet, ale zatím je podporováno pouze omezené množství zařízení, a proto je ověřování pomocí tokenů a čipových karet Rutoken stále obtížné. Nastavíme obecné heslo přes soubor /etc/strongswan/ipsec.secrets:

# ipsec.secrets - strongSwan IPsec secrets file
%any %any : PSK "SECRET_PASSPHRASE"

Pojďme restartovat strongswan:

sudo systemctl enable strongswan
sudo systemctl restart strongswan

Instalace xl2tp

sudo dnf install xl2tpd

Pojďme to nakonfigurovat pomocí souboru /etc/xl2tpd/xl2tpd.conf:

[global]
force userspace = yes
listen-addr = 0.0.0.0
ipsec saref = yes

[lns default]
exclusive = no
; определяет статический адрес сервера в виртуальной сети
local ip = 100.10.10.1
; задает диапазон виртуальных адресов
ip range = 100.10.10.1-100.10.10.254
assign ip = yes
refuse pap = yes
require authentication = yes
; данную опцию можно отключить после успешной настройки сети
ppp debug = yes
length bit = yes
pppoptfile = /etc/ppp/options.xl2tpd
; указывает адрес сервера в сети
name = centos.vpn.server.ad

Restartujeme službu:

sudo systemctl enable xl2tpd
sudo systemctl restart xl2tpd

Nastavení PPP

Je vhodné nainstalovat nejnovější verzi pppd. Chcete-li to provést, proveďte následující posloupnost příkazů:

sudo yum install git make gcc openssl-devel
git clone "https://github.com/jjkeijser/ppp"
cd ppp
./configure --prefix /usr
make -j4
sudo make install

Zapsat do souboru /etc/ppp/options.xl2tpd následující (pokud tam jsou nějaké hodnoty, můžete je smazat):

ipcp-accept-local
ipcp-accept-remote
ms-dns 8.8.8.8
ms-dns 1.1.1.1

noccp
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000

Vydáváme kořenový certifikát a certifikát serveru:

#директория с сертификатами пользователей, УЦ и сервера
sudo mkdir /etc/ppp/certs
#директория с закрытыми ключами сервера и УЦ
sudo mkdir /etc/ppp/keys
#запрещаем любой доступ к этой дирректории кроме администатора
sudo chmod 0600 /etc/ppp/keys/

#генерируем ключ и выписываем сертификат УЦ
sudo openssl genrsa -out /etc/ppp/keys/ca.pem 2048
sudo openssl req -key /etc/ppp/keys/ca.pem -new -x509 -out /etc/ppp/certs/ca.pem -subj "/C=RU/CN=L2TP CA"

#генерируем ключ и выписываем сертификат сервера
sudo openssl genrsa -out /etc/ppp/keys/server.pem 2048
sudo openssl req -new -out server.req -key /etc/ppp/keys/server.pem -subj "/C=RU/CN=centos.vpn.server.ad"
sudo openssl x509 -req -in server.req -CAkey /etc/ppp/keys/ca.pem -CA /etc/ppp/certs/ca.pem -out /etc/ppp/certs/server.pem -CAcreateserial

Tím jsme hotovi se základním nastavením serveru. Zbytek konfigurace serveru zahrnuje přidávání nových klientů.

Přidání nového klienta

Chcete-li do sítě přidat nového klienta, musíte jeho certifikát přidat do seznamu důvěryhodných pro tohoto klienta.

Pokud se chce uživatel stát členem sítě VPN, vytvoří pro tohoto klienta pár klíčů a aplikaci certifikátu. Pokud je uživatel důvěryhodný, lze tuto aplikaci podepsat a výsledný certifikát lze zapsat do adresáře certifikátů:

sudo openssl x509 -req -in client.req -CAkey /etc/ppp/keys/ca.pem -CA /etc/ppp/certs/ca.pem -out /etc/ppp/certs/client.pem -CAcreateserial

Pojďme do souboru /etc/ppp/eaptls-server přidat řádek, který bude odpovídat jménu klienta a jeho certifikátu:

"client" * /etc/ppp/certs/client.pem /etc/ppp/certs/server.pem /etc/ppp/certs/ca.pem /etc/ppp/keys/server.pem *

POZNÁMKA
Aby nedošlo k záměně, je lepší, aby: Společný název, název souboru certifikátu a uživatelské jméno byly jedinečné.

Vyplatí se také zkontrolovat, zda se jméno uživatele, kterého přidáváme, nikde neobjevuje v jiných ověřovacích souborech, jinak budou problémy se způsobem autentizace uživatele.

Stejný certifikát musí být zaslán zpět uživateli.

Generování páru klíčů a certifikátu

Pro úspěšné ověření musí klient:

  1. vygenerovat pár klíčů;
  2. mít kořenový certifikát CA;
  3. mít certifikát pro svůj pár klíčů podepsaný kořenovou CA.

pro klienta na Linuxu

Nejprve vygenerujeme pár klíčů na tokenu a vytvoříme aplikaci pro certifikát:

#идентификатор ключа (параметр --id) можно заменить на любой другой.
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 45

openssl
OpenSSL> engine dynamic -pre SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:librtpkcs11ecp.so
...
OpenSSL> req -engine pkcs11 -new -key 45 -keyform engine -out client.req -subj "/C=RU/CN=client"

Odešlete aplikaci client.req, která se zobrazí certifikačnímu úřadu. Jakmile obdržíte certifikát pro svůj pár klíčů, zapište jej na token se stejným ID jako klíč:

pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -l -y cert -w ./client.pem --id  45

pro klienty Windows a Linux (univerzálnější metoda)

Tato metoda je univerzálnější, protože umožňuje vygenerovat klíč a certifikát, který bude úspěšně rozpoznán uživateli Windows a Linuxu, ale k provedení procedury generování klíče vyžaduje počítač se systémem Windows.

Před generováním požadavků a importem certifikátů musíte přidat kořenový certifikát sítě VPN do seznamu důvěryhodných. Chcete-li to provést, otevřete jej a v okně, které se otevře, vyberte možnost „Instalovat certifikát“:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

V okně, které se otevře, vyberte instalaci certifikátu pro místního uživatele:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Nainstalujme certifikát do důvěryhodného kořenového úložiště certifikátů CA:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Po všech těchto akcích souhlasíme se všemi dalšími body. Systém je nyní nakonfigurován.

Vytvořme soubor cert.tmp s následujícím obsahem:

[NewRequest]
Subject = "CN=client"
KeyLength = 2048
KeySpec = "AT_KEYEXCHANGE" 
ProviderName = "Microsoft Base Smart Card Crypto Provider"
KeyUsage = "CERT_KEY_ENCIPHERMENT_KEY_USAGE"
KeyUsageProperty = "NCRYPT_ALLOW_DECRYPT_FLAG"
RequestType = PKCS10
SMIME = FALSE

Poté vygenerujeme pár klíčů a vytvoříme aplikaci pro certifikát. Chcete-li to provést, otevřete powershell a zadejte následující příkaz:

certreq.exe -new -pin $PIN .cert.tmp .client.req

Odešlete vytvořenou aplikaci client.req svému CA a počkejte na přijetí certifikátu client.pem. Lze jej zapsat do tokenu a přidat do úložiště certifikátů Windows pomocí následujícího příkazu:

certreq.exe -accept .client.pem

Stojí za zmínku, že podobné akce lze reprodukovat pomocí grafického rozhraní programu mmc, ale tato metoda je časově náročnější a méně programovatelná.

Nastavení klienta Ubuntu

POZNÁMKA
Nastavení klienta na Linuxu je v současné době poměrně časově náročné, protože... vyžaduje vytvoření samostatných programů ze zdroje. Budeme se snažit, aby všechny změny byly v nejbližší době zahrnuty do oficiálních repozitářů.

K zajištění připojení na úrovni IPSec k serveru se používá balíček strongswan a démon xl2tp. Pro zjednodušení připojení k síti pomocí čipových karet použijeme balíček l2tp-ipsec-vpn, který poskytuje grafický shell pro zjednodušené nastavení připojení.

Začněme se sestavováním prvků krok za krokem, ale předtím nainstalujeme všechny potřebné balíčky, aby VPN fungovala přímo:

sudo apt-get install xl2tpd strongswan libp11-3

Instalace softwaru pro práci s tokeny

Nainstalujte nejnovější knihovnu librtpkcs11ecp.so z сайта, také knihovny pro práci s čipovými kartami:

sudo apt-get install pcscd pcsc-tools opensc libengine-pkcs11-openssl

Připojte Rutoken a zkontrolujte, zda je systémem rozpoznán:

pkcs11-tool --module /usr/lib/librtpkcs11ecp.so  -O -l

Instalace opraveného ppp

sudo apt-get -y install git make gcc libssl-dev
git clone "https://github.com/jjkeijser/ppp"
cd ppp
./configure --prefix /usr
make -j4
sudo make install

Instalace klienta L2tpIpsecVpn

V tuto chvíli je také potřeba klienta zkompilovat ze zdrojového kódu. To se provádí pomocí následující sekvence příkazů:

sudo apt-get -y install git qt5-qmake qt5-default build-essential libctemplate-dev libltdl-dev
git clone "https://github.com/Sander80/l2tp-ipsec-vpn"
cd l2tp-ipsec-vpn
make -j4
sudo make install

Nastavení klienta L2tpIpsecVpn

Spusťte nainstalovaného klienta:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Po spuštění by se měl otevřít aplet L2tpIpsecVPN. Klikněte na něj pravým tlačítkem a nakonfigurujte připojení:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Pro práci s tokeny nejprve uvedeme cestu k opensc enginu OpenSSL enginu a ke knihovně PKCS#11. Chcete-li to provést, otevřete kartu "Předvolby" a nakonfigurujte parametry openssl:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI.

Zavřeme okno nastavení OpenSSL a přejdeme k nastavení sítě. Pojďme přidat novou síť kliknutím na tlačítko Přidat... na panelu nastavení a zadejte název sítě:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Poté bude tato síť dostupná na panelu nastavení. Poklepáním pravým tlačítkem myši na novou síť ji nakonfigurujte. Na první kartě musíte provést nastavení IPsec. Nastavíme adresu serveru a veřejný klíč:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Poté přejděte na kartu Nastavení PPP a uveďte uživatelské jméno, pod kterým chceme přistupovat k síti:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Poté otevřete kartu Vlastnosti a zadejte cestu ke klíči, klientskému certifikátu a CA:
Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Zavřeme tuto kartu a proveďte konečná nastavení; Chcete-li to provést, otevřete kartu „Nastavení IP“ a zaškrtněte políčko vedle možnosti „Získat adresu serveru DNS automaticky“:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI
Tato možnost umožní klientovi získat ze serveru osobní IP adresu v rámci sítě.

Po všech nastaveních zavřete všechny karty a restartujte klienta:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Připojení k síti

Po nastavení se můžete připojit k síti. Chcete-li to provést, otevřete kartu apletu a vyberte síť, ke které se chceme připojit:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Během procesu navazování připojení nás klient požádá o zadání Rutoken PIN kódu:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Pokud se ve stavovém řádku zobrazí upozornění, že připojení bylo úspěšně navázáno, znamená to, že nastavení bylo úspěšné:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

V opačném případě stojí za to zjistit, proč nebylo spojení navázáno. Chcete-li to provést, měli byste se podívat do protokolu programu výběrem příkazu „Informace o připojení“ v apletu:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Nastavení klienta Windows

Nastavení klienta na Windows je mnohem jednodušší než na Linuxu, protože... Veškerý potřebný software je již zabudován do systému.

Nastavení systému

Všechny potřebné ovladače pro práci s Rutokens nainstalujeme jejich stažením z z. místo.

Import kořenového certifikátu pro ověření

Stáhněte si kořenový certifikát serveru a nainstalujte jej do systému. Chcete-li to provést, otevřete jej a v okně, které se otevře, vyberte možnost „Instalovat certifikát“:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

V okně, které se otevře, vyberte instalaci certifikátu pro místního uživatele. Pokud chcete, aby byl certifikát dostupný všem uživatelům v počítači, měli byste zvolit instalaci certifikátu na místní počítač:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Nainstalujme certifikát do důvěryhodného kořenového úložiště certifikátů CA:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Po všech těchto akcích souhlasíme se všemi dalšími body. Systém je nyní nakonfigurován.

Nastavení připojení VPN

Chcete-li nastavit připojení VPN, přejděte na ovládací panel a vyberte možnost vytvoření nového připojení.

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Ve vyskakovacím okně vyberte možnost vytvoření připojení pro připojení k vašemu pracovišti:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

V dalším okně vyberte připojení VPN:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

a zadejte podrobnosti o připojení VPN a také zadejte možnost použití čipové karty:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Nastavení ještě není dokončeno. Zbývá pouze zadat sdílený klíč pro protokol IPsec; Chcete-li to provést, přejděte na kartu „Nastavení síťového připojení“ a poté přejděte na kartu „Vlastnosti pro toto připojení“:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

V okně, které se otevře, přejděte na kartu „Zabezpečení“, zadejte „Síť L2TP/IPsec“ jako typ sítě a vyberte „Pokročilá nastavení“:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

V okně, které se otevře, zadejte sdílený klíč IPsec:
Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Připojení

Po dokončení nastavení se můžete pokusit připojit k síti:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Během procesu připojení budeme požádáni o zadání kódu PIN tokenu:

Nastavení ověřování v síti L2TP pomocí Rutoken EDS 2.0 a Rutoken PKI

Nastavili jsme zabezpečenou síť VPN a ujistili jsme se, že to není obtížné.

Poděkování

Rád bych ještě jednou poděkoval našim kolegům Vasiliji Shokovovi a Alexandru Smirnovovi za práci, kterou společně odvedli pro zjednodušení vytváření VPN připojení pro linuxové klienty.

Zdroj: www.habr.com

Přidat komentář