თქვენ შეცვალეთ წესი, ხელახლა ჩატვირთეთ წესების ნაკრები, და გვირაბი ზუსტად ისე იქცევა, როგორც ადრე. ამ შედეგს ორი გავრცელებული მიზეზი აქვს, და მათ სხვადასხვა ტესტი სჭირდება. ან ახალი წესი დგას უფრო ადრეული წესის შემდეგ, რომელმაც პაკეტი უკვე მიიღო, ან თქვენ მიერ დაკვირვებული გაცვლა არის თვალთვალის ქვეშ მყოფი კავშირი, რომელსაც ცვლილება არასოდეს გადააფასებს. წესი ფაილში განზრახვას გამოხატავს; პაკეტის ბედს განსაზღვრავს ის აქტიური გზა, რომელსაც ის ხვდება. გაიარეთ ქვემოთ მოცემული შემოწმებები რიგრიგობით და ამ დროს ღიად შეინახეთ დაბრუნების გზა.

წესების რიგი და კავშირის მდგომარეობა სხვადასხვა გაუმართაობაა

დალაგებული ჯაჭვები ფასდება ზემოდან ქვემოთ, და პირველი წესი, რომელიც საბოლოო განაჩენს აღწევს, ამთავრებს ამ ჯაჭვში გავლას. მოათავსეთ ფართო დაშვება ზედმიწევნით დაწერილი ჩაკეტვის წესის ზემოთ, და ჩაკეტვის წესი დოკუმენტაციად იქცევა: ის წესების ნაკრებშია, მისი მრიცხველი ნულია, და ვერც ერთი პაკეტი ვერასოდეს მიაღწევს მას. იგივე ტექსტი სხვა ჯაჭვზე გამოყენებულიც არაფერს ამტკიცებს. nftables-ში საბაზისო ჯაჭვები კაუჭებზე პრიორიტეტების მიხედვით მაგრდება, ამიტომ ერთ ჯაჭვში მოცემული დაშვება ხელს არ უშლის სხვა კაუჭზე ან პრიორიტეტზე მდებარე სხვა ჯაჭვს იმავე პაკეტის დანახვაში.

კავშირების თვალყურის დევნება მეორე სიმპტომს ქმნის, და გარედან ის იდენტურად გამოიყურება. როგორც კი დინება მდგომარეობათა ცხრილში მოხვდება, ჯაჭვის თავთან ახლოს მდებარე established-or-related დაშვება ბრუნდება მანამ, სანამ თქვენი ახალი წესი საერთოდ განიხილება. NAT-ის დაშენებებს იგივე თვისება აქვთ: თარგმანი დინების დაწყებისას დაფიქსირდა, ამიტომ რედაქტირებული postrouting წესი უკვე მიმდინარე სესიას ხელახლა არ წერს. სწორედ ამიტომ ცვლილება თითქოს მუშაობს 09:00-ზე ახალი კავშირისთვის და თითქოს არაფერს აკეთებს იმ სესიისთვის, რომელიც ვინმემ 08:55-ზე გახსნა.

ღრუბლოვანი უსაფრთხოების ჯგუფები მესამე მოდელს ამატებენ, რომელიც iptables-ზე ნასწავლ ადამიანებს იჭერს. მათი შემავალი წესები ნებართვების სიაა, რომელიც ერთობლიობად ფასდება და არა პირველი დამთხვევის გავლად, ისინი მდგომარეობიანია, და ნებართვის წესის მოცილება არ ამთავრებს უკვე თვალთვალის ქვეშ მყოფ დინებებს. პირველი დამთხვევის სემანტიკის დაშვება პლატფორმაზე, რომელსაც ის არ აქვს, თავდაჯერებულ, მცდარ დასკვნებამდე მივყავართ.

წაიკითხეთ აქტიური წესების ნაკრები და არა ფაილი, რომელიც შეცვალეთ

დაიწყეთ იმით, რასაც ბირთვი ახლა ახორციელებს. შენახული კონფიგურაცია, რომელიც არასოდეს გამოყენებულა, გასაოცრად ბევრ უცვლელ ქცევას ხსნის, და მისი გამორიცხვა ერთი ბრძანება ღირს:

nft list ruleset
iptables-save

შემდეგ იკითხეთ, საერთოდ აღწევს თუ არა თქვენი წესი. პაკეტების მრიცხველები ამაზე პირდაპირ პასუხობენ, და უკეთ პასუხობენ, ვიდრე ნებისმიერი მსჯელობა განზრახვაზე:

iptables -L FORWARD -v -n --line-numbers
nft list chain inet filter forward

ჩაკეტვის წესი ნულოვანი პაკეტებით რეალური ტესტის მცდელობის შემდეგ არ არის პოლიტიკის პრობლემა, ეს პოზიციის პრობლემაა. მისი გადატანა ერთი სტრიქონის ცვლილებაა, და სინტაქსი ზუსტად ის არის, რამაც საწყისი ხარვეზი გამოიწვია. iptables-ის შემთხვევაში -I ათავსებს დასაწყისში, ხოლო -A ამატებს ბოლოში; nftables-ის შემთხვევაში insert წესს ჯაჭვის დასაწყისში აყენებს, ხოლო add ამატებს ბოლოში. როცა წესმა აუცილებლად უნდა მოიგოს, ეს ცხადად თქვით იმის ნაცვლად, რომ შემთხვევით ჩატვირთულ რიგს დაეყრდნოთ.

დაამტკიცეთ, თვალყურს ადევნებენ თუ არა დინებას

სანამ წესს დაადანაშაულებთ, შეამოწმეთ, საერთოდ თვალთვალის ქვეშ მყოფი კავშირია თუ არა ტრაფიკი. ჰკითხეთ მდგომარეობათა ცხრილს კონკრეტული დინების შესახებ, ნაცვლად იმისა, რომ ის მთლიანად გადმოღვაროთ:

