Тек VPN портуна жол берген брандмауэр бир эреже эмес. Бул бир эле порт номерине тиешелүү үч өзүнчө чечим: кирүү чынжыры жергиликтүү процесске эмне жете аларын аныктайт, багыттоо чынжыры туннелдин кардарларынын атынан хосттон эмне өтө аларын аныктайт, ал эми NAT таблицасы чыгууда булак дарегин кайра жазат. Бирин ката кылсаңыз, натыйжа сейрек таза тыныгуу болот. Кардарларды кабыл алган, бирок эч нерсе жүктөбөгөн хост аласыз, же бирөө чынжырлардын тартибин окуганга чейин жабык көрүнгөн хост аласыз.

Жабыла албаган жалгыз порт

VPN угуучусу сиз алдын ала биле албаган даректерден байланыштарды кабыл алышы керек, ошондуктан ал аныктама боюнча коомдук кызмат. Долбоор ушуга таянган жалгыз өзгөчөлүк: OpenVPN үчүн бир UDP порту, WireGuard үчүн бир UDP порту, SSL VPN үчүн бир TCP порту. Калганынын баары туннелдин артында, башкача айтканда колдонмо кызматтары бардык интерфейске эмес, туннелдин дарегине же loopback-ке байланышы керек.

Бирок байлоо — аткаруу эмес. 0.0.0.0-га байланган процесс эреже уруксат бергенде гана жеткиликтүү, ал эми демейки саясат эч бир эрежеге дал келбеген трафик үчүн камдык жол, портту башкарган эреже эмес. Drop-тун үстүнө коюлган accept дагы эле accept, ал эми кызматты коомдук даректен алыстоо — көз карандысыз жакшыртуу, чынжырдын ордун баспайт.

Кирүү, багыттоо жана NAT ар башка суроолорго жооп берет

Кирүү трафиги хосттун өзүнө арналган, ошондуктан VPN угуучусу жана административдик жол ошол жерде жашайт. Багыттоо трафиги хосттон өтөт, ал эми туннелдин кардарларына ал net.ipv4.ip_forward=1 менен бирге керек. Классикалык жарым бузулган конфигурация чыгуучу агымга жол берип, кайтуу багытын унутат, ошондуктан кардар кол алышууну бүтүрөт, анан эч нерсе жүктөлбөйт; орнотулган жана байланыштуу трафик үчүн conntrack эрежеси ошол багытты жабат.

NAT — үчүнчү суроо. postrouting-те кайра жазуу болбосо, багытталган пакеттер туннелдин жеке булагы менен чыгып, жогору жагында ташталат, анткени хосттон тышкаркы эч бир тармак пулду кайра багыттоону билбейт. Ошол эрежедеги булак префикси VPN пулуна туура келиши керек, хосттун өз дарегине эмес, жана кардарлардын ички тармагын атаган багыттоо эрежесине да ошондой тиешелүү.

IPv6 — экинчи саясат, кийинки ой эмес. Катуу IPv4 чынжыры жана ip6tables-де ачык саясаты бар хост эч нерсени жабкан жок; кызматтар экинчи үй-бүлө аркылуу дагы эле жеткиликтүү. Же эрежелер жыйнагын ip6tables менен көчүрүңүз, же коомдук интерфейсте IPv6-ны атайылап өчүрүңүз жана кайсынысын тандаганыңызды жазыңыз.

Бир окууда түшүнүлгөн негиз

Четке кагуудан баштаңыз, анан хостко керектүүнү гана кошуңуз. Адегенде loopback жана жооптор, анан административдик жол, анан туннелдин угуучусу, анан кардарлар үчүн багыттоо саясаты:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -p udp --dport 1194 -m conntrack --ctstate NEW -j ACCEPT
sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i tun0 -o eth0 -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Интерфейс аттары, порт жана пул — орун толтургучтар; аларды көчүрбөй серверден окуңуз. Натыйжаны сактоо аны жазуу канчалык маанилүү болсо, ошончолук маанилүү, анткени эсте гана жашаган эрежелер жыйнагы кийинки кайра жүктөөдө жок болуп, хостту үнсүз кайра ачат. Аны таркатуу механизми менен туруктуу кылып, машина күйбөй калган күн үчүн машинанын сыртында көчүрмө кармаңыз.

Хосттон ажырабай акыркы портту жабуу

Долбоордо бир тузак бар. Эгер SSH туннел аркылуу гана болсо, ийгиликсиз VPN кызматы SSH-ды да алып кетет, ал эми кайтуунун жалгыз жолу сиз эч качан ачпаган консол болушу мүмкүн. Акыркы коомдук портту жаппас мурда ошол консолдун бар экенин жана аны чындап колдоно аларыңызды ырастаңыз, же туннелге көз каранды эмес бир тар административдик жолду калтырыңыз: белгиленген даректен SSH, ачкычтар гана, сырсөз менен аутентификация өчүк.

Өзгөртүүнү буга чейин түзүлгөн сессиядан колдонуңуз, сиз чыпкалай турган байланыш аркылуу эмес. Ката түбөлүк болуп калбай, мөөнөтү бүтүшү үчүн кайтарууну пландаңыз, мисалы мурунку эрежелер жыйнагын калыбына келтирген systemd-run --on-active=10min тапшырмасы, жана биринчисин сынап жатканда экинчи SSH сессияны ачык кармаңыз. Анан кайтаруу тапшырмасы чындап иштеп баштаарын текшериңиз, анткени сыналбаган калыбына келтирүү калыбына келтирүүнүн жоктугу менен бирдей.

Скрипти эмес, жолду текшериңиз

Жүктөлгөн эрежелерди окуңуз, аларды жүктөшү керек болгон файлды эмес. Ыйгарым укуктуу тышкы хосттон көздөлгөн порттор гана жооп берерин ырастаңыз; туннелдин ичинен жарыялоону көздөгөн кызматтардын жеткиликтүү экенин ырастаңыз. Туннелдин трафигин да бөгөттөгөн демейки баш тартуу саясаты, бирөө аны колдонууга аракет кылганга чейин иштеп турган кулпуга окшош.

iptables -S
iptables -t nat -S
ss -lntup
ip -4 addr show

Уруксат берилген портту, кардарлар пулун, туннелдин интерфейсин, административдик булагын жана консол тартибин конфигурациянын жанына жазыңыз. Пулдагы же интерфейс атындагы кийинки өзгөртүү чыпкада да, NAT эрежесинде да дал келиши керек, болбосо хост эч ким байкабай жарым ачык абалга кайтат.

Бир адат эрежелер жыйнагынан кымбат: ар бир өзгөртүүдөн кийин багыттоо жолун кардардын сурамы менен, ал эми калыбына келтирүү жолун экинчи сессия менен далилдеңиз. Колдонбогон кулпу — бул жөн гана божомол.

Тектеш макалалар