Ձեր OpenVPN սերվերի վրա մեկ հաճախորդ պետք է կորցնի LAN-ի հասանելիությունը, մինչ մյուս բոլոր թունելները մնում են աշխատող։ Եթե սա փնտրեք, լավագույն պատասխանը սովորաբար ասում է, որ դեմոնը չի կարող, ինչը կիսով չափ ճիշտ է. OpenVPN-ը չունի հաճախորդական firewall, բայց թունելը վերջացնող հոսթը արդեն զտում է փաթեթները։ Երկու որոշումներն են՝ ում ինքնությունը եք արգելափակում և կանոնի դիրքը։ Ճիշտ արեք երկուսն էլ, և փոփոխությունը կդառնա մեկ տող, որը կարող եք փորձարկել ու հեռացնել։

Կապեք հաճախորդին նախքան կանոնը գրելը

OpenVPN-ը թունելի հասցեներ վարձակալում է լողավազանից, այնպես որ 10.8.0.6-ը տեղ է, ոչ մարդ։ Երբ սեսիան ավարտվում է, վարձակալությունը վերադառնում է և կարող է տրվել հաջորդ միացմանը, այսինքն՝ այդ հասցեի դեմ գրված կանոնը հետևում է տեղին, ոչ օգտատիրոջը։ Ուստի նախ որոշեք, թե իրականում ինչ եք արգելափակում՝ հասցե կարճ փորձի համար, թե վկայագիր մեկի համար, ում ուզում եք դուրս պահել։

Հասցեն վկայագրին կապելու համար ստեղծեք ֆայլ client-config-dir-ով նշված պանակում և ֆայլին տվեք հենց վկայագրի common name-ը։ Դրա մեջ դրեք մեկ հրահանգ՝ ifconfig-push 10.8.0.6 255.255.255.0, և այդ հաճախորդը պահում է նույն թունելի հասցեն վերամիացումների ընթացքում։ Երկու կարգավորում պետք է լինի, որպեսզի սա ուժի մեջ լինի. client-config-dir-ը պետք է հայտարարված լինի սերվերի կազմաձևման մեջ, և ուղարկվող հասցեն պետք է լինի ենթացանցում, որը սերվերը կարող է երթուղավորել։ Եթե մեկը բացակայում է, ֆայլը անտեսվում է առանց սխալի, ինչը հաջորդ firewall-ի թեստը դարձնում է մոլորեցնող։

Ժամանակավոր արգելափակումը կարող է օգտագործել լողավազանի հասցե, եթե տոմսը գրանցում է, թե որ սեսիան էր այն պահում այդ պահին։

Կարգը որոշում է՝ գցումը կկատարվի՞

Linux-դարպասում, որը փոխանցում է թունելի և LAN-ի միջև, փաթեթներն անցնում են 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-ով կանոնը մտցնելուց հետո։ Եթե մի քանի վայրկյան համընկնումը ընդունելի է, գրանցեք այդ ընտրությունը՝ այն անուղղակի թողնելու փոխարեն։ Ամեն դեպքում, հաջորդ մարդը պետք է իմանա՝ կանոնը կանգնեցնո՞ւմ է կենդանի երթևեկությունը, թե միայն նոր միացումները։

Գործընկերների միջև երթևեկությունը երբեք չի դիպչում հոսթի firewall-ին։ Երբ client-to-client-ը միացված է, OpenVPN-ը այդ փաթեթները փոխանցում է դեմոնի ներսում, այնպես որ ոչ FORWARD-ը, ոչ INPUT-ը դրանք չեն տեսնում։ Միակ լուծումները client-to-client-ը անջատելն է կամ ընդունելը, որ գործընկերները կարող են հասնել միմյանց. iptables-ի կանոնը այդ երթևեկությունը չի տեսնի։

IPv6, firmware և վերագործարկումից հետո գոյատևում

