Сиздин OpenVPN сервериңиздеги бир кардар LANга кирүү мүмкүнчүлүгүн жоготушу керек, калган туннелдер иштеп турушу керек. Муну издесеңиз, эң мыкты жооп көбүнчө демон муну кыла албайт дейт, бул жарым гана туура: OpenVPNде ар бир кардар үчүн брандмауэр жок, бирок туннелди бүтүргөн хост пакеттерди эчак эле чыпкалайт. Маанилүү эки чечим — бөлө турган инсан жана эреженин орду. Ушул экөөнү туура кылсаңыз, өзгөртүү текшерүүгө жана жокко чыгарууга боло турган бир сапка айланат.

Эрежени жазганга чейин кардарды бекитиңиз

OpenVPN туннель даректерин бассейнден ижарага берет, ошондуктан 10.8.0.6 — адам эмес, орун. Сессия бүткөндө ижара кайтат жана кийинки туташууга берилиши мүмкүн, башкача айтканда ошол дарекке каршы жазылган эреже орунду ээрчийт, колдонуучуну эмес. Ошондуктан адегенде эмнени чындап бөлө турганыңызды чечиңиз: кыска тажрыйба үчүн дарекпи, же сыртта кармагыңыз келген адамдын сертификатыбы.

Даректи сертификатка байлоо үчүн client-config-dir көрсөткөн каталогдо файл түзүп, файлга сертификаттын common name маанисин так ошондой бериңиз. Ичине бир директива коюңуз, ifconfig-push 10.8.0.6 255.255.255.0, ошондо ал кардар кайра туташканда да ошол эле туннель дарегин сактайт. Бул күчүнө кириши үчүн эки параметр болушу керек: client-config-dir сервер конфигурациясында жарыяланышы керек, ал эми жиберилүүчү дарек сервер маршруттай алган ички тармакта болушу керек. Бирөө жетпесе, файл катасыз эске алынбайт, бул кийинки брандмауэр сынагын адаштырат.

Убактылуу бөлүү бассейндин дарегин колдонсо болот, эгер билет ошол учурда кайсы сессия кармаганын жазса.

Тартип таштоонун аткарылышын чечет

Туннель менен LANдын ортосунда багыттоочу Linux дарбазасында пакеттер FORWARD тизмегинен өтөт. Төмөнкү буйрукту сүйлөм катары окуңуз: FORWARD башына киргизиңиз, tun0дөн кирген, ошол бир хосттон келген, LAN ички тармагына багытталган трафикти дал келтирип, таштаңыз.

iptables -I FORWARD -i tun0 -s 10.8.0.6/32 -d 192.168.1.0/24 -j DROP

-I эрежени иштетет. -A менен кошсоңуз, ал туннелдин ички тармагы үчүн каалаган кең уруксаттын астына түшөт жана эч качан пакет көрбөйт. Ордун iptables -vnL FORWARD --line-numbers менен текшериңиз жана эсептегичтерди да окуңуз: жогорудагы таштоо эч нерсе санабаса, трафик башка жол менен келет.

Дарбазанын өз LAN дареги — башка жол. Кутуга эле жиберилген пакеттер INPUT тизмегине кетет, FORWARD эмес, ошондуктан кардар LAN хостун жоготуп, баары бир маршрутизатордун админ баракчасын ача алат. Бул маанилүү болгондо дал келген INPUT эрежесин кошуңуз.

Чыпка көрө албаган нерселер

Чыпкоо пакет бааланганда жүрөт, ошондуктан орнотулган TCP сессиясы жабылганга же кайра коюлганга чейин уланышы мүмкүн. Бөлүү дароо таасир этүүсү керек болсо, эреже киргизилгенден кийин ошол булак үчүн көзөмөлдөнгөн агымдарды conntrack -D -s 10.8.0.6 менен тазалаңыз. Бир нече секунд кабатташуу кабыл алынса, бул тандоону жашыруун калтырбай жазып коюңуз. Кандай болбосун, кийинки адам эреже тирүү трафикти токтотообу, же жаңы туташууларды ганабы билиши керек.

