MaxSessions, MaxStartups ali registracija naprave: katero omejitev SSH izbrati
MaxSessions šteje kanale v enem transportu, MaxStartups varuje neavtenticirane rokovanja, in nobeno ne šteje naprav. Najprej določite obljubo.
Storitve tunelov, ki obljubljajo eno napravo na naročnika, to obljubo redko dobijo od MaxSessions, in prvi test to običajno dokaže. Naročnik odpre drugi proces ssh, prva seja se nadaljuje, in oba tunela prenašata promet. Vsaka konfiguracijska možnost šteje nekaj drugega, in nobena od njih ne šteje naprav. Poimenovanje obljube najprej je tisto, zaradi česar je izbira med njimi očitna.
Kaj vsaka možnost v resnici šteje
MaxSessions omejuje število odprtih sej, ki jih prenaša ena avtenticirana omrežna povezava. Seja tukaj pomeni lupino, zahtevo exec, podsistem, kot je SFTP, ali podoben kanal, multipleksiran v enem transportu SSH. Drugi klic ssh odpre drugi transport, se znova avtenticira in dobi svoje lastno dovoljenje. Število sej prve povezave je zanj nepomembno.
MaxStartups omejuje sočasne povezave, ki še niso avtenticirane, izražene kot začetni prag, stopnja in polni prag. Obstaja zato, da sunek napol odprtih rokovanj ne more izčrpati virov daemona pred avtentikacijo. Ko se odjemalec avtenticira, se ta povezava preneha šteti proti MaxStartups in postane seja nekoga. Nikoli ni bila kvota na uporabnika, in njena povečava naročniku ne omogoča več.
Pravilo registracije naprave sploh ni možnost sshd. Pripada kateremu koli sistemu, ki izdaja poverilnice in spremlja, katera naprava jih ima, kar pomeni, da potrebuje registracijo, inventar in preklic namesto števca. Vmešavanje te zahteve v konfiguracijo sshd je mesto, kjer se večina takih zasnov ustavi.
Kje MaxSessions preneha biti kvota
Blok Match User spremeni, katere konfiguracijske vrednosti veljajo za tega uporabnika, zato je naravno mesto za strožji MaxSessions za servisni račun. Česar ne zmore, je združevanje med povezavami, ker se možnost ocenjuje na transport. Dva transporta dobita vsak svojo omejitev, in uporabnik na koncu ima dvakrat toliko, kot dovoli blok.
Posredovanje je ločeno presenečenje. Posredovanje TCP ne potrebuje kanala seje, zato lahko MaxSessions 0 prepove lupine in podsisteme, hkrati pa še vedno dovoli tunela -L in -R. Storitev, ki samo posreduje in šteje število sej za svojo kvoto tunela, ne meri ničesar. To vedenje je dokumentirano v referenci konfiguracije strežnika OpenSSH, in vredno jo je prebrati, preden načrtujete okoli imena možnosti.
Izpišite dejansko konfiguracijo, ne datoteke, za katero mislite, da je naložena. Vključitve in mape drop-in pogosto pomenijo, da veljavna vrednost ni vrednost, ki ste jo uredili.
MaxStartups varuje daemona, ne naročnika
Tridelna oblika MaxStartups opisuje, koliko neavtenticiranih povezav lahko obstaja, preden daemon začne zavračati odstotek novih. Njegova privzeta oblika obstaja zato, ker je neavtenticirano povezavo SSH poceni odpreti in drago vzdrževati. To je nadzor varovanja virov za strežnik, in velja za vse hkrati.
Povečava med nevihto prijav zamenja varovanje daemona za sprejem, kar je včasih prava menjava in vedno premišljena. Za naročnika, ki hoče drugi tunel, ne naredi ničesar, ker je prvi tunel že avtenticiran. Zamenjevanje obeh vodi v spremembo, ki odpravi napačen simptom in hkrati oslabi strežnik.
Ko so prijave zavrnjene v sunkih, poglejte v dnevnik daemona sporočilo pred avtentikacijo, preden se dotaknete katere koli možnosti. Sporočilo poimenuje, kateri varuh se je sprožil, in varuhi niso zamenljivi.
Reža na uporabnika potrebuje skupno stanje
Resnična politika enega aktivnega transporta potrebuje rezervacijo, shranjeno nekje zunaj sshd. Korak sprejema mora atomsko zasedči režo računa, jo sprostiti ob zaprtju povezave, pustiti, da poteče, ko odjemalec izgine brez zaprtja, in odločiti, ali se nov poskus zavrne ali nadomesti starega. Ta zadnja odločitev je produktna odločitev, ne tehnična podrobnost, ker nadomestitev aktivnega tunela nekoga odklopi.
Rezervacijo mora deliti tudi vsak strežnik, ki račun sprejme. Dva gostitelja z neodvisnimi lokalnimi števci uveljavljata dve ločeni omejitvi, in naročnik, ki se znova poveže skozi druga vrata, dobi drugo režo brezplačno. Karkoli shranjuje stanje, potrebuje svoje vedenje ob napaki, saj nedosegljivo skladišče ne sme zakleniti vseh naročnikov.
Za obljubo ene naprave izdajte ločene poverilnice za vsako registrirano napravo in nadzorujte registracijo in preklic na tej plasti. Kopirani zasebni ključ se še vedno avtenticira od koder koli, zato izdaja enega ključa na uporabnika ni dokaz, koliko strojev ga ima.
Preverite politiko z dvema resničnima povezavama
Napišite sprejemne teste kot ukaze, preden napišete politiko. Pet primerov je drugi transport, odprt med aktivnim prvim, več kanalov v enem transportu, odjemalec, ki samo posreduje vrata, ponovna povezava po padcu povezave, in isti račun, ki prispe na druga vrata.
Najprej preberite dejanske omejitve, nato odprite povezave, ki naj bi jih politika zavrnila. Obe polovici tega testa sta pomembni, in nobena ne nadomešča druge.
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]Zaženite ukaz tunela dvakrat v dveh terminalih in preštejte vzpostavljene povezave na vratih 22. Če oba prenašata promet, medtem ko vaša politika trdi en aktivni transport, je politika dokumentacija in ne izvajanje. To vrzel odpravite v plasti sprejema, ne z znižanjem MaxSessions in upanjem, da bo drugi transport to opazil.