Защо домашният 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 мрежата, което не казва нищо за декриптирания тунелен трафик. Когато двата слоя не са съгласни, политиката на хоста е тази, която пакетът среща.
Оставете влизанията и кръпките точно там, където са; достигането на порт никога не е било същото като позволението да го използвате. Запишете семейството на адресите и времето за всеки непознат източник и разследвайте, преди да обвините функция или уязвимост. Правило, което допуска всеки възел на тунела, е различен дизайн от това, което допуска подмрежа за управление, и нито един ред от дневника няма да каже кое е било предвидено.
Приемете поправката с един успех и един отказ
Докажете двете половини: една одобрена връзка успява и един изключен път се отказва. Отказът е половината, която хората пропускат, и именно тя показва, че правилото работи, вместо да стои до разрешаваща стойност по подразбиране. Тествайте от изключената страна, вместо да разсъждавате за нея.
Повторете двойката след повторно свързване, защото тунел, който се връща с друго име на интерфейса, може тихо да заобиколи правило, ограничено до стария. Границата, която има значение, е тази, която хостът прилага към пакети, които действително получава.