conntrack -L -p tcp --dport 1194
conntrack -E -p tcp --dport 1194

სია აჩვენებს მდგომარეობას და დარჩენილ ვადას, და სწორედ ასე განასხვავებთ დამყარებულ სესიას ახალი მცდელობისგან; მოვლენების რეჟიმი განახლებებს ბეჭდავს მოხდომისთანავე, რაც სასარგებლოა კლიენტის ხელახლა დაკავშირებისას. თუ დინება დამყარებულ მდგომარეობაშია ჯერ კიდევ მანამ, სანამ რამეს შეეხებით, ფილტრის წესების ვერც ერთი რედაქტირება ვერ შეცვლის მის ბედს. ეს ფაირვოლის ხარვეზი არ არის, ეს მდგომარეობიანი ფილტრაციის ხელშეკრულებაა.

წინააღმდეგობა გაუწიეთ ცდუნებას, მთლიანი ცხრილი საწარმოო კარიბჭეზე გაასუფთავოთ. conntrack -F ხელმისაწვდომია, და ის ასევე ანადგურებს მანქანაზე ყველა თვალთვალის ქვეშ მყოფ დინებას, მათ შორის იმ მართვის სესიას, საიდანაც მუშაობთ, და იმ გვირაბს, რომელიც თქვენს გარსს ატარებს. ცალკეული ჩანაწერების წაშლა შესაძლებელია, როცა ეს ნამდვილად გჭირდებათ, მაგრამ ახალი წყაროს პორტიდან ახალი დინება ჩვეულებრივ უფრო სუფთა ექსპერიმენტია.

ზოგიერთ გზას არ ადევნებენ თვალყურს, და ისინი საპირისპიროდ იქცევიან. ტრაფიკი, რომელიც raw ცხრილში notrack აღნიშვნითაა მონიშნული, ზოგიერთი გვირაბი, რომელიც ჩვეულებრივ კაუჭებს გვერდს უვლის, და ასიმეტრიული მარშრუტიზაცია, რომელიც დინებას ორ კარიბჭეს შორის ჰყოფს, ყველა ერთმანეთის მიყოლებით შეფასებულ პაკეტებს იძლევა, ან მდგომარეობას, რომელიც ორივე ბოლოში არასოდეს იქმნება. თუ მრიცხველები ყოველ პაკეტზე მოძრაობს, ეჭვი შეიტანეთ ასეთ გზაში, სანამ რიგში ეჭვს შეიტანთ.

ტესტირება ახალი დინებიდან დაბრუნების გზით

სანამ წესს გამოსცდით, რომელმაც შეიძლება დისტანციური წვდომა გაწყვიტოს, შექმენით აღდგენის გზა: პროვაიდერის კონსოლი, სერიული კონსოლი, ზოლის გარეთ მართვის მისამართი, ან მეორე ინტერფეისი, რომელსაც წესი ვერ დაემთხვევა. უკან დაბრუნების ტაიმერი გონივრული თანამგზავრია, რადგან ის წინა წესების ნაკრებს აღადგენს მაშინაც, თუ თქვენი სესია ტესტის შუაში მოკვდება.

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

tcpdump -ni eth0 'tcp port 1194'
journalctl -k -n 50 --no-pager

ჩაატარეთ ტესტი ორივე მიმართულებით. წესი, რომელიც ახალ შემავალ ხელის ჩამორთმევას ბლოკავს, მაინც შეიძლება პასუხის გზას დაუშვას, ან პირიქით, და ცალმხრივი შედეგია ჩაკეტვის ნახევრად მუშაობის ჩვეულებრივი მიზეზი. ტესტის შემდეგ კიდევ ერთხელ დაუკავშირდით, რომ სტაბილური მდგომარეობა დაადასტუროთ, და შეამოწმეთ, გადაურჩა თუ არა ლეგიტიმური მართვის წვდომა; ერთი პორტისთვის დაწერილ წესს ჩვეულებად აქვს უფრო ფართო დიაპაზონს დაემთხვეს, ვიდრე განზრახული იყო.

ჩაწერეთ მიზანი და პოზიცია წესთან ერთად

ჩაწერილი მიზნის გარეშე წესი ის წესია, რომლის მოცილებასაც ვერავინ ბედავს. ყოველი ჩაკეტვის ჩანაწერის გვერდით შეინახეთ დინება, რომელსაც ის იცავს, ჯაჭვი და კაუჭი, რომელშიც ცხოვრობს, პოზიცია, რომელიც მან უფრო ფართო დაშვებების მიმართ უნდა დაიკავოს, და ტესტი, რომელმაც ეს დაამტკიცა. როცა ვინმე ექვსი თვის შემდეგ გარშემო წესების ნაკრებს შეცვლის, ის ჩანაწერი ერთადერთი გაფრთხილებაა, რომ პოზიცია განზრახ იყო.

სანამ ცვლილებას დახურავთ, დაადასტურეთ ოთხი რამ: მოქმედი წესების ნაკრები ემთხვევა ფაილს, ახალ წესს ახალი მცდელობის შემდეგ არანულოვანი მრიცხველები აქვს, საპირისპირო მიმართულება და მართვის წვდომა კვლავ მუშაობს, და თქვენ ერთხელ ხელახლა დაუკავშირდით, რომ სტაბილური მდგომარეობა დაამტკიცოთ და არა ცვლილებამდე არსებული სესიის მდგომარეობა. თუ ამათგან რომელიმე შეუმოწმებელია, ცვლილება დასრულებული არ არის, რასაც არ უნდა აკეთებდეს გვირაბი.

დაკავშირებული სტატიები