Аваријски прекидач блокира само IPv4: зашто IPv6 и даље излази
Скуп правила заштитног зида за IPv4 не говори ништа о IPv6. На уређају са двоструким стеком тунел може пасти док апликација одржава радну путању око њега.
Тунел пада, аваријски прекидач извештава да се активирао, а преузимање се наставља. Ништа није покварено у правилима IPv4. Апликација се једноставно преместила на путању за коју та правила никада нису написана.
Уређаји са двоструким стеком имају два независна излаза. Блокирање једног од њих је пола блокирања.
Два скупа правила, две подразумеване вредности
На Linux-у, iptables и ip6tables су одвојене табеле са одвојеним политикама. Постављање ланаца INPUT и OUTPUT табеле IPv4 на DROP не мења ништа у табели IPv6, где је подразумевана вредност обично ACCEPT. Иста подела постоји у nftables, где можете прегледати једну фамилију и открити да само једна од њих носи ваша правила. Та асиметрија је нормална, и то је цео проблем.
Зато аваријски прекидач може изгледати темељно, а деловати делимично. Скрипта која је написала правила IPv4 се извршила, бројачи расту, линија у дневнику се појављује, а пакет IPv6 излази кроз физички интерфејс потпуно нетакнут.
Читајте шта ваш клијент заиста инсталира, а не шта обећава маркетинг страница. Неки клијенти усмеравају IPv6 у тунел, неки га намерно блокирају, а неки га остављају на миру док закључавање на нивоу платформе примењује друго правило. Документација произвођача је једини извор коме вреди веровати овде.
Шта вам говори конфигурација интерфејса
Страница приручника за wg-quick укључује правила IPv6 у својој пример конфигурацији, а разлог је управо ова празнина. Пример није украс. Постоји зато што би само правила IPv4 оставила другу фамилију отворену.
Копирање половине примера даје половину политике. То је најчешће порекло овог цурења. Објава на блогу је скратила пример због дужине. Скраћена верзија је затим постала шаблон који су сви поново користили.
# what is actually installed, per family?
sudo iptables -S OUTPUT | head -20
sudo ip6tables -S OUTPUT | head -20
# nftables: inspect each family separately
sudo nft list ruleset inet | head -40
# does this host even have a usable IPv6 path?
ip -6 route show default
Ако друга команда исписује дозвољавајућу политику, а прва исписује DROP, пронашли сте одговор без додиривања клијента. Та асиметрија је грешка.
Зашто једно претраживање није цела прича
Једно име може вратити и запис A и запис AAAA, а апликације не бирају све на исти начин. Прегледач може преферирати IPv6 када га мрежа нуди и вратити се при неуспеху, док позадинска синхронизација или ажурирање користи свој резолвер и своју преференцу. Зато један успешан тест преко IPv4 доказује једну путању, а не политику.
Мрежни прелази такође мењају одговор. Прикључивање на другу Wi-Fi мрежу, буђење из сна или прелазак на мобилну мрежу може уређају дати нови префикс IPv6, а политика која је изгледала довољна на канцеларијском LAN-у можда га не покрива.
Тестирајте стање када је тунел искључен
Тестирање док сте повезани говори вам да тунел ради. Занимљив тест је недоступно стање, јер тада аваријски прекидач треба да издржи. Намерно зауставите тунел, затим испробајте важна одредишта из апликације коју штитите.
# with the tunnel stopped, does anything still leave?
ip -6 route get 2606:4700:4700::1111
curl -6 -sS -o /dev/null -w '%{http_code}\n' --max-time 5 https://ipv6.example.net/
curl -4 -sS -o /dev/null -w '%{http_code}\n' --max-time 5 https://ipv4.example.net/
Обе фамилије треба да падну затворено. Ако захтев IPv4 истекне, а захтев IPv6 врати статусни код, политика је непотпуна, и никакво поновно тестирање тунела то неће променити.
Задржите и документоване изузетке у том тесту. Откривање локалне мреже, обнављање DHCP-а или путања за подизање до крајње тачке VPN-а могу требати да остану доступне, и ти изузеци треба да буду именовани у политици, а не откривени током прекида. Тест цурења који не успева зато што тунел не може да се врати није безбедносни налаз, већ налаз о повезаности.