
Ongelmat
Juuri äskettäin monet eivät tienneet, millaista on työskennellä kotona. Pandemia on muuttanut maailman tilannetta dramaattisesti, kaikki ovat alkaneet sopeutua vallitseviin olosuhteisiin, nimittäin siihen, että kotoa poistumisesta on tullut yksinkertaisesti turvatonta. Ja monien oli nopeasti järjestettävä kotoa työskentely työntekijöilleen.
Asiantuntevan lähestymistavan puute etätyön ratkaisujen valinnassa voi kuitenkin johtaa peruuttamattomiin tappioihin. Käyttäjien salasanat voidaan varastaa, jolloin hyökkääjä voi muodostaa hallitsemattomasti yhteyden yrityksen verkko- ja IT-resursseihin.
Tästä syystä tarve luoda luotettavia yritysten VPN-verkkoja on nyt lisääntynyt. Kerron sinulle siitä luotettava, turvallinen и yksinkertainen VPN-verkon käytössä.
Se toimii IPsec/L2TP-mallin mukaisesti, joka käyttää ei-haettavaa avaimia ja tokeneihin tallennettuja varmenteita asiakkaiden todentamiseen ja myös välittää tietoja verkon yli salatussa muodossa.
Palvelin, jossa on CentOS 7 (osoite: centos.vpn.server.ad) ja asiakas, jolla on Ubuntu 20.04, ja myös asiakas, jolla on Windows 10.
Järjestelmän kuvaus
VPN toimii IPSec + L2TP + PPP -järjestelmän mukaisesti. pöytäkirja Piste-piste-protokolla (PPP) toimii OSI-mallin datalinkkikerroksessa ja tarjoaa käyttäjän todennuksen ja lähetetyn tiedon salauksen. Sen tiedot on kapseloitu L2TP-protokollan tietoihin, mikä itse asiassa varmistaa yhteyden luomisen VPN-verkossa, mutta ei tarjoa todennusta ja salausta.
L2TP-tiedot on kapseloitu IPSeciin, joka tarjoaa myös todennuksen ja salauksen, mutta toisin kuin PPP, todennus ja salaus tapahtuu laitetasolla, ei käyttäjätasolla.
Tämän ominaisuuden avulla voit todentaa käyttäjiä vain tietyiltä laitteilta. Käytämme IPSec-protokollaa sellaisenaan ja sallimme käyttäjän todennuksen mistä tahansa laitteesta.

