Jinsi ya kuweka Fail2ban kwenye Ubuntu 24.04
Jifunze kuweka Fail2ban kwenye Ubuntu 24.04 ili kuzuia bot za SSH. Angalia fail2ban-client status sshd ili kuthibitisha ulinzi unavyofanya kazi.
Kazi halisi ya Fail2ban
Fail2ban ni daemon inayosoma log. Inafuatilia ujumbe wa uthibitisho wa SSH. Ikiwa anwani moja itashindwa mara kadhaa ndani ya muda mfupi, inafanya amri ya firewall inayozuia anwani hiyo kwa muda fulani. Hiyo ndiyo misingi yake. Inatumia takriban mistari 30 ya kusanifu kwenye faili moja. Kwenye Ubuntu 24.04, ufungaji ni amri moja ya apt inayokulinda kabla hujafanya marekebisho yoyote.
Jua vizuri kile kinachofanywa na kisichofanywa na Fail2ban. Fail2ban haithibitishi mtu yeyote, haifanyi usimbaji wa data, na hauzuia jaribio moja la kuingia lenye nia mbaya — inazuia tu majaribio yanayojirudia kutoka chanzo kimoja. Ni chujio la kelele na kizuia kasi, siyo kufuli. Kazi yake ni kusitisha ukaguzi wa mara kwa mara wa port 22 ili usipoteze CPU, bandwidth, na nafasi ya log, na kupunguza kasi ya mshambuliaji anayelazimika kutumia anwani moja kwa wakati mmoja.
Mambo ambayo Fail2ban haiyachukui nafasi
Fail2ban ni tabaka la tatu, si la kwanza. Ikiwa seva yako bado inakubali nywila za SSH, botnet iliyoenea kwenye maelfu ya anwani inaweza kuendelea kukisia, kwa sababu kila anwani inabaki chini ya kiwango chako cha ban na haichochei mfumo. Ulinzi halisi dhidi ya jambo hilo ni uthibitisho wa funguo pekee (key-only authentication), ambao hufanya kukisia nywila kuwa kipiwezekani bila kujali ni jaribio ngapi mtu anafanya. Fail2ban inayotumika pamoja na uthibitisho wa funguo pekee hufanya mambo mawili muhimu: inaondoa kelele za brute-force kwenye logs zako, na inawafukuza wasanidi (scanners) mapema ili waache kushambulia port. Ichukulie kama ulinzi wa kina (defence in depth). Inakaa nyuma ya uthibitisho wa funguo na nyuma ya firewall, wala haiwezi kuwa mbele yao.
Mahitaji ya awali, na hali halisi ya Ubuntu 24.04
Unahitaji VPS inayotumia Ubuntu 24.04 yenye ruhusa ya root au sudo, na SSH inayofanya kazi — ni bora ukitumia uthibitisho wa funguo (key authentication). Fail2ban hutumia rasilimali kidogo: megabytes chache za RAM, na haihitaji kurekebisha mipaka (limits).
Sasa ni sehemu ambayo mwongozo wowote wa zamani hufanya makosa. Kwa miaka mingi ushauri wa kawaida ulikuwa "install Fail2ban, kisha ongeza backend = systemd, kwa sababu Ubuntu imeacha kuandika /var/log/auth.log." Ushauri huo unaelezea mabadiliko ya kweli — picha za kisasa za seva na cloud huja bila rsyslog, hivyo SSH huandika kwenye systemd journal pekee na faili hiyo ya maandishi haipo — lakini kwenye Ubuntu 24.04, kifurushi cha Fail2ban tayari kimezingatia jambo hilo. Kifurushi hutoa /etc/fail2ban/jail.d/defaults-debian.conf, na faili hiyo, badala ya mipangilio ya asili, ndiyo inayotumiwa na seva yako:
[DEFAULT]
banaction = nftables
banaction_allports = nftables[type=allports]
backend = systemd
[sshd]
enabled = trueSoma sehemu hiyo kwa makini, kwa sababu inajibu maswali mawili kabla ya kugusa chochote. backend = systemd inamaanisha SSH jail inasoma journal, hivyo kukosekana kwa auth.log hakuna madhara. banaction = nftables inamaanisha vizuizi (bans) vinatendekezwa kupitia nftables, ambayo ndiyo firewall Ubuntu 24.04 inayotumia, badala ya iptables ya zamani. Na [sshd] enabled = true inamaanisha jail inakuwa ikiwa imewashwa tangu kuanza kwa mfumo. Matokeo: apt install fail2ban ya kawaida kwenye Ubuntu 24.04 inazuia SSH brute-force moja kwa moja. Sehemu kubwa ya kazi yako ni kuhakikisha hilo, kurekebisha sera, na kuhakikisha hujifunga nje ya mfumo.
Mtego wa zamani wa auth.log bado unakuja katika hali tatu, na ni muhimu kuzitambua: uliinstall Fail2ban kwa kutumia pip badala ya apt, hivyo hakuna defaults-debian.conf; uko ndani ya container isiyo na mamlaka (unprivileged container) ambayo haina systemd journal kusoma; au ulifuata mwongozo wa zamani na kuweka backend = auto kwenye jail.local yako, ukibadilisha mipangilio ya asili inayofanya kazi. Sehemu ya failure-modes inaonyesha kila hali inavyoonekana.
Hatua ya 1: Sakinisha na thibitisha kuwa tayari inazuia
sudo apt update
sudo apt install -y fail2banUbuntu 24.04 inakuja na Fail2ban 1.0.2, na kifurushi hiki kinajumuisha python3-systemd kama utegemezi muhimu, hivyo backend ya journal ina kila kitu kinachohitajika. Huduma hii hujiwasha na kuanza yenyewe:
sudo systemctl status fail2banUnahitaji active (running). Kisha angalia jail ambayo tayari inafanya kazi yake:
sudo fail2ban-client status sshdKwenye VPS ya umma ambayo imekuwa inapatikana kwa hata dakika chache, mara nyingi utaona tayari kushindwa kwa logins na anwani zilizozuiwa — mtandao hufanya scans kwenye port 22 kila wakati. Hiyo ni thibitisho kwamba usanidi wa asili unafanya kazi. Kuanzia hapa unaufanyia maboresho, si kuutengeneza upya kuanzia mwanzo.
Hatua ya 2: Hariri jail.local, usihariri jail.conf
Fail2ban huhifadhi mipangilio yake ya msingi kwenye /etc/fail2ban/jail.conf. Usihariri faili hiyo. Kila apt upgrade ya kifurushi kinaweza kuliidhibiti, na mabadiliko yako yatafutika bila tahadhari. Fail2ban husoma faili kwa mpangilio maalum — jail.conf kwanza, kisha kila kitu kwenye jail.d/, kisha jail.local — na thamani ya mwisho ndiyo inayotumika. Faili ya .local ni yako, na maboresho ya kifurushi hayawahi kuigusa. Kanuni hiyo hiyo inatumika kwa filters, ambapo faili ya *.local hupuuza filter.d/*.conf iliyokuja na kifurushi.
Hivyo, andika jail.local ndogo inayobadilisha tu mipangilio michache unayohitaji, na uache jail.conf na jail.d/defaults-debian.conf ya kifurushi bila kubadilisha ili ziwe marejeo.
Hatua ya 3: Andika /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.localWeka maelezo haya, ukiweka IP yako ya umma kwenye mstari wa ignoreip:
[DEFAULT]
# Ubuntu 24.04 already sets these two in jail.d/defaults-debian.conf.
# Pinning them here documents the dependency and survives if that
# file is ever removed or changed by an upgrade.
backend = systemd
banaction = nftables
# Ban for one hour ...
bantime = 1h
# ... if an address fails ...
maxretry = 5
# ... 5 times within 10 minutes.
findtime = 10m
# Never ban these. PUT YOUR OWN IP HERE.
ignoreip = 127.0.0.1/8 ::1 10.0.0.24
# Longer bans for repeat offenders: 1h, 2h, 4h ... up to a week.
bantime.increment = true
bantime.maxtime = 1w
[sshd]
enabled = trueKila mstari una kazi yake:
bantime,findtime,maxretryni sera ya ulinzi. Chaguo la asili labantimeni dakika kumi tu; saa moja ni muda bora zaidi. Mishale mitano kutoka anwani moja ndani ya dakika kumi itasababisha ban. Binadamu wa kawaida hufanya makosa ya nywila mara moja au mbili; mishale mitano ndani ya dakika kumi ni ishara ya script.ignoreipni ulinzi wako. Weka anwani ya umma unayotumia kuunganishia hapa ili Fail2ban isikufunge nje ya seva yako mwenyewe. Ikiwa unatumia muunganisho wa nyumbani wenye IP inayobadilika, ni bora kutumia njia ya VPN mwishoni, lakini usiruke mstari huu.bantime.increment = truehufanya kila ban inayojirudia kuwa ndefu kuliko iliyopita — saa moja, kisha mbili, kisha nne — hadibantime.maxtime. Anwani zinazojaribu tena zitafungiwa kwa muda mrefu zaidi kila wakati.
Tafuta anwani ya kuweka kwenye whitelist kutoka kwenye mashine unayotumia ku-SSH, si kutoka kwenye seva:
curl -s ifconfig.meUnaweza kutengeneza jail.local iliyorekebishwa kulingana na bandari (ports) na sera yako ya ban hapa, kisha ubandike kwenye faili:
Hatua ya 4: Anzisha upya na uhakikishe inasoma journal
sudo fail2ban-client -t
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd-t hufanya jaribio la usanidi kwanza, hivyo makosa ya uandishi katika jail.local yatasababisha hitilafu hapa badala ya kuacha huduma ikiwa imezimika. Hali ya jail iliyo sawa inaonekana hivi:
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 14
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 1
|- Total banned: 3
`- Banned IP list: 10.0.0.66Namba inayothibitisha kuwa Fail2ban inasoma login zako ni Total failed. Ikiwa ni juu ya sifuri, au inaongezeka unapofeli login kwa makusudi kutoka mashine nyingine, basi journal inasomwa na umemaliza. Ikiwa inabaki kwenye 0 bila kujali ni mara ngapi umefeli — na una uhakika kwamba haufanyi majaribio kutoka kwenye anwani iliyo kwenye ignoreip — nenda kwenye hali za hitilafu hapa chini.
Zingatia kuwa mstari wa Journal matches bado unataja sshd.service. Kwenye Ubuntu, unit ya SSH ni ssh.service, lakini filter iliyojumuishwa pia inalingana na _COMM=sshd, na OpenSSH kwenye 24.04 huweka logs za hitilafu kutoka kwenye process inayoitwa sshd, hivyo mlinganisho unafanya kazi. Maelezo hayo ni muhimu tu ikiwa unatumia OpenSSH mpya (9.8 au zaidi, ambapo per-connection worker ni sshd-session); hali za hitilafu zinashughulikia keshi hiyo.
Hatua ya 5: Angalia ban halisi au amri ya kulazimisha kwa ajili ya majaribio
Ban halisi hutokea zenyewe ndani ya dakika kwenye VPS yoyote ya umma. Ili kuzichunguza, tumia amri ya tail kwenye log:
sudo tail -f /var/log/fail2ban.logBan huonekana kama ifuatavyo:
2026-07-15 10:31:40,502 fail2ban.filter [812]: INFO [sshd] Found 10.0.0.66 - 2026-07-15 10:31:40
2026-07-15 10:31:44,118 fail2ban.actions [812]: NOTICE [sshd] Ban 10.0.0.66Ili kuthibitisha mfumo mzima bila kusubiri, ban anwani ya nyaraka kwa mkono — usibani anwani yako:
sudo fail2ban-client set sshd banip 10.0.0.66Inatoa 1, na anwani itaonekana chini ya Banned IP list kwenye fail2ban-client status sshd. Sasa thibitisha kuwa kizuizi (block) kipo kweli kwenye firewall. Kwenye Ubuntu 24.04 ni nftables, si iptables:
sudo nft list table inet f2b-tableUtaona set iitwayo addr-set-sshd inayoshikilia 10.0.0.66, na chain f2b-chain inayozuia chanzo chochote kwenye set hiyo. Ikiwa fail2ban-client inasema anwani imebaniwa lakini hakuna kinachoonekana kwenye nft list, kitendo chako cha kubani hakilingani na firewall yako — angalia maelezo ya nftables/iptables kwenye failure modes.
Hatua ya 6: Jiondoe kwenye ban, na rudia kama umefungiwa nje
Ikiwa uliban anwani ambayo haikupaswa kubani — anwani yako mwenyewe — iondoe:
sudo fail2ban-client set sshd unbanip 10.0.0.66Inarudisha 1 ikiwa imefanikiwa. Kusafisha kila ban katika kila jail:
sudo fail2ban-client unban --allUsitegemee kikao cha SSH kilichofunguliwa tayari kukusaidia: nftables ban inakataa kila paketi kutoka kwenye anwani iliyobani kwenda port 22 — ikiwemo miunganisho iliyoanzishwa — hivyo kikao kilichopo hukatika mara tu ban inapotokea. Ukijiban mwenyewe na huna rekodi ya ignoreip, utafungiwa nje mpaka ban itakapokoma — rudia kupitia console ya web ya mtoa huduma wako (VNC au serial), ambayo haitumii SSH, na usubiri bantime au utumie amri ya unban huko.
Hatua ya 7: Fanya vizuizi vidumu na kuongezeka ukali
Fail2ban huhifadhi vizuizi hai kwenye database ndogo ya SQLite kwenye /var/lib/fail2ban/fail2ban.sqlite3, hivyo hudumu baada ya huduma kuanza upya au kompyuta kuwashwa upya; hupotezi vizuizi hivyo. Mistari ya bantime.increment uliyoweka tayari huifanya kila mwendefu anayojirudia kuwa tatizo linalozidi kuwa kubwa kwake — muda huongezeka mara mbili kuanzia saa moja hadi wiki moja.
Kwa sera ya "marudio matatu" ya mfumo mzima, Fail2ban inakuja na jail ya recidive inayofuatilia /var/log/fail2ban.log yake mwenyewe na kutoa vizuizi vya muda mrefu kwa anwani yoyote iliyozuiwa mara nyingi katika jails zote. Kwa sababu [DEFAULT] yako sasa inatumia backend ya systemd, iunganishe jail hii kwenye faili ya log iliyokusudiwa kusoma:
[recidive]
enabled = true
backend = auto
logpath = /var/log/fail2ban.log
bantime = 1w
findtime = 1d
maxretry = 5backend = auto ikiwa na logpath inayojitegemea huifanya recidive isome fail2ban.log ya kawaida, ambapo Ban zinazohesabiwa hupatikana — chaguo la systemd uliloweka kimfumo lingeelekeza kwenye journal, ambapo hazipatikani.
Hatua ya 8: Iunganishe na SSH inayotumia funguo pekee, na bora zaidi kutumia VPN
Fail2ban inafanya kazi vizuri zaidi ikiwa imewekwa pamoja na uthibitisho wa funguo (key authentication). Kwenye faili ya mipangilio chini ya /etc/ssh/sshd_config.d/ — kwa mfano /etc/ssh/sshd_config.d/00-hardening.conf — weka:
PasswordAuthentication no
KbdInteractiveAuthentication noKisha sudo systemctl restart ssh. Password zikiwa zimezimwa, mashambulizi ya brute force hayawezi kufanikiwa kabisa; Fail2ban itatumika kupunguza kelele kwenye log na kuondoa wasanidi (scanners) mapema. Njia bora zaidi ni kuweka SSH nje kabisa ya mtandao wa umma: weka SSH nyuma ya WireGuard VPN inayojihost na ufunge port 22 kwenye firewall ili ijibu tu kupitia tunnel. Hakuna mtu anayeweza kufanya brute-force kwenye port ambayo hawezi kuifikia, na Fail2ban itakuwa kama ulinzi wa nyuma badala ya ulinzi wa mbele.
Fail2ban si kwa ajili ya SSH pekee. Huduma yoyote inayoweka log za logins zilizoshindwa inaweza kupata jail — kama vile seva ya barua pepe, tovuti ya nginx, au msimamizi wa nywila wa Vaultwarden mwenye kujihost ambapo hutaki kuacha login ya web ikiwa wazi kwa mashambulizi ya credential stuffing. Mara tu web app inapowekwa nyuma ya nginx site yenye cheti cha Let's Encrypt, elekeza fail2ban filter kwenye access log yake kama vile SSH jail inavyoelekeza kwenye journal.
Hali za kushindwa, pamoja na maandishi sahihi utakayoyaona
"Have not found any log file for sshd jail", na Fail2ban haitaanza. Hili ni tatizo la zamani la auth.log, na kwenye Ubuntu 24.04 utalipata tu ikiwa kitu kimebadilisha mipangilio ya asili ya paketi — pip iliyowekwa bila defaults-debian.conf, kontena isiyo na journal, au backend = auto iliyoachwa kwenye jail.local. Kwenye backend ya faili isiyo na /var/log/auth.log, sshd jail haiwezi kupata log yake na daemon nzima inasimama. fail2ban.log inaonyesha:
ERROR Failed during configuration: Have not found any log file for sshd jailKwa sababu kosa hilo ni la hatari, huduma haipati, na fail2ban-client status itatoa ishara inayofuata:
ERROR Failed to access socket path: /var/run/fail2ban/fail2ban.sock. Is fail2ban running?Mstari huo wa "socket path" haumaanishi kuwa Fail2ban imeharibika — inamaanisha haikuwahi kuanza kwa sababu jail moja ilishindwa kupata log yake. Kuweka backend = systemd kwenye [DEFAULT], ambayo paketi ya Ubuntu tayari imekufanyia, husuluhisha ujumbe yote miwili kwa wakati mmoja.
Jail iko hai lakini Total failed haibadiliki. Daemon inafanya kazi na journal inasomwa, lakini kushindwa kwa kweli kunaongezeka kwenye journalctl -u ssh wakati kishikahesabu kiko kwenye 0. Kwanza toa mbali mambo ya wazi: unapojaribu kutoka kwenye anwani iliyoorodheshwa kwenye ignoreip, kushindwa kwako kutasamehewa kwa usanifu. Ikiwa si hilo, uko kwenye toleo la OpenSSH ambapo worker ya kila muunganisho ni sshd-session (9.8 na kuendelea), ambayo journal yake ya _COMM ni sshd-session, si sshd, hivyo match ya asili haitaitambua. Panua match kwenye block ya [sshd]:
[sshd]
enabled = true
backend = systemd
journalmatch = _SYSTEMD_UNIT=ssh.service + _COMM=sshd + _COMM=sshd-sessionWasha upya, jaribu kuingia kimakosa kwa makusudi kutoka kwenye anwani ambayo haipo kwenye ignoreip, na uthibitishe kuwa Total failed mwishowe inaongezeka.
Ulijibanisha mwenyewe: Connection refused. Uliacha anwani yako nje ya ignoreip, ukajaribu login mbaya chache, na sasa:
ssh: connect to host 10.0.0.10 port 22: Connection refusedKukataliwa, badala ya timeout ya kimya, ni matokeo ya reject ya nftables action inayofanya kazi yake — kwako. Ibushe kama ilivyo kwenye Hatua ya 6: fungua ban kutoka kwenye session kwenye anwani nyingine ambayo haijabanwa, au kutoka kwenye console ya mtoa huduma — session ambayo tayari ipo wazi kutoka kwenye anwani iliyobanwa pia itasimama. Kisha ongeza anwani yako kwenye ignoreip ili isitokee tena.
Fail2ban inasema anwani imebanwa, lakini bado inaweza kuunganishwa. Kishikahesabu kwenye status sshd kinaongezeka, lakini anwani hiyo bado inaweza kufika kwenye port 22. Hii ni kutofautiana kwa ban-action-dhidi-ya-firewall, na kwenye Ubuntu 24.04 mara nyingi inamaanisha umebadilisha banaction = nftables inayofanya kazi na banaction = iptables-multiport iliyochukuliwa kutoka kwenye mwongozo wa zamani, kwenye mfumo usio na tabaka la iptables. fail2ban.log inaonyesha:
fail2ban.actions [812]: ERROR Failed to execute ban jail 'sshd' action 'iptables-multiport'Futa mabadiliko hayo na uruhusu action ya nftables ya paketi iendelee, au, ikiwa unadhibiti firewall nzima kupitia ufw na unataka ban zionekane hapo, weka banaction = ufw kwenye [DEFAULT]. Washa upya na uthibitishe kuwa sheria inaonekana kwa sudo nft list ruleset | grep f2b.
Fail2ban haitaanza baada ya kuhariri jail.local. Makosa ya uandishi — kichwa cha habari kilichopotea au thamani mbaya ya muda — hufanya huduma kukataa kuanza. Iombe Fail2ban kuangalia config kabla haijaanza:
sudo fail2ban-client -tInataja faili na jail yenye tatizo, kwa mfano Errors in jail 'sshd'. Skipping..., ili urekebishe chanzo badala ya kukisia.
FAQ
Je, Fail2ban ya kawaida kwenye Ubuntu 24.04 kweli huzuia mashambulizi ya SSH?
Ndiyo. Paketi hiyo inajumuisha /etc/fail2ban/jail.d/defaults-debian.conf, ambayo huwezesha jail ya sshd, huweka backend = systemd ili isome systemd journal badala ya /var/log/auth.log iliyokosekana, na huweka banaction = nftables ili vizuizi vitekelezwe kupitia firewall halisi ya Ubuntu. apt install fail2ban ya kawaida hulinda SSH tangu wakati wa kuanza kwa mfumo. Hakikisha kwa kutumia sudo fail2ban-client status sshd na uangalie kama Total failed si sifuri.
Kwa nini Fail2ban haizuia chochote kwenye seva yangu?
Angalia sababu tatu za kawaida kwa mpangilio. Unaweza kuwa unajaribu kutoka anwani iliyo ndani ya ignoreip, ambayo imewekwa kutozuiwa. Unaweza kuwa umeharibu mipangilio ya kawaida kwa kuweka backend = auto kwenye jail.local kutoka mwongozo wa zamani, jambo linalozuia usomaji wa journal kwenye picha (image) isiyo na auth.log. Au unaweza kuwa ndani ya container ambayo haina systemd journal ya kusoma. Angalia Total failed kwenye fail2ban-client status sshd: ikiwa haipandi wakati journalctl -u ssh inaonyesha kushindwa kwa kweli, jail inasoma sehemu isiyo sahihi.
Nitafungua vipi anwani yangu ya IP iliyozuiwa?
Run sudo fail2ban-client set sshd unbanip YOUR.IP.HERE, ambayo hurudisha 1 ikiwa imefanikiwa, au sudo fail2ban-client unban --all ili kufuta vizuizi vyote. Ikiwa umefungiwa nje ya SSH, tumia console ya web au VNC ya mtoa huduma wako ili kuendesha amri hiyo hiyo — kizuizi hupiga chini kila paketi kutoka kwenye anwani yako kwenda port 22, hivyo hata session iliyokuwa wazi itasimama kufanya kazi. Kisha ongeza anwani yako kwenye ignoreip ili hali hiyo isitokee tena.
Kuna tofauti gani kati ya jail.conf na jail.local?
jail.conf ina mipangilio ya msingi ya Fail2ban na hufutwa kila wakati paketi inapofanyiwa upgrade, hivyo mabadiliko yoyote hapo yatapotea. Paketi ya Debian/Ubuntu huongeza mipangilio yake kupitia jail.d/defaults-debian.conf. Mabadiliko yako yanapaswa kuwa kwenye jail.local, ambayo husomwa mwishoni na ina nguvu zaidi kuliko zote, na ambayo upgrade haziwezi kugusa. Acha jail.conf kama rejea ya kusoma tu.
Je, Fail2ban inachukua nafasi ya uthibitishaji wa SSH kwa kutumia funguo (keys)?
Hapana. Fail2ban huweka kikomo cha idadi ya majaribio ya kushindwa kutoka anwani moja; haifanyi chochote dhidi ya mashambulio ya polepole na yaliyosambazwa ambapo kila anwani inabaki chini ya kiwango kilichowekwa. Uthibitishaji wa funguo pekee (PasswordAuthentication no) hufanya kukisia nywila kuwa impossible kabisa, na Fail2ban kisha hupunguza kelele za log na kuondoa wasanifu (scanners) mapema. Tumia zote mbili, na kwa hali bora, uweke SSH nje kabisa ya mtandao wa umma.