Tunelske usluge koje obećavaju jedan uređaj po pretplatniku rijetko to obećanje dobijaju od MaxSessions, a prvi test to obično dokaže. Pretplatnik otvara drugi ssh proces, prva sesija nastavlja raditi, a oba tunela nose saobraćaj. Svaka konfiguracijska opcija broji nešto drugo, a nijedna ne broji uređaje. Imenovanje obećanja prvim čini izbor između njih očiglednim.

Šta svaka opcija zapravo broji

MaxSessions ograničava broj otvorenih sesija koje nosi jedna autentificirana mrežna veza. Sesija ovdje znači shell, exec zahtjev, podsistem poput SFTP-a ili sličan kanal multipleksiran unutar jednog SSH transporta. Drugi poziv ssh otvara drugi transport, ponovo se autentificira i dobija svoje dopuštenje. Broj sesija prve veze za njega je nebitan.

MaxStartups ograničava istovremene veze koje još nisu autentificirane, izraženo kao početni prag, stopa i puni prag. Postoji kako nalet poluotvorenih handshakeova ne bi mogao iscrpiti resurse daemona prije autentifikacije. Kada se klijent autentificira, ta veza prestaje da se broji protiv MaxStartups i postaje nečija sesija. Nikada nije bila kvota po korisniku, a njegovo podizanje ne dopušta pretplatniku da radi više.

Pravilo registracije uređaja nije uopće sshd opcija. Ono pripada onom sistemu koji izdaje kredencijale i prati koji uređaj ih drži, što znači da mu trebaju registracija, inventar i opozivanje, a ne brojač. Miješanje tog zahtjeva u sshd konfiguraciju je mjesto gdje većina ovakvih dizajna zapne.

Gdje MaxSessions prestaje biti kvota

Match User blok mijenja koje se konfiguracijske vrijednosti primjenjuju na tog korisnika, pa je prirodno mjesto za stroži MaxSessions za servisni račun. Ono što ne može jest agregirati kroz veze, jer se opcija procjenjuje po transportu. Dva transporta dobijaju svaki svoj limit, a korisnik na kraju ima dvostruko više od onoga što blok dopušta.

Prosljeđivanje je zasebno iznenađenje. TCP prosljeđivanje ne treba kanal sesije, pa MaxSessions 0 može zabraniti shellove i podsisteme dok i dalje dopušta -L i -R tunele. Usluga koja samo prosljeđuje i broj sesija smatra svojom tunelskom kvotom ne mjeri ništa. To ponašanje je dokumentirano u OpenSSH referenci za konfiguraciju servera, i vrijedi ga pročitati prije dizajniranja oko imena opcije.

Ispišite efektivnu konfiguraciju, a ne datoteku za koju mislite da je učitana. Uključivanja i drop-in direktoriji obično znače da vrijednost koja važi nije vrijednost koju ste uredili.

MaxStartups štiti daemon, a ne pretplatnika

Trodijelni oblik MaxStartups opisuje koliko neautentificiranih veza može postojati prije nego daemon počne odbacivati postotak novih. Njegov zadani oblik postoji jer je neautentificiranu SSH vezu jeftino otvoriti, a skupo održavati. To je kontrola zaštite resursa za server i primjenjuje se na sve odjednom.

Podizanje tokom oluje prijava mijenja zaštitu daemona za prijem, što je ponekad ispravna razmjena i uvijek namjerna. Ne čini ništa za pretplatnika koji želi drugi tunel, jer je prvi tunel već autentificiran. Miješanje dvoga vodi promjeni koja popravlja pogrešan simptom i istovremeno slabi server.

Kada se prijave odbijaju u naletima, pogledajte u dnevnik daemona poruku prije autentifikacije prije nego što dirnete bilo koju opciju. Poruka imenuje koji je čuvar reagovao, a čuvari nisu zamjenjivi.

Slot po korisniku treba zajedničko stanje

Iskrena politika jednog aktivnog transporta treba rezervaciju koja se drži negdje izvan sshd. Korak prijema mora atomski zauzeti slot računa, osloboditi ga kada se veza zatvori, pustiti ga da istekne kada klijent nestane bez zatvaranja, i odlučiti hoće li novi pokušaj biti odbijen ili zamijeniti stari. Ta posljednja odluka je produktna odluka, a ne tehnički detalj, jer zamjena aktivnog tunela prekida nekoga.

Rezervaciju mora dijeliti i svaki server koji prihvata račun. Dva hosta s nezavisnim lokalnim brojačima provode dva odvojena limita, a pretplatnik koji se ponovo poveže kroz drugi prolaz dobija drugi slot besplatno. Šta god čuva stanje treba vlastito ponašanje pri kvaru, jer nedostupno spremište ne smije zaključati sve pretplatnike.

Za obećanje jednog uređaja izdajte zaseban kredencijal za svaki registrirani uređaj i kontrolirajte registraciju i opozivanje na tom sloju. Kopirani privatni ključ se i dalje autentificira s bilo kojeg mjesta, pa izdavanje jednog ključa po korisniku nije dokaz o tome koliko mašina ga drži.

Provjerite politiku s dvije stvarne veze

Napišite prihvatne testove kao komande prije nego što napišete politiku. Pet slučajeva su drugi transport otvoren dok je prvi aktivan, više kanala unutar jednog transporta, klijent koji samo prosljeđuje portove, ponovno povezivanje nakon prekinute veze i isti račun koji stiže na drugi prolaz.

Prvo pročitajte efektivne limite, zatim otvorite veze koje politika treba da odbije. Obje polovine tog testa su važne i nijedna nije zamjena za drugu.

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]

Pokrenite tunelsku komandu dvaput u dva terminala i prebrojite uspostavljene veze na portu 22. Ako obje nose saobraćaj dok vaša politika tvrdi jedan aktivni transport, politika je dokumentacija, a ne provođenje. Popravite tu prazninu u sloju prijema, a ne snižavanjem MaxSessions i nadom da će drugi transport to primijetiti.

Povezani članci