Tunelové služby, které slibují jedno zařízení na předplatitele, tento slib od MaxSessions dostávají jen zřídka a první test to obvykle dokáže. Předplatitel otevře druhý proces ssh, první relace běží dál a oba tunely přenášejí provoz. Každá konfigurační volba počítá něco jiného a žádná z nich nepočítá zařízení. Pojmenovat slib jako první je to, co činí volbu mezi nimi zřejmou.

Co každá volba skutečně počítá

MaxSessions omezuje počet otevřených relací přenášených jedním autentizovaným síťovým připojením. Relace zde znamená shell, požadavek exec, podsystém jako SFTP nebo podobný kanál multiplexovaný v jednom transportu SSH. Druhé vyvolání ssh otevře druhý transport, znovu se autentizuje a získá vlastní povolení. Počet relací prvního připojení je pro něj irelevantní.

MaxStartups omezuje souběžná připojení, která ještě nejsou autentizována, vyjádřená jako počáteční práh, rychlost a plný práh. Existuje proto, aby nápor polootevřených handshaků nemohl vyčerpat prostředky démona před autentizací. Jakmile se klient autentizuje, toto připojení se přestane počítat proti MaxStartups a stane se něčí relací. Nikdy to nebyla kvóta na uživatele a její zvýšení nedovolí předplatiteli dělat víc.

Pravidlo registrace zařízení není vůbec volba sshd. Patří kterémukoli systému, který vydává přihlašovací údaje a sleduje, které zařízení je drží, což znamená, že potřebuje registraci, inventuru a odvolání místo počítadla. Vmontovat tento požadavek do konfigurace sshd je místo, kde většina těchto návrhů uvízne.

Kde MaxSessions přestává být kvótou

Blok Match User mění, které konfigurační hodnoty se na tohoto uživatele vztahují, takže je přirozeným místem pro přísnější MaxSessions pro servisní účet. Co nedokáže, je agregovat napříč připojeními, protože volba se vyhodnocuje pro každý transport. Dva transporty dostanou každý svůj limit a uživatel nakonec má dvakrát tolik, co blok dovoluje.

Přesměrování je samostatné překvapení. TCP přesměrování nepotřebuje kanál relace, takže MaxSessions 0 může zakázat shelly a podsystémy, a přesto povolit tunely -L a -R. Služba, která jen přesměrovává a považuje počet relací za svou tunelovou kvótu, neměří vůbec nic. Toto chování je zdokumentováno v referenci konfigurace serveru OpenSSH a stojí za přečtení, než začnete navrhovat kolem názvu volby.

Vypište efektivní konfiguraci, ne soubor, o kterém si myslíte, že je načtený. Vložení a adresáře drop-in obvykle znamenají, že platná hodnota není hodnota, kterou jste upravili.

MaxStartups chrání démona, ne předplatitele

Třídílná forma MaxStartups popisuje, kolik neautentizovaných připojení může existovat, než démon začne zahazovat procento nových. Jeho výchozí podoba existuje proto, že neautentizované připojení SSH je levné otevřít a drahé udržovat. Je to řízení ochrany prostředků pro server a platí pro všechny najednou.

Zvýšení během přihlašovací bouře vyměňuje ochranu démona za přijetí, což je někdy správná výměna a vždy vědomá. Pro předplatitele, který chce druhý tunel, nedělá nic, protože první tunel už je autentizovaný. Zaměnění obou vede ke změně, která opravuje špatný symptom a zároveň oslabuje server.

Když jsou přihlášení odmítána v náporech, podívejte se do logu démona na zprávu před autentizací, než sáhnete na kteroukoli z obou voleb. Zpráva pojmenuje, která ochrana zasáhla, a ochrany nejsou zaměnitelné.

Slot na uživatele potřebuje sdílený stav

Opravdová politika jednoho aktivního transportu potřebuje rezervaci drženou někde mimo sshd. Krok přijetí musí atomicky zabrat slot účtu, uvolnit ho při zavření připojení, nechat ho vypršet, když klient zmizí bez zavření, a rozhodnout, zda se nový pokus odmítne, nebo nahradí starý. Poslední rozhodnutí je produktové rozhodnutí, ne technický detail, protože nahrazení aktivního tunelu někoho odpojí.

Rezervaci musí sdílet také každý server, který účet přijímá. Dva hosty s nezávislými místními počítadly prosazují dva oddělené limity a předplatitel, který se znovu připojí přes druhou bránu, dostane druhý slot zdarma. Cokoli uchovává stav, potřebuje vlastní chování při selhání, protože nedostupné úložiště nesmí uzamknout všechny předplatitele.

Pro slib jednoho zařízení vydávejte samostatné přihlašovací údaje pro každé registrované zařízení a registraci a odvolání kontrolujte na této vrstvě. Zkopírovaný soukromý klíč se stále autentizuje odkudkoli, takže vydání jednoho klíče na uživatele není důkazem o tom, kolik strojů ho má.

Ověřte politiku dvěma skutečnými připojeními

Napište přejímací testy jako příkazy, než napíšete politiku. Pět případů je druhý transport otevřený, zatímco první je aktivní, více kanálů v jednom transportu, klient, který pouze přesměrovává porty, opětovné připojení po ztrátě spoje a stejný účet přicházející na jinou bránu.

Nejprve si přečtěte efektivní limity, potom otevřete připojení, která má politika odmítnout. Obě poloviny tohoto testu jsou důležité a ani jedna nenahrazuje druhou.

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]

Spusťte tunelový příkaz dvakrát ve dvou terminálech a spočítejte navázaná připojení na portu 22. Pokud oba přenášejí provoz, zatímco vaše politika tvrdí jeden aktivní transport, je politika dokumentace, nikoli vynucení. Opravte tuto mezeru ve vrstvě přijetí, ne snižováním MaxSessions a nadějí, že si druhý transport všimne.

Související články