Դուք պատճենել եք OpenVPN jail-ը համայնքային գրառումից, վերագործարկել fail2ban-ը, և ոչ մի հասցե երբեք չի արգելափակվում։ Պատճառը գրեթե միշտ մատյանի ձևաչափն է՝ Access Server-ը չի գրում այն նույնականացման ձախողման տողերը, որոնք սպասում է ստանդարտ զտիչը։ Նախքան զտիչին դիպչելը, հաստատեք, որ գրառումները ընդհանրապես կան, որովհետև օրինաչափությունը չի կարող համապատասխանել այն բանին, ինչ ծառայությունը երբեք չի գրանցել։

Սա այն runbook-ն է, որին հետևում եմ Access Server հոսթում՝ հաստատել գրառման ձևը, գրել մեկ խարսխված արտահայտություն, փորձարկել այն իրական մատյանի վրա, ապա բաժանել jail-երը ըստ հարձակման ենթարկված մակերևույթի և ստուգել, որ արգելափակումը հասնում է firewall-ին։

Հաստատեք, որ ձախողման գրառումը գոյություն ունի

Access Server-ը գրում է իր կառուցվածքային տողերը /var/log/openvpnas.log-ում, և հաճախորդի հասցեն գտնվում է չակերտների մեջ դրված real_ip դաշտում, այլ ոչ թե syslog տողի սկզբում։ Որոնեք ձախողված մուտք, որը գիտեք, որ տեղի է ունեցել, նախքան որևէ օրինաչափություն գրելը՝

grep -i 'LOG ERR' /var/log/openvpnas.log | tail -20

Եթե ոչինչ չհայտնվի, հաջորդ կասկածյալը մատյանի մակարդակն է։ Access Server-ն ունի մատյանի տվյալների բազայի վրիպազերծման անջատիչ /usr/local/openvpn_as/etc/as.conf-ում (DEBUG_LOGDB=1), և ծառայությունը պետք է վերագործարկվի այն փոխելուց հետո։ Այդ անջատիչին վերաբերվեք որպես ախտորոշիչ կարգավորում, որը պետք է նորից իջեցնել, երբ ձեր օրինաչափությունը պատրաստ լինի, այլ ոչ թե որպես մշտական կոնֆիգուրացիա։

Մինչ դուք ֆայլում եք, նկատեք, թե որ մակերևույթներն են գրում դրա մեջ։ Հաճախորդի պորտալի, ադմինիստրատիվ ինտերֆեյսի և թունելի նույնականացման ձախողումները ընկնում են նույն ֆայլը տարբեր մարկերներով, և այդ մանրամասնությունը հետագայում որոշում է jail-երի դասավորությունը։

Խարսխեք մեկ զտիչ real_ip-ի վրա

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

# /etc/fail2ban/filter.d/openvpnaccess.local
[Definition]
failregex = ^ .*LOG ERR.*"real_ip": "<HOST>".*
ignoreregex =

Առաջատար բացատը դեկորատիվ չէ։ Access Server-ը խորացնում է իր գրառումները, և դրա վրա խարսխվելը թույլ չի տալիս օրինաչափությանը պահանջել նաև նույն ֆայլում անկապ ծառայությունների գրած տողերը։ Եթե ձեր գրառումները փոխարենը սկսվում են ժամանակի դրոշմով, համապատասխանեցրեք այդ նախածանցին, բայց խարսխվեք մի բանի վրա, որն իսկապես առկա է յուրաքանչյուր գրառման մեջ, որը մտադիր եք պահանջել։

Երբ ձեզ անհրաժեշտ է ճշգրտություն ըստ մակերևույթի, էլ ավելի նեղացրեք՝ պահանջելով մակերևույթի մարկերը (WEB_CLIENT, WEB_ADMIN կամ VPN) նույն տողում։ Երեք օրինաչափությամբ մեկ զտիչն ավելի հեշտ է ստուգել, քան երեք զտիչներ, որոնք տարբերվում են մեկ բառով։

Փորձարկեք արտահայտությունը նախքան jail-ը միացնելը

Երբեք չմիացնեք զտիչ, որը չեք գործարկել արտադրական մատյանի վրա։ Փաստաթղթավորված թեստը զտիչը երկու անգամ է անցկացնում՝ մեկ անգամ բեռնելու և մեկ անգամ կիրառելու համար, և բաց թողնված տողերի հաշվետվությունը հենց այն մասն է, որ արժե կարդալ՝

fail2ban-regex --print-all-missed /var/log/openvpnas.log \
  /etc/fail2ban/filter.d/openvpnaccess.local \
  /etc/fail2ban/filter.d/openvpnaccess.local > missed.txt

