Fail2ban: pag-set up ng proteksyon ng SSH laban sa brute force
Binabasa ng fail2ban ang mga log ng serbisyo, hinahanap ang paulit-ulit na pagkabigo sa login, at pansamantalang hinaharangan ang IP ng umaatake sa pamamagitan ng firewall. Para sa proteksyon ng SSH, sapat nang i-install ang package, gumawa ng /etc/fail2ban/jail.local na may seksyong [sshd] (enabled = true, maxretry, findtime, bantime), at i-restart ang serbisyo; sinusuri ang estado gamit ang fail2ban-client status sshd.
Ang fail2ban ay daemon na nagbabantay sa mga log ng serbisyo, nakakapansin ng paulit-ulit na pagkabigo sa login, at pansamantalang hinaharangan ang IP address na pinanggalingan nila. Para sa SSH, ito ang pinakasimpleng proteksyon laban sa brute force ng password: tumitigil ang mga bot sa pagkatok sa server pagkatapos ng ilang maling pagtatangka. Sa ibaba ang fail2ban setup mula sa pag-install hanggang sa pagsusuri ng mga ban at karaniwang mga pagkakamali.
Bakit kailangan ang fail2ban kung may SSH key naman
Anumang server na may bukas na port 22 ay makakatanggap ng mga pagtatangka sa login mula sa mga bot ilang minuto matapos itong simulan. Tingnan mo mismo:
$ sudo journalctl -u ssh --since "1 hour ago" | grep -c "Failed password"
412
Kapag naka-off ang login gamit ang password at key lamang ang ginagamit, halos imposibleng mahulaan ang access. Pero kapaki-pakinabang pa rin ang fail2ban: inaalis nito ang ingay sa mga log, binabawasan ang load mula sa libu-libong koneksyon, at pinoprotektahan laban sa pagkakamali sa configuration, kapag hindi sinasadyang naiwang naka-on ang login gamit ang password. Ito ay pangalawang layer ng proteksyon, hindi kapalit ng mga key.
Paano gumagana ang fail2ban
Tatlong bahagi ang lohika:
- Filter — set ng regular expression na naghahanap ng mga linya ng hindi matagumpay na pagtatangka sa log at kumukuha ng IP mula sa mga ito. Nasa
/etc/fail2ban/filter.d/ang mga filter. - Action — ang gagawin sa lumalabag: magdagdag ng rule sa iptables, nftables, ufw o firewalld. Nasa
/etc/fail2ban/action.d/ang mga action. - Jail — ang pag-uugnay ng filter, action, pinagmulan ng log, at mga threshold. Halimbawa, binabantayan ng jail na
sshdang log ng SSH.
Kapag umabot ng maxretry ang tugma mula sa iisang IP sa loob ng findtime, mao-ban ang address sa loob ng bantime. Awtomatikong natatanggal ang ban pagkatapos ng takdang oras.
Pag-install ng fail2ban
Sa Debian at Ubuntu:
sudo apt update
sudo apt install fail2ban
Sa RHEL, Rocky, AlmaLinux, nasa repository na EPEL ang package:
sudo dnf install epel-release
sudo dnf install fail2ban
I-enable ang autostart at suriin ang estado ng serbisyo:
sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban
Sa Debian at Ubuntu, naka-on na ang jail para sa SSH bilang default sa pamamagitan ng /etc/fail2ban/jail.d/defaults-debian.conf. Sa pamilya ng RHEL, walang naka-on pagkatapos ng install, kaya kailangang i-activate nang manu-mano ang mga jail.
Saan nakaimbak ang mga setting: jail.conf at jail.local
Ang pangunahing file ay /etc/fail2ban/jail.conf, pero huwag itong i-edit: mabubura ito kapag na-update ang package. Ang sarili mong setting ay inilalagay sa /etc/fail2ban/jail.local o sa hiwalay na file na /etc/fail2ban/jail.d/*.local. Binabasa ng fail2ban ang mga file sa ganitong pagkakasunod-sunod, at ang bawat susunod ay nagpapalit sa naunang halaga:
jail.confjail.d/*.confjail.localjail.d/*.local
Huwag kopyahin ang buong jail.conf sa jail.local — mao-freeze mo ang mga lumang default. Sa jail.local, isulat lamang ang binabago mo.
Fail2ban setup para sa SSH: minimal na jail.local
Gumawa ng file:
sudo nano /etc/fail2ban/jail.local
At idagdag dito:
[DEFAULT]
# Sarili mong mga address na hindi kailanman bu-ban-in
ignoreip = 127.0.0.1/8 ::1 203.0.113.10
bantime = 1h
findtime = 10m
maxretry = 5
# Saan kukuha ng log: systemd journal o mga file
backend = systemd
[sshd]
enabled = true
port = ssh
maxretry = 3
I-restart ang serbisyo at tiyaking tumatakbo ang jail:
$ sudo systemctl restart fail2ban
$ sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
Ano ang ibig sabihin ng mga parameter
| Parameter | Kahulugan | Halimbawa |
|---|---|---|
enabled | naka-on ba ang jail | true |
port | port na i-b-block para sa lumalabag | ssh, 2222, ssh,2222 |
maxretry | ilang pagkakamali ang pinapayagan bago ang ban | 3 |
findtime | panahon kung saan binibilang ang mga pagkakamali | 10m |
bantime | haba ng ban; -1 — habambuhay | 1h, 1d |
ignoreip | mga address at subnet na hindi bu-ban-in | 10.0.0.0/8 |
backend | pinagmulan ng log | systemd, auto |
logpath | path ng log file kapag file ang backend | /var/log/auth.log |
banaction | aling firewall ang gagamitin sa pag-ban | nftables-multiport, ufw |
Puwedeng isulat ang oras na may suffix: s, m, h, d, w. Ang mga numerong walang suffix ay itinuturing na segundo.
backend: systemd o file
Sa modernong Debian 12 at Ubuntu 24.04, maaaring walang /var/log/auth.log kung hindi naka-install ang rsyslog: nasa systemd journal lamang ang mga log ng SSH. Sa ganitong kaso kailangan ang backend = systemd, kung hindi, hindi magsisimula ang fail2ban at magrereklamo na walang nakitang log file. Kung may rsyslog naman, puwede mong panatilihin ang file-based na setup:
[sshd]
enabled = true
backend = auto
logpath = /var/log/auth.log
Sa mga RHEL system, ang katumbas na file ay /var/log/secure.
SSH sa hindi karaniwang port
Kung nakikinig ang sshd sa halimbawang port 2222, ilagay ito sa jail — kung hindi, hi-ban ng fail2ban ang port 22 habang nagpapatuloy ang atake sa 2222:
[sshd]
enabled = true
port = 2222
Maaaring i-block ang lahat ng port para sa lumalabag gamit ang action na iptables-allports o nftables-allports sa pamamagitan ng parameter na banaction.
Pagpili ng firewall: iptables, nftables, ufw, firewalld
Bilang default, ang banaction = nftables ang gamit sa Debian (sa mga lumang bersyon, iptables), at firewalld naman sa RHEL. Kung may naka-set up na ufw sa server, mas mainam na makita sa ufw ang mga ban:
[DEFAULT]
banaction = ufw
Para sa firewalld:
[DEFAULT]
banaction = firewallcmd-rich-rules
Para makumpirmang lumitaw nga ang mga rule, patakbuhin ang sudo nft list ruleset | grep f2b o sudo iptables -L -n | grep f2b: gumagawa ang fail2ban ng mga chain na may prefix na f2b-.
Paano suriin ang gumagana: fail2ban-client status
Ang pangunahing tool sa pamamahala ay ang fail2ban-client. Estado ng isang partikular na jail:
$ 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
Dito makikita kung ilang pagkakamali ang nasa kasalukuyang window, ilang IP ang naka-ban, at alin-alin ang mga ito. Para subukan ang proteksyon nang totoo, sumubok ng ilang beses na mag-login nang maling password mula sa ibang makina (hindi ang nasa ignoreip) — pagkatapos ng ikatlong pagtatangka, hindi na maitatatag ang koneksyon.
Ang sariling log ng fail2ban ay nasa /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
Paano mag-unban ng IP sa fail2ban
Kung na-ban mo ang sarili mo o ang kasamahan mo, alisin ang ban mula sa console ng server (sa pamamagitan ng panel ng hosting o mula sa ibang IP):
sudo fail2ban-client set sshd unbanip 203.0.113.25
Para alisin ang lahat ng ban sa lahat ng jail:
sudo fail2ban-client unban --all
Para mag-ban ng address nang manu-mano, nang hindi hinihintay ang filter:
sudo fail2ban-client set sshd banip 198.51.100.7
Para hindi na maulit ang problema, idagdag ang sarili mong static na address o ang subnet ng opisina sa ignoreip.
Tumataas na ban para sa paulit-ulit na lumalabag
Maraming bot ang bumabalik agad pagkatapos ma-unban. Mula bersyon 0.11, may pagtaas ng haba ng ban para sa paulit-ulit na lumalabag ang fail2ban:
[DEFAULT]
bantime = 1h
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 4w
Mas mahaba ang bawat susunod na ban ng parehong IP kaysa sa nauna, pero hindi lalampas sa apat na linggo. Alternatibo para sa mas lumang bersyon ang jail na recidive, na binabasa ang log ng mismong fail2ban at matagal na nagba-ban ng mga address na nahuli nang ilang beses:
[recidive]
enabled = true
logpath = /var/log/fail2ban.log
bantime = 1w
findtime = 1d
maxretry = 5
Pagsubok ng filter: fail2ban-regex
Kung tumatakbo ang jail pero walang nababan, tingnan kung nakakahanap ng mga linya sa log ang filter. Para sa file log:
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
Para sa systemd journal:
sudo fail2ban-regex systemd-journal sshd
Sa output, tingnan ang linyang Lines: ... matched. Kapag zero ang tugma, hindi tugma ang filter sa format ng mga log o mali ang pinagmulan. Bago mag-restart, makabuluhang suriin din ang syntax ng buong configuration:
sudo fail2ban-client -t
Mga karaniwang pagkakamali
- Hindi nagsisimula ang serbisyo: "Have not found any log file for sshd jail". Walang
/var/log/auth.log. Ilagay angbackend = systemdo mag-install ng rsyslog. - May mga ban sa status pero tuloy ang atake. Maling port ang nakalagay (nalipat ang SSH) o may naunang pumapayag na rule ng firewall na nagko-cover. Suriin ang
portat ang output ngnft list ruleset. - Hindi nag-apply ang mga pagbabago. Binago ang
jail.conf, pero may ibang halaga sajail.localo sajail.d/*.local. Tingnan ang aktuwal na halaga:sudo fail2ban-client get sshd maxretry. - Nai-ban ang sarili. Mag-unban mula sa console at idagdag ang IP sa
ignoreip. - Hindi nakikita ng fail2ban sa Docker ang mga atake. Dumadaan ang mga port ng container sa chain na DOCKER na lumalampas sa INPUT. Para sa ganitong mga serbisyo, gamitin ang
chain = DOCKER-USERsa action.
Ano pa ang dapat gawin para sa proteksyon ng SSH
Mahusay gumana ang fail2ban kasama ng mga pangunahing hakbang sa /etc/ssh/sshd_config:
PasswordAuthentication no
PermitRootLogin no
MaxAuthTries 3
Pagkatapos ng pagbabago, suriin ang config gamit ang sudo sshd -t at i-restart ang serbisyo. Huwag isara ang kasalukuyang session hangga't hindi nakukumpirmang gumagana ang login gamit ang key sa bagong session. Puwede ring limitahan ang access sa SSH sa firewall para sa mga address na kailangan lamang.
Buod
Ang fail2ban setup ay binubuo ng ilang hakbang: i-install ang package, gumawa ng jail.local na may seksyong [sshd], piliin ang tamang backend at port, itakda ang maxretry, findtime at bantime, idagdag ang sarili mong mga address sa ignoreip, at suriin ang gumagana gamit ang fail2ban-client status sshd. Kasama ng login gamit lamang ang key, mapagkakatiwalaan nitong isinasara ang SSH laban sa brute force ng password. Ang proteksyon ng server at ng fail2ban ay ipinapaliwanag din nang praktikal sa kursong Linux.
Mga madalas itanong
Kailangan pa ba ang fail2ban kung naka-off na ang login gamit ang password?
Hindi ito sapilitan, pero kapaki-pakinabang: inaalis nito ang libu-libong basurang pagtatangka sa log, binabawasan ang load, at nagbibigay ng dagdag na proteksyon kung sakaling aksidenteng ma-on muli ang login gamit ang password.
Paano makita ang lahat ng naka-block na IP sa lahat ng jail?
Patakbuhin ang sudo fail2ban-client banned: ipapakita nito ang listahan ng mga naka-ban na address bawat jail. Para sa isang jail lamang, gamitin ang fail2ban-client status sshd.
Nananatili ba ang mga ban pagkatapos mag-reboot ng server?
Oo, iniimbak ng fail2ban ang mga ban sa SQLite database nito (/var/lib/fail2ban/fail2ban.sqlite3) at ibinabalik ang mga aktibong ban sa pagsisimula, maliban kung nabura na ang mga ito dahil sa dbpurgeage.
Puwede bang protektahan ng fail2ban ang iba pa bukod sa SSH?
Oo, kasama ang mga filter para sa nginx, Apache, Postfix, Dovecot at iba pang serbisyo. Sapat nang i-enable ang kailangang jail sa jail.local, halimbawa ang [nginx-http-auth] na may enabled = true.
Ano ang pagkakaiba ng fail2ban at ng limitasyon sa firewall?
Static na pinapayagan o ipinagbabawal ng firewall ang mga address, habang dinamikong binabantayan ng fail2ban ang mga nagpakita ng kakaibang aktibidad sa log. Madalas itong pinagsasama: whitelist sa firewall at fail2ban para sa iba pa.
Detalyadong tinatalakay ang paksang ito, may praktis, sa kursong “Linux: с нуля до уверенного администрирования”.
Pumunta sa kurso