Մեկ banaction, երկու տրանսպորտ՝ fail2ban-VPN-jail-ի վերանորոգում
Ban-ը լայն է այնքան, որքան իր գործողության արձանագրությունը։ Համեմատեք շղթայի հաշվիչները լսողների հետ, ապա ծածկեք երկու տրանսպորտներն էլ հենց jail-ում։
fail2ban-ում ոչինչ ինքնուրույն փաթեթ չի գցում՝ այն կանչում է գործողություն, և հենց այդ գործողությունն է անվանում արձանագրությունն ու պորտը։ Երբ jail-ը հաղորդում է ban-ի մասին, մինչ դեմոնը շարունակում է ընդունել մուտքերը, ban-ը սովորաբար իրական է և ավելի նեղ, քան ենթադրում է լոգը։ Այն հաճախորդը, որը վերամիանում է մյուս տրանսպորտով, երբեք չի հանդիպում տեղադրված կանոնին։ Նախքան որևէ բան փոխելը համեմատեք, թե գործողությունն ինչ է տեղադրել և թե դեմոնն ինչի է լսում, քանի որ ապացույցը գտնվում է այն հրդեպատի շղթայում, որը գրել է գործողությունը, ոչ թե jail-ի ցանկում։
Կարդացեք շղթան, ոչ թե jail-ի ամփոփումը
fail2ban-ը իր շղթան մտցնում է ծառայության շղթայից առաջ, ուստի հաշվիչների ցանկը ցույց է տալիս ճիշտ այն, ինչ գոյություն ունի։ Jail-ի անունով շղթան, որն ունի մեկ կանոն, և որի արձանագրության սյունակը ցույց է տալիս udp, լրիվ բացատրություն է շարունակ ժամանող TCP մուտքերի համար։ Մերժվում են միայն արգելված աղբյուրի UDP փաթեթները։ Ծառայությունն ունի TCP լսող, և այդ շղթայում ոչինչ չի դիպչում նրան։
Ուշադրություն դարձրեք նաև հարևան jail-ի էֆեկտին։ Մեկ հոսթը կարող է կատարյալ կարգավորված թվալ միայն այն պատճառով, որ մեկ այլ jail ապահովում է բացակայող կեսը, և նույն բիլդը ոչինչ չի անում այնտեղ, որտեղ այդ jail-ը տեղադրված չէ։
Գործողությունն անվանում է մեկ արձանագրություն, և հենց այնտեղ է կոտրվում
Յուրաքանչյուր banaction հրդեպատի հրամանի ձևանմուշ է, և արձանագրությունը գտնվում է նրա տեղապահներից մեկում։ Նեղությունը միտումնավոր է, քանի որ վեբ jail-ը և DNS jail-ը ոչ մի կապ չունեն նույնական պորտերը արգելափակելու հետ։ Այն դառնում է ծուղակ, երբ ծառայությունը լսում է մեկից ավելի տրանսպորտի, ինչը VPN դեմոնները սովորաբար անում են։ Զտիչը կարող է հետևել երկու տրանսպորտների ձախողված մուտքերին, մինչ գործողությունը ծածկում է մեկը։
SoftEther-ի և OpenVPN-ի տեղակայումները սովորաբար լսում են UDP-ին և TCP-ին միաժամանակ, և քանի որ լոգի տողը երկու դեպքում էլ նույնն է թվում, զտիչը հետևում է երկուսին։ Ասիմետրիան երբեք չի երևում հենց jail-ի հաշվետվության մեջ։ fail2ban-ը ճիշտ հաշվեց ձախողումները, ապա տեղադրեց կանոն, որը վերաբերում է այն երթևեկության կեսին, որով եկել էին այդ ձախողումները։
Թող ban-ը ծածկի երկու տրանսպորտներն էլ
Փոխարենը ուղղեք դա jail-ի սահմանման մեջ, քանի որ ձեռքով գրված կանոնները կխառնվեն հաջորդ վերաբեռնման ժամանակ։ Գրեք երկու գործողություն՝ մեկը յուրաքանչյուր արձանագրության համար:
action = %(banaction)s[name=%(__name__)s-tcp, actionname=%(__name__)s-tcp, protocol="tcp", port="%(port)s", chain="%(chain)s"]
%(banaction)s[name=%(__name__)s-udp, actionname=%(__name__)s-udp, protocol="udp", port="%(port)s", chain="%(chain)s"]
Մի՛ փորձեք կրճատել դա protocol = all-ով։ Լռելյայն banaction-ը multiport գործողություն է, և այն ընդարձակվում է -p <protocol> -m multiport --dports <port>-ի՝ քանի որ L4 արձանագրություն չկա, պորտի համընկնմանը փորձելու բան չկա, ուստի iptables-ը մերժում է կանոնը, մինչ jail-ը դեռ հաղորդում է հաջող ban։ Բոլոր պորտերի գործողությունը, ինչպիսին է iptables-allports-ը կամ nftables-allports-ը, ընդունում է մեկ գրառում, բայց արգելափակում է այդ աղբյուրի բոլոր պորտերը, ինչը այլ որոշում է և պահանջում է իր սեփական հիմնավորումը։ Թողեք protocol-ը tcp-ի կամ udp-ի վրա և ընդունեք երկու գրառումները։
Ապացուցեք, որ կանոնը գոյություն ունի, փոխանակ վստահեք կարգավորմանը, քանի որ կարգավորումը նկարագրում է մտադրություն, մինչև շղթան պահի այն:
iptables -S f2b-vpn-tcp
iptables -S f2b-vpn-udp
Յուրաքանչյուր շղթա պետք է թվարկի մեկ կանոն՝ -p tcp-ը առաջինում և -p udp-ը երկրորդում, և երկուսն էլ անվանում են արգելափակված հասցեն։ Ապա հաստատեք, որ նույն հասցեն մերժվում է երկու տրանսպորտներում։ Ban-ը, որը չեք տեսել շղթայում, հույս է, և նույն ախտանշի մասին հաջորդ հաղորդումը նորից կարժենա նույն ժամը։
Ինչ դեռ բաց է թողնում ban-ը, և հաջորդ դեպքը
Գործողությունն անում է մեկ բան՝ մերժում է մեկ աղբյուր, և միայն դրա մեջ թվարկված պորտերում։ Այն ոչինչ չի անում հասցեները փոխող հարձակվողի դեմ, և չի կարող առանձնացնել թշնամական մեքենան օպերատորի մակարդակի NAT ելքից, որը կիսում են հարյուրավոր օգտատերեր, որտեղ մեկ ban-ը դուրս է թողնում մարդկանց, ովքեր ոչինչ չեն արել։ Համոզվեք, որ զտիչը կարդում է այն հասցեն, որն իրականում ունի հաճախորդը, և ոչ փոխանցված վերնագիր կամ վստահված սերվերի հասցե։ Պահեք պատուհանը բավական կարճ, որպեսզի սխալն ինքն իրեն սպառվի։
Այս ամենից ոչինչ չի պնդում բաց թողնել արձանագրության ուղղումը, այլ պնդում է երկու միտք պահել միաժամանակ։ Ban-ը ավելի նեղ է, քան ենթադրում է jail-ի ամփոփումը, և նույնիսկ ամբողջական ban-ը ավելի նեղ է, քան սպառնալիքը։ Դրեք հրդեպատի շղթան դեմոնի լսողների ցանկի կողքին և համեմատեք արձանագրություն առ արձանագրություն, քանի որ այդ երկու ցանկերն են որոշում՝ ban-ը կարո՞ղ է ընդհանրապես հասնել ծառայությանը։
Պահեք վերաբեռնման հրամանը և շղթաների ցանկը runbook-ում՝ jail-ի կողքին։ Հաջորդ մարդուն երկուսն էլ պետք կգան, և jail-ի ամփոփումը ոչ մեկը չի ասի նրան։