Käyttäjätunnistus älykorteilla suoritetaan PPP-protokollatasolla EAP-TLS-protokollaa käyttäen.
Tarkempia tietoja tämän piirin toiminnasta löytyy osoitteesta .
Miksi tämä järjestelmä täyttää kaikki kolme hyvän VPN-verkon vaatimusta?
- Tämän järjestelmän luotettavuus on aika testattu. Sitä on käytetty VPN-verkkojen käyttöönotossa vuodesta 2000 lähtien.
- PPP-protokolla tarjoaa suojatun käyttäjän todennuksen. ei tarjoa riittävää turvatasoa, koska Todennuksena käytetään parhaassa tapauksessa todennusta sisäänkirjautumisen ja salasanan avulla. Me kaikki tiedämme, että kirjautumissalasana voidaan vakoilla, arvata tai varastaa. Kuitenkin jo pitkään kehittäjä в Tämä protokolla korjasi tämän ongelman ja lisäsi mahdollisuuden käyttää todentamiseen epäsymmetriseen salaukseen perustuvia protokollia, kuten EAP-TLS. Lisäksi hän lisäsi mahdollisuuden käyttää älykortteja todentamiseen, mikä teki järjestelmästä turvallisemman.
Parhaillaan käydään aktiivisia neuvotteluja näiden kahden hankkeen yhdistämisestä ja voit olla varma, että ennemmin tai myöhemmin näin tapahtuu joka tapauksessa. Esimerkiksi PPP:n korjattu versio on ollut Fedoran arkistoissa pitkään, ja se on käyttänyt todentamiseen suojattuja protokollia. - Vielä vähän aikaa sitten tätä verkkoa pystyivät käyttämään vain käyttäjät Windows, mutta kollegamme Moskovan valtionyliopistosta Vasily Shokov ja Alexander Smirnov löysivät ja muokkasi sitä. Yhdessä korjasimme monia bugeja ja puutteita asiakkaan työssä, yksinkertaistimme järjestelmän asennusta ja konfigurointia, myös lähteestä rakennettaessa. Merkittävimmät niistä ovat:
- Korjattu vanhan asiakkaan yhteensopivuusongelmat uusien openssl- ja qt-versioiden käyttöliittymän kanssa.
- Poistettu pppd välittämästä tunnuksen PIN-koodia väliaikaisen tiedoston kautta.
- Korjattu salasanan pyyntöohjelman virheellinen käynnistys graafisen käyttöliittymän kautta. Tämä tehtiin asentamalla oikea ympäristö xl2tpd-palvelulle.
- L2tpIpsecVpn-daemonin rakentaminen suoritetaan nyt yhdessä asiakkaan itsensä rakentamisen kanssa, mikä yksinkertaistaa rakennus- ja konfigurointiprosessia.
- Kehityksen helpottamiseksi Azure Pipelines -järjestelmä on kytketty testaamaan koontiversion oikeellisuutta.
- Lisätty mahdollisuus pakottaa alenemaan openssl:n yhteydessä. Tästä on hyötyä, kun tuetaan oikein uusia käyttöjärjestelmiä, joissa vakiosuojaustasoksi on asetettu 2, VPN-verkoissa, jotka käyttävät varmenteita, jotka eivät täytä tämän tason suojausvaatimuksia. Tämä vaihtoehto on hyödyllinen työskennellessäsi olemassa olevien vanhojen VPN-verkkojen kanssa.
Korjattu versio löytyy osoitteesta .
Tämä asiakasohjelma tukee älykorttien käyttöä todennuksessa ja piilottaa myös mahdollisimman paljon kaikki tämän järjestelmän käyttöönoton vaikeudet ja vastoinkäymiset. Linux, mikä tekee asiakasohjelman asennuksesta mahdollisimman yksinkertaisen ja nopean.
PPP:n ja asiakkaan GUI:n välinen kätevä yhteys ei tietenkään ollut mahdollista ilman lisämuokkauksia jokaiseen projektiin, mutta ne kuitenkin minimoitiin ja vähennettiin minimiin:
- Kiinteä
- Kiinteä . Tämä virhe ei sallinut meidän ladata mitään paikallisesta /etc/ppp/openssl.cnf-määritystiedostosta paitsi tietoja openssl-moottoreista älykorttien kanssa työskentelyä varten, mikä oli vakava haitta, jos esimerkiksi moottoreita koskevien tietojen lisäksi halusimme asettaa jotain muuta. Korjaa esimerkiksi suojaustaso yhteyden muodostamisen yhteydessä.
Nyt voit aloittaa määrityksen.
Palvelimen viritys
Asennamme kaikki tarvittavat paketit.
Strongswanin asentaminen (IPsec)
Ensinnäkin määritetään palomuuri ipsec-toimintaa varten
sudo firewall-cmd --permanent --add-port=1701/{tcp,udp}
sudo firewall-cmd --permanent --add-service=ipsec
sudo firewall-cmd --reload
Aloitetaan sitten asennus
sudo yum install epel-release ipsec-tools dnf
sudo dnf install strongswan
Asennuksen jälkeen sinun on määritettävä strongswan (yksi IPSec-toteutuksista). Voit tehdä tämän muokkaamalla tiedostoa /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
Asetamme myös yhteisen kirjautumissalasanan. Jaetun salasanan on oltava kaikkien verkon osallistujien tiedossa todennusta varten. Tämä menetelmä on ilmeisen epäluotettava, koska tämä salasana voi helposti tulla sellaisten henkilöiden tietoon, joille emme halua antaa pääsyä verkkoon.
Tämäkään tosiasia ei kuitenkaan vaikuta verkon turvallisuuteen, koska Perustietojen salaus ja käyttäjän todennus suoritetaan PPP-protokollalla. Mutta rehellisyyden nimissä on syytä huomata, että strongswan tukee turvallisempia todennustekniikoita, esimerkiksi käyttämällä yksityisiä avaimia. Strongswanilla on myös mahdollisuus todentaa älykorteilla, mutta toistaiseksi vain rajoitettu määrä laitteita on tuettu, joten todentaminen Rutoken-tunnuksilla ja älykorteilla on edelleen vaikeaa. Asetetaan yleinen salasana tiedoston kautta /etc/strongswan/ipsec.secrets:
# ipsec.secrets - strongSwan IPsec secrets file
%any %any : PSK "SECRET_PASSPHRASE"
Aloitetaan strongswan uudelleen:
sudo systemctl enable strongswan
sudo systemctl restart strongswan
Asenna xl2tp
sudo dnf install xl2tpd
Määritetään se tiedoston kautta /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
Aloitetaan palvelu uudelleen:
sudo systemctl enable xl2tpd
sudo systemctl restart xl2tpd
PPP-asetukset
On suositeltavaa asentaa pppd:n uusin versio. Voit tehdä tämän suorittamalla seuraavan komentosarjan:
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
Kirjoita tiedostoon /etc/ppp/options.xl2tpd seuraavat (jos siellä on arvoja, voit poistaa ne):
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
Myönnämme juurivarmenteen ja palvelinvarmenteen:
#директория с сертификатами пользователей, УЦ и сервера
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
Näin ollen palvelimen perusasetukset on tehty. Loput palvelinkokoonpanosta sisältävät uusien asiakkaiden lisäämisen.
Uuden asiakkaan lisääminen
Jos haluat lisätä verkkoon uuden asiakkaan, sinun on lisättävä sen varmenne tämän asiakkaan luotettujen asiakkaiden luetteloon.
Jos käyttäjä haluaa liittyä VPN-verkon jäseneksi, hän luo tälle asiakkaalle avainparin ja varmennesovelluksen. Jos käyttäjä on luotettava, tämä sovellus voidaan allekirjoittaa ja tuloksena oleva varmenne voidaan kirjoittaa sertifikaattihakemistoon:
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
Lisätään /etc/ppp/eaptls-server-tiedostoon rivi, joka vastaa asiakkaan nimeä ja sen varmennetta:
"client" * /etc/ppp/certs/client.pem /etc/ppp/certs/server.pem /etc/ppp/certs/ca.pem /etc/ppp/keys/server.pem *
HUOMAUTUS
Sekaannusten välttämiseksi on parempi, että: Yleisnimi, varmennetiedoston nimi ja käyttäjänimi ovat yksilöllisiä.
Kannattaa myös tarkistaa, ettei lisättävän käyttäjän nimi näy missään muissa todennustiedostoissa, muuten tulee ongelmia käyttäjän todentamisessa.
Sama varmenne tulee lähettää takaisin käyttäjälle.
Avainparin ja varmenteen luominen
Jotta todennus onnistuisi, asiakkaan tulee:
- luoda avainpari;
- sinulla on CA-juurivarmenne;
- sinulla on juurivarmentajan allekirjoittama varmenne avainparillesi.
asiakkaalle Linux
Luodaan ensin avainpari tunnukselle ja luodaan sovellus varmennetta varten:
#идентификатор ключа (параметр --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"
Lähetä näkyviin tuleva client.req-sovellus varmentajalle. Kun saat varmenteen avainparillesi, kirjoita se tunnukseen, jolla on sama tunnus kuin avaimella:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -l -y cert -w ./client.pem --id 45
asiakkaille Windows и Linux (yleismaailmallisempi menetelmä)
Tämä menetelmä on yleismaailmallisempi, koska sen avulla voit luoda avaimen ja varmenteen, jonka käyttäjät tunnistavat onnistuneesti. Windows и Linuxmutta se vaatii auton omistamisen Windows avaimen luontimenettelyn suorittamiseksi.
Ennen pyyntöjen luomista ja varmenteiden tuontia sinun on lisättävä VPN-verkon juurivarmenne luotettujen luetteloon. Voit tehdä tämän avaamalla sen ja valitsemalla avautuvasta ikkunasta "Asenna varmenne":

