Блакаванне IPv6 дзеля абароны WireGuard ламае хост
Правіла, якое скідвае ўвесь уваходны IPv6, выдаляе таксама выяўленне суседзяў і Packet Too Big. Развядзіце тры адказнасці і праверце, што хост працуе.
Мэта разумная: да сэрвісаў на гэтай машыне павінны дабірацца толькі карыстальнікі тунеля. Рэалізацыя, да якой звычайна бяруцца, — гэта ланцуг уваходу IPv6, які скідвае ўсё, акрамя WireGuard, а разам з гэтым і трафік, што ўтрымлівае хост на яго ўласным канале. Выяўленне суседзяў і паведамленні аб абслугоўванні шляху — гэта не доступ да сэрвісу, і іх выдаленне дае машыну, недасяжную па прычынах, не звязаных з вашай палітыкай. Тунель узнімаецца, сэрвісы правільна абмежаваныя, і нішто іншае на канале не працуе.
Тры адказнасці, адзін набор правілаў
Першая адказнасць — знешняя праца сеткі: хост павінен заставацца на сваім канале, вырашаць суседзяў і ведаць межы шляху гэтага канала. Другая — шыфраваны слухач, які прымае UDP на абраным адрасе і порце. Трэцяя — набор расшыфраваных сэрвісаў, да якіх вы хочаце дапусціць карыстальнікаў тунеля.
Гэта тры розныя палітыкі, і толькі другая і трэцяя датычаць VPN. Набор правілаў, які ставіцца да іх як да аднаго, атрымлівае ў спадчыну рэжым адмовы, у якім узмацненне мяжы праграм ціха ламае прывязку хоста.
Трымайце іх у асобных ланцугах або хаця б у асобных каментарах, каб наступны чалавек бачыў, які радок для чаго існуе.
Што ICMPv6 робіць для хоста
IPv6 абапіраецца на ICMPv6 значна больш, чым для рэха. Запыт і аб'ява суседа замяняюць ARP і патрэбныя для лакальнай дастаўкі. Packet Too Big пераносіць звесткі аб MTU шляху, і ігнараванне гэтага дае перадачы, якія спыняюцца на вялікіх пакетах. Аб'явы маршрутызатара пераносяць маршрут па змаўчанні і звесткі аб прэфіксе, калі канал выкарыстоўвае аўтаматычную канфігурацыю.
RFC 4890 аддзяляе паведамленні, якія фільтр хоста абавязаны прапускаць, ад тых, што з'яўляюцца адміністрацыйным выбарам, і робіць гэта ў раздзеле для хоста, які адрозніваецца ад правілаў для маршрутызатара, што перасылае паміж сеткамі. Чытанне толькі раздзела перасылкі дае палітыку ўваходу, занадта строгую для хоста, які яна абараняе.
Практычнае правіла — дазволіць істотныя паведамленні аб памылках і канфігурацыі на інтэрфейсе, якому яны патрэбны, абмежаваўшы іх па тыпу і крыніцы, дзе платформа дазваляе, і прыняць яўнае рашэнне адносна астатніх.
Замяніць усё гэта суцэльным дазволам ICMPv6 — вырашыць праблему даступнасці і адмовіцца ад фільтравання. Замяніць яго суцэльным скідам — вырашыць праблему фільтравання і адмовіцца ад хоста.
Спачатку прапусціце тунель, затым сэрвіс
Прыміце транспарт WireGuard на патрэбным знешнім адрасе і UDP-порце, а зваротны трафік прымайце праз адсочванне злучэнняў. Затым дазвольце праграмным сэрвісам праходзіць праз інтэрфейс тунеля з крыніц, якім вы сапраўды даяце права.
Дазвол на знешні UDP-порт не дае права на расшыфраваныя запыты ўнутры яго. Менавіта гэта розніца і ёсць прычына, чаму інтэрфейс тунеля з'яўляецца ў правілах сэрвісаў.
Чытайце набор правілаў такім, які ён ёсць, а не такім, якім апісвае яго файл:
sudo nft list ruleset
ip -6 addr show
ip -6 route show default
Слухач на фізічным адрасе — асобная экспазіцыя ад таго ж сэрвісу на адрасе тунеля. Калі машына яшчэ і перасылае трафік на іншую машыну, гэта рашэнне ланцуга перасылкі, а не гэтая палітыка ўваходу, і яно патрабуе ўласнага абгрунтавання.
Праверце канал, а не толькі тунель
Працуючы тунель пасля змены даказвае менш, чым здаецца, бо існуючы запіс суседа і ўсталяванае злучэнне могуць хаваць кіраўнічае паведамленне, якое палітыка цяпер скідвае.
Праверце прывязку напрамую, затым праверце, што выключаны шлях па-ранейшаму не працуе:
ip -6 neigh show
ping -6 -c 3 2001:db8:1::1
sudo nft -c -f /etc/nftables.conf
Табліца суседзяў, якая застаецца поўнай пасля перазагрузкі, — гэта сігнал, што выяўленне ўсё яшчэ працуе. Табліца, якая апусташаецца і ніколі не запаўняецца, — сігнал, што вы яе адфільтравалі. Трэцяя каманда правярае сінтаксіс набору правілаў без ужывання, што варта зрабіць, пакуль у вас яшчэ ёсць сеанс.
Аднавіце хост, з якога вы сябе заблакавалі
Перад зменай правілаў міжсеткавага экрана, якія нясуць вашу ўласную адміністрацыйную сесію, трымайце другі канал: кансоль, паслядоўнае злучэнне або запланаваны адкат, які выдаляе новыя правілы, калі вы яго не адмяніце.
Калі змена сапраўды заблакуе вас, аднаўленне ідзе праз гэты канал, а не праз сетку, якую вы толькі што выдалілі. Аднавіце папярэдні набор правілаў з захаванай копіі, пераканайцеся, што хост зноў дасяжны, і толькі тады ўжывайце патрэбную палітыку дробнымі часткамі.
Канчатковая палітыка не ўніверсальная. Адрасацыя, маршрутызацыя і рэалізацыя міжсеткавага экрана — гэта ўваходныя даныя разгортвання, але мяжа ўсюды адна: адмаўляйце ў ненаўмысным доступе праграм, захоўваючы кіруючы трафік, які нясе дазволены тунель.