Зашто кућни NAT не штити ваш VPN интерфејс
Кућни рутер прослеђује тунел, али домаћин процењује дешифровани пакет. Читајте слушаоца, унутрашњу путању и улазну политику одвојено.
Лаптопови иза кућног рутера без прослеђивања портова и даље прихватају SSH везе које стижу преко VPN-а. То није противречност, јер два различита уређаја процењују два различита пакета. Рутер прослеђује шифровани транспорт, а домаћин одлучује шта да ради са дешифрованим пакетом који стиже на његов тунелски интерфејс. Раздвајање те две одлуке је цела вежба.
Рутер прослеђује тунел, домаћин процењује пакет
Скицирајте путању од удаљеног извора до услуге пре него што погледате и једно правило. Спољашњи део је VPN транспорт, којим се баве рутер и гејтвеј. Унутрашњи део почиње када крајња тачка скине тунелски слој и домаћин прими пакет адресиран на његову VPN адресу.
Спојите та два дела и рутер добија заслугу за одлуку коју доноси домаћин. Страница за прослеђивање портова или дневник рутера описују само спољашње разговоре и ниједан не каже који ће дешифровани саобраћај домаћин прихватити. Домаћин примењује сопствену улазну политику на унутрашњи пакет, исто као на сваки пакет који стигне на интерфејс. Управо у тој политици питање изложености заиста се решава.
Слушалац са џокером није јавна услуга
У Linux-у везивање за INADDR_ANY значи сваку локалну адресу, па услуга може да одговара на тунелском интерфејсу који никада није именовала. Референца за IP сокете описује то везивање и вреди је прочитати пре извођења закључака из списка слушалаца. Запис са џокером је чињеница о сокету, а не тврдња о доступности.
Два реда испод су иста услуга у два различита везивања, а разлика је цео одговор на питање да ли је интерфејс важан. Прво прочитајте на којој адреси седи сокет.
ss -lntp "sport = :22"
LISTEN 0 4096 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=812,fd=3))
LISTEN 0 4096 10.8.0.6:22 0.0.0.0:* users:(("sshd",pid=812,fd=4))
Именујте распоред који би могао да достигне порт
Три распореда стављају пакет на тај интерфејс и имају различите власнике. Именовање правог одлучује ко мора да промени политику.
| Arrangement | What reaches the port | Where the decision lives |
|---|---|---|
| Another permitted VPN peer | A packet from the same tunnel subnet | Gateway forwarding policy and host input rules |
| A deliberate public forward | Traffic the gateway publishes on purpose | Gateway service definition |
| A subnet routed behind the gateway | Client traffic from the far side | Gateway route and host input rules |
Резултат прегледача који приказује јавну излазну адресу не говори ништа ни о једном од три, јер описује како излазни саобраћај излази, а не шта је дозвољено улазном. Радите уназад од слушаоца и адресе извора у дневнику услуге. Ако је извор други чвор тунела, политика гејтвеја је занимљив документ. Ако је то преведена адреса, пронађите превод пре него што промените правило.
Ограничите услугу на путању коју сте имали на уму
Ако је SSH потребан само са путање за управљање, запишите ту путању као опсег извора плус интерфејс. Затим ограничите улазна правила домаћина по интерфејсу, одредишту и извору, а не по имену мреже, јер име које изгледа приватно може да означава било коју адресу. Оставите руту за особу која ће решити следећи проблем.
nft add rule inet filter input iifname "tun0" ip saddr 10.8.0.0/24 tcp dport 22 accept
nft list chain inet filter input
Правило које именује тунелски интерфејс и опсег за управљање изражава намеру на једном месту. Упоредите га са правилом написаним за Wi-Fi мрежу, које не говори ништа о дешифрованом тунелском саобраћају. Када се два слоја не слажу, политика домаћина је она коју пакет среће.
Оставите пријаве и закрпе тачно тамо где јесу; достићи порт никада није било исто што и дозвола да га користите. Забележите породицу адреса и време за сваки непознат извор и истражите пре него што оптужите функцију или рањивост. Правило које пушта сваки чвор тунела је други дизајн од оног које пушта подмрежу за управљање, и ниједан ред дневника неће рећи које је било намењено.
Прихватите исправку са једним успехом и једним одбијањем
Докажите обе половине: једна одобрена веза успева и једна искључена путања се одбија. Одбијање је половина коју људи прескачу и управо она показује да правило ради, уместо да стоји поред дозвољавајуће подразумеване вредности. Тестирајте са искључене стране уместо да размишљате о томе.
Поновите пар после поновног повезивања, јер тунел који се врати са другим именом интерфејса може тихо да заобиђе правило ограничено на стари. Граница која је важна је она коју домаћин примењује на пакете које заиста прима.