MaxSessions, MaxStartups თუ მოწყობილობის რეგისტრაცია: რომელი SSH ზღვარი ავირჩიოთ
MaxSessions ითვლის არხებს ერთ ტრანსპორტში, MaxStartups იცავს არაავთენტიფიცირებულ ხელის ჩამორთმევებს და არც ერთი არ ითვლის მოწყობილობებს. ჯერ პირობა გადაწყვიტეთ.
გვირაბის სერვისები, რომლებიც თითო აბონენტზე ერთ მოწყობილობას გვპირდებიან, ამ პირობას იშვიათად იღებენ MaxSessions-ისგან და პირველი ტესტი ჩვეულებრივ ამას ამტკიცებს. აბონენტი ხსნის მეორე ssh პროცესს, პირველი სესია განაგრძობს მუშაობას და ორივე გვირაბი ტრაფიკს ატარებს. თითოეული კონფიგურაციის პარამეტრი სხვადასხვა რამეს ითვლის და არც ერთი მათგანი არ ითვლის მოწყობილობებს. პირობის პირველად დასახელება არის ის, რაც მათ შორის არჩევანს აშკარას ხდის.
რას ითვლის თითოეული პარამეტრი სინამდვილეში
MaxSessions ზღუდავს ერთი ავთენტიფიცირებული ქსელური კავშირის მიერ გადატანილი ღია სესიების რაოდენობას. სესია აქ ნიშნავს shell-ს, exec მოთხოვნას, SFTP-ის მსგავს ქვესისტემას ან მსგავს არხს, რომელიც მულტიპლექსირდება ერთ SSH ტრანსპორტში. მეორე ssh გამოძახება ხსნის მეორე ტრანსპორტს, ხელახლა ავთენტიფიცირდება და საკუთარ ნებართვას იღებს. პირველი კავშირის სესიების რაოდენობა მისთვის უმნიშვნელოა.
MaxStartups ზღუდავს ერთდროულ კავშირებს, რომლებიც ჯერ არ არის ავთენტიფიცირებული, გამოხატული როგორც საწყისი ზღურბლი, სიხშირე და სრული ზღურბლი. ის არსებობს იმისთვის, რომ ნახევრად ღია ხელის ჩამორთმევების აფეთქებამ დემონის ავთენტიფიკაციამდელი რესურსები არ ამოწუროს. როგორც კი კლიენტი ავთენტიფიცირდება, ეს კავშირი წყვეტს MaxStartups-ის წინააღმდეგ დათვლას და ვიღაცის სესიად იქცევა. ის არასოდეს ყოფილა მომხმარებელზე კვოტა და მისი აწევა აბონენტს მეტის გაკეთების საშუალებას არ აძლევს.
მოწყობილობის რეგისტრაციის წესი სულაც არ არის sshd-ის პარამეტრი. ის ეკუთვნის იმ სისტემას, რომელიც გასცემს სერტიფიკატებს და ადევნებს თვალს, რომელი მოწყობილობა ინახავს მათ, რაც ნიშნავს, რომ მას სჭირდება რეგისტრაცია, ინვენტარი და გაუქმება და არა მრიცხველი. ამ მოთხოვნის sshd-ის კონფიგურაციაში შერევა არის ის ადგილი, სადაც ამ დიზაინების უმეტესობა ჩერდება.
სად წყვეტს MaxSessions კვოტა ყოფნას
Match User ბლოკი ცვლის, რომელი კონფიგურაციის მნიშვნელობები ვრცელდება ამ მომხმარებელზე, ამიტომ ეს ბუნებრივი ადგილია სერვისის ანგარიშისთვის უფრო მკაცრი MaxSessions-ის დასაყენებლად. რასაც ვერ აკეთებს, არის კავშირებს შორის აგრეგაცია, რადგან პარამეტრი ფასდება თითოეული ტრანსპორტისთვის. ორი ტრანსპორტი თითოეული იღებს საკუთარ ლიმიტს და მომხმარებელს საბოლოოდ ექნება ორჯერ მეტი, ვიდრე ბლოკი უშვებს.
გადაგზავნა ცალკე სიურპრიზია. TCP გადაგზავნას არ სჭირდება სესიის არხი, ამიტომ MaxSessions 0-ს შეუძლია აკრძალოს shell-ები და ქვესისტემები და მაინც დაუშვას -L და -R გვირაბები. სერვისი, რომელიც მხოლოდ გადასცემს და სესიების რაოდენობას თავისი გვირაბის კვოტად მიიჩნევს, საერთოდ არაფერს ზომავს. ეს ქცევა დოკუმენტირებულია OpenSSH სერვერის კონფიგურაციის ცნობარში და ღირს მისი წაკითხვა პარამეტრის სახელის გარშემო დიზაინის შექმნამდე.
გამოიტანეთ ეფექტური კონფიგურაცია და არა ფაილი, რომელიც გგონიათ, რომ ჩატვირთულია. ჩართვები და drop-in საქაღალდეები ხშირად ნიშნავს, რომ მოქმედი მნიშვნელობა არ არის ის მნიშვნელობა, რომელიც თქვენ შეცვალეთ.
MaxStartups იცავს დემონს და არა აბონენტს
MaxStartups-ის სამნაწილიანი ფორმა აღწერს, რამდენი არაავთენტიფიცირებული კავშირი შეიძლება არსებობდეს მანამ, სანამ დემონი დაიწყებს ახლების გარკვეული პროცენტის ჩამოგდებას. მისი ნაგულისხმევი ფორმა არსებობს იმიტომ, რომ არაავთენტიფიცირებული SSH კავშირის გახსნა იაფია და შენახვა ძვირი. ეს სერვერისთვის რესურსების დაცვის კონტროლია და ერთდროულად ყველას ეხება.
შესვლების ქარიშხლის დროს მისი აწევა დემონის დაცვას ცვლის დაშვებაზე, რაც ზოგჯერ სწორი გაცვლაა და ყოველთვის განზრახ. ის არაფერს აკეთებს იმ აბონენტისთვის, რომელსაც მეორე გვირაბი სურს, რადგან პირველი გვირაბი უკვე ავთენტიფიცირებულია. ორივეს არევა იწვევს ცვლილებას, რომელიც არასწორ სიმპტომს ასწორებს და ამავდროულად ასუსტებს სერვერს.
როცა შესვლები ჯგუფურად უარყოფილია, სანამ რომელიმე პარამეტრს შეეხებით, ნახეთ დემონის ჟურნალში ავთენტიფიკაციამდელი შეტყობინება. შეტყობინება ასახელებს, რომელი მცველი ჩაირთო და მცველები ურთიერთშემცვლელნი არ არიან.
მომხმარებელზე სლოტს საერთო მდგომარეობა სჭირდება
ნამდვილი ერთი აქტიური ტრანსპორტის პოლიტიკა მოითხოვს დაჯავშნას, რომელიც sshd-ის გარეთ სადღაც ინახება. დაშვების ნაბიჯმა ატომურად უნდა დაიკავოს ანგარიშის სლოტი, გაათავისუფლოს ის კავშირის დახურვისას, გააუქმოს ვადა, როცა კლიენტი დახურვის გარეშე ქრება, და გადაწყვიტოს, უარყოფილია ახალი მცდელობა თუ ცვლის ძველს. ეს ბოლო გადაწყვეტილება პროდუქტის გადაწყვეტილებაა და არა ტექნიკური დეტალი, რადგან აქტიური გვირაბის შეცვლა ვიღაცას ათიშავს.
დაჯავშნა ასევე უნდა გაიზიაროს ყველა სერვერმა, რომელიც ანგარიშს იღებს. ორი ჰოსტი დამოუკიდებელი ლოკალური მრიცხველებით ახორციელებს ორ ცალკე ლიმიტს და აბონენტი, რომელიც მეორე კარიბჭის გავლით ხელახლა უკავშირდება, უფასოდ იღებს მეორე სლოტს. რაც არ უნდა ინახავდეს მდგომარეობას, მას საკუთარი წარუმატებლობის ქცევა სჭირდება, რადგან მიუწვდომელი საცავი არ უნდა ჩაკეტოს ყველა აბონენტი.
ერთი მოწყობილობის პირობისთვის, გასცეთ ცალკე სერტიფიკატი თითოეული რეგისტრირებული მოწყობილობისთვის და აკონტროლეთ რეგისტრაცია და გაუქმება იმ დონეზე. კოპირებული პირადი გასაღები მაინც ავთენტიფიცირდება ნებისმიერი ადგილიდან, ამიტომ თითო მომხმარებელზე ერთი გასაღების გაცემა არ არის მტკიცებულება იმისა, რამდენი მანქანა ინახავს მას.
შეამოწმეთ პოლიტიკა ორი რეალური კავშირით
დაწერეთ მიღების ტესტები ბრძანებების სახით სანამ პოლიტიკას დაწერთ. ხუთი შემთხვევაა: მეორე ტრანსპორტის გახსნა პირველის აქტიურობისას, მრავალი არხი ერთ ტრანსპორტში, კლიენტი, რომელიც მხოლოდ პორტებს გადასცემს, ხელახლა დაკავშირება ბმულის ჩავარდნის შემდეგ და იგივე ანგარიშის მოსვლა სხვა კარიბჭეზე.
ჯერ წაიკითხეთ ეფექტური ლიმიტები, შემდეგ გახსენით ის კავშირები, რომლებიც პოლიტიკამ უნდა უარყოს. ამ ტესტის ორივე ნახევარი მნიშვნელოვანია და არც ერთი არ ცვლის მეორეს.
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-ის დაწევით და იმის იმედით, რომ მეორე ტრანსპორტი შეამჩნევს.