Защо само PPP CHAP не може да покрие изискването за MPPE
PPTP профилите, които изискват MPPE, се чупят, когато PPP се спре на обикновен CHAP. Проверете метода за удостоверяване, източника на ключове и миграцията по ред.
PPTP профил, който настоява на криптиране, обикновено се проваля на едно и също място: PPP се договаря за обмен на удостоверяване, който никога не произвежда ключовия материал, необходим на MPPE. Тунелът изглежда полужив, паролата се приема, а връзката пада, преди през нея да мине какъвто и да е трафик. Посегването към падащото меню CHAP, докато нещо се свърже, скрива истинския дефект, а той е договор между метода за удостоверяване и политиката за защита. Проверките по-долу са подредени така, че всяка изключва по-евтина причина от следващата.
Две преговора текат в една PPTP връзка
PPTP носи нормална PPP сесия в GRE тунел и двете преговарят отделно. Външният слой решава как пакетите се инкапсулират и кой контролен канал съществува; вътрешната PPP сесия решава кой е партньорът и каква защита върви отгоре. Затова подканата за парола доказва нещо само за вътрешния слой, а завършено външно ръкостискане не доказва нищо за нито един от двата. Профилите се провалят тук, защото хората отстраняват грешки в тунела, докато разногласието седи вътре в PPP.
Обикновеният CHAP е обменът предизвикателство-отговор в RFC 1994, изграден върху споделена тайна и нищо друго. MS-CHAPv2 е различен обмен с различни съобщения и различен резултат, стандартизиран в RFC 2759. Споделената дума в двете имена е единственото общо между тях по кабела. Нито едно от имената не казва какво произвежда обменът, а точно това е единствената важна част.
Ето защо опция, означена просто CHAP, е двусмислена в стар профил. Когато сървърът иска MS-CHAPv2, а клиентът предлага обикновен CHAP, контролът на връзката все още може да завърши и паролата все още може да бъде приета. Провалът идва по-късно, когато сървърът се опита да извлече ключове за защита от обмен, който не е произвел нищо.
Съпоставете изисквания метод с ключовете, които той може да произведе
Ключовете на MPPE не са свойство на PPP по принцип. За семейството Microsoft CHAP извеждането е определено в RFC 3079 и приема като вход резултата от MS-CHAP обмен, а не споделена тайна. Методите EAP стигат до същото място по друг път, като сървърът за удостоверяване връща ключовете като атрибути MS-MPPE-Recv-Key и MS-MPPE-Send-Key. Обикновеният CHAP не се появява в нито един от двата пътя и това е цялата причина несъответствието да съществува.
Конфигурация, която изисква MPPE, но отказва всеки метод, способен да достави ключове, е вътрешно противоречива. pppd решава това противоречие, като отказва връзката, а не като измисля ключове, така че видимият резултат е сесия, която се удостоверява и след това прекратява по време на мрежовата фаза. Повторните опити на клиента няма да променят това, докато сървърът отказва единствените методи, които извеждат нещо.
Правилото, което следва, е кратко: ако профилът изисква MPPE, методът трябва да е вариант на MS-CHAP или EAP метод, чиито ключове сървърът връща. Отказът само на MS-CHAPv2 не го налага, защото MS-CHAPv1 също извежда ключове и остава достъпен, освен ако не бъде отказан отделно; отказът и на двата оставя обикновен CHAP и PAP, които не извеждат нищо и правят изискването неизпълнимо. Назовете приетия метод изрично, вместо да изброявате тези, които не харесвате. Отпадането на изискването за криптиране, за да се свърже клиент, е понижение, а не ремонт.
Прочетете опциите на сървъра, преди да редактирате клиент
Повечето от тези несъответствия са видими на сървъра в два файла и четенето им струва по-малко от преизграждане на клиент. На Linux PPTP крайна точка съответните настройки живеят във файла с опции на pppd, който pptpd предава. Изпълнете го на сървъра, а не от екрана за състояние на клиента. Започнете с редовете, които изискват, отказват или назовават режим на защита:
sudo grep -nE 'require-|refuse-|mppe|mschap' /etc/ppp/options.pptpdЧетете изхода като договор, а не като списък с флагове. Ред, който изисква MPPE, но отказва и двата варианта на MS-CHAP, не може да бъде изпълнен от нито един клиент, а липсващото изискване за MS-CHAP метод оставя вратата отворена за обмени, които не дават ключове. След това проверете кой изобщо може да се удостоверява, което решава файлът с тайни:
sudo sed -n '1,20p' /etc/ppp/chap-secrets
sudo pppd --versionЗапишете три стойности, преди да промените нещо: външния протокол, метода за удостоверяване, който сървърът изисква, и дали защитата е задължителна или по избор. Тези три определят всяко следващо решение и отгатването им от диалог на клиента е начинът профилът да остане наполовина конфигуриран. Дръжте файла отворен, докато работите, защото следващият раздел се нуждае от същите три стойности.
Локализирайте провала по PPP фаза
PPP съобщава провали по фази и фазата казва кой член от договора се е счупил. Връзка, която никога не напуска контрола на връзката, има проблем с инкапсулация или преговори, докато тази, която се удостоверява и след това умира, обикновено има проблем с политика или ключ. Връзка, която остава вдигната и не носи нищо, е преминала към маршрутизация, което е друго разследване.
Журналът пази редовете на фазите и те са по-полезни от по-високо ниво на отстраняване на грешки. Поискайте PPP процесите и съобщенията за защита, след което прочетете резултата от удостоверяването преди всичко друго. Последните редове обикновено назовават члена, който е отказал:
sudo journalctl -b --no-pager | grep -iE 'pppd|pptpd|mppe|chap' | tail -40В този изход търсете първо резултата от удостоверяването, а след това оплакване, че защита е била изискана, но не е договорена. Второто съобщение е подписът на противоречието по-горе и никакво повторение не го изчиства, докато сървърът отказва единствения метод, който може да произведе ключове. Две капани заслужават да бъдат назовани: вдигането на нивото на отстраняване на грешки без четене на редовете на фазите произвежда шум, а улавянето на материал за предизвикателство или пароли превръща конфигурационна задача в изтичане на идентификационни данни. Запишете тази фаза, преди да промените каквато и да е опция.
Планирайте изхода, преди старата крайна точка да бъде изключена
MPPE е исторически механизъм за защита на връзката и присъствието му не прави PPTP разумен избор за ново внедряване. Актуалните указания на Microsoft вече съветват против PPTP и против L2TP/IPsec с предварително споделен ключ за нови внедрявания на отдалечен достъп. Поддържането на стара крайна точка жива е решение за съществуваща услуга, а не шаблон за следващата.
Когато крайната точка трябва да остане, запишете договора: външен протокол, изискван метод за удостоверяване, задължителна защита и версията на клиента, която я договаря. Когато може да си отиде, изберете самоличността на шлюза на замяната, нейното удостоверяване на клиента и къде ще живеят идентификационните данни, преди да докоснете стария профил. След това планирайте маршрути, DNS и ресурсите, до които всеки потребител има право да достигне. Проверете предвидения клиент спрямо изискванията на собственика, а не спрямо работеща връзка.
Умишленият отказ трябва да остане отказ, защото връщането към незащитен режим, за да мине тест, превръща провал на политиката в излагане. Завършеното състояние е поддържан, документиран договор, а не най-малкият набор от промени, който позволява на една стара връзка да успее. Оставете стария профил на място, неизползван и документиран, докато замяната мине същите проверки.