Эки долбоор бир нерсени убада кылат: туннел кулаганда, эч нерсе ачык түрдө сыртка чыкпайт. Бирөө жабуу учурунда скрипт иштетип, интерфейстерди кесип салат. Экинчиси firewall эрежесин күчүндө калтырат жана VPN кардарынан эч нерсе талап кылбайт. Алар аракет кылуу укугу кимде экени, боштук учурунда эмне болору жана андан кийин машина кантип кайра желеге кошулары менен айырмаланат. Аларды ушул үч пункт боюнча салыштыруу кайсынысы катуураак деп талкуулоодон пайдалуу.

Бир иш, эки механизм

Профиль скрипт аткарууга уруксат берсе, кардар туннел көтөрүлгөндө жана жабылганда илгичтерди иштете алат. Ал илгич кардардын жашоо циклинин ичинде, байланыш жабылып жаткан так ошол учурда иштейт. Ал эми firewall эрежеси системага таандык жана кардар иштеп жатабы, куладыбы же өлтүрүлдүбү — ага баары бир.

PropertyTeardown scriptFirewall unit
Runs when the client is killedNoYes
Needs privilege at teardown timeUsually yesConfigured once, at boot
Acts on the whole machineOften, including recovery pathsOnly on the flows it matches

Ошол таблица — бүт далил. Жөнөкөй жабылууда гана иштеген скрипт сизди эң аз тынчсыздандырган учурду камтыйт; маанилүү учур — кулоо же тармактын жоголушу, жана экөө тең таза жабуу бербейт.

Жабуу илгичи эмне кыла алат жана эмне кыла албайт

Документтелген үлгү тармак интерфейстерин аралап, loopback-тан башкасын түшүрөт. Физикалык түзмөк түшүрүлгөндө туннелден сыртка эч нерсе кача албайт, так ушул көздөлгөн.

#!/bin/sh
for dev in /sys/class/net/*; do
  name=$(basename "$dev")
  [ "$name" = lo ] || ip link set dev "$name" down
done

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

Илгичке ишенүүдөн мурун кардардын кантип иштетилерин текшериңиз. root катары кол менен иштеткенде иштеген скрипт жүктөөдө башталган кызмат жөнүндө эч нерсе далилдебейт.

Firewall эрежеси эмнени башкача кылат

Тек туннел трафигине уруксат берген эреже кардардын процесси жок болгондо да иштей берет, анткени өзөк ал процесске көз каранды эмес. Эреже тарыраак да: дал келген агымдарды тосуп, loopback, жергиликтүү ички тармак жана калыбына келтирүү жолун тынч калтырат, ошондуктан машинаны туңгуюкка калтырбайт.

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

Эки механизмдин экөө тең экинчисин ашыкча кылбайт. Оңдоодон кийин эч качан кайра жүктөлбөгөн firewall эрежеси эч качан иштебеген скрипт сыяктуу эле ойдон чыгарылган.

persist-tun боштук бар-жогун чечет

Туннел түзмөгү ажыроодон аман өтсө, ага көздөгөн маршруттар да аман калат. Ошондо трафик кайра багытталбай ташталат, ошондуктан демейки маршрут физикалык шлюзге кайра түшпөйт. Так ушул жүрүм-турум кандайдыр бир firewall эрежеси кийлигишпестен эле агымды ыктымалсыз кылат.

Бул параметрсиз түзмөк маршруттар менен кошо жок кылынат жана демейки маршрут кайра физикалык шлюзге көрсөтүшү мүмкүн. Ошондой болобу — платформа менен кардарга байланыштуу, ошондуктан абалды болжолдобой байкоо керек. Параметрди kill switchтин бөлүгү деп караңыз, өндүрүмдүүлүк опциясы деп эмес.

Кайра кошулуу жолун тирүү кармаңыз, анан төрт абалды текшериңиз

Катуу тосуу кардардын кайра кошулушуна да тоскоол болушу мүмкүн, анткени кардарга дагы эле физикалык шлюз аркылуу серверге маршрут керек, ал эми калганынын баары тыюу салынган. Туннел көтөрүлүүдөн мурун ошол бир дарекке хост маршрутун орнотуңуз жана адегенде аталышты чечиңиз, анткени керек болгондо DNS тосулган болушу мүмкүн.

ip route add 198.51.100.20/32 via 192.168.0.1 dev wlan0

Анан белгини эмес, абалдарды текшериңиз. Төрт учурду атайын баштан өткөрүңүз: туннелсиз муздак баштоо, соо сессия, эч ким сурабаган үзгүлтүк жана калыбына келгенден кийинки сессия. Ар бир учурда демейки маршрутту окуп, чыгуу дареги көрүнгөн бир сурам жөнөтүңүз. Туннел түшүрүлгөндө баш тарткан колдонмо почта кардары же жаңырткыч жөнүндө эч нерсе айтпайды, ошондуктан акыркы текшерүүнү бир фондук колдонмо менен кайталаңыз. Эрежени, интерфейс аттарын жана калыбына келтирүү кадамдарын жазып коюңуз, анткени эч ким текшере албаган kill switch — ушак.

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