Filtër Fail2ban për OpenVPN Access Server: real_ip dhe jail
Access Server shkruan formatin e vet të regjistrit, kështu që filtrat standardë nuk gjejnë asgjë. Ankorohuni në real_ip, ndani jail sipas sipërfaqes dhe kontrolloni që adresa nuk është proxy.
Keni kopjuar një OpenVPN jail nga një postim i komunitetit, rinisët fail2ban dhe asnjë adresë nuk bllokohet kurrë. Shkaku është pothuajse gjithmonë formati i regjistrit: Access Server nuk shkruan rreshtat e dështimit të autentikimit që pret një filtër standard. Para se të prekni filtrin, konfirmoni që regjistrimet ekzistojnë fare, sepse një model nuk mund të përputhet me atë që shërbimi nuk e ka regjistruar kurrë.
Kjo është procedura që ndjek në një host Access Server: konfirmo formën e regjistrimit, shkruaj një shprehje të ankoruar, testoje kundër regjistrit real, pastaj ndaj jail sipas sipërfaqes që sulmohet dhe verifiko që bllokimi arrin te firewali.
Konfirmoni që regjistrimi i dështimit ekziston
Access Server shkruan rreshtat e tij të strukturuar në /var/log/openvpnas.log, dhe adresa e klientit ndodhet në një fushë real_ip brenda thonjëzave, jo në fillim të një rreshti syslog. Para se të shkruani çdo model, kërkoni një hyrje të dështuar që e dini se ka ndodhur:
grep -i 'LOG ERR' /var/log/openvpnas.log | tail -20Nëse nuk shfaqet asgjë, niveli i regjistrit është i dyshuari tjetër. Access Server ka një çelës korrigjimi për bazën e të dhënave të regjistrit në /usr/local/openvpn_as/etc/as.conf (DEBUG_LOGDB=1), dhe shërbimi duhet rinisur pasi ta ndryshoni. Trajtojeni atë çelës si një cilësim diagnostik që duhet ulur përsëri kur të keni modelin tuaj, jo si një konfigurim të përhershëm.
Ndërsa jeni në skedar, vini re cilat sipërfaqe shkruajnë në të. Dështimet e portalit të klientit, të ndërfaqes së administrimit dhe të autentikimit të tunelit përfundojnë në të njëjtin skedar me shënues të ndryshëm, dhe ai detaj përcakton më vonë planin e jail.
Ankoroni një filtër në real_ip
Mbajeni shprehjen të ngushtë. Një filtër që pretendon çdo rresht me një adresë IP do të bllokojë njerëz për shkëputje të zakonshme, dhe në një server të zënë simptomi i vetëm është që përdoruesit ankohen se u bllokuan sepse mbyllën një laptop. Pretendoni regjistrimin e gabimit dhe kapni adresën brenda thonjëzave:
# /etc/fail2ban/filter.d/openvpnaccess.local
[Definition]
failregex = ^ .*LOG ERR.*"real_ip": "<HOST>".*
ignoreregex =Hapësira e fillimit nuk është kozmetikë. Access Server i fut regjistrimet e tij brenda, dhe ankorimi mbi të pengon modelin të pretendojë edhe rreshta që shërbime të palidhura shkruajnë në të njëjtin skedar. Nëse regjistrimet tuaja mbajnë përkundrazi një vulë kohe në fillim, përputhni atë prefiks, por ankorohuni në diçka që është vërtet e pranishme në çdo regjistrim që synoni të pretendoni.
Kur keni nevojë për saktësi sipas sipërfaqes, ngushtojeni më tej duke kërkuar shënuesin e sipërfaqes (WEB_CLIENT, WEB_ADMIN ose VPN) në të njëjtin rresht. Një filtër me tre modele është më i lehtë për t'u audituar sesa tre filtra që ndryshojnë me një fjalë.
Testoni shprehjen përpara se të aktivizoni një jail
Mos aktivizoni kurrë një filtër që nuk e keni ekzekutuar kundër regjistrit të prodhimit. Testi i dokumentuar e kalon filtrin dy herë, një herë për ngarkim dhe një herë për zbatim, dhe raporti i rreshtave të humbur është pjesa që ia vlen të lexohet:
fail2ban-regex --print-all-missed /var/log/openvpnas.log \
/etc/fail2ban/filter.d/openvpnaccess.local \
/etc/fail2ban/filter.d/openvpnaccess.local > missed.txtKrahasoni numrin e përputhjeve me dështimet që verifikuat në hapin e parë. Zero përputhje do të thotë që modeli është i gabuar; përputhjet në rreshta që nuk janë dështime autentikimi do të thotë se është shumë i gjerë. Lexoni missed.txt derisa të mund të shpjegoni çdo rresht që zgjodhët të mos e pretendoni.
Bëni këtë test në një kopje nëse regjistri është i madh, dhe përsëriteni pas çdo përmirësimi të Access Server. Formati i regjistrit është ndërfaqja me të cilën përputheni, dhe nuk është një API e qëndrueshme.
Ndani jail sipas sipërfaqes, jo sipas demonit
Një Access Server paraqet disa sipërfaqe autentikimi: ndërfaqe web të klientit dhe të administrimit në 943/tcp, dhe tunelin në 1194/udp ose 443/tcp në shumicën e vendosjeve. Një jail i vetëm që i mbulon të gjitha lejon përpjekjet e hamendjes në tunel të bllokojnë një adresë që është edhe rruga juaj e administrimit, dhe fsheh se cila sipërfaqe është në të vërtetë nën sulm. Jepini secilës sipërfaqe jail-in e vet me portën dhe pragjet e veta:
# /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 = 1hFilloni me numërues të vegjël dhe një bllokim të shkurtër, pastaj ngrini ato pasi të keni vëzhguar një javë trafiku real. Një prag bujar në një adresë zyre të përbashkët dënon çdo përdorues pas një NAT, dhe një bllokim agresiv në sipërfaqen e tunelit shkëput klientë legjitimë, kredencialet e ruajtura të të cilëve skaduan gjatë natës.
Verifikoni bllokimin, backend-in dhe dëmtimet anësore
Pas një rinisjeje, dalja e statusit është konfirmimi më i shpejtë që jail ekziston dhe po numëron:
fail2ban-client status
fail2ban-client status openvpnas-tunnelPastaj konfirmoni që bllokimi arrin te firewali që vërtet drejtoni, sepse një jail i konfiguruar për një backend që askush nuk e zbaton nuk mbron asgjë. Me veprimin iptables adresat shfaqen në një zinxhir të quajtur sipas jail (f2b-openvpnas-tunnel); me veprimin nftables ato bien në një grup në tabelën e vetë fail2ban. Kontrolloni atë që përdor hosti juaj në vend që ta supozoni.
Dy kontrolle anësore kanë më shumë rëndësi sesa vetë bllokimi. Së pari, konfirmoni që real_ip është adresa e klientit dhe jo një balancues ngarkese ose një proxy i kundërt; pas një proxy çdo bllokim bie mbi proxy dhe tërheq me vete të gjithë shërbimin. Së dyti, shkruani procedurën e zhbllokimit, sepse adresa që kalon pragun në 02:00 zakonisht i përket inxhinierit të detyrës: fail2ban-client set openvpnas-tunnel unbanip 203.0.113.24.
Mbajeni kufirin në mendje ndërsa rregulloni. Fail2ban është një kufizues shpejtësie në një sipërfaqe autentikimi, jo një shtresë e kontrollit të aksesit. Ai nuk zëvendëson MFA, kufizimet për llogari ose mbajtjen e ndërfaqes së administrimit jashtë internetit publik, dhe Access Server ka cilësimet e veta autoban që ia vlen të kontrollohen para se të grumbulloni dy kufizues shpejtësie në të njëjtën portë.