რატომ ამატებს VPN-ის ფაირვოლის კაუჭი ერთსა და იმავე წესს ორჯერ
ხელახალი დაკავშირება შეიძლება თქვენს კაუჭს კვლავ გაუშვას, ამიტომ შექმენით სასურველი მდგომარეობისთვის: საკუთარი ჯაჭვები, ჩასმამდე ტესტი, ერთი თანმიმდევრული ცვლილება და ვიწრო დემონტაჟი.
კაუჭი პირველად მუშაობს, ხოლო სამი ხელახალი დაკავშირების შემდეგ ჯაჭვში იმავე წესის სამი ასლი რჩება. არაფერი ჩავარდნილა ხმამაღლა; სკრიპტი ყოველ გაშვებაზე უბრალოდ აკეთებდა იმას, რაც უთხრეს. VPN-ის კაუჭი კონფიგურაციის ოპერაციაა, რომელიც შეიძლება ერთზე მეტჯერ გაშვდეს, ამიტომ მას სჭირდება მფლობელი, სასურველი მდგომარეობა და თანმიმდევრული ცვლილება. მიყევით ამ თანმიმდევრობას და დუბლიკატები შეწყდება.
მიეცით წესებს მფლობელი, სანამ რომელიმეს დაწერთ
გადაწყვიტეთ, რომელი ჯაჭვი ან ცხრილი ეკუთვნის ამ ინტეგრაციას, სანამ ერთ წესს დაწერთ. გამოყოფილი ჯაჭვი, რომელსაც კაუჭი ქმნის და ასუფთავებს, საკუთრების ყველაზე ნათელი ფორმაა, რადგან გასუფთავებას შემდეგ შეუძლია ამ ჯაჭვის წაშლა სხვისი პოლიტიკის შეხების გარეშე. თუ იძულებული ხართ, წესები საერთო ჯაჭვს დაუმატოთ, მონიშნეთ ისინი კომენტარით, რომ მოგვიანებით ძებნამ ზუსტად თქვენი იპოვოს. საკუთრებაა ის, რაც დემონტაჟს უსაფრთხოს ხდის, და დემონტაჟია ის ნაწილი, რომელიც ჩუმად ფარდება.
iptables -N VPN_HOOK 2>/dev/null || true
iptables -C INPUT -j VPN_HOOK 2>/dev/null || iptables -I INPUT -j VPN_HOOK
iptables -S VPN_HOOK
კომენტარი აქ მორთულობა არ არის. ეს არის განსხვავება თქვენი წესის წაშლასა და შემთხვევით მსგავსი წესის წაშლას შორის, და ის რჩება შენახულ წესების ნაკრებში. დაწერეთ კომენტარი ერთხელ ცვლადში და გამოიყენეთ იგივე სტრიქონი ყველა ბრძანებაში, რომელიც ამატებს, ამოწმებს ან შლის.
შეამოწმეთ სასურველი მდგომარეობა, ნაცვლად ხელახლა დამატებისა
ჩაწერეთ, რა უნდა არსებობდეს, სანამ გვირაბი ზემოთ არის: რომელი ინტერფეისები, რომელი წყარო და დანიშნულება, რომელი პროტოკოლი და რომელი პორტი. შემდეგ გამოხატეთ ყოველი წესი როგორც ტესტი, რომელსაც ჩასმა მოჰყვება, რომ მეორე გაშვებამ წესი იპოვოს და არაფერი გააკეთოს. შემოწმების ბრძანება ნულით სრულდება, როცა წესი არსებობს, და ზუსტად ეს სიგნალი სჭირდება სკრიპტს. iptables-ის ცნობარი აღწერს აქ გამოყენებულ შემოწმების, დამატების და ჩასმის ფორმებს.
iptables -C VPN_HOOK -i tun0 -p tcp --dport 443 -j ACCEPT ||
iptables -A VPN_HOOK -i tun0 -p tcp --dport 443 -j ACCEPT
იყავით ფრთხილად პოზიციასთან. წესის შემოწმებამ და თავში ჩასმამ შეიძლება ნებართვა წინ წაწიოს განზრახ უარყოფამდე, რომელიც ადრე პირველი მოდიოდა, ამიტომ მეორე გაშვება ცვლის ქცევას, თუმცა არაფერს ამატებს. დაამატეთ ბოლოში საკუთარი ჯაჭვის შიგნით და მართეთ რიგი იმ ადგილით, სადაც ნახტომია ამ ჯაჭვში. თუ ჯაჭვის შიგნით რიგს მნიშვნელობა აქვს, თავიდან ააშენეთ ჯაჭვი ცნობილი სიიდან, ნაცვლად წეს-წეს შეკვეთისა.
შეჩერდით, თუ საჭირო წესს სტაბილურ ტესტად გამოხატვა არ შეიძლება. ეს ჩვეულებრივ ნიშნავს, რომ სასურველი მდგომარეობა ჯერ კიდევ გაურკვეველია.
თანმიმდევრულად აქციეთ ცვლილება, ნაცვლად იმისა, რომ გამძლეობას იმედოვნოთ
კაუჭის ორი გამოძახება შეიძლება გადაიფაროს და ორივემ შეიძლება დაინახოს არმყოფი წესი, სანამ რომელიმე დაამატებს. xtables-ის ლოდინის პარამეტრი ბრძანებას კედელზე ლოდინს აიძულებს, მაგრამ ორ ბრძანებას შორის შემოწმება-შემდეგ-დამატების მიმდევრობას ატომურ არ ხდის. თანმიმდევრულად აქციეთ მთელი ოპერაცია საკუთარი კედლით, ან გამოიყენეთ მმართველი, რომელიც გამოცხადებულ პარტიას ერთ ტრანზაქციად იყენებს. nftables-ს ეს უკანასკნელი შეუძლია, და ეს ერთ-ერთი მიზეზია მისი უპირატესობისა ჰოსტებზე, სადაც ის ხელმისაწვდომია.
flock /run/vpn-hook.lock /usr/local/sbin/vpn-firewall-apply
nft -f /etc/nftables/vpn-hook.nft
რომელი მექანიზმიც არ უნდა აირჩიოთ, კრიტიკული მონაკვეთი მოკლედ შეინახეთ და გააკეთეთ ხელახლა შესვლადი: ნახევარ გზაზე ჩავარდნილი კაუჭი ხელახლა გაშვებისთვის უსაფრთხო უნდა იყოს. ჩაწერეთ შედეგი, რომ განმეორებითი გაშვება ჟურნალში ჩანდეს და არა წესების რაოდენობიდან გამოიტანოს. თუ ორ სხვადასხვა ზედამხედველს შეუძლია კაუჭის გამოძახება, ჯერ ეს გაასწორეთ; არც ერთი კედელი არ ასწორებს ორ მფლობელს.
დაშალეთ მხოლოდ ის, რაც თქვენ გეკუთვნით
დემონტაჟმა უნდა გაარჩიოს შემცვლელი კავშირი იმ კავშირისგან, რომელიც პენსიაზე გაუშვა, და უნდა გაუძლოს მოვლენას, რომელიც არასოდეს იღებს მოწესრიგებულ გასუფთავებას. წაშალეთ იმავე იდენტიფიკატორებით, რომლებითაც დაამატეთ, და არასოდეს გაასუფთავოთ საერთო ჯაჭვი დემონტაჟის გასამარტივებლად. ხისტი გაჩერების შემდეგ, შემდეგ გაშვებაზე გაუშვით შეჯერების ტური, ნაცვლად იმისა, რომ ჩათვალოთ, თითქოს ქვედა კაუჭი მუშაობდა.
iptables -D VPN_HOOK -i tun0 -p tcp --dport 443 -j ACCEPT
iptables -F VPN_HOOK
ip -brief link show type tun
ინტერფეისის სიცოცხლის ხანგრძლივობაც დიზაინის ნაწილია. ხელახალმა დაკავშირებამ შეიძლება შექმნას სხვა სახელის მოწყობილობა, ამიტომ მეორე გვირაბის სახელის გახისტებული წესი მოძველდება, თუმცა ჯერ კიდევ მოქმედად გამოიყურება. უპირატესობა მიანიჭეთ იმ იდენტობას, რომელსაც თავად კავშირი ამჟღავნებს, და ყოველ გაშვებაზე ხელახლა წაიკითხეთ. სამი მოვლენა ცალკე შეამოწმეთ: განმეორებითი კავშირი, შემცვლელი კავშირი და გამორთვა. ნებადართული ტრაფიკი სამივეს უნდა გაუძლოს დუბლიკატების გარეშე, და დაუკავშირებელი სერვისები ხელუხლებელი უნდა დარჩეს.
გავლა მთავრდება მაშინ, როცა კაუჭს აქვს მფლობელი, ტესტი ყოველი დამატებული წესისთვის, ერთი თანმიმდევრული გზა და დემონტაჟი, რომელიც მხოლოდ საკუთარ მდგომარეობას შლის. ორჯერ უსაფრთხოდ მომუშავე კაუჭი უფრო ღირებულია, ვიდრე ერთხელ ჭკვიანი კაუჭი.