Теңдештердин ортосундагы трафик хосттун брандмауэрине эч качан тийбейт. client-to-client күйгүзүлгөндө OpenVPN бул пакеттерди демондун ичинде жиберет, ошондуктан аларды FORWARD да, INPUT да көрбөйт. Жалгыз чечим — client-to-clientти өчүрүү же теңдештер бири-бирине жете аларын кабыл алуу; iptables эрежеси бул трафикти көрбөйт.

IPv6, микропрограмма жана кайра жүктөөдөн кийинки туруктуулук

IPv4 эрежеси IPv6 жөнүндө эч нерсе айтпайт. Туннель менен LAN эки үй-бүлөнү тең алып жүрсө, барабар эреже ip6tables ичинде же ошол хостто саясатка ээ nftables эрежелер жыйындысында болушу керек. Маршрутизатордун микропрограммасы netfilterди көбүнчө өзүнүн абстракциясынын артына жашырат, ошондуктан форумдан көчүрүлгөн синтаксис жана таблица аттары жараксыз болушу мүмкүн.

OpenWrtте документтелген жол — брандмауэр конфигурациясынын жазуусу, кол менен жазылган iptables сабы эмес, ал эми кол менен жазылган сап брандмауэр кайра жүктөлгөндө жоголушу мүмкүн. Башка дистрибутивдер эрежелерди netfilter-persistent, жүктөө бирдиги же өндүрүүчүнүн кампасы аркылуу калыбына келтирет, бул механизмдер бири-бирин алмаштырбайт. Тандаганыңызды кайра жүктөө менен далилдеңиз, анткени кайра жүктөө башка жолду машыктырат.

Жол боюнча текшерип, анан таза кайтарыңыз

Ар бир жолду өзүнчө сынаңыз, анткени бир ийгиликтүү текшерүү калгандарын жашырат. Бөлүнгөн кардар туннель аркылуу интернетке жете бериши керек, бирок LAN хостко каршы ийгиликсиз болушу керек, экинчи кардар ошол эле хостко жетиши керек, ал эми дарбазанын дареги менен теңдеш жолунун ар бирине өзүнчө байкоо керек. Жыйынтыктарды эреженин жанына жазыңыз, кийинки өзгөртүүгө негиз болот. Төмөнкү таблица билетте калтырууга татыктуу жыйынды.

ЖолЭреже менен күтүлгөнИйгиликсиз болгондо
Бөлүнгөн кардардан LAN хосткоЖооп жокЭреже уруксаттын астында, же булак дал келбейт
Бөлүнгөн кардардан интернеткеtun0 аркылуу иштейтЭреже өтө кенен, максат дал келүүсү жок
Экинчи кардар ошол эле LAN хосткоИштейтЭреже көздөлгөн хосттон көбүрөөк дал келди
Бөлүнгөн кардардан дарбазанын LAN дарегинеДал келген INPUT эрежеси менен гана бөлүнөтINPUT эрежеси жок
Бөлүнгөн кардардан теңдештин туннель дарегинеДагы эле иштейтclient-to-client күйгүзүлгөн жана брандмауэрдин чегинен тышкары

Кайтаруу — спецификация боюнча жок кылуу, flush эмес: iptables -D FORWARD -i tun0 -s 10.8.0.6/32 -d 192.168.1.0/24 -j DROP так ошол жазууну алып салат жана тизмектин калганын бузулбаган бойдон калтырат. Ошол эле сапты жүктөөдө эрежелерди калыбына келтирген каалаган файлдан алып салыңыз, аны кайра жүктөңүз жана кардардын LAN хостко кайра жетерин ырастаңыз. FORWARD тизмегин flush кылуу өзүңүз жазбаган эрежелерди да жокко чыгарат, бул кайтарууну экинчи окуяга айландырат.

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

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