მარშრუტიზატორის უსაფრთხოების ჩამრთველი FORWARD, OUTPUT და IPv6-ისთვის
მხოლოდ FORWARD-ში აგებული უსაფრთხოების ჩამრთველი მარშრუტიზატორს გაჟონვის თავისუფლებას უტოვებს, ხოლო მხოლოდ IPv4-ის წესები IPv6-ს ღიად ტოვებს. დაალაგე ჯაჭვები და გამოსცადე გვირაბის გამორთული მდგომარეობით.
შედიხარ მარშრუტიზატორში, ფორუმის პოსტიდან აკრავ უსაფრთხოების ჩამრთველის წესების ნაკრებს და LAN წყვეტს დათვალიერებას იმ მომენტში, როცა გვირაბი ვარდება. ორი დღის შემდეგ მარშრუტიზატორი კვლავ აახლებს თავის დინამიური DNS ჩანაწერს ჩვეულებრივი WAN-ით, ხოლო სტუმრის ლეპტოპი კვლავ აღწევს IPv6 საიტებამდე. ორივე ქცევა ნორმალურია, რადგან ჩასმული წესები ფარავდა ერთ ჯაჭვს და ერთ მისამართების ოჯახს, და არც ერთი მათგანი არ არის მთელი მარშრუტიზატორი. პაკეტების ბილიკების რიგრიგობით გავლა ზუსტად გვიჩვენებს, რა გამოგვრჩა.
დაიწყე მარშრუტიზატორიდან და არა ლეპტოპიდან
მარშრუტიზატორის დონის პოლიტიკა მიმზიდველია პატარა ოფისისთვის, რადგან მის უკან არსებული ყველა მოწყობილობა მემკვიდრეობით იღებს იგივე ქცევას და ვერავინ დაგვავიწყდება კლიენტის ჩამრთველის ჩართვა. ის ასევე გაძლევს ერთ ადგილს სატესტოდ ყოველი firmware განახლების შემდეგ. რასაც არ გაძლევს, ეს არის მარშრუტიზატორის საკუთარი ტრაფიკის ან მეორე მისამართების ოჯახის ავტომატური დაფარვა, და სწორედ ეს ორი ხარვეზი დგას უმეტესი წარუმატებელი განლაგების უკან.
სანამ რამეს შეასწორებ, ქაღალდზე ჩაიწერე სამი ფაქტი: WAN ინტერფეისის სახელი, LAN ხიდის სახელი და VPN ენდპოინტის მისამართი და პორტი. სამივე დაგჭირდება წესებში, და ინტერფეისების სახელების გამოცნობა არის ყველაზე გავრცელებული მიზეზი იმისა, რომ სწორად გამომხედველი წესების ნაკრები არაფერს აკეთებს.
გაიარე სამი ბილიკი, რომლითაც პაკეტი შეიძლება წავიდეს
ლეპტოპიდან ინტერნეტში მიმავალი ტრაფიკი გადამისამართდება, ამიტომ გადის FORWARD ჯაჭვში. ტრაფიკი, რომელსაც თავად მარშრუტიზატორი აგენერირებს, მაგალითად DNS გადამისამართება, NTP მოთხოვნები, DDNS განახლებები და VPN-ის საკონტროლო არხი, გადის OUTPUT-ში. მარშრუტიზატორის მისამართზე მიმართული მართვის ტრაფიკი შემოდის INPUT-ით.
ამრიგად, მხოლოდ FORWARD-ში აგებული უსაფრთხოების ჩამრთველი იცავს კლიენტებს და სხვა არაფერს. ცხრილი გვიჩვენებს, რატომ არის შესავალში აღწერილი გაჟონვა წინასწარმეტყველებადი და არა საიდუმლო.
| Packet path | Example | Chain that sees it |
|---|---|---|
| LAN client to WAN or tunnel | Browser request | FORWARD |
| Router-originated | DDNS update, NTP | OUTPUT |
| Addressed to the router | SSH from the LAN | INPUT |
უმეტეს დიზაინში INPUT-ზე უსაფრთხოების ჩამრთველი არ გჭირდება, მაგრამ მართვის წვდომა სამუშაოდ უნდა შეინარჩუნო, სანამ გვირაბი ჩამოშლილია. წინააღმდეგ შემთხვევაში, როცა VPN პირველად ჩავარდება, ოფისისკენ მიდიხარ კონსოლის კაბელით ხელში.
დაალაგე წესები ისე, რომ გვირაბმა მაინც შეძლოს აწევა
მომუშავე უსაფრთხოების ჩამრთველი არის ნებადართული სია, რომელიც უარყოფით მთავრდება, და სწორედ რიგი აქცევს მას ჩამრთველად და არა აგურად. ჯერ დაუშვი loopback, VPN ენდპოინტი, დამკვიდრებული ნაკადების პასუხები და გვირაბის ინტერფეისი; დანარჩენი უარყავი ბოლოს.
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -d 198.51.100.7 -p udp --dport 51820 -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o wg0 -j ACCEPT
iptables -A OUTPUT -o eth0 -j REJECT
ამ ეტაპზე ენდპოინტი უნდა იყოს მისამართი და არა ჰოსტის სახელი. როგორც კი საბოლოო უარყოფა დაბლოკავს DNS-ს, წესი, რომელიც პროვაიდერის ჰოსტის სახელს ასახელებს, ვეღარ გადაწყდება, და გვირაბი გადატვირთვის შემდეგ აღარასოდეს ამოქმედდება. თუ პროვაიდერი ენდპოინტებს ცვლის, გადაწყვიტე სახელი პოლიტიკის გამოყენებამდე და განაახლე ეს წესი იმავე სკრიპტიდან.
კლიენტების ტრაფიკისთვის იგივე ფორმა გაიმეორე FORWARD-ში და უარყოფის ზემოთ განათავსე მართვის ცალსახა წესი. ეს მართვის წესი შენარჩუნე ვიწრო, მაგრამ მისაწვდომი, და დაადასტურე ის მეორე SSH სესიის გახსნით სანამ პირველს დახურავ. საკუთარი თავის გარეთ ჩაკეტვა უსაფრთხოების ჩამრთველის შეცვლისას საკმარისად გავრცელებულია, რომ დაგეგმო. WireGuard-ზე მომუშავე მარშრუტიზატორში peer-ის allowed-ips განსაზღვრავს, რა შედის გვირაბში, ხოლო ეს წესები განსაზღვრავს, რა ეშვება გარეთ მის გარეშე.
IPv6-ს საკუთარი შესასვლელი კარი სჭირდება
ყველაფერი ზემოთ IPv4-ია. თუ შენს LAN-ს მუშა IPv6 აქვს და გვირაბი მხოლოდ IPv4-ს გადააქვს, ყოველ დაფარულ მოწყობილობას კვლავ აქვს პირდაპირი გზა ინტერნეტისკენ, რომელსაც შენი ახალი წესები ვერასოდეს ხედავს. ორმაგი სტეკის ლეპტოპი სიამოვნებით ამჯობინებს მას, და უსაფრთხოების ჩამრთველი გატეხილად მხოლოდ იმას მოეჩვენება, ვინც IPv4-ით ტესტავს.
ip6tables -A FORWARD -i br-lan -j REJECT
ip6tables -A OUTPUT -o eth0 -j REJECT
ip6tables -A OUTPUT -o lo -j ACCEPT
აქაც რიგს აქვს მნიშვნელობა: loopback-ის დაშვება WAN-ის უარყოფამდე უნდა იყოს, თორემ მარშრუტიზატორზე ლოკალური სერვისები უცნაურად დაიწყებს ჩავარდნას. თუ ქსელი საერთოდ არ იყენებს IPv6-ს, მისი გამორთვა WAN-სა და LAN-ზე უფრო მარტივია და დასავიწყებელი არაფერი რჩება.
ზოგი VPN კლიენტი ნაგულისხმევ მარშრუტს მხოლოდ IPv4-ისთვის აყენებს და არსებულ IPv6 ნაგულისხმევს ხელუხლებლად ტოვებს. შეამოწმე მარშრუტიზაციის ცხრილი გვირაბის დაკავშირების შემდეგ და ნუ ივარაუდებ, რომ კლიენტმა ეს მოაგვარა.
დაამტკიცე გვირაბის გამორთული მდგომარეობით
გააჩერე გვირაბი მარშრუტიზატორიდან და გამოსცადე სამი ადგილიდან ამ რიგით:
# systemctl stop wg-quick@wg0
# ip route get 203.0.113.1
# curl -m 5 -sS http://example.com || echo blocked
# iptables -vnL OUTPUT | head
# ip6tables -vnL OUTPUT | head
მარშრუტის ძებნა გეუბნება, სად წავა პაკეტი, ხოლო მრიცხველები გეუბნებიან, დაემთხვა თუ არა შენი წესები ოდესმე. წესი ნულოვანი პაკეტებით წარუმატებელი ტესტის შემდეგ არაფერს იცავს, და ჩვეულებრივი მიზეზი ინტერფეისის სახელია, რომელიც აკრეფილისგან განსხვავდება. ცალსახად გამოსცადე მარშრუტიზატორის მიერ გამომუშავებული ტრაფიკი, რადგან LAN-ის მხრიდან ტესტი OUTPUT-ს ვერ ამუშავებს.
გადაწყვიტე მარცხის რეჟიმი სანამ დაგჭირდება. Fail-closed კლიენტებს ხაზგარეშე ტოვებს გვირაბის დაბრუნებამდე; fail-open აღადგენს ჩვეულებრივ WAN წვდომას და აცილებს მიზანს იმ ტრაფიკისთვის, რომელიც გაინტერესებდა. blackhole მარშრუტი VPN-ის მისამართების აუზისკენ მაღალი მეტრიკით სასარგებლო მეორე ფენაა fail-closed დიზაინებისთვის, რადგან ის გადარჩება, როცა გვირაბის მარშრუტი ქრება, ნაგულისხმევზე დაბრუნების ნაცვლად.
მიიღე კონფიგურაცია მხოლოდ მაშინ, როცა LAN კლიენტი, მარშრუტიზატორიდან წამოსული მოთხოვნა და IPv6 მოთხოვნა სამივე ჩავარდება გვირაბის გამორთული მდგომარეობით, და სამივე ისევ იმუშავებს, როცა ის აწევს.