Тунэльныя сэрвісы, якія абяцаюць адну прыладу на падпісчыка, рэдка атрымліваюць гэтае абяцанне ад MaxSessions, і першы тэст звычайна гэта даказвае. Падпісчык адкрывае другі працэс ssh, першая сесія працягвае працаваць, і абодва тунэлі перадаюць трафік. Кожная опцыя канфігурацыі лічыць розную рэч, і ні адна з іх не лічыць прылады. Менавіта найменне абяцання першым робіць выбар паміж імі відавочным.

Што насамрэч лічыць кожная опцыя

MaxSessions абмяжоўвае колькасць адкрытых сесій, якія пераносіць адно аўтэнтыфікаванае сеткавае злучэнне. Сесія тут азначае абалонку, запыт exec, падсістэму накшталт SFTP або падобны канал, мультыплексаваны ўнутры аднаго транспарту SSH. Другі выклік ssh адкрывае другі транспарт, паўторна аўтэнтыфікуецца і атрымлівае свой дазвол. Колькасць сесій першага злучэння для яго не мае значэння.

MaxStartups абмяжоўвае адначасныя злучэнні, якія яшчэ не аўтэнтыфікаваны, выяўленыя як пачатковы парог, хуткасць і поўны парог. Ён існуе, каб выбліск напаўадкрытых рукапоціскаў не мог вычарпаць рэсурсы дэмана да аўтэнтыфікацыі. Як толькі кліент аўтэнтыфікуецца, гэтае злучэнне перастае лічыцца ў MaxStartups і становіцца нечай сесіяй. Ён ніколі не быў квотай на карыстальніка, і яго павышэнне не дазваляе падпісчыку рабіць больш.

Правіла рэгістрацыі прылады зусім не з’яўляецца опцыяй sshd. Яно належыць той сістэме, якая выдае ўліковыя даныя і адсочвае, якая прылада іх трымае, што азначае патрэбу ў рэгістрацыі, інвентары і адкліканні, а не ў лічыльніку. Змешванне гэтага патрабавання ў канфігурацыю sshd — гэта тое месца, дзе большасць такіх праектаў спыняецца.

Дзе MaxSessions перастае быць квотай

Блок Match User змяняе, якія значэнні канфігурацыі прымяняюцца да гэтага карыстальніка, таму гэта натуральнае месца, каб задаць больш строгі MaxSessions для службовага ўліковага запісу. Чаго ён не можа зрабіць — гэта агрэгаваць па злучэннях, бо опцыя ацэньваецца для кожнага транспарту. Два транспарты атрымліваюць уласныя ліміты, і карыстальнік у выніку мае ўдвая больш, чым дазваляе блок.

Перанакіраванне — асобны сюрпрыз. Перанакіраванне TCP не патрабуе канала сесіі, таму MaxSessions 0 можа забараніць абалонкі і падсістэмы, але па-ранейшаму дазваляе тунэлі -L і -R. Сэрвіс, які толькі перанакіроўвае і лічыць колькасць сесій сваёй тунэльнай квотай, не вымярае нічога. Гэтыя паводзіны апісаны ў даведніку канфігурацыі сервера OpenSSH, і яго варта прачытаць, перш чым праектаваць вакол назвы опцыі.

Вывядзіце эфектыўную канфігурацыю, а не файл, які, на вашу думку, загружаны. Уключэнні і каталогі drop-in звычайна азначаюць, што значэнне, якое дзейнічае, — не тое значэнне, якое вы рэдагавалі.

MaxStartups ахоўвае дэман, а не падпісчыка

Трохчасткавая форма MaxStartups апісвае, колькі неаўтэнтыфікаваных злучэнняў можа існаваць, перш чым дэман пачне адкідаць пэўны працэнт новых. Яго форма па змаўчанні існуе таму, што неаўтэнтыфікаванае злучэнне SSH танна адкрыць і дорага ўтрымліваць. Гэта сродак аховы рэсурсаў сервера, і ён прымяняецца да ўсіх адначасова.

Павышэнне яго падчас штурму ўваходаў абменьвае ахову дэмана на допуск, што часам з’яўляецца правільным абменам і заўсёды — свядомым. Яно нічога не робіць для падпісчыка, які хоча другі тунэль, бо першы тунэль ужо аўтэнтыфікаваны. Блытаніна паміж імі вядзе да змены, якая выпраўляе не той сімптом і адначасова аслабляе сервер.

Калі ўваходы адхіляюцца выбліскамі, паглядзіце ў журнал дэмана на паведамленне да аўтэнтыфікацыі, перш чым чапаць любую з дзвюх опцый. Паведамленне называе, якая ахова спрацавала, і аховы не ўзаемазаменныя.

Слот на карыстальніка патрабуе агульнага стану

Сапраўдная палітыка аднаго актыўнага транспарту патрабуе рэзерва, які трымаецца недзе па-за sshd. Крок допуску павінен атамарна заняць слот уліковага запісу, вызваліць яго, калі злучэнне закрываецца, скончыць яго, калі кліент знікае без закрыцця, і вырашыць, ці новая спроба адхіляецца ці замяняе старую. Апошняе рашэнне — гэта прадуктовae рашэнне, а не тэхнічная дэталь, бо замена актыўнага тунэля адключае кагосьці.

Рэзерў таксама павінен быць агульным для кожнага сервера, які прымае ўліковы запіс. Два хасты з незалежнымі лакальнымі лічыльнікамі прытрымліваюцца двух асобных лімітаў, і падпісчык, які падключаецца праз іншы шлюз, атрымлівае другі слот бясплатна. Тое, што захоўвае стан, патрабуе ўласных паводзін пры збоі, бо недаступнае сховішча не павінна блакаваць усіх падпісчыкаў.

Для абяцання адной прылады выдайце асобныя ўліковыя даныя на кожную зарэгістраваную прыладу і кіруйце рэгістрацыяй і адкліканнем на гэтым узроўні. Скапіяваны прыватны ключ усё роўна аўтэнтыфікуецца з любога месца, таму выдача аднаго ключа на карыстальніка не з’яўляецца доказам таго, колькі машын яго трымаюць.

Праверце палітыку двума рэальнымі злучэннямі

Напішыце прыёмачныя тэсты як каманды, перш чым пісаць палітыку. Пяць выпадкаў — гэта другі транспарт, адкрыты падчас актыўнага першага, некалькі каналаў у адным транспарце, кліент, які толькі перанакіроўвае порты, паўторнае падключэнне пасля абрыву сувязі і той жа ўліковы запіс, які прыходзіць на іншы шлюз.

Спачатку прачытайце эфектыўныя ліміты, затым адкрыйце злучэнні, якія палітыка павінна адхіліць. Абедзве паловы гэтага тэсту важныя, і ні адна не замяняе другую.

sshd -T | grep -iE "maxsessions|maxstartups|allowtcpforwarding|permitopen"
ss -tn state established '( sport = :22 )' | head
ssh -N -L 8080:127.0.0.1:80 [email protected]

Запусціце каманду тунэля двойчы ў двух тэрміналах і палічыце ўсталяваныя злучэнні на порце 22. Калі абодва перадаюць трафік, пакуль ваша палітыка сцвярджае адзін актыўны транспарт, палітыка — гэта дакументацыя, а не выкананне. Выпраўце гэтую прагаліну на ўзроўні допуску, а не зніжаючы MaxSessions і спадзеючыся, што другі транспарт гэта заўважыць.

Падобныя артыкулы