ქსელის უსაფრთხოება

 განვიხილოთ ჩვეულებრივი syn-flood-ის სცენარი.


 წარმოიდგინეთ რა მოხდება თუ გავუგზავნით სერვერს  SYN პაკეტს შემდეგ სერევრი გამოგიგზავნით  SYN-ACK -ს და თქვენ აღარ გაუგზავნით დამასრულებელ ACK, ამ დროს ამოქმედდება პარამეტრი fin_timeout რომელიც დაელოდება მინიჭებულ მიშვნელობას მაგ 60 და 60 წამის   გასვლის შემდეგ დახურავს ნახევრად ღია კავშირს. აქ კიდევ ერთი ფაქტორია დასაზუსტებელი, კავშირის დამყარების დროს ხდება ამ კავშირის მიერ TCP ბუფერის მეხსიერების რაღაც გარკველული ნაწილის დაკავება. ეხლა უფრო კონკრეტულად შეგვიძლია წარმოვიდგინოთ თუ რა   მოხდება როდესაც უამრავ ასეთ ნახევრად-ღია კავშირებს დავამყარებთ? საბოლოოდ გადაივსება backlog, somaxconn, max_syn_backlog  კერნელის პარამეტრები და სერვერი ახალი კავშირის მოთხოვნებს (connection requests) ან რიგში ჩააყენებს (TIME_WAIT) ან სერთოდ ვერ უპასუხებს 

(Connect TIME_OUT() ).

მაგ: შემტევი აგზავნის სერვერთან ძალიან დიდი რაოდენობით SYN კავშირებს სანამ არ გადაივსება კერნელის პარამეტრი backlog -ი (ეს პარამეტრი უზრუნველყოფს “ნახევრად-ღია” half-opened კავშირების რიგში ჩაყენებას), როდესაც backlog სავსეა (მას მეხსიერების რაღაც ზომა აქვს გამოყოფილი და ეს პარამეტრი “ტუნინგს” ექვემდებარება და ამას ქვევით განვიხილავთ ) ის სერვერი ვეღარ უმკლავდება ახალ კავშირებს თუნდაც ნორმალურს, შემდეგ უკვე გააჩნია სერვერის კონფიგურაციას, შესაძლებელია კერნელის ქრეშიც, httpd პროცესის გარდაცვალება, ან საიტის დროებით გაჩერება სანამ ნახევრად-ღია კავშირებს ვადა არ გაუვა.

როგორ გავიგო შეტევა ?

გავიგოთ კავშირების რაოდენობა 80-ე პორტზე, განურჩევლად მისი მდგომარეობისა

 netstat -n | grep :80 | wc -l

გავიგოთ SYN_RECV მდგომარეობაში მყოფი კავშირების რაოდენობა, ეს მნიშვნელოვანია ამ მდგომარეობაში არ უნდა იყვეს ბევრი კავშირი, მაგ: 1000 კლიენტის ერთდროული შემოსვლის დროს ეს პარამეტრი არ უნდა იყვეს 10 ზე მეტი 1 წთ განმავლობაში

  netstat -n -p | grep SYN_RECV | wc -l

თუ გვინდა ვუყუროთ  ასეთი კავშირების ცვლილებას რეალურ დროში

watch -n0 "netstat -n -p | grep SYN_RECV | wc -l"

თუ გვინდა ვნახოთ, რომელ IP მისამართს რამდენი კავშირი აქვს გახსნილი სერვერთან აკრიფეთ შემდეგი:

netstat -ntu | tail -n +3 | awk '{print $5}' | sed -e 's/::ffff://g' \
|cut -d: -f1 | sort | uniq -c | sort -n

ყურადღება მიაქციეთ თითოეულ IP მისამართზე კავშირების რაიოდენობას, არ უნდა იყოს საეჭვოზე მეტი,  1 IP მისამართისთვის 100 ზე მეტი  კავშირი ძალიან ბევრია

დაგეხმარა ინფორმაცია?

Related Articles

IP მისამართის განბლოკვა

ხშირია როდესაც მომხმარებელი გადის ავტორიზაციას არასწორი პარამეტრებით.  რის გამოც უსაფრთხოების...

დაუცველი Wordpress CMS

დღესდღეობით ძალიან ხშირი შემთხვევაა როდესაც საიტის აწყობას ახდენს დილეტანტი და იყენებს ყველაზე...

ხელოვნური ინტელექტი და პაროლის უსაფრთხოება

ჩვენ შევედით ეპოქაში, სადაც AI-ის საფრთხე უახლოეს მომავალში ზოგიერთი სამუშაოს დაკავების საფრთხის...