iptables: VPN კლიენტებს მხოლოდ ერთ ჰოსტამდე მისვლის უფლება
სასურველი წესი FORWARD-შია და არა INPUT-ში. დაუშვით ერთი დანიშნულება VPN პულისთვის, უარყავით დანარჩენი, შემდეგ დაამტკიცეთ ეს მრიცხველებითა და უკუქცევის ბრძანებით.
ორი დახმარების ბილეთი, რომლებიც დაუკავშირებელად გამოიყურება, საბოლოოდ ერთ საერთო მიზეზს იზიარებს. პირველში ადმინისტრატორს სურს, სერვერმა კავშირები მხოლოდ გვირაბიდან მიიღოს; მეორეში VPN მომხმარებლებმა უნდა მიაღწიონ ერთ შიდა ჰოსტს და მეტს არაფერს. ორივე პოლიტიკა FORWARD-ს ეკუთვნის და ორივეს ჩვეულებრივ INPUT-ში ცდიან. შედეგი ფაირვოლს ჰგავს და ჩანაცვლების ელემენტივით იქცევა.
რომელი ჯაჭვი პასუხობს თქვენს კითხვას
პაკეტები, რომლებსაც VPN კლიენტი LAN-ის ჰოსტს ან შემდეგ ინტერნეტისკენ აგზავნის, ბირთვი გადაამისამართებს და ისინი FORWARD-ში ფასდება. INPUT და OUTPUT ხედავს მხოლოდ იმ ტრაფიკს, რომელიც თავად სერვერზე მთავრდება ან იქიდან იწყება. ამიტომ ყველაფრის უარყოფა, რაც tun0-ზე არ მოდის, იცავს სერვერის საკუთარ მსმენელებს და ასევე შეწყვეტს თქვენს SSH სესიას, თუ ჩამოყალიბებული ნაკადები ჯერ არ დაიშვება. ეს არაფერს ცვლის იმაში, სად შეიძლება წავიდნენ კლიენტები.
ჯერ დაასახელეთ კითხვა: ვის შეუძლია სერვერამდე მისვლა, ან სად შეიძლება წავიდნენ კლიენტები. ქსელების უმეტესობას ორივე პასუხი სჭირდება, სხვადასხვა ჯაჭვში.
ჯერ მდგომარეობა, შემდეგ ნებართვა, შემდეგ უარი
ნებადართულების სია მუშაობს მხოლოდ მაშინ, როცა კონკრეტული ნებართვა ზოგადი უარის ზემოთ დგას და როცა დაბრუნების ტრაფიკი ორივეს ზემოთაა დაშვებული. ჩასვით წესები გამოკვეთილ პოზიციებზე, შემდეგ გამოიტანეთ ჯაჭვი iptables -S FORWARD-ით, რომ თანმიმდევრობა ჩანდეს და არა ვარაუდობდეს.
POOL=10.99.0.0/24
iptables -I FORWARD 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -I FORWARD 2 -s "$POOL" -d 172.31.20.15 -p tcp -m multiport --dports 443,3389 -j ACCEPT
iptables -I FORWARD 3 -s "$POOL" -j REJECTორი დეტალი წყვეტს, გაუძლებს თუ არა ეს რეალურ ტრაფიკთან შეხებას. მდგომარეობის წესის გარეშე, იმ კავშირებზე პასუხები, რომლებიც ახლახან დაუშვით, თავად ფასდება უარის წინააღმდეგ და იშლება. შეზღუდვის გარეშე LOG წესმა შეიძლება პატარა დანაყოფი აავსოს სკანირების პირველივე შეხებაზე, ამიტომ ჩაწერის გაგრძელებამდე დაამატეთ -m limit --limit 10/min. REJECT დაუყოვნებლივ აბრუნებს შეცდომას, რაც სიის რეგულირებისას უფრო მეგობრულია; DROP ჩუმად ყრის, ამიტომ ყველა შეცდომა დროის ამოწურვად ჩანს. შეგნებულად აირჩიეთ ერთი და ჩაწერეთ არჩევანი ცვლილების ჩანაწერში.
გადამისამართება და NAT უკვე უნდა მუშაობდეს
ფილტრაცია ვერ დაამტკიცებს, რომ გზა არსებობს. ჯერ დაადასტურეთ, რომ ბირთვი საერთოდ გადაამისამართებს და ეს პარამეტრი მუდმივი გახადეთ და არა shell-ის ერთჯერადი ბრძანება. ფილტრი ბოლო ფენაა და არა პირველი.
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s "$POOL" -o eth0 -j MASQUERADEსად უნდა იყოს მასკარადი, დამოკიდებულია იმაზე, საიდან გადიან კლიენტები. თუ ისინი გვირაბით შორეულ ქსელში გადიან, NAT წესი იმ ინტერფეისზე ჯდება და არა WAN ინტერფეისზე. შემდეგ დააკვირდით მრიცხველებს: თუ POSTROUTING მრიცხველი არასოდეს იძვრება, სანამ FORWARD-ის დაშვებების რაოდენობა იზრდება, დაბრუნების გზა გატეხილია და ფილტრი რიგზეა. ეს წაკითხვა ზოგავს ნახევარ დღეს იმ წესების გადაწერას, რომლებიც არასოდეს ყოფილა პრობლემა.
ფოსტის ბლოკი ერთი ჯაჭვით იქით არის
INPUT-ში 25 პორტის დაბლოკვა მხოლოდ VPN სერვერის მისამართზე გაგზავნილ ფოსტას აჩერებს. გვირაბით ფოსტის გამგზავნი დაზარალებული კლიენტი გადამისამართდება, ამიტომ ბლოკი FORWARD-ში უნდა იდგეს 465-ისა და 587-ის გვერდით. თუ ერთი აპლიკაცია ლეგიტიმურად გადასცემს ფოსტას, მისი დანიშნულება და პორტი ამ წესის ზემოთ მოათავსეთ.
iptables -I FORWARD 2 -s "$POOL" -p tcp -m multiport --dports 25,465,587 -j REJECTსანამ სხვა რამეს გაამკაცრებთ, უარის მრიცხველს ერთი კვირა ამუშავეთ. რიცხვი, რომელიც აღარ იზრდება, სწორედ ის ლეგიტიმური ნაკადია, რომელიც ახლახან გატეხეთ.
წაიკითხეთ უკან და შემდეგ დაამტკიცეთ კლიენტიდან
წესების ნაკრები წაიკითხეთ ისე, როგორც ბირთვი იუწყება და არა ისე, როგორც თქვენმა სკრიპტმა დაწერა. დაიწყეთ iptables -S FORWARD-ით, შემდეგ NAT ცხრილი iptables -t nat -L POSTROUTING -n -v-ით, შემდეგ თქვენ მიერ შემოწმებული ნაკადის conntrack ჩანაწერი. სამუშაოს გაგრძელებისას ხელთ გქონდეთ უკუქცევის ბრძანება ან დაგეგმილი გასუფთავება. ყოველ გამოძახებას სჭირდება -w, თორემ ორი ადმინისტრატორი xtables-ის საკეტზე შეეჯახება. ცვლილების ფანჯარაში ეს ყველაფერი სავალდებულოა.
დაასრულეთ პულის შიგნით მყოფი კლიენტიდან და გარეთ მყოფი კლიენტიდან ტესტირებით. წესი, რომელიც მხოლოდ იმ მანქანიდან მუშაობს, სადაც აკრიფეთ, პოლიტიკა არ არის.