ProHoster > Blog > Administrasi > Nyetél auténtikasi dina jaringan L2TP nganggo Rutoken EDS 2.0 sareng Rutoken PKI
Nyetél auténtikasi dina jaringan L2TP nganggo Rutoken EDS 2.0 sareng Rutoken PKI
Isu
Ngan nembe, seueur anu henteu terang kumaha éta damel ti bumi. Pandemik parantos nyirorot ngarobih kaayaan di dunya; sadayana parantos ngamimitian adaptasi sareng kaayaan ayeuna, nyaéta kanyataan yén éta ngan saukur teu aman pikeun ninggalkeun bumi. Sareng seueur anu kedah gancang ngatur padamelan ti bumi pikeun karyawan na.
Tapi, kurangna pendekatan anu kompeten pikeun milih solusi pikeun padamelan jarak jauh tiasa nyababkeun karugian anu teu tiasa dibalikeun deui. Sandi pangguna tiasa dipaling, sareng ieu bakal ngamungkinkeun panyerang teu kakendali nyambung ka jaringan sareng sumber IT perusahaan.
Éta sababna kabutuhan pikeun nyiptakeun jaringan VPN perusahaan anu dipercaya ayeuna parantos ningkat. Kuring gé ngabejaan Anjeun tentang dipercaya, tengtrem и sederhana dina ngagunakeun jaringan VPN.
Gawéna nurutkeun skéma IPsec / L2TP, anu ngagunakeun konci non-retrievable sarta sertipikat disimpen dina tokens pikeun ngabuktoskeun kaaslianana klien, sarta ogé transmits data ngaliwatan jaringan dina formulir énkripsi.
Server sareng CentOS 7 (alamat: centos.vpn.server.ad) sareng klien sareng Ubuntu 20.04, ogé klien sareng Windows 10, dianggo salaku démo nangtung pikeun konfigurasi.
Pedaran Sistim
VPN bakal tiasa dianggo dumasar kana skéma IPSec + L2TP + PPP. Protokol Protokol Point-to-Point (PPP) beroperasi dina lapisan link data model OSI jeung nyadiakeun auténtikasi pamaké sarta enkripsi data dikirimkeun. Data na encapsulated dina data tina protokol L2TP, nu sabenerna ensures kreasi sambungan dina jaringan VPN, tapi teu nyadiakeun auténtikasi jeung enkripsi.
Data L2TP encapsulated di IPSec, nu ogé nyadiakeun auténtikasi jeung enkripsi, tapi teu saperti PPP, auténtikasi jeung enkripsi lumangsung dina tingkat alat, teu di tingkat pamaké.
Fitur ieu ngamungkinkeun anjeun pikeun nga-asténtikasi pangguna ngan tina sababaraha alat. Urang bakal ngagunakeun protokol IPSec sakumaha anu kasebut sarta ngidinan auténtikasi pamaké ti alat mana wae.
Auténtikasi pangguna nganggo kartu pinter bakal dilakukeun dina tingkat protokol PPP nganggo protokol EAP-TLS.
Inpormasi anu langkung lengkep ihwal operasi sirkuit ieu tiasa dipendakan dina artikel ieu.
Naha skéma ieu nyumponan sadaya tilu sarat tina jaringan VPN anu saé?
Reliabiliti skéma ieu geus diuji ku waktu. Parantos dianggo pikeun nyebarkeun jaringan VPN saprak 2000.
auténtikasi pamaké aman disadiakeun ku protokol PPP. Palaksanaan standar protokol PPP dikembangkeun ku Paul Mackerras teu nyadiakeun tingkat cukup kaamanan, sabab Pikeun auténtikasi, dina kasus anu pangsaéna, auténtikasi nganggo login sareng kecap akses dianggo. Urang kabeh terang yén kecap akses login bisa spied on, ditebak atawa dipaling. Sanajan kitu, pikeun lila ayeuna pamekar Jan Ngan Keijser в palaksanaanana Protokol ieu ngalereskeun masalah ieu sareng nambihan kamampuan ngagunakeun protokol dumasar kana enkripsi asimétri, sapertos EAP-TLS, pikeun auténtikasi. Salaku tambahan, anjeunna nambihan kamampuan ngagunakeun kartu pinter pikeun auténtikasi, anu ngajantenkeun sistem langkung aman.
Ayeuna, negosiasi aktip dijalankeun pikeun ngahijikeun dua proyék ieu sareng anjeun tiasa yakin yén engké atanapi engké ieu bakal kajadian. Contona, versi patched of PPP geus lila di gudang Fedora, ngagunakeun protokol aman pikeun auténtikasi.
Nepi ka ayeuna, jaringan ieu ngan bisa dipaké ku pamaké Windows, tapi kolega urang ti Moscow State University Vasily Shokov jeung Alexander Smirnov kapanggih. proyék klien L2TP heubeul pikeun Linux sarta dirobah eta. Babarengan, urang ngalereskeun seueur bug sareng kakurangan dina padamelan klien, nyederhanakeun pamasangan sareng konfigurasi sistem, bahkan nalika ngawangun tina sumber. Anu paling penting di antarana nyaéta:
Masalah kasaluyuan dibereskeun tina klien heubeul kalawan panganteur tina versi anyar openssl na qt.
Dipiceun pppd ti ngalirkeun PIN token ngaliwatan file samentara.
Ngalereskeun peluncuran salah sahiji program pamundut sandi ngaliwatan antarmuka grafis. Hal ieu dilakukeun ku cara masang lingkungan anu leres pikeun layanan xl2tpd.
Ngawangun daemon L2tpIpsecVpn ayeuna dilaksanakeun babarengan sareng ngawangun klien sorangan, anu nyederhanakeun prosés ngawangun sareng konfigurasi.
Pikeun ngagampangkeun pangwangunan, sistem Azure Pipelines disambungkeun pikeun nguji kabeneran wangunan.
Ditambahkeun kamampuhan pikeun maksakeun downgrade tingkat kaamanan dina konteks openssl. Ieu kapaké pikeun leres ngadukung sistem operasi anyar dimana tingkat kaamanan standar disetel ka 2, sareng jaringan VPN anu nganggo sertipikat anu henteu minuhan sarat kaamanan tingkat ieu. Pilihan ieu bakal kapaké pikeun damel sareng jaringan VPN lami anu tos aya.
Versi anu dilereskeun tiasa dipendakan dina gudang ieu.
Klién ieu ngadukung panggunaan kartu pinter pikeun auténtikasi, sareng ogé nyumput sabisa-bisa sagala kasusah sareng kasusah pikeun nyetél skéma ieu dina Linux, ngajantenkeun setélan klien saderhana sareng gancang-gancang.
Tangtosna, pikeun sambungan anu saé antara PPP sareng GUI klien, éta henteu mungkin tanpa éditan tambahan pikeun masing-masing proyék, tapi aranjeunna diminimalkeun sareng diréduksi jadi minimum:
Dibereskeun kasalahan dina urutan loading konfigurasi jeung initializing konteks openssl. Kasalahan ieu teu ngidinan urang pikeun ngamuat nanaon ti file konfigurasi lokal /etc/ppp/openssl.cnf iwal informasi ngeunaan mesin openssl pikeun gawé bareng kartu pinter, nu éta kasulitan serius lamun, contona, salian informasi ngeunaan mesin, urang hayang nyetél hal sejenna. Contona, ngalereskeun tingkat kaamanan nalika nyieun sambungan.
Ayeuna anjeun tiasa ngamimitian nyetél.
Server Tuning
Hayu urang pasang sadayana pakét anu diperyogikeun.
Masang strongswan (IPsec)
Anu mimiti, hayu urang ngonpigurasikeun firewall pikeun operasi ipsec
Urang ogé bakal nyetel sandi login umum. Sandi nu dibagikeun kudu dipikawanoh ka sadaya pamilon jaringan pikeun auténtikasi. Metoda ieu écés teu bisa dipercaya, sabab sandi ieu bisa kalayan gampang jadi dipikawanoh pikeun individu nu urang teu hayang nyadiakeun aksés ka jaringan.
Sanajan kitu, sanajan kanyataan ieu moal mangaruhan kaamanan jaringan, sabab Énkripsi data dasar sareng auténtikasi pangguna dilaksanakeun ku protokol PPP. Tapi dina fairness, eta sia noting yén strongswan ngarojong téknologi leuwih aman pikeun auténtikasi, contona, ngagunakeun kenop swasta. Strongswan ogé mibanda kamampuhan pikeun nyadiakeun auténtikasi maké kartu pinter, tapi jadi jauh ngan rentang kawates alat nu dirojong sahingga auténtikasi maké tokens Rutoken jeung kartu pinter masih hésé. Hayu urang nyetel sandi umum via file /etc/strongswan/ipsec.secrets:
Hayu urang ngonpigurasikeunana via file /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
Kami ngaluarkeun sertipikat akar sareng sertipikat server:
#директория с сертификатами пользователей, УЦ и сервера
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
Ku kituna, urang geus rengse kalayan setelan server dasar. Sesa konfigurasi server ngalibatkeun nambahkeun klien anyar.
Nambahkeun klien anyar
Pikeun nambihan klien anyar kana jaringan, anjeun kedah nambihan sertipikatna kana daptar anu dipercaya pikeun klien ieu.
Upami pangguna hoyong janten anggota jaringan VPN, anjeunna nyiptakeun pasangan konci sareng aplikasi sertipikat pikeun klien ieu. Upami pangguna dipercanten, maka aplikasi ieu tiasa ditandatanganan, sareng sertipikat anu hasilna tiasa diserat kana diréktori sertipikat:
CATETAN
Pikeun ngahindarkeun kabingungan, langkung saé: Ngaran Umum, nami file sertipikat sareng nami pangguna janten unik.
Éta ogé patut pariksa yén nami pangguna anu kami tambahkeun henteu muncul di mana waé dina file auténtikasi anu sanés, upami henteu bakal aya masalah sareng cara pangguna dioténtikasi.
Sertipikat anu sami kedah dikirim deui ka pangguna.
Ngahasilkeun pasangan konci sareng sertipikat
Pikeun auténtikasi suksés, klien kedah:
ngahasilkeun pasangan konci;
gaduh sertipikat akar CA;
gaduh sertipikat pikeun pasangan konci anjeun ditandatanganan ku akar CA.
pikeun klien dina Linux
Mimiti, hayu urang ngahasilkeun pasangan konci dina token sareng jieun aplikasi pikeun sertipikat:
Kirim aplikasi client.req nu nembongan ka CA. Sakali anjeun nampi sertipikat pikeun pasangan konci anjeun, tuliskeun kana token kalayan id anu sami sareng konci:
pikeun klien Windows sareng Linux (metoda anu langkung universal)
Metoda ieu leuwih universal, sabab ngidinan Anjeun pikeun ngahasilkeun konci jeung sertipikat nu bakal hasil dipikawanoh ku pamaké Windows jeung Linux Ubuntu, tapi merlukeun mesin Windows pikeun ngalakonan prosedur generasi konci.
Sateuacan ngahasilkeun pamundut sareng ngimpor sertipikat, anjeun kedah nambihan sertipikat akar jaringan VPN kana daptar anu dipercaya. Jang ngalampahkeun ieu, buka na dina jandela nu muka, pilih "Pasang sertipikat" pilihan:
Dina jandéla anu muka, pilih masang sertipikat pikeun pangguna lokal:
Hayu urang pasang sertipikat di toko sertipikat akar anu dipercaya CA:
Saatos sadaya tindakan ieu, kami satuju sareng sadaya poin salajengna. Sistim nu ayeuna ngonpigurasi.
Hayu urang ngadamel file cert.tmp kalayan eusi ieu:
Saatos ieu, urang bakal ngahasilkeun pasangan konci sareng ngadamel aplikasi pikeun sertipikat. Jang ngalampahkeun ieu, buka Powershell teras lebetkeun paréntah di handap ieu:
certreq.exe -new -pin $PIN .cert.tmp .client.req
Kirim aplikasi client.req nu dijieun ka CA anjeun sarta ngadagoan sertipikat client.pem narima. Éta tiasa diserat kana token sareng ditambah kana toko sertipikat Windows nganggo paréntah di handap ieu:
certreq.exe -accept .client.pem
Eta sia noting yén lampah sarupa bisa dihasilkeun ngagunakeun panganteur grafis tina program mmc, tapi metoda ieu leuwih waktos-consuming na kirang programmable.
Nyetél klien Ubuntu
CATETAN
Nyetél klien dina Linux ayeuna rada nyéépkeun waktos, sabab ... merlukeun ngawangun program misah ti sumber. Kami bakal nyobian mastikeun yén sadaya parobihan kalebet dina repositori resmi dina waktos anu caket.
Pikeun mastikeun sambungan dina tingkat IPSec ka server, pakét strongswan sareng daemon xl2tp dianggo. Pikeun nyederhanakeun nyambungkeun kana jaringan nganggo kartu pinter, kami bakal nganggo pakét l2tp-ipsec-vpn, anu nyayogikeun cangkang grafis pikeun pangaturan sambungan anu saderhana.
Hayu urang mimitian ngumpul unsur-unsur léngkah-léngkah, tapi sateuacan éta urang bakal masang sadaya pakét anu dipikabutuh pikeun VPN tiasa jalan langsung:
sudo apt-get install xl2tpd strongswan libp11-3
Masang software pikeun gawé bareng tokens
Pasang perpustakaan librtpkcs11ecp.so panganyarna tina situs, ogé perpustakaan pikeun gawé bareng kartu pinter:
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
Masang klien L2tpIpsecVpn
Di momen, klien ogé perlu disusun tina kode sumber. Hal ieu dilakukeun nganggo sekuen paréntah di handap ieu:
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
Nyetél klien L2tpIpsecVpn
Jalankeun klien anu dipasang:
Saatos peluncuran, applet L2tpIpsecVPN kedah dibuka. Klik-katuhu kana éta sareng konfigurasi sambunganna:
Pikeun digawekeun ku tokens, mimiti sagala, urang nunjukkeun jalur ka mesin opensc mesin OpenSSL jeung perpustakaan PKCS # 11. Jang ngalampahkeun ieu, buka tab "Preferences" pikeun ngonpigurasikeun parameter openssl:
.
Hayu urang tutup jandela setélan OpenSSL sareng teraskeun kana nyetél jaringan. Hayu urang tambahkeun jaringan anyar ku ngaklik tombol Tambihkeun... dina panel setélan sareng lebetkeun nami jaringan:
Saatos ieu, jaringan ieu bakal sayogi dina panel setélan. Klik-katuhu dua kali dina jaringan anyar pikeun ngonpigurasikeunana. Dina tab kahiji anjeun kedah ngadamel setélan IPsec. Hayu urang setel alamat server sareng konci umum:
Saatos ieu, angkat ka tab Setélan PPP sareng tunjukkeun nami pangguna anu kami hoyong aksés kana jaringan:
Saatos ieu, buka tab Properties sareng sebatkeun jalur ka konci, sertipikat klien sareng CA:
Hayu urang tutup tab ieu sareng laksanakeun setélan ahir; pikeun ngalakukeun ieu, buka tab "Setélan IP" sareng centang kotak di gigireun pilihan "Kéngingkeun alamat pangladén DNS sacara otomatis":
Pilihan ieu bakal ngidinan klien pikeun nampa alamat IP pribadi dina jaringan tina server.
Saatos sadaya setélan, tutup sadaya tab sareng balikan deui klien:
Nyambung kana jaringan
Saatos setélan, anjeun tiasa nyambung ka jaringan. Jang ngalampahkeun ieu, buka tab applet tur pilih jaringan nu urang hoyong sambungkeun:
Salila prosés ngadegkeun sambungan, klien bakal nanya ka kami pikeun ngasupkeun kodeu PIN Rutoken:
Upami aya bewara némbongan dina bar status yén sambungan parantos suksés didamel, éta hartosna pangaturan éta suksés:
Upami teu kitu, éta patut figuring kaluar naha sambungan teu ngadegkeun. Jang ngalampahkeun ieu, anjeun kedah ningali log program ku milih paréntah "Inpormasi Sambungan" dina applet:
Nyetél klien Windows
Nyetél klien dina Windows langkung gampang tibatan dina Linux, sabab ... Sadaya parangkat lunak anu diperyogikeun parantos diwangun kana sistem.
Setup Sistim
Kami bakal masang sadaya panggerak anu dipikabutuh pikeun damel sareng Rutokens ku ngaunduhana tina. situs.
Ngimpor sertipikat akar pikeun auténtikasi
Unduh sertipikat root server sareng pasang dina sistem. Jang ngalampahkeun ieu, buka na dina jandela nu muka, pilih "Pasang sertipikat" pilihan:
Dina jandéla anu muka, pilih masang sertipikat pikeun pangguna lokal. Upami anjeun hoyong sertipikat sayogi pikeun sadaya pangguna dina komputer, maka anjeun kedah milih masang sertipikat dina komputer lokal:
Hayu urang pasang sertipikat di toko sertipikat akar anu dipercaya CA:
Saatos sadaya tindakan ieu, kami satuju sareng sadaya poin salajengna. Sistim nu ayeuna ngonpigurasi.
Nyetél sambungan VPN
Pikeun nyetél sambungan VPN, buka panel kontrol tur pilih pilihan pikeun nyieun sambungan anyar.
Dina jandela pop-up, pilih pilihan pikeun nyieun sambungan pikeun nyambung ka gaw anjeun:
Dina jandéla salajengna, pilih sambungan VPN:
jeung asupkeun wincik sambungan VPN, sarta tangtukeun ogé pilihan ngagunakeun kartu pinter:
Setélan teu acan réngsé. Sadaya anu tetep nyaéta netepkeun konci anu dibagi pikeun protokol IPsec; pikeun ngalakukeun ieu, angkat ka tab "Setélan sambungan jaringan" teras angkat ka tab "Pasipatan pikeun sambungan ieu":
Dina jandéla anu muka, angkat ka tab "Kaamanan", sebutkeun "Jaringan L2TP / IPsec" salaku jinis jaringan sareng pilih "Setélan Lanjutan":
Dina jandela nu muka, tangtukeun konci IPsec dibagikeun:
Подключение
Saatos réngsé setelan, anjeun tiasa nyobian nyambung ka jaringan:
Salila prosés sambungan, urang bakal diperlukeun pikeun nuliskeun kodeu PIN token:
Kami parantos nyetél jaringan VPN anu aman sareng mastikeun yén éta henteu sesah.
Ngahaturkeun
Abdi hoyong sakali deui hatur nuhun ka kolega urang Vasily Shokov sareng Alexander Smirnov pikeun padamelan anu parantos dilakukeun babarengan pikeun nyederhanakeun nyiptakeun sambungan VPN pikeun klien Linux.