ProHoster > блог > адміністраванне > Настройка аўтэнтыфікацыі ў сетцы L2TP з дапамогай Рутокен ЭЛП 2.0 і Рутокен PKI
Настройка аўтэнтыфікацыі ў сетцы L2TP з дапамогай Рутокен ЭЛП 2.0 і Рутокен PKI
Праблематыка
Яшчэ зусім нядаўна многія не ведалі, як гэта - працаваць з дому. Пандэмія рэзка змяніла сітуацыю ў свеце, усе пачалі адаптавацца да абставін, якія склаліся, а менавіта да таго, што выходзіць з дому стала проста небяспечна. І многім прыйшлося хутка арганізоўваць працу з дому для сваіх супрацоўнікаў.
Аднак адсутнасць пісьменнага падыходу ў выбары рашэнняў для выдаленай працы можа прывесці да незваротных страт. Паролі карыстальнікаў могуць быць скрадзеныя, а гэта дасць магчымасць зламысніку бескантрольна падключацца да сеткі і ІТ-рэсурсам прадпрыемства.
Менавіта таму зараз вырасла запатрабаванне ў стварэнні надзейных карпаратыўных VPN сетак. Я раскажу вам пра надзейны, бяспечнай и просты у выкарыстанні VPN сеткі.
Яна працуе па схеме IPsec/L2TP, якая выкарыстоўвае для аўтэнтыфікацыі кліентаў невымаемыя ключы і сертыфікаты, якія захоўваюцца на токена, а таксама перадае дадзеныя па сетцы ў зашыфраваным выглядзе.
У якасці дэманстрацыйных стэндаў для настройкі выкарыстоўваліся сервер з CentOS 7 (адрас: centos.vpn.server.ad) і кліент з Ubuntu 20.04, а таксама кліент з Windows 10.
Апісанне сістэмы
VPN будзе працаваць па схеме IPSec + L2TP + PPP. Пратакол Пратакол кропка-кропка (PPP) працуе на канальным узроўні мадэлі OSI і забяспечвае аўтэнтыфікацыю карыстальніка і шыфраванне перадаюцца дадзеных. Яго дадзеныя інкапсулюе ў дадзеныя пратаколу L2TP, які ўласна забяспечвае стварэнне злучэння ў VPN сеткі, але не забяспечвае аўтэнтыфікацыю і шыфраванне.
Дадзеныя L2TP інкапсулююцца ў пратакол IPSec, які таксама забяспечвае аўтэнтыфікацыю і шыфраванне, але ў адрозненне ад пратаколу PPP аўтэнтыфікацыя і шыфраванне адбываецца на ўзроўні прылад, а не на ўзроўні карыстальнікаў.
Дадзеная асаблівасць дазваляе забяспечыць аўтэнтыфікацыю карыстальнікаў толькі з пэўных прылад. Мы ж будзем выкарыстоўваць пратакол IPSec як гэта і дазволім рабіць аўтэнтыфікацыю карыстальнікаў з любой прылады.
Аўтэнтыфікацыя карыстальніка з дапамогай смарт-картак будзе праводзіцца на ўзроўні пратакола PPP з дапамогай пратакола EAP-TLS.
Больш падрабязную інфармацыі аб працы дадзенай схемы можна знайсці ў гэтым артыкуле.
Чаму дадзеная схема адказвае ўсім тром патрабаванням добрай VPN сеткі
Надзейнасць дадзенай схемы праверана часам. Яна выкарыстоўваецца для разгортвання VPN сетак з 2000 гады.
Бяспечную аўтэнтыфікацыю карыстальніка забяспечвае пратакол PPP. Стандартная рэалізацыя пратаколу PPP распрацаваная Paul Mackerras не забяспечвае дастатковага ўзроўню бяспекі, т.я. для аўтэнтыфікацыі ў лепшым выпадку выпадку выкарыстоўваецца аўтэнтыфікацыя з дапамогай лагіна і пароля. Усе мы ведаем, што лагін-пароль можна падглядзець, падабраць ці скрасці. Тым не менш ужо даўно распрацоўшчык Jan Just Keijser в сваёй рэалізацыі дадзенага пратакола выправіў гэты момант і дадаў магчымасць выкарыстання для аўтэнтыфікацыі пратаколы, заснаваныя на асіметрычным шыфраванні, такі як EAP-TLS. Акрамя таго, ён дадаў магчымасць выкарыстання смарт-карт для аўтэнтыфікацыі, што зрабіла дадзеную сістэму больш бяспечнай.
У сапраўдны момант вядуцца актыўныя перамовы для зліцця гэтых двух праектаў і можна быць упэўненымі ў тым, што рана ці позна гэта ўсё роўна адбудзецца. Так, напрыклад, у рэпазітарах Fedora ужо даўно ляжыць прапатчаная версія PPP, якая выкарыстоўвае для аўтэнтыфікацыі бяспечныя пратаколы.
Яшчэ зусім нядаўна дадзеную сетку маглі выкарыстоўваць толькі карыстачы Windows, але нашы калегі з МДУ Васіль Шокаў і Аляксандр Смірноў знайшлі стары праект L2TP кліента для Linux і дапрацавалі яго. Сумеснымі намаганнямі мы выправілі мноства багаў і недахопаў у рабоце кліента, спрасцілі ўстаноўку і настройку сістэмы, нават пры зборцы з зыходнікаў. Найбольш істотнымі з іх з'яўляюцца:
Выпраўлены праблемы сумяшчальнасці старога кліента з інтэрфейсам новых версій openssl і qt.
Выдалена перадача pppd PIN-кода токена праз часовы файл.
Выпраўлены некарэктны запуск праграмы запыту пароля праз графічны інтэрфейс. Гэта было зроблена за кошт усталёўкі карэктнага асяроддзя для xl2tpd сэрвісу.
Зборка дэмана L2tpIpsecVpn зараз ажыццяўляецца сумесна са зборкай самога кліента, што палягчае працэс зборкі і наладкі.
Для выгоды распрацоўкі падлучаная сістэма Azure Pipelines для тэставання карэктнасці зборкі.
Дададзена магчымасць прымусова паніжаць ўзровень бяспекі у кантэксце openssl. Гэта карысна для карэктнай падтрымкі новых аперацыйных сістэм, дзе стандартны security level усталяваны на 2, з VPN сеткамі, у якіх выкарыстоўваюцца сертыфікаты, якія не задавальняюць патрабаванням бяспекі дадзенага ўзроўню. Дадзеная опцыя будзе карысная для працы з ужо існуючымі старымі VPN сеткамі.
Дадзены кліент падтрымлівае выкарыстанне смарт-карт для аўтэнтыфікацыі, а таксама максімальна хавае ўсе нягоды і нягоды налады дадзенай схемы пад Linux, робячы наладу кліента максімальна просты і хуткай.
Вядома, для зручнай сувязі PPP і GUI кліента не абышлося і без дадатковых правак кожнага з праектаў, але тым не менш іх удалося мінімізаваць і звесці да мінімуму:
выпраўленая памылка ў парадку загрузкі канфігурацыі і ініцыялізацыі openssl кантэксту. Дадзеная памылка не дазваляла падгружаць з лакальнага /etc/ppp/openssl.cnf файла з канфігурацыяй нічога, акрамя звестак аб рухавіках openssl для працы са смарт-картамі, што складала сур'ёзную нязручнасць, калі, напрыклад, акрамя інфармацыі аб энджынах мы жадалі задаць што- тое яшчэ. Напрыклад, зафіксаваць security level пры ўсталёўцы злучэння.
Таксама зададзім агульны пароль для ўваходу. Агульны пароль павінен быць вядомы ўсім удзельнікам сеткі для аўтэнтыфікацыі. Дадзены спосаб і з'яўляецца загадзя ненадзейным, т.я. дадзены пароль з лёгкасцю можа стаць вядомым асобам, якім мы не жадаем падаваць доступ да сеткі.
Тым не менш, нават гэты факт не паўплывае на бяспеку арганізацыі сеткі, т.я. асноўнае шыфраванне дадзеных і аўтэнтыфікацыя карыстачоў ажыццяўляецца пратаколам PPP. Але дзеля справядлівасці варта заўважыць, што strongswan падтрымлівае больш бяспечныя тэхналогіі для аўтэнтыфікацыі, напрыклад, з дапамогай прыватных ключоў. Гэтак жа ў strongswan маецца магчымасць забяспечыць аўтэнтыфікацыю з дапамогай смарт-карт, але пакуль падтрымліваецца абмежаванае кола прылад і таму аўтэнтыфікацыя з дапамогай токенаў і смарт-картаў Рутокен пакуль цяжкая. Задамо агульны пароль праз файл /etc/strongswan/ipsec.secrets:
Сканфігуруем яго праз файл /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
Выпісваем каранёвы сертыфікат і сертыфікат сервера:
#директория с сертификатами пользователей, УЦ и сервера
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
Такім чынам, мы скончылі з асноўнай наладай сервера. Астатняя частка канфігурацыі сервера злучана з даданнем новых кліентаў.
Даданне новага кліента
Каб дадаць новага кліента ў сетку, неабходна запісаць яго сертыфікат у спіс давераных для дадзенага кліента.
Калі карыстач жадае стаць удзельнікам VPN сеткі, ён стварае ключавую пару і заяўку на сертыфікат для дадзенага кліента. Калі карыстач давераны, то дадзеную заяўку можна падпісаць, а атрыманы сертыфікат запісаць у дырэкторыю сертыфікатаў:
НАТАТКА
Каб не заблытацца, лепш каб: Common Name, імя файла з сертыфікатам і імя карыстальніка былі ўнікальнымі.
Таксама варта праверыць, што ў іншых файлах аўтэнтыфікацыі нідзе не фігуруе імя карыстача, якога мы дадаем, інакш узнікнуць праблемы са спосабам аўтэнтыфікацыі карыстача.
Гэты ж сертыфікат неабходна адправіць карыстачу зваротна.
Генерацыя ключавой пары і сертыфіката
Для паспяховай аўтэнтыфікацыі кліенту неабходна:
згенераваць ключавую пару;
мець каранёвы сертыфікат УЦ;
мець сертыфікат для сваёй ключавой пары, падпісаны каранёвым УЦ.
для кліента на Linux
Для пачатку згенеруем ключавую пару на токене і створым заяўку на сертыфікат:
Якую з'явілася заяўку client.req адпраўце ў УЦ. Пасля таго як вы атрымаеце сертыфікат для сваёй ключавой пары, запішыце яго на токен з тым жа id, што і ў ключа:
для кліентаў Windows і Linux (больш універсальны спосаб)
Дадзены спосаб з'яўляецца больш універсальным, т.я. дазваляе згенераваць ключ і сертыфікат, які будзе паспяхова распазнавацца ў карыстачоў Windows і Linux, але ён патрабуе наяўнасць машыны на Windows для правядзення працэдуры генерацыі ключоў.
Перад генерацыяй запытаў і імпартам сертыфікатаў неабходна дадаць каранёвы сертыфікат VPN сеткі ў спіс давераных. Для гэтага адкрыем яго і ў якое адкрылася акне абярэм опцыю "Усталяваць сертыфікат":
У якое адкрылася акне абярэм усталёўку сертыфіката для лакальнага карыстача:
Усталюем сертыфікат у сховішча давераных каранёвых сертыфікатаў УЦ:
Пасля ўсіх гэтых дзеянняў згаджаемся са ўсімі наступнымі пунктамі. Цяпер сістэма настроена.
Пасля гэтага згенеруем ключавую пару і створым заяўку на сертыфікат. Для гэтага адкрыем powershell і ўвядзем наступную каманду:
certreq.exe -new -pin $PIN .cert.tmp .client.req
Адпраўце створаную заяўку client.req у ваш УЦ і дачакайцеся атрыманні сертыфіката client.pem. Яго можна запісаць на токен і дадаць у сховішча сертыфікатаў Windows з дапамогай наступнай каманды:
certreq.exe -accept .client.pem
Варта заўважыць, што аналагічныя дзеянні можна прайграць з дапамогай графічнага інтэрфейсу праграмы mmc, але дадзены спосаб з'яўляецца больш часзатратным і меней праграмуемым.
Настройка кліента Ubuntu
НАТАТКА
Налада кліента на Linux у дадзены момант з'яўляецца дастаткова працяглай па часе, т.я. патрабуе зборкі асобных праграм з зыходнікаў. Мы пастараемся хуткім часам дамагчыся, каб усе змены патрапілі ў афіцыйныя рэпазітары.
Для забеспячэння падлучэння на ўзроўні IPSec да сервера – выкарыстоўваецца пакет strongswan і дэман xl2tp. Для спрашчэння падключэння да сеткі з дапамогай смарт-карт - будзем выкарыстоўваць пакет l2tp-ipsec-vpn, які забяспечвае графічную абалонку для спрошчанай налады падключэння.
Пачнём зборку элементаў паэтапна, але перад гэтым усталюем усе неабходныя пакеты для непасрэднай працы VPN:
sudo apt-get install xl2tpd strongswan libp11-3
Усталяванне ПЗ для працы з токенамі
Усталюйце апошнюю версію бібліятэкі librtpkcs11ecp.so з сайта, таксама бібліятэкі для працы са смарт-картамі:
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
У дадзены момант кліента таксама трэба збіраць з зыходнікаў. Робіцца гэта з дапамогай наступнай паслядоўнасці каманд:
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
Запускаем усталяваны кліент:
Пасля запуску ў вас павінен адкрыцца аплет L2tpIpsecVPN. Націснем на яго правай кнопкай мышы і зробім наладу злучэння:
Для працы з токена, у першую чаргу, пакажам шлях opensc рухавічка OpenSSL і PKCS#11 бібліятэкі. Для гэтага адкрыйце ўкладку "Preferences" для наладкі параметраў openssl:
.
Закрыем акно настроек OpenSSL і пяройдзем да настройкі сеткі. Дададзім новую сетку, націснуўшы на клавішу Add… у панэлі налад і ўвядзіце імя сеткі:
Пасля гэтага дадзеная сетка стане даступная ў панэлі налад. Двойчы клікнем правай кнопкай мышы па новай сетцы, каб наладзіць яе. На першай укладцы неабходна зрабіць налады IPsec. Задамо адрас сервера і агульны ключ:
Пасля гэтага пераходзім на ўкладку налады PPP і пакажам там імя карыстальніка, пад якім мы хочам зайсці ў сетку:
Пасля гэтага адкрыем укладку Properties і пакажам шлях да ключа, сертыфіката кліента і УЦ:
Закрыем дадзеную ўкладку і выканаем фінальную настройку, для гэтага адкрыем ўкладку "IP settings" і паставім галачку насупраць опцыі "Obtain DNS server address automatically":
Пасля ўсіх налад закрыем усе ўкладкі і перазагрузім кліент:
Падключэнне да сеткі
Пасля налад можна падлучыць да сеткі. Для гэтага адкрыем укладку аплета і абярэм сетку, да якой мы жадаем падлучыцца:
Падчас усталёўкі злучэння кліент папросіць увесці нас PIN-код Рутокен:
Калі ў статус-бары з'явіцца апавяшчэнне аб тым, што злучэнне паспяхова ўстаноўлена, значыць, настройка была праведзена паспяхова:
У адваротным выпадку варта разабрацца, чаму злучэнне не было ўсталявана. Для гэтага варта паглядзець лог праграмы, абраўшы ў аплете каманду "Connection information":
Настройка кліента Windows
Налада кліента ў Windows ажыццяўляецца значна прасцей, чым у Linux, т.я. увесь неабходны софт ужо ўбудаваны ў сістэму.
Настройка сістэмы
Усталюем усе неабходныя драйверы для працы з Рутокенамі запампаваўшы іх з оф. сайта.
Імпарт каранёвага сертыфіката для аўтэнтыфікацыі
Спампуем каранёвы сертыфікат сервера і ўсталюем у сістэму. Для гэтага адкрыем яго і ў якое адкрылася акне абярэм опцыю "Усталяваць сертыфікат":
У якое адкрылася акне абярэм усталёўку сертыфіката для лакальнага карыстача. Калі жадаецца, каб сертыфікат быў даступны ўсім карыстачам на кампутары, то тады варта абраць усталёўку сертыфіката на лакальны кампутар:
Усталюем сертыфікат у сховішча давераных каранёвых сертыфікатаў УЦ:
Пасля ўсіх гэтых дзеянняў згаджаемся са ўсімі наступнымі пунктамі. Цяпер сістэма настроена.
Настройка VPN злучэння
Для настройкі VPN злучэння перайдзіце ў панэль кіравання і абярыце пункт для стварэння новага злучэння.
Ва ўсплыўшым акне абярыце опцыю стварэння злучэння для падлучэння да працоўнага месца:
У наступным акне вылучыце падлучэнне па VPN:
і ўвядзіце дадзеныя VPN злучэння, а таксама ўкажыце опцыю для выкарыстання смарт-карты:
На гэтым настройка не скончана. Засталося пазначыць агульны ключ для пратаколу IPsec, для гэтага пяройдзем на ўкладку "Настройкі сеткавых падлучэнняў" і затым пяройдзем на ўкладку "Уласцівасці для дадзенага злучэння":
У якое адкрылася акне пяройдзем на ўкладку "Бяспека", пакажам у якасці тыпу сеткі "Сетка L2TP/IPsec" і абярэм "Дадатковыя параметры":
У якое адкрылася акне пакажам агульны ключ IPsec:
падключэнне
Пасля завяршэння настройкі можна паспрабаваць падключыцца да сеткі:
У працэсе падключэння ад нас запатрабуюць увесці PIN-код токена:
Мы з вамі наладзілі бяспечную VPN сетку і пераканаліся ў тым, што гэта нескладана.
падзякі
Жадалася бы яшчэ раз падзякаваць нашым калегам Васіля Шокава і Аляксандра Смірнова за сумесна праведзеную працу для спрашчэння стварэння VPN злучэнняў для кліентаў Linux.