Ubuntu 24.04లో Fail2banతో SSH botsను ఆపడం
Ubuntu 24.04లో సాధారణ apt installతోనే SSH brute force bans పనిచేస్తాయి. fail2ban-client status sshd outputలో ఆధారం చూడండి; Total failed 0 అయితే పరిష్కారం తెలుసుకోండి.
Fail2ban వాస్తవంగా ఏమి చేస్తుంది
Fail2ban అనేది logs చదివే daemon. ఇది మీ SSH authentication messages ను పర్యవేక్షిస్తుంది. తక్కువ వ్యవధిలో ఒకే address నుంచి అనేక authentication failures వస్తే, ఆ address ను కొంతకాలం block చేసే firewall command ను ఇది అమలు చేస్తుంది. మొత్తం భావన ఇదే. ఒకే file లో సుమారు 30 lines configuration ఉంటుంది. Ubuntu 24.04లో ఒకే apt command తో install చేయవచ్చు. మీరు ఏదీ edit చేయకముందే ఇది రక్షణను అందిస్తుంది.
ఇది ఏమిటో, ఏమి కాదో స్పష్టంగా తెలుసుకోండి. Fail2ban ఎవరినీ authenticate చేయదు. ఏదీ encrypt చేయదు. ఒకే నిర్ధారిత login attempt ను కూడా ఆపదు. ఒకే source నుంచి పునరావృతమయ్యే attempts ను మాత్రమే అడ్డుకుంటుంది. ఇది noise filter మరియు rate limiter మాత్రమే; lock కాదు. Port 22 పై నిరంతరం జరిగే background scanning వల్ల CPU, bandwidth, log space వృథా కాకుండా చూడటం దీని పని. ఒక్కోసారి ఒకే address నుంచి రావాల్సి ఉన్న attacker వేగాన్ని కూడా ఇది తగ్గిస్తుంది.
Fail2ban భర్తీ చేయలేనివి
Fail2ban మొదటి రక్షణ పొర కాదు; ఇది మూడవ పొర. మీ server ఇప్పటికీ SSH passwords ను అంగీకరిస్తే, వేలాది addresses లో విస్తరించిన botnet నిరంతరం passwords ను ఊహిస్తూ ఉండవచ్చు. ప్రతి address మీ ban threshold కంటే తక్కువగానే ఉండటం వల్ల ban ఎప్పటికీ అమలు కాకపోవచ్చు. దీనికి నిజమైన రక్షణ key-only authentication. ఎన్ని attempts చేసినా password guessing సాధ్యం కాకుండా ఇది నిరోధిస్తుంది.
Key-only authentication పై Fail2ban అమలు చేసినప్పుడు రెండు ఉపయోగకరమైన పనులు చేస్తుంది. ఇది మీ logs లోని brute-force శబ్దాన్ని తగ్గిస్తుంది. అలాగే scanners ను ప్రారంభ దశలోనే తొలగించి, port పై నిరంతరం requests పంపకుండా ఆపుతుంది. దీన్ని defence in depth విధానంగా పరిగణించండి. ఇది key authentication మరియు firewall రెండింటి వెనుక పనిచేస్తుంది; వాటికి ముందు కాదు.
అవసరాలు మరియు Ubuntu 24.04 యొక్క వాస్తవ పరిస్థితి
మీకు root లేదా sudo అనుమతితో Ubuntu 24.04 నడుస్తున్న VPS అవసరం. SSH ఇప్పటికే పనిచేస్తూ ఉండాలి. సాధ్యమైనప్పుడు key authentication ఉపయోగించండి. Fail2ban చాలా తక్కువ వనరులను ఉపయోగిస్తుంది. దీనికి కొన్ని పదుల MB RAM మాత్రమే అవసరం. limits ను ప్రత్యేకంగా tune చేయాల్సిన అవసరం లేదు.
ఇప్పుడు పాత guides అన్నీ తప్పుగా వివరించే అంశం. చాలా సంవత్సరాలుగా సాధారణంగా ఇచ్చిన సలహా: "Fail2ban ను install చేసి, తరువాత backend = systemd ను జోడించండి, ఎందుకంటే Ubuntu /var/log/auth.log రాయడం ఆపేసింది." ఈ సలహా నిజంగా జరిగిన మార్పును వివరిస్తుంది. ఆధునిక server మరియు cloud images లో rsyslog ఉండదు. అందువల్ల SSH logs systemd journal కు మాత్రమే వెళ్తాయి. ఆ text file ఉండదు. అయితే Ubuntu 24.04 లోని Fail2ban package దీనిని ఇప్పటికే నిర్వహిస్తుంది. Package /etc/fail2ban/jail.d/defaults-debian.conf ను అందిస్తుంది. Upstream defaults కాకుండా, మీ server వాస్తవంగా ఉపయోగించేది ఈ file:
[DEFAULT]
banaction = nftables
banaction_allports = nftables[type=allports]
backend = systemd
[sshd]
enabled = trueదీనిని జాగ్రత్తగా చదవండి. మీరు ఏదైనా మార్చకముందే ఇది రెండు ప్రశ్నలకు సమాధానం ఇస్తుంది. backend = systemd అంటే SSH jail journal ను చదువుతుంది. కాబట్టి auth.log లేకపోవడం సమస్య కాదు. banaction = nftables అంటే bans ను nftables ద్వారా అమలు చేస్తుంది. Ubuntu 24.04 వాస్తవంగా ఉపయోగించే firewall ఇదే. పాత iptables కాదు. [sshd] enabled = true అంటే మొదటి boot నుంచే jail ప్రారంభమై ఉంటుంది. సారాంశంగా, Ubuntu 24.04 లోని stock apt install fail2ban SSH brute-force ప్రయత్నాలను default గా అడ్డుకుంటుంది. మీ పనిలో ఎక్కువ భాగం దీనిని నిర్ధారించడం, policy ను tune చేయడం, అలాగే మీరే server నుంచి lock out కాకుండా చూసుకోవడం.
పాత auth.log సమస్య ఇప్పటికీ మూడు పరిస్థితుల్లో కనిపిస్తుంది. వాటిని గుర్తించడం ఉపయోగకరం: మీరు Fail2ban ను pip తో కాకుండా apt తో install చేసి ఉండవచ్చు. అప్పుడు defaults-debian.conf ఉండదు. మీరు systemd journal చదవలేని unprivileged container లో ఉండవచ్చు. లేదా పాత tutorial ను అనుసరించి backend = auto ను మీ స్వంత jail.local లోకి paste చేసి ఉండవచ్చు. దాంతో పనిచేస్తున్న default override అవుతుంది. Failure modes విభాగంలో ప్రతి పరిస్థితి ఎలా కనిపిస్తుందో ఖచ్చితంగా చూపిస్తాం.
దశ 1: దీన్ని ఇన్స్టాల్ చేసి, ఇప్పటికే ban చేస్తున్నదని నిర్ధారించండి
sudo apt update
sudo apt install -y fail2banUbuntu 24.04 లో Fail2ban 1.0.2 విడుదలగా అందుతుంది. ఈ package కు python3-systemd తప్పనిసరి dependency గా అవసరం. అందువల్ల journal backend కు కావలసినవన్నీ అందుబాటులో ఉంటాయి. Service స్వయంగా enable అయి start అవుతుంది:
sudo systemctl status fail2banమీకు active (running) కావాలి. తరువాత ఇప్పటికే పనిచేస్తున్న jail ను పరిశీలించండి:
sudo fail2ban-client status sshdకొన్ని నిమిషాల పాటు అయినా public VPS internet కు అందుబాటులో ఉంటే, failures లెక్కించబడటం మరియు addresses ban కావడం సాధారణంగా కనిపిస్తుంది. Internet నిరంతరం port 22 ను scan చేస్తుంది. Stock config సరిగ్గా పనిచేస్తోందనడానికి ఇదే ఆధారం. ఇక్కడి నుంచి మీరు దాన్ని మెరుగుపరుస్తున్నారు; మొదటి నుంచి నిర్మించడం లేదు.
దశ 2: jail.local ను మాత్రమే సవరించండి; jail.conf ను సవరించవద్దు
Fail2ban తన upstream డిఫాల్ట్లను /etc/fail2ban/jail.conf లో ఉంచుతుంది. ఆ ఫైల్ను సవరించవద్దు. ప్యాకేజీకి సంబంధించిన ప్రతి apt upgrade దాన్ని భర్తీ చేయవచ్చు; అప్పుడు మీ మార్పులు ఎలాంటి హెచ్చరిక లేకుండా పోతాయి. Fail2ban ఫైళ్లను నిర్దిష్ట క్రమంలో చదువుతుంది: ముందుగా jail.conf, తరువాత jail.d/ లోని ప్రతిదీ, ఆపై jail.local. చివరిగా చదివిన విలువ అమలవుతుంది. .local ఫైల్ మీ కోసం ఉంటుంది; ప్యాకేజీ upgradeలు దాన్ని ఎప్పటికీ సవరించవు. ఇదే నియమం filters కు కూడా వర్తిస్తుంది. అక్కడ shipped filter.d/*.conf ను *.local ఫైల్ భర్తీ చేస్తుంది.
అందువల్ల, మీకు అవసరమైన కొద్దిపాటి settings ను మాత్రమే భర్తీ చేసే చిన్న jail.local ను రాయండి. jail.conf మరియు packaged jail.d/defaults-debian.conf రెండింటినీ reference కోసం అలాగే ఉంచండి.
దశ 3: /etc/fail2ban/jail.local రాయండి
sudo nano /etc/fail2ban/jail.localఇక్కడి కంటెంట్ను చేర్చండి. ignoreip పంక్తిలోని address ను మీ స్వంత public IP తో మార్చండి:
[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 = trueప్రతి పంక్తికి ఒక నిర్దిష్ట ఉద్దేశం ఉంది:
bantime,findtime,maxretrypolicyని నిర్వచిస్తాయి. విడుదలయ్యే defaultbantimeకేవలం పది నిమిషాలు మాత్రమే; ఒక గంట మరింత సముచితమైన కనిష్ఠ వ్యవధి. ఒకే address నుంచి పది నిమిషాల్లో ఐదు విఫల ప్రయత్నాలు జరిగితే ban అమలవుతుంది. నిజమైన వినియోగదారులు password ను ఒకటి లేదా రెండుసార్లు తప్పుగా నమోదు చేయవచ్చు; పది నిమిషాల్లో ఐదు విఫల ప్రయత్నాలు జరిగితే అది script అయి ఉండే అవకాశం ఎక్కువ.ignoreipమీ safety belt. మీరు కనెక్ట్ నుండి వచ్చే public address ను ఇక్కడ చేర్చండి. అప్పుడు Fail2ban మీ స్వంత server నుంచి మిమ్మల్ని ఎప్పటికీ బయటకు lock చేయదు. IP మారుతూ ఉండే home connection ఉంటే, ఈ పంక్తిని వదిలేయడానికి అది కారణం కాదు; చివర్లో ఉన్న VPN విధానాన్ని ఎంచుకోవడానికి అది కారణం.bantime.increment = trueప్రతి repeat ban ను మునుపటి దానికంటే ఎక్కువసేపు అమలు చేస్తుంది: మొదట ఒక గంట, తరువాత రెండు, ఆపై నాలుగు గంటలు, గరిష్ఠంగాbantime.maxtimeవరకు. మళ్లీ మళ్లీ వచ్చే addresses క్రమంగా ఎక్కువసేపు lock out అవుతాయి.
మీరు SSH ద్వారా కనెక్ట్ అయ్యే machine నుంచి whitelist చేయాల్సిన address ను కనుగొనండి; server నుంచి కాదు:
curl -s ifconfig.meమీ ports మరియు ban policyకి అనుగుణంగా రూపొందించిన jail.local ను ఇక్కడ generate చేసి, తరువాత దాన్ని fileలో paste చేయవచ్చు:
దశ 4: దాన్ని పునఃప్రారంభించి journal ను చదువుతోందో ధృవీకరించండి
sudo fail2ban-client -t
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd-t ముందుగా config test ను అమలు చేస్తుంది. అందువల్ల jail.local లోని typing తప్పు ఇక్కడే స్పష్టంగా విఫలమవుతుంది; service పనిచేయకుండా మిగిలిపోదు. సరిగ్గా పనిచేస్తున్న jail status ఇలా ఉంటుంది:
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.66Fail2ban మీ login ప్రయత్నాలను నిజంగా చదువుతోందని నిరూపించే సంఖ్య Total failed. అది zero కంటే ఎక్కువగా ఉంటే, లేదా మరొక machine నుంచి login ను ఉద్దేశపూర్వకంగా విఫలపరిచినప్పుడు పెరిగితే, journal చదవబడుతోంది. పని పూర్తయింది. మీరు ఎన్నిసార్లు login ను విఫలపరిచినా అది 0 వద్దే ఉంటే, అలాగే ignoreip లోని address నుంచి testing చేయడం లేదని నిర్ధారించుకుంటే, దిగువ failure modes విభాగానికి వెళ్లండి.
Journal matches line ఇప్పటికీ sshd.service పేరును చూపిస్తోందని గమనించండి. Ubuntu లో SSH unit వాస్తవానికి ssh.service. అయితే అందించిన filter _COMM=sshd పై కూడా match అవుతుంది. OpenSSH 24.04 తన failures ను sshd పేరున్న process నుంచి log చేస్తుంది. అందువల్ల match పనిచేస్తుంది. మీరు కొత్త OpenSSH (9.8 లేదా ఆ తర్వాతి version) ఉపయోగిస్తున్నప్పుడు మాత్రమే ఈ వివరానికి ప్రాధాన్యం ఉంటుంది. ఆ version లో ప్రతి connection కోసం worker sshd-session. ఆ సందర్భాన్ని failure modes విభాగం వివరిస్తుంది.
దశ 5: నిజమైన ban అమలవడాన్ని చూడండి లేదా పరీక్ష కోసం ఒకదాన్ని బలవంతంగా అమలు చేయండి
ఏదైనా public VPSలో నిజమైన banలు కొన్ని నిమిషాల్లో స్వయంచాలకంగా వస్తాయి. ఒక banను చూడటానికి logను tail చేయండి:
sudo tail -f /var/log/fail2ban.logBan ఇలా కనిపిస్తుంది:
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.66వేచి ఉండకుండా మొత్తం విధానం end-to-endగా పనిచేస్తోందని నిర్ధారించడానికి, documentation కోసం ఉపయోగించే addressను చేతితో ban చేయండి. మీ స్వంత addressను ఎప్పుడూ ban చేయవద్దు:
sudo fail2ban-client set sshd banip 10.0.0.66ఇది 1 ను ముద్రిస్తుంది. ఆ address fail2ban-client status sshd లోని Banned IP list కింద కనిపిస్తుంది. ఇప్పుడు firewallలో block నిజంగా ఉందో నిర్ధారించండి. Ubuntu 24.04లో ఇది iptables కాదు, nftables:
sudo nft list table inet f2b-table10.0.0.66 ను కలిగి ఉన్న addr-set-sshd అనే set, అలాగే ఆ setలోని ఏ sourceనైనా reject చేసే f2b-chain అనే chain కనిపిస్తాయి. fail2ban-client ప్రకారం ఒక address banned అని కనిపిస్తున్నా, nft list లో ఏదీ కనిపించకపోతే, మీ ban action firewallతో సరిపోలడం లేదు. Failure modesలోని nftables/iptables గమనికను చూడండి.
దశ 6: మీపై విధించిన ban ను తొలగించండి; యాక్సెస్ కోల్పోతే పునరుద్ధరించండి
తప్పుగా ban చేసిన, మీకు చెందిన address ను తొలగించండి:
sudo fail2ban-client set sshd unbanip 10.0.0.66విజయవంతమైతే ఇది 1 ను చూపిస్తుంది. ప్రతి jail లోని అన్ని ban లను తొలగించడానికి:
sudo fail2ban-client unban --allమిమ్మల్ని రక్షించడానికి ఇప్పటికే తెరిచి ఉన్న SSH session పై ఆధారపడవద్దు. nftables ban విధించిన address నుంచి port 22 కు వచ్చే ప్రతి packet ను తిరస్కరిస్తుంది. Established connections కూడా దీనికి మినహాయింపు కావు. అందువల్ల ban అమలైన వెంటనే ఇప్పటికే ఉన్న session నిలిచిపోతుంది. మీరు మీ address ను ban చేసి, ignoreip entry లేకపోతే, ban గడువు ముగిసే వరకు యాక్సెస్ కోల్పోతారు. SSH ద్వారా కాకుండా పనిచేసే మీ provider యొక్క web console (VNC లేదా serial) ద్వారా recovery చేయండి. అక్కడ bantime ముగిసే వరకు వేచి ఉండండి లేదా unban command ను అమలు చేయండి.
దశ 7: bans ను నిరంతరంగా ఉంచి, క్రమంగా పెంచండి
Fail2ban చురుకుగా ఉన్న bans ను /var/lib/fail2ban/fail2ban.sqlite3 వద్ద ఉన్న చిన్న SQLite database లో ఉంచుతుంది. అందువల్ల service restart లేదా reboot తర్వాత కూడా అవి కొనసాగుతాయి; వాటిని కోల్పోరు. మీరు ఇప్పటికే జోడించిన bantime.increment lines ప్రతి repeat offender కు తనకే పెరుగుతున్న సమస్యను సృష్టిస్తాయి. ఈ వ్యవధి సుమారు ఒక గంట నుంచి ఒక వారం వరకు దాదాపు రెట్టింపు అవుతుంది.
దీనికి అదనంగా system-wide "three strikes" విధానాన్ని అమలు చేయడానికి, Fail2ban తన స్వంత /var/log/fail2ban.log ను పర్యవేక్షించే recidive jail ను అందిస్తుంది. అన్ని jails లో పలుమార్లు ban చేయబడిన ఏ address కైనా ఈ jail దీర్ఘకాల bans ఇస్తుంది. మీ [DEFAULT] ఇప్పుడు systemd backend ను ఉపయోగిస్తున్నందున, ఈ jail ను అది చదవడానికి రూపొందించిన log file కు మళ్లీ నిర్దేశించండి:
[recidive]
enabled = true
backend = auto
logpath = /var/log/fail2ban.log
bantime = 1w
findtime = 1d
maxretry = 5స్పష్టంగా ఇచ్చిన logpath తో కూడిన backend = auto వల్ల recidive plain fail2ban.log ను చదువుతుంది. లెక్కించాల్సిన Ban lines వాస్తవంగా అక్కడే కనిపిస్తాయి. మీరు globally set చేసిన systemd default మాత్రం దానిని journal వైపు చూపిస్తుంది; అక్కడ ఆ lines ఉండవు.
దశ 8: key-only SSHతో జత చేయండి; ఇంకా మెరుగైనది VPN
Fail2ban ప్రభావవంతంగా పనిచేయాలంటే దాన్ని key authenticationతో ఉపయోగించాలి. /etc/ssh/sshd_config.d/ కింద ఉన్న drop-in fileలో, ఉదాహరణకు /etc/ssh/sshd_config.d/00-hardening.conf లో, ఈ కింది సెట్టింగ్ను ఉంచండి:
PasswordAuthentication no
KbdInteractiveAuthentication noతర్వాత sudo systemctl restart ssh. Password authentication నిలిపివేస్తే brute-force దాడి అసలు విజయవంతం కాదు. అప్పుడు Fail2ban logలోని అనవసరమైన సందేశాలను తగ్గించి, scannerలను ప్రారంభ దశలోనే తొలగించడానికి ఉపయోగపడుతుంది. ఇంకా భద్రమైన పద్ధతి SSHను public internet నుంచి పూర్తిగా వేరు చేయడం: SSHను self-hosted WireGuard VPN వెనుక ఉంచండి మరియు port 22ను tunnel ద్వారా మాత్రమే స్పందించేలా firewallను అమర్చండి. చేరుకోలేని portపై ఎవరూ brute-force దాడి చేయలేరు. అప్పుడు Fail2ban మొదటి రక్షణరేఖగా కాకుండా అదనపు రక్షణగా పనిచేస్తుంది.
Fail2banను SSHకే పరిమితం చేయాల్సిన అవసరం లేదు. విఫలమైన loginలను log చేసే ఏ సేవకైనా jail ఏర్పాటు చేయవచ్చు. ఉదాహరణకు mail server, nginx site లేదా self-hosted Vaultwarden password manager కోసం దీన్ని ఉపయోగించవచ్చు. Credential stuffingకు web loginను బహిరంగంగా ఉంచకూడదనుకుంటే ఇది ప్రత్యేకంగా ఉపయోగకరం. Web appను Let's Encrypt certificate కలిగిన nginx site వెనుక ఉంచిన తర్వాత, SSH jail journalను పరిశీలించే విధంగానే Fail2ban filterను ఆ web app access logకు అనుసంధానించండి.
విఫలత పరిస్థితులు: మీరు ఖచ్చితంగా చూసే strings
"Have not found any log file for sshd jail", మరియు Fail2ban ప్రారంభం కాదు. ఇది పాత auth.log సమస్య. Ubuntu 24.04లో packaged default ను ఏదైనా override చేసినప్పుడు, pip ను defaults-debian.conf లేకుండా install చేసినప్పుడు, journal లేని container ఉపయోగించినప్పుడు లేదా jail.local లోకి పొరపాటున backend = auto paste చేసినప్పుడు మాత్రమే ఇది ఎదురవుతుంది. /var/log/auth.log లేకుండా file backend ఉపయోగిస్తే, sshd jail తన log ను కనుగొనలేక మొత్తం daemon ఆగిపోతుంది. fail2ban.log ఇలా చూపిస్తుంది:
ERROR Failed during configuration: Have not found any log file for sshd jailఈ error fatal కావడంతో service ఎప్పటికీ ప్రారంభం కాదు. తరువాత fail2ban-client status కారణంగా ఏర్పడిన లక్షణాన్ని ఇలా చూపిస్తుంది:
ERROR Failed to access socket path: /var/run/fail2ban/fail2ban.sock. Is fail2ban running?ఆ "socket path" line అంటే Fail2ban పాడైందని కాదు. ఒక jail తన log ను కనుగొనలేకపోవడంతో అది ప్రారంభం కాలేదని అర్థం. Ubuntu package ఇప్పటికే మీ తరఫున [DEFAULT] లో backend = systemd ను సెట్ చేస్తుంది. దాన్ని సెట్ చేస్తే రెండు messages ఒకేసారి పరిష్కారమవుతాయి.
Jail active గా ఉంది, కానీ Total failed ఎప్పటికీ మారదు. Daemon నడుస్తోంది, journal చదవబడుతోంది. అయినప్పటికీ నిజమైన failures journalctl -u ssh లో పేరుకుపోతున్నాయి, counter మాత్రం 0 వద్దే ఉంది. ముందుగా స్పష్టమైన కారణాన్ని తొలగించండి: మీరు ignoreip లో ఉన్న address నుంచి పరీక్షిస్తున్నారు. అందువల్ల మీ failures రూపకల్పన ప్రకారం మినహాయించబడతాయి. అది కారణం కాకపోతే, per-connection worker sshd-session గా ఉన్న OpenSSH build (9.8 మరియు తరువాతి versions) ఉపయోగిస్తున్నారు. దాని journal _COMM, sshd-session గా ఉంటుంది; sshd కాదు. అందువల్ల shipped match దాన్ని గుర్తించదు. [sshd] block లో match ను విస్తరించండి:
[sshd]
enabled = true
backend = systemd
journalmatch = _SYSTEMD_UNIT=ssh.service + _COMM=sshd + _COMM=sshd-sessionRestart చేయండి. ignoreip లో లేని address నుంచి ఉద్దేశపూర్వకంగా login విఫలమయ్యేలా చేసి, చివరకు Total failed పెరుగుతుందో నిర్ధారించండి.
మీరే ban అయ్యారు: Connection refused. మీ స్వంత address ను ignoreip నుంచి తొలగించి, కొన్ని తప్పు logins పరీక్షించారు. ఇప్పుడు:
ssh: connect to host 10.0.0.10 port 22: Connection refusedనిశ్శబ్దంగా timeout కావడానికి బదులుగా refusal రావడం, nftables action యొక్క default reject verdict పనిచేస్తోందని చూపిస్తుంది. Step 6లో చెప్పిన విధంగా పరిష్కరించండి: వేరే, ban కాని address నుంచి ఉన్న session ద్వారా unban చేయండి లేదా provider console ఉపయోగించండి. Ban అయిన address నుంచి ఇప్పటికే తెరిచి ఉన్న session కూడా freeze అవుతుంది. ఇది మళ్లీ జరగకుండా మీ address ను ignoreip కు జోడించండి.
Fail2ban address ban అయిందని చెబుతోంది, కానీ అది ఇంకా connect అవుతోంది. status sshd లో counter పెరుగుతోంది, అయినప్పటికీ ఆ address port 22 ను చేరుతోంది. ఇది ban action మరియు firewall మధ్య mismatch. Ubuntu 24.04లో, iptables layer లేని serverపై పాత guide నుంచి copy చేసిన banaction = iptables-multiport తో పనిచేస్తున్న banaction = nftables ను override చేసినప్పుడు ఇది దాదాపు ఎల్లప్పుడూ జరుగుతుంది. fail2ban.log ఇలా చూపిస్తుంది:
fail2ban.actions [812]: ERROR Failed to execute ban jail 'sshd' action 'iptables-multiport'ఆ override ను తొలగించి packaged nftables action ను అలాగే ఉపయోగించండి. లేదా firewall ను పూర్తిగా ufw ద్వారా నిర్వహిస్తూ bans అక్కడ కనిపించాలనుకుంటే, [DEFAULT] లో banaction = ufw ను సెట్ చేయండి. Restart చేసి, sudo nft list ruleset | grep f2b తో rule కనిపిస్తుందో నిర్ధారించండి.
jail.local ను edit చేసిన తరువాత Fail2ban ప్రారంభం కాదు. Typo, అనవసర heading లేదా తప్పు time value ఉంటే service ప్రారంభం కావడానికి నిరాకరిస్తుంది. Fail2ban నడిచే ముందు configuration ను తనిఖీ చేయమని ఆదేశించండి:
sudo fail2ban-client -tసమస్య ఉన్న file మరియు jail పేరును ఇది చూపిస్తుంది. ఉదాహరణకు Errors in jail 'sshd'. Skipping.... అందువల్ల ఊహాగానాలు చేయకుండా source ను సరిచేయవచ్చు.
FAQ
stock Fail2ban install on Ubuntu 24.04 నిజంగా SSH దాడులను ban చేస్తుందా?
అవును. ఈ package లో /etc/fail2ban/jail.d/defaults-debian.conf ఉంటుంది. ఇది sshd jail ను enable చేస్తుంది. సిస్టమ్లో లేని /var/log/auth.log ను చదవకుండా systemd journal ను చదివేలా backend = systemd ను సెట్ చేస్తుంది. Ubuntu యొక్క అసలు firewall ద్వారా bans అమలయ్యేలా banaction = nftables ను సెట్ చేస్తుంది. సాధారణ apt install fail2ban మొదటి boot నుంచే SSH ను రక్షిస్తుంది. దీనిని sudo fail2ban-client status sshd తో నిర్ధారించి, non-zero Total failed కోసం చూడండి.
నా box లో Fail2ban ఏదీ ban చేయకపోవడానికి కారణం ఏమిటి?
సాధారణంగా కనిపించే మూడు కారణాలను వరుసగా పరిశీలించండి. మీరు ignoreip లోని address నుంచి పరీక్ష చేస్తుండవచ్చు. రూపకల్పన ప్రకారం ఆ address మినహాయించబడుతుంది. పాత guide నుంచి backend = auto ను jail.local లో paste చేసి ఉండవచ్చు. దీనివల్ల auth.log లేని image లో journal reading విఫలమవుతుంది. లేదా systemd journal ఏదీ అందుబాటులో లేని container లో మీరు ఉండవచ్చు. fail2ban-client status sshd లోని Total failed ను పరిశీలించండి. journalctl -u ssh వాస్తవ failures ను చూపుతున్నప్పటికీ అది ఎప్పుడూ పెరగకపోతే, jail తప్పు స్థలాన్ని చదువుతోంది.
నా స్వంత IP address పై ban ను ఎలా తొలగించాలి?
sudo fail2ban-client set sshd unbanip YOUR.IP.HERE ను run చేయండి. విజయవంతమైతే ఇది 1 ను చూపిస్తుంది. ప్రతి ban ను తొలగించడానికి sudo fail2ban-client unban --all ను run చేయండి. SSH నుంచి బయటకు lock అయితే, అదే command ను run చేయడానికి మీ provider యొక్క web లేదా VNC console ను ఉపయోగించండి. Ban మీ address నుంచి port 22 కు వచ్చే ప్రతి packet ను తిరస్కరిస్తుంది. అందువల్ల ఇప్పటికే తెరిచి ఉన్న session కూడా పనిచేయడం ఆపేస్తుంది. తరువాత మీ address ను ignoreip లో చేర్చండి. అప్పుడు ఇది మళ్లీ ban కాదు.
jail.conf మరియు jail.local మధ్య తేడా ఏమిటి?
jail.conf లో Fail2ban యొక్క upstream defaults ఉంటాయి. ప్రతి package upgrade సమయంలో ఇది overwrite అవుతుంది. కాబట్టి అక్కడ చేసిన మార్పులు చివరకు పోతాయి. Debian/Ubuntu package తన settings ను jail.d/defaults-debian.conf ద్వారా వీటి పైన అమలు చేస్తుంది. మీ మార్పులను jail.local లో ఉంచాలి. ఇది చివరగా చదవబడుతుంది మరియు రెండింటిపై ప్రాధాన్యం పొందుతుంది. Upgrades దీనిని మార్చవు. jail.conf ను read-only reference గా మాత్రమే ఉంచండి.
Fail2ban key-based SSH authentication ను భర్తీ చేస్తుందా?
లేదు. Fail2ban ఒకే address నుంచి వచ్చే repeated failures కు rate limit విధిస్తుంది. ప్రతి address threshold కంటే దిగువన ఉండే slow, distributed guessing పై ఇది ప్రభావం చూపదు. Key-only authentication (PasswordAuthentication no) password guessing ను పూర్తిగా అసాధ్యం చేస్తుంది. తరువాత Fail2ban log noise ను తగ్గించి scanners ను ప్రారంభ దశలోనే తొలగిస్తుంది. రెండింటినీ ఉపయోగించండి. సాధ్యమైనంతవరకు SSH ను public internet కు పూర్తిగా దూరంగా ఉంచండి.