iptables. թույլ տալ VPN հաճախորդներին հասնել միայն մեկ հոսթի
Ձեզ անհրաժեշտ կանոնը FORWARD-ում է, ոչ INPUT-ում։ Թույլատրեք մեկ նպատակակետ VPN լողավազանի համար, մերժեք մնացածը, ապա ապացուցեք հաշվիչներով և հետադարձ հրամանով։
Անկապ թվացող երկու աջակցության տոմսեր իրականում մեկ պատճառ ունեն։ Առաջինում ադմինիստրատորը ցանկանում է, որ սերվերը կապեր ընդունի միայն թունելից, երկրորդում՝ VPN օգտատերերը պետք է հասնեն մեկ ներքին հոսթի և ոչ ավելին։ Երկու քաղաքականություններն էլ պատկանում են FORWARD-ին, և երկուսն էլ սովորաբար փորձարկվում են INPUT-ում։ Արդյունքը նման է firewall-ի, բայց իրեն պահում է որպես տեղապահ։
Որ շղթան է պատասխանում ձեր հարցին
Փաթեթները, որոնք VPN հաճախորդը ուղարկում է LAN-ի հոսթին կամ այնուհետև ինտերնետ, միջուկը փոխանցում է և դրանք գնահատվում են FORWARD-ում։ INPUT-ը և OUTPUT-ը տեսնում են միայն այն տրաֆիկը, որը ավարտվում է սերվերի վրա կամ սկիզբ է առնում նրանից։ Ուստի tun0-ից չեկած ամեն ինչ մերժելը պաշտպանում է սերվերի սեփական լսողներին, և դա նաև կավարտի ձեր SSH սեսիան, եթե նախ չթույլատրվեն հաստատված հոսքերը։ Դա ոչինչ չի փոխում այն հարցում, թե ուր կարող են գնալ հաճախորդները։
Նախ անվանեք հարցը՝ ով կարող է հասնել սերվերին, կամ ուր կարող են գնալ հաճախորդները։ Ցանցերի մեծ մասին պետք են երկու պատասխանները՝ տարբեր շղթաներում։
Նախ վիճակը, ապա թույլտվությունը, ապա մերժումը
Թույլատրելիների ցանկը աշխատում է միայն այն դեպքում, երբ կոնկրետ թույլտվությունը գտնվում է ընդհանուր մերժումից վեր, և երբ վերադարձի տրաֆիկը թույլատրվում է երկուսից վեր։ Տեղադրեք կանոնները հստակ դիրքերում, ապա արտածեք շղթան iptables -S FORWARD-ով, որպեսզի հերթականությունը տեսանելի լինի, ոչ թե ենթադրված։
POOL=10.99.0.0/24
iptables -I FORWARD 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -I FORWARD 2 -s "$POOL" -d 172.31.20.15 -p tcp -m multiport --dports 443,3389 -j ACCEPT
iptables -I FORWARD 3 -s "$POOL" -j REJECTԵրկու մանրամասն է որոշում՝ դիմանա՞ այս ամենը իրական տրաֆիկի հետ շփմանը։ Առանց վիճակի կանոնի՝ ձեր նոր թույլատրած կապերի պատասխանները իրենք են գնահատվում մերժման դեմ և դեն նետվում։ Առանց սահմանափակման LOG կանոնը կարող է լցնել փոքր բաժինը առաջին սկանավորման ժամանակ, ուստի ավելացրեք -m limit --limit 10/min նախքան գրանցումը շարունակելը։ REJECT-ը անմիջապես սխալ է վերադարձնում, ինչը ցուցակը կարգավորելիս ավելի ընկերական է՝ DROP-ը լուռ դեն է նետում, ուստի ամեն սխալ երևում է որպես ժամանակի սպառում։ Ընտրեք մեկը դիտավորյալ և գրեք ընտրությունը փոփոխության գրառման մեջ։
Փոխանցումը և NAT-ը պետք է արդեն աշխատեն
Զտումը չի կարող ապացուցել, որ ուղի գոյություն ունի։ Նախ հաստատեք, որ միջուկն ընդհանրապես փոխանցում է, և այդ կարգավորումը դարձրեք մշտական, ոչ թե shell-ի մեկանգամյա հրաման։ Զտիչը վերջին շերտն է, ոչ առաջինը։
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s "$POOL" -o eth0 -j MASQUERADEԹե որտեղ է տեղը քողարկմանը, կախված է նրանից, թե որտեղից են դուրս գալիս հաճախորդները։ Եթե նրանք թունելով դուրս են գալիս հեռավոր ցանց, NAT կանոնը դրվում է այդ ինտերֆեյսի վրա, ոչ թե WAN ինտերֆեյսի։ Ապա դիտեք հաշվիչները՝ եթե POSTROUTING հաշվիչը երբեք չի շարժվում, մինչ FORWARD-ի թույլտվությունների թիվը աճում է, ապա վերադարձի ուղին կոտրված է, իսկ զտիչը՝ կարգին։ Այդ ընթերցումը խնայում է կես օր այն կանոնները վերաշարադրելուց, որոնք երբեք խնդիր չեն եղել։
Փոստի արգելափակումը մեկ շղթա այն կողմ է
INPUT-ում 25 պորտը արգելափակելը կանգնեցնում է միայն VPN սերվերին հասցեագրված փոստը։ Թունելով փոստ ուղարկող վարակված հաճախորդը փոխանցվում է, ուստի արգելափակումը պետք է նստի FORWARD-ում՝ 465-ի և 587-ի կողքին։ Եթե մեկ հավելված օրինավոր կերպով փոխանցում է փոստը, դրեք նրա նպատակակետը և պորտը այդ կանոնից վեր։
iptables -I FORWARD 2 -s "$POOL" -p tcp -m multiport --dports 25,465,587 -j REJECTԹողեք մերժումների հաշվիչը մեկ շաբաթ աշխատի, նախքան այլ բան խստացնելը։ Այն թիվը, որը դադարում է աճել, հենց այն օրինավոր հոսքն է, որը դուք նոր կոտրեցիք։
Կարդացեք այն հետ, ապա ապացուցեք հաճախորդից
Կարդացեք կանոնների հավաքածուն այնպես, ինչպես միջուկը հաղորդում է, ոչ այնպես, ինչպես ձեր սկրիպտը գրել է։ Սկսեք iptables -S FORWARD-ով, ապա NAT աղյուսակը iptables -t nat -L POSTROUTING -n -v-ով, ապա ձեր ստուգվող հոսքի conntrack գրառումը։ Պահեք հետադարձ հրաման կամ պլանավորված մաքրում, քանի դեռ աշխատանքը տևում է։ Ամեն կանչ պահանջում է -w, այլապես երկու ադմինիստրատոր կբախվեն xtables-ի կողպեքին։ Դրանցից ոչ մեկը կամընտրական չէ փոփոխության պատուհանում։
Ավարտեք՝ փորձարկելով լողավազանի ներսում գտնվող հաճախորդից և դրսում գտնվողից։ Կանոնը, որ աշխատում է միայն այն մեքենայից, որտեղ դուք մուտքագրել եք այն, քաղաքականություն չէ։