IPv4 կանոնը ոչինչ չի ասում IPv6-ի մասին։ Եթե թունելը և LAN-ը կրում են երկու ընտանիքները, համարժեք կանոնը պետք է լինի ip6tables-ում, կամ nftables-ի կանոնների հավաքածուում, որը տիրապետում է այդ հոսթի քաղաքականությանը։ Երթուղիչի firmware-ը հաճախ թաքցնում է netfilter-ը իր իսկ վերացականության հետևում, այնպես որ ֆորումից պատճենված շարահյուսությունը և աղյուսակների անունները կարող են չկիրառվել։

OpenWrt-ում փաստաթղթավորված ուղին firewall-ի կազմաձևման գրառումն է, ոչ ձեռքով գրված iptables տող, և ձեռքով գրված տողը կարող է անհետանալ, երբ firewall-ը վերաբեռնվի։ Այլ տարածումներ կանոնները վերականգնում են netfilter-persistent-ի, boot միավորի կամ վաճառողի պահոցի միջոցով, և այդ մեխանիզմները փոխարինելի չեն։ Ապացուցեք ընտրվածը վերագործարկումով, որովհետև վերաբեռնումը այլ ուղի է վարժեցնում։

Ստուգեք ըստ ուղու, ապա մաքուր հետ շրջեք

Փորձարկեք յուրաքանչյուր ուղին առանձին, որովհետև մեկ հաջող ստուգումը թաքցնում է մյուսներին։ Արգելափակված հաճախորդը պետք է դեռ հասնի ինտերնետին թունելով, բայց ձախողվի LAN հոսթի դեմ, երկրորդ հաճախորդը պետք է հասնի նույն հոսթին, և դարպասի հասցեն ու գործընկերոջ ուղին յուրաքանչյուրը պետք է իր դիտարկումը։ Գրեք արդյունքները կանոնի կողքին, որպեսզի հաջորդ փոփոխությունն ունենա հիմք։ Ստորև աղյուսակը այն հավաքածուն է, որն արժե պահել տոմսում։

ՈւղիՍպասվող կանոնովԵրբ ձախողվում է
Արգելափակված հաճախորդ դեպի LAN հոսթՊատասխան չկաԿանոնը թույլտվությունից ներքև է, կամ աղբյուրը չի համապատասխանում
Արգելափակված հաճախորդ դեպի ինտերնետԱշխատում է tun0-ովԿանոնը չափազանց լայն է, առանց նպատակակետի համապատասխանության
Երկրորդ հաճախորդ նույն LAN հոսթԱշխատում էԿանոնը համապատասխանեց ավելիին, քան նախատեսված հոսթը
Արգելափակված հաճախորդ դեպի դարպասի LAN հասցեԱրգելափակված միայն համապատասխան INPUT կանոնովINPUT կանոնը բացակայում է
Արգելափակված հաճախորդ դեպի գործընկերոջ թունելի հասցեԴեռ աշխատում էclient-to-client-ը միացված է և firewall-ի շրջանակից դուրս

Հետ շրջելը ջնջում է ըստ ճշգրտման, ոչ flush. iptables -D FORWARD -i tun0 -s 10.8.0.6/32 -d 192.168.1.0/24 -j DROP-ը հեռացնում է հենց այդ գրառումը և շղթայի մնացած մասը թողնում անձեռնմխելի։ Հեռացրեք նույն տողը ցանկացած ֆայլից, որը վերականգնում է կանոնները boot-ին, վերաբեռնեք այն և հաստատեք, որ հաճախորդը նորից հասնում է LAN հոսթին։ FORWARD-ի flush-ը կչեղարկի նաև ձեր չգրած կանոնները, ինչը հետ շրջելը դարձնում է երկրորդ միջադեպ։

Տոմսը փակելուց առաջ հաստատեք երեք բան. ամրացված հասցեն համապատասխանում է վկայագրին, կանոնը թույլտվություններից վեր է և հաշվիչը զրո չէ, և պահպանման ֆայլը պարունակում է նույն կանոնը, որը փորձարկել եք։ Եթե դրանցից մեկը բացակայում է, արգելափակումը shell սեսիայի պատրանք է։

Առնչվող հոդվածներ