Fail2ban: usanidi wa ulinzi wa SSH dhidi ya majaribio ya nenosiri
Fail2ban husoma kumbukumbu za huduma, hugundua majaribio ya kuingia yaliyoshindwa yanayojirudia na kuzuia kwa muda anwani ya IP ya mshambuliaji kupitia firewall. Kulinda SSH inatosha kusakinisha kifurushi, kuunda /etc/fail2ban/jail.local yenye sehemu ya [sshd] (enabled = true, maxretry, findtime, bantime) na kuanzisha upya huduma; hali inakaguliwa kwa fail2ban-client status sshd.
Fail2ban ni daemon inayofuatilia kumbukumbu za huduma, inaona majaribio ya kuingia yaliyoshindwa yanayojirudia, na kuzuia kwa muda anwani ya IP inayotoka kwenye majaribio hayo. Kwa SSH hii ni ulinzi rahisi zaidi dhidi ya majaribio ya nenosiri: roboti zinaacha kugonga seva baada ya makosa machache. Hapa chini ni usanidi wa fail2ban kuanzia usakinishaji hadi kukagua mabano na makosa ya kawaida.
Kwa nini fail2ban inahitajika ikiwa kuna funguo za SSH
Seva yoyote yenye bandari 22 wazi hupata majaribio ya kuingia kutoka kwa roboti dakika chache baada ya kuwashwa. Angalia mwenyewe:
$ sudo journalctl -u ssh --since "1 hour ago" | grep -c "Failed password"
412
Ikiwa kuingia kwa nenosiri kumezimwa na zinatumika funguo pekee, kubahatisha ufikiaji kunakuwa karibu haiwezekani. Lakini fail2ban bado ina manufaa: inapunguza kelele kwenye kumbukumbu, inapunguza mzigo kutoka kwa maelfu ya miunganisho, na inalinda dhidi ya makosa ya usanidi, pale kuingia kwa nenosiri kulipoachwa kimakosa. Ni safu ya pili ya ulinzi, si mbadala wa funguo.
Fail2ban inavyofanya kazi
Mantiki ina sehemu tatu:
- Kichujio (filter) — seti ya misemo ya kawaida inayotafuta mistari ya kumbukumbu inayoonyesha jaribio lililoshindwa na kutoa IP kutoka humo. Vichujio viko kwenye
/etc/fail2ban/filter.d/. - Kitendo (action) — kinachofanyika kwa mkiukaji: kuongeza sheria kwenye iptables, nftables, ufw au firewalld. Vitendo viko kwenye
/etc/fail2ban/action.d/. - Jela (jail) — mchanganyiko wa kichujio, kitendo, chanzo cha kumbukumbu na vizingiti. Kwa mfano, jail
sshdinafuatilia kumbukumbu za SSH.
Ikiwa ndani ya findtime kutoka IP moja kumepatikana mechi maxretry, anwani inazuiwa kwa bantime. Baada ya muda huo kuisha, zuio linaondolewa kiotomatiki.
Kusakinisha fail2ban
Kwenye Debian na Ubuntu:
sudo apt update
sudo apt install fail2ban
Kwenye RHEL, Rocky, AlmaLinux kifurushi kinapatikana kwenye hazina ya EPEL:
sudo dnf install epel-release
sudo dnf install fail2ban
Washa kuanza kiotomatiki na kagua hali ya huduma:
sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban
Kwenye Debian na Ubuntu jail ya SSH tayari imewashwa kwa chaguo-msingi kupitia /etc/fail2ban/jail.d/defaults-debian.conf. Kwenye familia ya RHEL baada ya usakinishaji hakuna kilichowashwa — jails zinapaswa kuwashwa kwa mkono.
Mipangilio iko wapi: jail.conf na jail.local
Faili kuu ni /etc/fail2ban/jail.conf, lakini hairuhusiwi kuihariri: sasisho la kifurushi litaiandika upya. Mipangilio yako huwekwa kwenye /etc/fail2ban/jail.local au kwenye faili tofauti /etc/fail2ban/jail.d/*.local. Fail2ban husoma faili kwa mpangilio huu, na kila la baadaye linabatilisha la awali:
jail.confjail.d/*.confjail.localjail.d/*.local
Usinakili jail.conf yote kwenda jail.local — utaganda thamani za zamani za chaguo-msingi. Kwenye jail.local andika tu kile unachobadilisha.
Usanidi wa fail2ban kwa SSH: jail.local ya chini kabisa
Unda faili:
sudo nano /etc/fail2ban/jail.local
Na ongeza ndani yake:
[DEFAULT]
# Anwani zako ambazo hazitazuiwa kamwe
ignoreip = 127.0.0.1/8 ::1 203.0.113.10
bantime = 1h
findtime = 10m
maxretry = 5
# Chanzo cha kumbukumbu: jarida la systemd au faili
backend = systemd
[sshd]
enabled = true
port = ssh
maxretry = 3
Anzisha upya huduma na uhakikishe kwamba jail imeinuka:
$ sudo systemctl restart fail2ban
$ sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
Maana ya vigezo
| Kigezo | Maana | Mfano |
|---|---|---|
enabled | jail imewashwa au la | true |
port | bandari za kuzuia kwa mkiukaji | ssh, 2222, ssh,2222 |
maxretry | makosa mangapi yanaruhusiwa kabla ya zuio | 3 |
findtime | dirisha ambalo makosa yanahesabiwa | 10m |
bantime | muda wa zuio; -1 — milele | 1h, 1d |
ignoreip | anwani na subnet zisizozuiwa kamwe | 10.0.0.0/8 |
backend | chanzo cha kumbukumbu | systemd, auto |
logpath | njia ya faili la kumbukumbu kwa backend ya faili | /var/log/auth.log |
banaction | firewall gani itumike kuzuia | nftables-multiport, ufw |
Muda unaweza kuandikwa pamoja na viambishi: s, m, h, d, w. Namba isiyo na kiambishi huchukuliwa kama sekunde.
backend: systemd au faili
Kwenye Debian 12 na Ubuntu 24.04 za kisasa faili /var/log/auth.log huenda lisiwepo ikiwa rsyslog haijasakinishwa: kumbukumbu za SSH ziko kwenye jarida la systemd pekee. Hapo unahitaji backend = systemd, vinginevyo fail2ban haitaanza na itatoa kosa kwamba faili la kumbukumbu halikupatikana. Ikiwa rsyslog ipo, unaweza kubaki na chaguo la faili:
[sshd]
enabled = true
backend = auto
logpath = /var/log/auth.log
Kwenye mifumo ya RHEL faili linalolingana ni /var/log/secure.
SSH kwenye bandari isiyo ya kawaida
Ikiwa sshd inasikiliza, kwa mfano, bandari 2222, itaje kwenye jail — vinginevyo fail2ban itazuia bandari 22, na shambulio litaendelea kwenye 2222:
[sshd]
enabled = true
port = 2222
Kuzuia bandari zote kwa mkiukaji mmoja kunawezekana kwa kitendo iptables-allports au nftables-allports kupitia kigezo banaction.
Kuchagua firewall: iptables, nftables, ufw, firewalld
Kwa chaguo-msingi Debian hutumia banaction = nftables (kwenye matoleo ya zamani — iptables), na RHEL hutumia firewalld. Ikiwa ufw imesanidiwa kwenye seva, ni vizuri zaidi kwamba zuio lionekane humo:
[DEFAULT]
banaction = ufw
Kwa firewalld:
[DEFAULT]
banaction = firewallcmd-rich-rules
Ili kuthibitisha kwamba sheria zimeonekana kweli, tumia sudo nft list ruleset | grep f2b au sudo iptables -L -n | grep f2b: fail2ban huunda minyororo yenye kiambishi f2b-.
Jinsi ya kukagua kazi: fail2ban-client status
Zana kuu ya usimamizi ni fail2ban-client. Hali ya jail fulani:
$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 2
| |- Total failed: 147
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 4
|- Total banned: 38
`- Banned IP list: 45.148.10.12 92.118.39.7 185.224.128.40 218.92.0.112
Hapa unaona makosa mangapi yako kwenye dirisha sasa hivi, IP ngapi zimezuiwa, na ni zipi hasa. Ili kukagua ulinzi kwa vitendo, jaribu kuingia mara kadhaa kwa nenosiri lisilo sahihi kutoka kwenye kompyuta nyingine (si ile iliyo kwenye ignoreip) — baada ya jaribio la tatu muunganisho hautaanzishwa tena.
Kumbukumbu ya fail2ban yenyewe iko kwenye /var/log/fail2ban.log:
$ sudo tail -n 3 /var/log/fail2ban.log
2026-10-14 09:12:41,118 fail2ban.filter [812]: INFO [sshd] Found 218.92.0.112
2026-10-14 09:12:44,302 fail2ban.filter [812]: INFO [sshd] Found 218.92.0.112
2026-10-14 09:12:47,551 fail2ban.actions [812]: NOTICE [sshd] Ban 218.92.0.112
Jinsi ya kufungua IP kwenye fail2ban
Ikiwa umejizuia mwenyewe au mwenzako, ondoa zuio kutoka koni ya seva (kupitia paneli ya mtoa huduma au kutoka IP nyingine):
sudo fail2ban-client set sshd unbanip 203.0.113.25
Ondoa zuio zote kwenye jela zote:
sudo fail2ban-client unban --all
Zuia anwani kwa mkono bila kusubiri kichujio kiifanyie kazi:
sudo fail2ban-client set sshd banip 198.51.100.7
Ili historia isijirudie, weka anwani zako za kudumu au subnet ya ofisi yako kwenye ignoreip.
Zuio linaloongezeka kwa wakiukaji wanaorudia
Roboti nyingi hurudi mara tu zuio linapoondolewa. Kuanzia toleo la 0.11 fail2ban ina kuongeza muda wa zuio kwa wakiukaji wanaorudia:
[DEFAULT]
bantime = 1h
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 4w
Kila zuio linalofuata la IP ile ile litakuwa refu kuliko lililotangulia, lakini si zaidi ya wiki nne. Njia mbadala kwa matoleo ya zamani ni jail ya recidive, inayosoma kumbukumbu za fail2ban yenyewe na kuzuia kwa muda mrefu anwani zilizoonekana mara kadhaa:
[recidive]
enabled = true
logpath = /var/log/fail2ban.log
bantime = 1w
findtime = 1d
maxretry = 5
Kukagua kichujio: fail2ban-regex
Ikiwa jail inafanya kazi lakini haimzuii mtu yeyote, kagua kama kichujio kinapata mistari kwenye kumbukumbu. Kwa faili la kumbukumbu:
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
Kwa jarida la systemd:
sudo fail2ban-regex systemd-journal sshd
Katika matokeo angalia mstari wa Lines: ... matched. Sifuri ya mechi inamaanisha kichujio hakilingani na muundo wa kumbukumbu, au chanzo kilichotajwa si sahihi. Kabla ya kuanzisha upya ni vizuri kukagua sintaksia ya usanidi mzima:
sudo fail2ban-client -t
Makosa ya kawaida
- Huduma haianzi: «Have not found any log file for sshd jail». Hakuna
/var/log/auth.log. Wekabackend = systemdau sakinisha rsyslog. - Mabano yapo kwenye hali lakini shambulio linaendelea. Bandari si sahihi (SSH imehamishwa) au sheria za firewall zinafunikwa na ruhusa ya awali. Kagua
portna matokeo yanft list ruleset. - Mabadiliko hayakuanza kutumika. Umehariri
jail.conf, lakinijail.localaujail.d/*.localina thamani nyingine. Angalia thamani ya mwisho:sudo fail2ban-client get sshd maxretry. - Umejizuia mwenyewe. Ondoa zuio kupitia koni na uweke IP yako kwenye
ignoreip. - Fail2ban kwenye Docker haioni mashambulio. Bandari za kontena zinachapishwa kupitia mnyororo wa DOCKER, ambao unapita INPUT. Kwa huduma kama hizi tumia
chain = DOCKER-USERkwenye kitendo.
Mambo mengine ya kufanya kulinda SSH
Fail2ban hufanya kazi vizuri zaidi pamoja na hatua za msingi kwenye /etc/ssh/sshd_config:
PasswordAuthentication no
PermitRootLogin no
MaxAuthTries 3
Baada ya kuhariri, kagua usanidi kwa sudo sshd -t kisha anzisha upya huduma. Usifunge kikao chako cha sasa mpaka uhakikishe kwa kikao kipya kwamba kuingia kwa funguo kunafanya kazi. Zaidi ya hayo, unaweza kuzuia ufikiaji wa SSH kwenye kiwango cha firewall kwa anwani zinazohitajika tu.
Hitimisho
Usanidi wa fail2ban unakuja kwa hatua chache: sakinisha kifurushi, unda jail.local yenye sehemu ya [sshd], chagua backend na bandari sahihi, weka maxretry, findtime na bantime, ongeza anwani zako kwenye ignoreip, na uthibitishe kazi kwa fail2ban-client status sshd. Pamoja na kuingia kwa funguo pekee, hii inalinda SSH kwa uhakika dhidi ya majaribio ya nenosiri. Ulinzi wa seva na fail2ban umefafanuliwa kwa vitendo katika kozi ya Linux.
Maswali ya mara kwa mara
Je, fail2ban ni lazima ikiwa kuingia kwa nenosiri kumezimwa?
Si lazima, lakini ni muhimu: inaondoa maelfu ya majaribio ya takataka kwenye kumbukumbu, inapunguza mzigo, na inakulinda ikiwa mtu atawasha tena kuingia kwa nenosiri kimakosa.
Ninawezaje kuona IP zote zilizozuiwa kwenye jail zote?
Endesha sudo fail2ban-client banned — amri inaonyesha orodha ya anwani zilizozuiwa kwa kila jail. Kwa jail moja tumia fail2ban-client status sshd.
Je, mabano yanaendelea baada ya seva kuwashwa upya?
Ndiyo. fail2ban huhifadhi mabano kwenye hifadhidata yake ya SQLite (/var/lib/fail2ban/fail2ban.sqlite3) na kurejesha zuio zilizo hai wakati wa kuanza, isipokuwa parameter ya dbpurgeage iliyoziondoa mapema.
Je, fail2ban inaweza kulinda huduma nyingine pia, si SSH tu?
Ndiyo, kuna vichujio vya nginx, Apache, Postfix, Dovecot na huduma nyingine. Inatosha kuwasha jail inayohitajika kwenye jail.local, kwa mfano [nginx-http-auth] yenye enabled = true.
Fail2ban inatofautiana vipi na kizuizi cha firewall?
Firewall huruhusu au hukataza anwani kwa njia ya kudumu, wakati fail2ban huzuia kwa nguvu wale waliojionyesha kwenye kumbukumbu. Mara nyingi zinatumika pamoja: orodha ya ruhusa kwenye firewall na fail2ban kwa kila kitu kingine.
Mada hii inafundishwa kwa kina pamoja na mazoezi katika kozi “Linux: с нуля до уверенного администрирования”.
Nenda kwenye kozi