Si të mbroni SSH me Fail2Ban në Rocky Linux 9


Prezantimi

SSH është metoda de fakto e lidhjes me një server cloud. Është i qëndrueshëm dhe është i zgjerueshëm – ndërsa zhvillohen standarde të reja të kriptimit, ato mund të përdoren për të gjeneruar çelësa të rinj SSH, duke siguruar që protokolli bazë të mbetet i sigurt. Megjithatë, asnjë protokoll ose grumbull softuerësh nuk është plotësisht i pagabueshëm dhe SSH duke qenë kaq i përhapur në internet do të thotë se ai përfaqëson një sipërfaqe sulmi ose vektor sulmi shumë të parashikueshëm nëpërmjet të cilit njerëzit mund të përpiquni të fitoni akses.

Çdo shërbim që është i ekspozuar ndaj rrjetit është një objektiv i mundshëm në këtë mënyrë. Nëse rishikoni regjistrat për shërbimin tuaj SSH që funksionon në çdo server të trafikuar gjerësisht, shpesh do të shihni përpjekje të përsëritura, sistematike për hyrje që përfaqësojnë sulme me forcë brutale nga përdoruesit dhe robotët njësoj. Edhe pse mund të bëni disa optimizime në shërbimin tuaj SSH për të ulur mundësinë e këtyre sulmeve të kenë sukses në afërsisht zero, të tilla si çaktivizimi i vërtetimit të fjalëkalimit në favor të çelësave SSH, ato ende mund të përbëjnë një përgjegjësi të vogël dhe të vazhdueshme.

Vendosjet e prodhimit në shkallë të gjerë për të cilët ky detyrim është plotësisht i papranueshëm zakonisht do të zbatojnë një VPN si WireGuard përpara shërbimit të tyre SSH, në mënyrë që të jetë e pamundur të lidheni drejtpërdrejt me portin e paracaktuar SSH 22 nga interneti i jashtëm pa abstraksion softueri shtesë ose portat hyrëse. Këto zgjidhje VPN janë gjerësisht të besueshme, por do të shtojnë kompleksitet dhe mund të thyejnë disa automatizime ose grepa të tjera të vogla softuerësh.

Përpara ose përveç angazhimit për një konfigurim të plotë VPN, mund të zbatoni një mjet të quajtur Fail2ban. Fail2ban mund të zbusë ndjeshëm sulmet e forcës brutale duke krijuar rregulla që ndryshojnë automatikisht konfigurimin e murit të zjarrit për të ndaluar IP-të specifike pas një numri të caktuar përpjekjesh të pasuksesshme për hyrje. Kjo do të lejojë serverin tuaj të forcohet kundër këtyre përpjekjeve për akses pa ndërhyrjen tuaj.

Në këtë udhëzues, do të shihni se si të instaloni dhe përdorni Fail2ban në një server Rocky Linux 9.

Parakushtet

Për të përfunduar këtë udhëzues, do t'ju duhet:

  • Një server Rocky Linux 9 dhe një përdorues jo-root me privilegje sudo. Mund të mësoni më shumë se si të konfiguroni një përdorues me këto privilegje në udhëzuesin tonë Initial Server Setup with Rocky Linux 9. Ju gjithashtu duhet të keni firewalld që funksionon në server, i cili mbulohet në udhëzuesin tonë fillestar të konfigurimit të serverit.
  • Opsionale, një server i dytë nga i cili mund të lidheni me serverin tuaj të parë, të cilin do ta përdorni për të testuar ndalimin e qëllimshëm.

Hapi 1 - Instalimi i Fail2ban

Fail2ban nuk është i disponueshëm në magazinat e paracaktuar të softuerit të Rocky. Megjithatë, ai është i disponueshëm në depon e EPEL ose Paketa të zgjeruara për Enterprise Linux, e cila përdoret zakonisht për paketat e palëve të treta në Red Hat dhe Rocky Linux. Nëse nuk e keni shtuar tashmë EPEL në burimet e paketës së sistemit tuaj, mund ta shtoni depon duke përdorur dnf, si do të instalonit çdo paketë tjetër:

  1. sudo dnf install epel-release -y

Menaxheri i paketave dnf tani do të kontrollojë EPEL përveç burimeve tuaja të paracaktuara të paketave kur instaloni softuer të ri. Vazhdoni të instaloni Fail2ban:

  1. sudo dnf install fail2ban -y