Համեմատեք համընկնումների քանակը առաջին քայլում հաստատած ձախողումների հետ։ Զրո համընկնումը նշանակում է, որ օրինաչափությունը սխալ է. համընկնումները տողերում, որոնք նույնականացման ձախողումներ չեն, նշանակում են, որ այն չափազանց լայն է։ Կարդացեք missed.txt-ը, մինչև կկարողանաք բացատրել յուրաքանչյուր տող, որը որոշել եք չպահանջել։

Այս թեստը կատարեք պատճենի վրա, եթե մատյանը մեծ է, և կրկնեք այն Access Server-ի ցանկացած արդիականացումից հետո։ Մատյանի ձևաչափը այն ինտերֆեյսն է, որի հետ համապատասխանեցնում եք, և այն կայուն API չէ։

Բաժանեք jail-երը ըստ մակերևույթի, ոչ ըստ դեմոնի

Մեկ Access Server-ը ներկայացնում է մի քանի նույնականացման մակերևույթներ՝ հաճախորդի և ադմինիստրատորի վեբ ինտերֆեյսներ 943/tcp-ում, և թունելը 1194/udp կամ 443/tcp-ում տեղակայումների մեծ մասում։ Բոլորին ծածկող մեկ jail-ը թույլ է տալիս թունելում գուշակման փորձերին արգելափակել հասցե, որը նաև ձեր ադմինիստրատիվ ուղին է, և թաքցնում է, թե որ մակերևույթն է իրականում հարձակման տակ։ Տվեք յուրաքանչյուր մակերևույթի իր jail-ը՝ իր պորտով և շեմերով՝

# /etc/fail2ban/jail.d/openvpnaccess.local
[openvpnas-web-client]
enabled  = true
port     = 943
protocol = tcp
filter   = openvpnaccess
logpath  = /var/log/openvpnas.log
maxretry = 3
findtime = 10m
bantime  = 1h
[openvpnas-tunnel]
enabled  = true
port     = 443
protocol = udp
filter   = openvpnaccess
logpath  = /var/log/openvpnas.log
maxretry = 5
findtime = 10m
bantime  = 1h

Սկսեք փոքր հաշվիչներով և կարճ արգելափակմամբ, ապա բարձրացրեք դրանք, երբ մեկ շաբաթ իրական երթևեկություն դիտեք։ Համօգտագործվող գրասենյակային հասցեի վրա առատաձեռն շեմը պատժում է մեկ NAT-ի հետևում գտնվող յուրաքանչյուր օգտվողի, իսկ թունելի մակերևույթի ագրեսիվ արգելափակումը անջատում է օրինական հաճախորդներին, որոնց պահված հավատարմագրերը գիշերվա ընթացքում ժամկետանց են դարձել։

Ստուգեք արգելափակումը, backend-ը և կողմնակի վնասը

Վերագործարկումից հետո կարգավիճակի ելքը ամենաարագ հաստատումն է, որ jail-ը գոյություն ունի և հաշվում է՝

fail2ban-client status
fail2ban-client status openvpnas-tunnel

Ապա հաստատեք, որ արգելափակումը հասնում է այն firewall-ին, որը դուք իրականում վարում եք, որովհետև backend-ի համար կարգավորված jail-ը, որը ոչ ոք չի կիրառում, ոչինչ չի պաշտպանում։ iptables գործողության դեպքում հասցեները հայտնվում են jail-ի անունով շղթայում (f2b-openvpnas-tunnel). nftables գործողության դեպքում դրանք ընկնում են fail2ban-ի սեփական աղյուսակի բազմության մեջ։ Ստուգեք այն, ինչ օգտագործում է ձեր հոսթը՝ ենթադրելու փոխարեն։

Երկու կողմնակի ստուգում ավելի կարևոր են, քան ինքը արգելափակումը։ Առաջին՝ հաստատեք, որ real_ip-ը հաճախորդի հասցեն է և ոչ բեռնվածքի հավասարակշռիչ կամ հակադարձ պրոքսի. պրոքսիի հետևում յուրաքանչյուր արգելափակում ընկնում է պրոքսիի վրա և իր հետ տանում ամբողջ ծառայությունը։ Երկրորդ՝ գրեք արգելափակումը հանելու ընթացակարգը, որովհետև 02:00-ին շեմը հատող հասցեն սովորաբար պատկանում է հերթապահ ինժեներին՝ fail2ban-client set openvpnas-tunnel unbanip 203.0.113.24։

Մտքում պահեք սահմանը կարգավորելիս։ Fail2ban-ը արագության սահմանափակիչ է մեկ նույնականացման մակերևույթի վրա, ոչ թե մուտքի վերահսկման շերտ։ Այն չի փոխարինում MFA-ին, հաշվի սահմանափակումներին կամ ադմինիստրատիվ ինտերֆեյսը հանրային ինտերնետից դուրս պահելուն, և Access Server-ն ունի իր autoban կարգավորումները, որոնք արժե ստուգել նախքան նույն պորտի վրա երկու արագության սահմանափակիչ դասավորելը։

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