fail2ban-da heç nə öz-özlüyündə paket atmır: o, bir əməliyyat çağırır və protokolu və portu adlandıran məhz həmin əməliyyatdır. Jail ban barədə məlumat verərkən daemon girişləri qəbul etməyə davam edirsə, ban adətən realdır və logun göstərdiyindən daha dardır. Digər transport üzərindən yenidən qoşulan müştəri quraşdırılmış qaydaya heç vaxt rast gəlmir. Hər hansı dəyişiklik etməzdən əvvəl əməliyyatın quraşdırdığını daemonun dinlədiyi ilə müqayisə edin, çünki sübut jail siyahısında deyil, əməliyyatın yazdığı firewall zəncirindədir.

Zənciri oxuyun, jail xülasəsini deyil

fail2ban öz zəncirini xidmət zəncirindən əvvəl yerləşdirir, buna görə sayğac siyahısı mövcud olanı dəqiq göstərir. Jail-in adını daşıyan və protokol sütununda udp yazılan bir qayda saxlayan zəncir, gəlməyə davam edən TCP girişləri üçün tam izahatdır. Yalnız bloklanmış mənbədən gələn UDP paketləri rədd edilir. Xidmətin TCP dinləyicisi var və o zəncirdə heç nə ona toxunmur.

Qonşu jail effektinə də diqqət yetirin. Bir host tamamilə düzgün konfiqurasiya edilmiş görünə bilər, sadəcə çatışmayan yarısını başqa bir jail təmin etdiyi üçün, və eyni qurulum həmin jail quraşdırılmayan yerdə heç nə etmir.

Əməliyyat bir protokol adlandırır və məhz burada pozulur

Hər banaction bir firewall əmr şablonudur və protokol onun yer tutucularından birindədir. Darlıq qəsdəndir, çünki veb jail ilə DNS jail-in eyni portları bloklamaqla heç bir işi yoxdur. Bu, xidmət birdən çox transport dinlədikdə tələyə çevrilir, VPN daemonları bunu adətən edir. Filtr hər iki transportdan uğursuz girişləri izləyə bilər, halbuki əməliyyat yalnız birini əhatə edir.

SoftEther və OpenVPN quraşdırmaları adətən eyni vaxtda UDP və TCP dinləyir və log sətri hər iki halda eyni göründüyü üçün filtr hər ikisini izləyir. Asimmetriya jail-in öz hesabatında heç vaxt görünmür. fail2ban uğursuzluqları düzgün saydı və sonra həmin uğursuzluqların gəldiyi trafikin yarısına tətbiq olunan qayda quraşdırdı.

Ban hər iki transportu əhatə etsin

Bunu jail tərifində düzəldin; əl ilə yazılmış qaydalar növbəti yenidən yükləmədə qarışdırılacaq. Hər protokol üçün bir olmaqla iki əməliyyatı açıq şəkildə yazın:

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"]

Bunu protocol = all ilə qısaltmağa çalışmayın. Standart banaction multiport əməliyyatıdır və -p <protocol> -m multiport --dports <port> kimi genişlənir; L4 protokolu olmadıqda port uyğunluğunun yoxlayacağı heç nə yoxdur, buna görə iptables qaydayı rədd edir, jail isə hələ də uğurlu ban bildirir. iptables-allports və ya nftables-allports kimi bütün portları əhatə edən əməliyyat bir girişi qəbul edir, lakin həmin mənbədə bütün portları bloklayır, bu fərqli qərardır və öz əsaslandırmasını tələb edir. protocol-u tcp və ya udp-də saxlayın və iki girişi qəbul edin.

Qaydanın mövcud olduğunu sübut edin, parametrə güvənməyin, çünki parametr niyyəti təsvir edir, ta ki bir zəncir onu saxlayana qədər:

iptables -S f2b-vpn-tcp
iptables -S f2b-vpn-udp

Hər zəncir bir qayda sadalamalıdır: birincisində -p tcp, ikincisində -p udp, hər ikisi bloklanmış ünvanı göstərməlidir. Sonra eyni ünvanın hər iki transportda rədd edildiyini təsdiqləyin. Zəncirdə görmədiyiniz ban bir ümiddir və eyni simptomun növbəti hesabatı yenə eyni saata başa gələcək.

Banın hələ də qaçırdığı şeylər və növbəti hal

Əməliyyatın etdiyi şey tək bir mənbəni rədd etməkdir və yalnız onun içində sadalanan portlarda. Ünvanları dəyişən hücumçuya qarşı heç nə etmir və düşmən maşını yüzlərlə istifadəçinin paylaşdığı carrier-grade NAT çıxışından ayıra bilmir; orada bir ban heç nə etməyən insanları kənarda qoyur. Filtrin müştərinin həqiqətən malik olduğu ünvanı oxuduğuna əmin olun, yönləndirilmiş başlığı və ya proxy ünvanını deyil. Pəncərəni kifayət qədər qısa saxlayın ki, səhv öz-özlüyündə bitsin.

Bunların heç biri protokol düzəlişini atlamağı müdafiə etmir; iki fikri eyni vaxtda saxlamağı müdafiə edir. Ban jail xülasəsinin göstərdiyindən daha dardır və hətta tam ban təhlükədən daha dardır. Firewall zəncirini daemonun dinləyici siyahısının yanına qoyun və protokol-protokol müqayisə edin, çünki banın xidmətə ümumiyyətlə çata biləcəyini bu iki siyahı həll edir.

Yenidən yükləmə əmrini və zəncir siyahısını jail-in yanındakı runbook-da saxlayın. Növbəti şəxs hər ikisinə ehtiyac duyacaq və jail xülasəsi ona heç birini deməyəcək.

Əlaqəli məqalələr