Valitse avautuvassa ikkunassa varmenteen asentaminen paikalliselle käyttäjälle:

Asennamme varmenteen CA:n luotettuun juurivarmennevarastoon:

Kaikkien näiden toimien jälkeen olemme samaa mieltä kaikista muista kohdista. Järjestelmä on nyt konfiguroitu.
Luodaan tiedosto cert.tmp, jossa on seuraava sisältö:
[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
Tämän jälkeen luomme avainparin ja luomme sovelluksen varmennetta varten. Tee tämä avaamalla powershell ja antamalla seuraava komento:
certreq.exe -new -pin $PIN .cert.tmp .client.req
Lähetä luotu client.req-pyyntö varmenteen myöntäjälle ja odota client.pem-varmenteen saapumista. Voit kirjoittaa sen tokeniin ja lisätä sen varmennesäilöösi. Windows seuraavalla komennolla:
certreq.exe -accept .client.pem
On syytä huomata, että vastaavat toiminnot voidaan toistaa mmc-ohjelman graafisella käyttöliittymällä, mutta tämä menetelmä on aikaavievämpi ja vähemmän ohjelmoitavissa.
Asiakkaan asetukset Ubuntu
HUOMAUTUS
Asiakkaan määrittäminen Linux Tämä on tällä hetkellä melko aikaa vievää, koska se vaatii yksittäisten ohjelmien rakentamista lähdekoodista. Pyrimme varmistamaan, että kaikki muutokset sisällytetään virallisiin arkistoihin mahdollisimman pian.
IPSec-tason yhteyden varmistamiseksi palvelimeen käytetään strongswan-pakettia ja xl2tp-daemonia. Verkkoon yhdistämisen yksinkertaistamiseksi älykorttien avulla käytämme l2tp-ipsec-vpn-pakettia, joka tarjoaa graafisen kuoren yksinkertaistettua yhteyden määritystä varten.
Aloitetaan elementtien kokoaminen askel askeleelta, mutta ennen sitä asennamme kaikki tarvittavat paketit, jotta VPN toimisi suoraan:
sudo apt-get install xl2tpd strongswan libp11-3
Ohjelmiston asentaminen tokenien kanssa työskentelemiseen
Asenna uusin librtpkcs11ecp.so-kirjasto osoitteesta , myös kirjastot älykorttien kanssa työskentelemiseen:
sudo apt-get install pcscd pcsc-tools opensc libengine-pkcs11-openssl
Yhdistä Rutoken ja tarkista, että järjestelmä tunnistaa sen:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O -l
Asennetaan korjattu 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
L2tpIpsecVpn-asiakasohjelman asentaminen
Tällä hetkellä asiakas joutuu myös kääntämään lähdekoodista. Tämä tehdään käyttämällä seuraavaa komentosarjaa:
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
L2tpIpsecVpn-asiakkaan määrittäminen
Käynnistä asennettu asiakas:

Käynnistämisen jälkeen L2tpIpsecVPN-sovelman pitäisi avautua. Napsauta sitä hiiren kakkospainikkeella ja määritä yhteys:

Tokenien kanssa työskentelemistä varten osoitamme ensin polun OpenSSL-moottorin opensc-moottoriin ja PKCS#11-kirjastoon. Voit tehdä tämän avaamalla "Preferences"-välilehden ja määrittämällä openssl-parametrit:
.
Suljetaan OpenSSL-asetusikkuna ja siirrytään verkon määrittämiseen. Lisätään uusi verkko napsauttamalla Lisää...-painiketta asetuspaneelissa ja syöttämällä verkon nimi:

Tämän jälkeen tämä verkko tulee saataville asetuspaneelissa. Kaksoisnapsauta hiiren kakkospainikkeella uutta verkkoa määrittääksesi sen. Ensimmäisellä välilehdellä sinun on määritettävä IPsec-asetukset. Asetetaan palvelimen osoite ja julkinen avain:

Siirry tämän jälkeen PPP-asetukset-välilehteen ja ilmoita siellä käyttäjänimi, jolla haluamme päästä verkkoon:

Avaa tämän jälkeen Ominaisuudet-välilehti ja määritä polku avaimeen, asiakasvarmenteeseen ja CA:

Suljetaan tämä välilehti ja suoritamme lopulliset asetukset; avaa "IP-asetukset" -välilehti ja valitse "Hae DNS-palvelimen osoite automaattisesti" -vaihtoehdon vieressä oleva valintaruutu:

Tämän vaihtoehdon avulla asiakas voi vastaanottaa henkilökohtaisen IP-osoitteen verkossa palvelimelta.
Kun olet tehnyt kaikki asetukset, sulje kaikki välilehdet ja käynnistä asiakas uudelleen:

Verkkoyhteys
Asetusten jälkeen voit muodostaa yhteyden verkkoon. Tee tämä avaamalla sovelma-välilehti ja valitsemalla verkko, johon haluamme muodostaa yhteyden:

Yhteyden muodostusprosessin aikana asiakas pyytää meitä syöttämään Rutokenin PIN-koodin:

Jos tilariville tulee ilmoitus, että yhteys on muodostettu onnistuneesti, se tarkoittaa, että asennus onnistui:

Muussa tapauksessa kannattaa selvittää, miksi yhteyttä ei muodostettu. Voit tehdä tämän katsomalla ohjelmalokia valitsemalla sovelman "Yhteystiedot" -komennon:

Asiakkaan asetukset Windows
Asiakkaan asentaminen sisään Windows toteutetaan paljon helpommin kuin Linuxkoska kaikki tarvittava ohjelmisto on jo sisäänrakennettu järjestelmään.
Järjestelmän asennus
Asennamme kaikki Rutokensin kanssa työskentelyyn tarvittavat ajurit lataamalla ne osoitteesta .
Tuodaan juurivarmenne todennusta varten
Lataa palvelimen juurivarmenne ja asenna se järjestelmään. Voit tehdä tämän avaamalla sen ja valitsemalla avautuvasta ikkunasta "Asenna varmenne":

Valitse avautuvassa ikkunassa varmenteen asentaminen paikalliselle käyttäjälle. Jos haluat varmenteen olevan kaikkien tietokoneen käyttäjien saatavilla, sinun tulee valita varmenteen asentaminen paikalliseen tietokoneeseen:

Asennamme varmenteen CA:n luotettuun juurivarmennevarastoon:

Kaikkien näiden toimien jälkeen olemme samaa mieltä kaikista muista kohdista. Järjestelmä on nyt konfiguroitu.
VPN-yhteyden määrittäminen
Jos haluat määrittää VPN-yhteyden, siirry ohjauspaneeliin ja valitse vaihtoehto luoda uusi yhteys.

Valitse ponnahdusikkunassa vaihtoehto luoda yhteys työpaikkaasi yhdistämistä varten:

Valitse seuraavassa ikkunassa VPN-yhteys:

ja anna VPN-yhteyden tiedot ja määritä myös älykortin käyttövaihtoehto:

Asennus ei ole vielä valmis. Jäljelle jää vain IPsec-protokollan jaetun avain määrittäminen. Voit tehdä tämän siirtymällä "Verkkoyhteysasetukset" -välilehteen ja sitten "Tämän yhteyden ominaisuudet" -välilehteen:

Siirry avautuvassa ikkunassa "Suojaus"-välilehteen, määritä "L2TP/IPsec Network" verkkotyypiksi ja valitse "Lisäasetukset":

Määritä avautuvassa ikkunassa jaettu IPsec-avain:

Подключение
Kun asennus on valmis, voit yrittää muodostaa yhteyden verkkoon:

Yhteysprosessin aikana meidän on syötettävä tunnus PIN-koodi:

Olemme perustaneet suojatun VPN-verkon ja varmistaneet, että se ei ole vaikeaa.
Kiitokset
Haluan vielä kerran kiittää kollegoitamme Vasily Shokovia ja Alexander Smirnovia heidän yhteistyöstään VPN-yhteyksien luomisen yksinkertaistamiseksi asiakkaille. Linux.
Lähde: will.com
