Tunelové služby, ktoré sľubujú jedno zariadenie na predplatiteľa, dostávajú ten sľub od MaxSessions len zriedka, a prvý test to zvyčajne dokáže. Predplatiteľ otvorí druhý proces ssh, prvá relácia beží ďalej a oba tunely prenášajú prevádzku. Každá konfiguračná voľba počíta niečo iné a žiadna z nich nepočíta zariadenia. Pomenovanie sľubu ako prvého je to, čo robí voľbu medzi nimi zrejmou.

Čo každá voľba skutočne počíta

MaxSessions obmedzuje počet otvorených relácií prenášaných jedným autentizovaným sieťovým pripojením. Relácia tu znamená shell, požiadavku exec, podsystém ako SFTP alebo podobný kanál multiplexovaný v jednom transporte SSH. Druhé vyvolanie ssh otvorí druhý transport, znova sa autentizuje a získa vlastné povolenie. Počet relácií prvého pripojenia je preň irelevantný.

MaxStartups obmedzuje súbežné pripojenia, ktoré ešte nie sú autentizované, vyjadrené ako počiatočný prah, rýchlosť a plný prah. Existuje preto, aby nával polootvorených handshakeov nemohol vyčerpať prostriedky démona pred autentizáciou. Keď sa klient autentizuje, toto pripojenie sa prestane počítať proti MaxStartups a stane sa niekoho reláciou. Nikdy to nebola kvóta na používateľa a jeho zvýšenie predplatiteľovi neumožní robiť viac.

Pravidlo registrácie zariadenia vôbec nie je voľbou sshd. Patrí ktorémukoľvek systému, ktorý vydáva prihlasovacie údaje a sleduje, ktoré zariadenie ich drží, čo znamená, že potrebuje registráciu, inventúru a odvolanie namiesto počítadla. Zamiešanie tejto požiadavky do konfigurácie sshd je miesto, kde väčšina takýchto návrhov uviazne.

Kde MaxSessions prestáva byť kvótou

Blok Match User mení, ktoré konfiguračné hodnoty sa vzťahujú na tohto používateľa, takže je prirodzeným miestom na nastavenie prísnejšieho MaxSessions pre servisný účet. Čo nedokáže, je agregovať medzi pripojeniami, pretože voľba sa vyhodnocuje pre každý transport. Dva transporty dostanú každý svoj limit a používateľ nakoniec má dvojnásobok toho, čo blok dovoľuje.

Preposielanie je samostatné prekvapenie. TCP preposielanie nepotrebuje kanál relácie, takže MaxSessions 0 môže zakázať shelly a podsystémy a pritom stále povoliť tunely -L a -R. Služba, ktorá len preposiela a považuje počet relácií za svoju tunelovú kvótu, nemeria nič. Toto správanie je zdokumentované v referencii konfigurácie servera OpenSSH a stojí za prečítanie pred navrhovaním okolo názvu voľby.

Vypíšte efektívnu konfiguráciu, nie súbor, o ktorom si myslíte, že je načítaný. Vloženia a adresáre drop-in často znamenajú, že platná hodnota nie je hodnota, ktorú ste upravili.

MaxStartups chráni démona, nie predplatiteľa

Trojčasťová forma MaxStartups opisuje, koľko neautentizovaných pripojení môže existovať, kým démon začne zahadzovať percento nových. Jej predvolená podoba existuje preto, že neautentizované pripojenie SSH je lacné otvoriť a drahé udržiavať. Je to riadenie ochrany prostriedkov pre server a platí pre všetkých naraz.

Zvýšenie počas prihlásovacej búrky vymieňa ochranu démona za prijatie, čo je niekedy správna výmena a vždy vedomá. Pre predplatiteľa, ktorý chce druhý tunel, nerobí nič, pretože prvý tunel je už autentizovaný. Zámena oboch vedie k zmene, ktorá opravuje nesprávny symptóm a zároveň oslabuje server.

Keď sú prihlásenia odmietané v návaloch, pozrite sa do logu démona na správu pred autentizáciou, skôr než sa dotknete ktorejkoľvek z oboch volieb. Správa pomenúva, ktorá ochrana zasiahla, a ochrany nie sú zameniteľné.

Slot na používateľa potrebuje zdieľaný stav

Skutočná politika jedného aktívneho transportu potrebuje rezerváciu držanú niekde mimo sshd. Krok prijatia musí atomicky zabrať slot účtu, uvoľniť ho pri zatvorení pripojenia, nechať ho vypršať, keď klient zmizne bez zatvorenia, a rozhodnúť, či sa nový pokus odmietne alebo nahradí starý. Toto posledné rozhodnutie je produktové rozhodnutie, nie technický detail, pretože nahradenie aktívneho tunela niekoho odpojí.

Rezerváciu musí zdieľať aj každý server, ktorý účet prijíma. Dva hosty s nezávislými lokálnymi počítadlami presadzujú dva oddelené limity a predplatiteľ, ktorý sa znova pripojí cez druhú bránu, dostane druhý slot zadarmo. Čokoľvek ukladá stav, potrebuje vlastné správanie pri zlyhaní, pretože nedostupné úložisko nesmie uzamknúť všetkých predplatiteľov.

Pre sľub jedného zariadenia vydávajte samostatné prihlasovacie údaje pre každé registrované zariadenie a registráciu a odvolanie kontrolujte na tej vrstve. Skopírovaný súkromný kľúč sa stále autentizuje odvšadiaľ, takže vydanie jedného kľúča na používateľa nie je dôkazom, koľko strojov ho má.

Overte politiku dvoma skutočnými pripojeniami

Napíšte akceptačné testy ako príkazy, skôr než napíšete politiku. Päť prípadov sú druhý transport otvorený, kým je prvý aktívny, viac kanálov v jednom transporte, klient, ktorý iba preposiela porty, opätovné pripojenie po páde spoja a ten istý účet prichádzajúci na inú bránu.

Najprv si prečítajte efektívne limity, potom otvorte pripojenia, ktoré má politika odmietnuť. Obe polovice tohto testu sú dôležité a ani jedna nenahrádza druhú.

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]

Spustite tunelový príkaz dvakrát v dvoch termináloch a spočítajte nadviazané pripojenia na porte 22. Ak oba prenášajú prevádzku, zatiaľ čo vaša politika tvrdí jeden aktívny transport, politika je dokumentácia, nie vynucovanie. Opravte tú medzeru vo vrstve prijatia, nie znížením MaxSessions a nádejou, že si druhý transport všimne.

Súvisiace články