Fail2ban do të konfigurojë automatikisht një shërbim në sfond pasi të instalohet. Megjithatë, ai është i çaktivizuar si parazgjedhje, sepse disa nga cilësimet e tij të paracaktuara mund të shkaktojnë efekte të padëshiruara. Ju mund ta verifikoni këtë duke përdorur komandën systemctl:

  1. systemctl status fail2ban.service
Output
○ fail2ban.service - Fail2Ban Service Loaded: loaded (/lib/systemd/system/fail2ban.service; disabled; vendor preset: disabled Active: inactive (dead) Docs: man:fail2ban(1)

Mund ta aktivizoni menjëherë Fail2ban, por së pari, do të rishikoni disa nga veçoritë e tij.

Hapi 2 – Konfigurimi i Fail2ban

Shërbimi fail2ban ruan skedarët e tij të konfigurimit në drejtorinë /etc/fail2ban. Ekziston një skedar me parazgjedhje të quajtur jail.conf. Shkoni në atë drejtori dhe printoni 20 rreshtat e parë të atij skedari duke përdorur head -20:

  1. cd /etc/fail2ban
  2. head -20 jail.conf
Output
# # WARNING: heavily refactored in 0.9.0 release. Please review and # customize settings for your setup. # # Changes: in most of the cases you should not modify this # file, but provide customizations in jail.local file, # or separate .conf files under jail.d/ directory, e.g.: # # HOW TO ACTIVATE JAILS: # # YOU SHOULD NOT MODIFY THIS FILE. # # It will probably be overwritten or improved in a distribution update. # # Provide customizations in a jail.local file or a jail.d/customisation.local. # For example to change the default bantime for all jails and to enable the # ssh-iptables jail the following (uncommented) would appear in the .local file. # See man 5 jail.conf for details. # # [DEFAULT]

Siç do ta shihni, disa rreshta të parë të këtij skedari komentohen – ato fillojnë me karaktere # që tregojnë se ato duhet të lexohen si dokumentacion dhe jo si cilësime. Siç do ta shihni gjithashtu, këto komente po ju drejtojnë që të mos e modifikoni drejtpërdrejt këtë skedar. Në vend të kësaj, ju keni dy opsione: ose krijoni profile individuale për Fail2ban në skedarë të shumtë brenda drejtorisë jail.d/, ose krijoni dhe mblidhni të gjitha cilësimet tuaja lokale në një jail.local skedari. Skedari jail.conf do të përditësohet periodikisht ndërsa vetë Fail2ban përditësohet dhe do të përdoret si një burim i cilësimeve të paracaktuara për të cilat nuk keni krijuar asnjë zëvendësim.

Në këtë tutorial, ju do të krijoni jail.local. Ju mund ta bëni këtë duke kopjuar jail.conf:

  1. sudo cp jail.conf jail.local

Tani mund të filloni të bëni ndryshime në konfigurim. Hapni skedarin në vi ose në redaktuesin tuaj të preferuar të tekstit:

  1. sudo vi jail.local

Ndërsa jeni duke lëvizur nëpër skedar, ky udhëzues do të shqyrtojë disa opsione që mund të dëshironi të përditësoni. Cilësimet e vendosura nën seksionin [DEFAULT] pranë krye të skedarit do të zbatohen për të gjitha shërbimet e mbështetura nga Fail2ban. Diku tjetër në skedar, ka tituj për [sshd] dhe për shërbime të tjera, të cilat përmbajnë cilësime specifike për shërbimin që do të zbatohen në krye të parazgjedhjeve.

[DEFAULT]
. . .
bantime = 10m
. . .

Parametri bantime cakton kohëzgjatjen që një klient do të ndalohet kur ai nuk ka arritur të vërtetojë saktë. Kjo matet në sekonda. Si parazgjedhje, kjo është vendosur në 10 minuta.

[DEFAULT]
. . .
findtime = 10m
maxretry = 5
. . .

Dy parametrat e ardhshëm janë findtime dhe maxretry. Këto punojnë së bashku për të vendosur kushtet në të cilat një klient rezulton të jetë një përdorues i paligjshëm që duhet të ndalohet.

Variabli maxretry përcakton numrin e provave që një klient duhet të vërtetojë brenda një dritareje kohore të përcaktuar nga findtime, përpara se të ndalohet. Me cilësimet e paracaktuara, shërbimi fail2ban do të ndalojë një klient që tenton pa sukses të identifikohet 5 herë brenda një dritareje 10 minutash.

[DEFAULT]
. . .
destemail = root@localhost
sender = root@<fq-hostname>
mta = sendmail
. . .

Nëse ju duhet të merrni njoftime me email kur Fail2ban ndërmerr veprime, duhet të vlerësoni cilësimet destemail, emri i dërguesit dhe mta. Parametri destemail cakton adresën e emailit që duhet të marrë mesazhe ndalimi. emri i dërguesit vendos vlerën e fushës \Nga në email. Parametri mta konfiguron se çfarë shërbimi poste do të përdoret për të dërguar postë. Si parazgjedhje, kjo është sendmail, por ju mund të dëshironi të përdorni Postfix ose një zgjidhje tjetër postare.

[DEFAULT]
. . .
action = %(action_)s
. . .

Ky parametër konfiguron veprimin që kryen Fail2ban kur dëshiron të vendosë një ndalim. Vlera action_ përcaktohet në skedar pak para këtij parametri. Veprimi i parazgjedhur është të përditësoni konfigurimin tuaj të murit të zjarrit për të refuzuar trafikun nga hosti ofendues derisa të kalojë koha e ndalimit.

Ekzistojnë skripte të tjera action_ të ofruara si parazgjedhje, të cilat mund t'i zëvendësoni $ (action_) me më lart:

…
# ban & send an e-mail with whois report to the destemail.
action_mw = %(action_)s
            %(mta)s-whois[sender="%(sender)s", dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]

# ban & send an e-mail with whois report and relevant log lines
# to the destemail.
action_mwl = %(action_)s
             %(mta)s-whois-lines[sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]

# See the IMPORTANT note in action.d/xarf-login-attack for when to use this action
#
# ban & send a xarf e-mail to abuse contact of IP address and include relevant log lines
# to the destemail.
action_xarf = %(action_)s
             xarf-login-attack[service=%(__name__)s, sender="%(sender)s", logpath="%(logpath)s", port="%(port)s"]

# ban IP on CloudFlare & send an e-mail with whois report and relevant log lines
# to the destemail.
action_cf_mwl = cloudflare[cfuser="%(cfemail)s", cftoken="%(cfapikey)s"]
                %(mta)s-whois-lines[sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]
…

Për shembull, action_mw ndërmerr veprime dhe dërgon një email, action_mwl ndërmerr veprime, dërgon një email dhe përfshin regjistrimin, dhe action_cf_mwl bën të gjitha më lart, përveç dërgimit të një përditësimi në API të Cloudflare të lidhur me llogarinë tuaj për të ndaluar shkelësin edhe atje.

Cilësimet individuale të burgut

Tjetra është pjesa e skedarit të konfigurimit që merret me shërbime individuale. Këto specifikohen nga titujt e seksionit, si [sshd].

Secili prej këtyre seksioneve duhet të aktivizohet individualisht duke shtuar një rresht enabled=true nën titull, me cilësimet e tjera të tyre.

[jail_to_enable]
. . .
enabled = true
. . .

Për këtë tutorial, ju do të aktivizoni burgun SSH. Duhet të jetë në krye të cilësimeve individuale të burgut. Parametrat e paracaktuar do të funksionojnë ndryshe, por do t'ju duhet të shtoni një linjë konfigurimi që thotë enabled=true nën titullin [sshd].

#
# JAILS
#

#
# SSH servers
#

[sshd]

# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode   = normal
enabled = true
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

Disa cilësime të tjera që janë vendosur këtu janë filtri që do të përdoret për të vendosur nëse një rresht në një regjistër tregon një vërtetim të dështuar dhe logpath që tregon fail2ban se ku janë regjistrat për ai shërbim i caktuar ndodhet.

Vlera filter është në fakt një referencë për një skedar të vendosur në drejtorinë /etc/fail2ban/filter.d, me shtesën e tij .conf të hequr . Këta skedarë përmbajnë shprehje të rregullta (një stenografi e zakonshme për analizimin e tekstit) që përcaktojnë nëse një rresht në regjistër është një përpjekje e dështuar e vërtetimit. Ne nuk do t'i mbulojmë këto skedarë në thellësi në këtë udhëzues, sepse ato janë mjaft komplekse dhe cilësimet e paracaktuara përputhen mirë me linjat e duhura.

Sidoqoftë, mund të shihni se çfarë lloj filtrash janë të disponueshëm duke shikuar në atë drejtori:

  1. ls /etc/fail2ban/filter.d

Nëse shihni një skedar që duket i lidhur me një shërbim që po përdorni, duhet ta hapni atë me një redaktues teksti. Shumica e skedarëve janë komentuar mjaft mirë dhe ju duhet të jeni në gjendje të paktën të tregoni se nga çfarë lloj gjendjeje është krijuar skenari për t'u mbrojtur. Shumica e këtyre filtrave kanë seksione të përshtatshme (të çaktivizuara) në skedarin jail.conf që mund t'i aktivizojmë në skedarin jail.local nëse dëshironi.

Për shembull, imagjinoni që po shërbeni një faqe interneti duke përdorur Nginx dhe kuptoni se një pjesë e mbrojtur me fjalëkalim të faqes tuaj po përplaset me përpjekjet për hyrje. Mund t'i thuash fail2ban të përdorë skedarin nginx-http-auth.conf për të kontrolluar këtë gjendje brenda skedarit /var/log/nginx/error.log.

Kjo në fakt është vendosur tashmë në një seksion të quajtur [nginx-http-auth] në skedarin tuaj /etc/fail2ban/jail.conf. Thjesht duhet të shtoni parametrin enabled:

. . .
[nginx-http-auth]

enabled = true
. . .

Kur të keni përfunduar redaktimi, ruani dhe mbyllni skedarin. Nëse jeni duke përdorur vi, përdorni :x për të ruajtur dhe për t'u larguar. Në këtë pikë, mund të aktivizoni shërbimin tuaj Fail2ban në mënyrë që ai të funksionojë automatikisht tani e tutje. Së pari, ekzekutoni systemctl enable:

  1. sudo systemctl enable fail2ban

Më pas, niseni manualisht për herë të parë me systemctl start:

  1. sudo systemctl start fail2ban

Mund të verifikoni që po funksionon me status systemctl:

  1. sudo systemctl status fail2ban
Output
● fail2ban.service - Fail2Ban Service Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled Active: active (running) since Wed 2022-09-14 20:48:40 UTC; 2s ago Docs: man:fail2ban(1) Main PID: 39396 (fail2ban-server) Tasks: 5 (limit: 1119) Memory: 12.9M CPU: 278ms CGroup: /system.slice/fail2ban.service └─39396 /usr/bin/python3.6 -s /usr/bin/fail2ban-server -xf start Sep 14 20:48:40 rocky9-tester systemd[1]: Starting Fail2Ban Service... Sep 14 20:48:40 rocky9-tester systemd[1]: Started Fail2Ban Service. Sep 14 20:48:41 rocky9-tester fail2ban-server[39396]: Server ready

Në hapin tjetër, do të demonstroni Fail2ban në veprim.

Hapi 3 - Testimi i politikave të ndalimit (opsionale)

Nga një server tjetër, ai që nuk do të duhet të regjistrohet në serverin tuaj Fail2ban në të ardhmen, mund të testoni rregullat duke e ndaluar atë server të dytë. Pasi të keni hyrë në serverin tuaj të dytë, provoni të futni SSH në serverin Fail2ban. Mund të provoni të lidheni duke përdorur një emër që nuk ekziston:

  1. ssh blah@your_server

Futni karaktere të rastësishme në kërkesën e fjalëkalimit. Përsëriteni këtë disa herë. Në një moment, gabimi që po merrni duhet të ndryshojë nga Leja e refuzuarLidhja u refuzua. Kjo sinjalizon që serveri juaj i dytë është ndaluar nga serveri Fail2ban.

Në serverin tuaj Fail2ban, mund të shihni rregullin e ri duke kontrolluar daljen e fail2ban-client. fail2ban-client është një komandë shtesë e ofruar nga Fail2ban për të kontrolluar konfigurimin e tij të ekzekutimit.

  1. sudo fail2ban-client status
Output
Status |- Number of jail: 1 `- Jail list: sshd

Nëse përdorni fail2ban-client status sshd, mund të shihni listën e IP-ve që janë ndaluar nga SSH:

  1. sudo fail2ban-client status sshd
Output
Status for the jail: sshd |- Filter | |- Currently failed: 2 | |- Total failed: 7 | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 134.209.165.184

Përmbajtja e Lista e IP e ndaluar duhet të pasqyrojë adresën IP të serverit tuaj të dytë.

konkluzioni

Tani duhet të jeni në gjendje të konfiguroni disa politika ndalimi për shërbimet tuaja. Fail2ban është një mënyrë e dobishme për të mbrojtur çdo lloj shërbimi që përdor vërtetimin. Nëse dëshironi të mësoni më shumë se si funksionon fail2ban, mund të shikoni tutorialin tonë se si funksionojnë rregullat dhe skedarët fail2ban.

Për informacion se si të përdorni fail2ban për të mbrojtur shërbime të tjera, mund të lexoni se si të mbroni një server Nginx me Fail2Ban.