Ubuntu 24.04-ல் Fail2ban நிறுவுவது எப்படி?
Ubuntu 24.04-ல் Fail2ban மூலம் SSH brute force தாக்குதல்களை தடுக்கும் முறையை அறிக. fail2ban-client status sshd கட்டளை மூலம் Total failed 0 என வருவதற்கான தீர்வை இங்கே காணலாம்.
Fail2ban உண்மையில் என்ன செய்கிறது
Fail2ban என்பது log-களை வாசிக்கும் ஒரு daemon ஆகும். இது உங்கள் SSH authentication செய்திகளைக் கண்காணிக்கும். ஒரு குறிப்பிட்ட கால இடைவெளிக்குள் ஒரே முகவரியிலிருந்து பலமுறை உள்நுழைவு தோல்வியடைந்தால், அந்த முகவரியைத் தற்காலிகமாகத் தடுக்கும் firewall கட்டளையை இது இயக்கும். இதுவே இதன் அடிப்படைச் செயல்பாடு. ஒரு கோப்பில் சுமார் முப்பது வரிகள் கொண்ட configuration மட்டுமே இதற்குத் தேவை. Ubuntu 24.04-ல், apt கட்டளையைப் பயன்படுத்தி இதை நிறுவலாம்; எதையும் மாற்றியமைப்பதற்கு முன்பே இது பாதுகாப்பை வழங்கத் தொடங்கிவிடும்.
இது என்ன, என்ன அல்ல என்பதில் தெளிவாக இருக்கவும். Fail2ban யாரையும் authentication செய்வதில்லை, எதையும் encrypt செய்வதில்லை. ஒரே மூலத்திலிருந்து மீண்டும் மீண்டும் வரும் முயற்சிகளைத் தடுக்குமே தவிர, உறுதியான ஒரு உள்நுழைவு முயற்சியைத் தடுக்காது. இது ஒரு lock அல்ல, மாறாக ஒரு noise filter மற்றும் rate limiter ஆகும். port 22-ல் தொடர்ந்து நடக்கும் பின்னணி ஸ்கேனிங்கால் உங்கள் CPU, bandwidth மற்றும் log space வீணாவதைத் தடுப்பதே இதன் வேலை. மேலும், ஒரே முகவரியிலிருந்து வரும் தாக்குதல் நடத்துபவர்களின் வேகத்தைக் குறைக்கவும் இது உதவுகிறது.
Fail2ban எவற்றிற்கு மாற்றாகாது
Fail2ban என்பது முதல் அடுக்கு அல்ல, மூன்றாவது அடுக்கு பாதுகாப்பு மட்டுமே. உங்கள் server இன்னும் SSH passwords-ஐ ஏற்றுக்கொள்கிறது என்றால், ஆயிரக்கணக்கான IP addresses-ல் பரவியுள்ள ஒரு botnet தொடர்ந்து முயற்சி செய்துகொண்டே இருக்கும். ஏனெனில், ஒவ்வொரு IP address-ம் உங்கள் ban threshold-க்குக் கீழே இருப்பதால், அது எப்போதுமே தடை செய்யப்படாது. இதற்கு உண்மையான பாதுகாப்பு என்பது key-only authentication மட்டுமே; இது எத்தனை முறை முயற்சி செய்தாலும் password guessing-ஐ சாத்தியமற்றதாக்குகிறது. Key-only authentication-க்கு மேல் Fail2ban-ஐப் பயன்படுத்துவது இரண்டு பயனுள்ள விஷயங்களைச் செய்கிறது: இது உங்கள் logs-ல் உள்ள brute-force இரைச்சலைக் குறைக்கிறது, மேலும் scanners-ஐ முன்கூட்டியே வெளியேற்றுவதன் மூலம் அவை port-ஐத் தொடர்ந்து தாக்குவதைத் தடுக்கிறது. இதை defence in depth-ஆகக் கருதுங்கள். இது key authentication மற்றும் firewall-க்கு பின்னால் மட்டுமே இருக்க வேண்டும், அவற்றுக்கு முன்னால் ஒருபோதும் இருக்கக்கூடாது.
முன்நிபந்தனைகள் மற்றும் Ubuntu 24.04-ன் தற்போதைய நிலை
உங்களுக்கு root அல்லது sudo வசதியுடன் கூடிய Ubuntu 24.04 இயங்கும் VPS தேவை. SSH ஏற்கனவே செயல்படும் நிலையில் இருக்க வேண்டும், key authentication முறையைப் பயன்படுத்துவது சிறந்தது. Fail2ban மிகக் குறைந்த வளங்களையே பயன்படுத்தும்: சில பத்து மெகாபைட் RAM போதுமானது, limits எதையும் மாற்ற வேண்டியதில்லை.
பழைய வழிகாட்டிகளில் தவறாகக் குறிப்பிடப்படும் ஒரு முக்கியமான பகுதியை இப்போது பார்ப்போம். பல ஆண்டுகளாக, "Fail2ban-ஐ நிறுவி, பின் 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-ல் உண்மையில் இயங்குகிறது:
[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 என்பது jail முதல் boot-லிருந்தே செயல்பாட்டில் உள்ளது என்று பொருள். சுருக்கமாகச் சொன்னால், Ubuntu 24.04-ல் உள்ள ஒரு சாதாரண apt install fail2ban, SSH brute-force தாக்குதல்களைத் தானாகவே தடுக்கிறது. உங்கள் வேலை பெரும்பாலும் இதை உறுதிப்படுத்துவது, கொள்கையை (policy) மேம்படுத்துவது மற்றும் நீங்கள் உங்களை நீங்களே lock-out செய்யாமல் இருப்பதை உறுதி செய்வது மட்டுமே.
பழைய auth.log சிக்கல் இன்னும் மூன்று சூழ்நிலைகளில் ஏற்படலாம், அவற்றை அறிந்துகொள்வது அவசியம்: நீங்கள் apt-க்கு பதிலாக pip மூலம் Fail2ban-ஐ நிறுவியிருந்தால், அங்கு defaults-debian.conf இருக்காது; நீங்கள் systemd journal இல்லாத unprivileged container-க்குள் இருந்தால்; அல்லது பழைய வழிகாட்டியைப் பின்பற்றி backend = auto-ஐ உங்கள் சொந்த jail.local-க்குள் நகலெடுத்து, சரியாக இயங்கிக்கொண்டிருந்த default அமைப்பை மாற்றியிருந்தால். failure-modes பகுதி இவை ஒவ்வொன்றும் எப்படி இருக்கும் என்பதைத் தெளிவாகக் காட்டுகிறது.
படி 1: நிறுவுதல் மற்றும் அது ஏற்கனவே தடை செய்கிறதா என்பதை உறுதிப்படுத்துதல்
sudo apt update
sudo apt install -y fail2banUbuntu 24.04-ல் Fail2ban 1.0.2 பதிப்பு உள்ளது. இந்த package python3-systemd-ஐ ஒரு கட்டாய dependency-ஆகக் கொண்டிருப்பதால், journal backend-க்குத் தேவையான அனைத்தும் ஏற்கனவே உள்ளன. இந்த service தானாகவே enable ஆகி இயங்கத் தொடங்கும்:
sudo systemctl status fail2banநீங்கள் active (running)-ஐப் பயன்படுத்த வேண்டும். அதன் பிறகு, ஏற்கனவே தனது பணியைச் செய்து கொண்டிருக்கும் jail-ஐப் பார்க்கவும்:
sudo fail2ban-client status sshdசில நிமிடங்கள் மட்டுமே இணையத்தில் இணைக்கப்பட்டிருக்கும் ஒரு பொதுவான VPS-ல் கூட, தோல்விகள் கணக்கிடப்படுவதையும் IP முகவரிகள் தடை செய்யப்படுவதையும் நீங்கள் காணலாம்; இணையம் தொடர்ந்து port 22-ஐ ஸ்கேன் செய்து கொண்டே இருக்கும். இதுவே இயல்புநிலை கட்டமைப்பு (stock config) சரியாகச் செயல்படுவதற்கான சான்றாகும். இங்கிருந்து நீங்கள் கட்டமைப்பை மேம்படுத்துகிறீர்கள், புதிதாக எதையும் உருவாக்கத் தேவையில்லை.
படி 2: jail.local கோப்பைத் திருத்தவும், jail.conf கோப்பைத் தொடாதீர்கள்
Fail2ban அதன் இயல்புநிலை அமைப்புகளை /etc/fail2ban/jail.conf கோப்பில் வைத்திருக்கிறது. அந்தக் கோப்பைத் திருத்த வேண்டாம். தொகுப்பின் ஒவ்வொரு apt upgrade-ம் அதை மாற்றியமைக்கக்கூடும், அப்போது உங்கள் மாற்றங்கள் முன்னறிவிப்பின்றி நீக்கப்படும். Fail2ban கோப்புகளை ஒரு குறிப்பிட்ட வரிசையில் வாசிக்கிறது: முதலில் jail.conf, பிறகு jail.d/-ல் உள்ள அனைத்தும், இறுதியில் jail.local; இதில் கடைசியாக உள்ள மதிப்பே இறுதியானது. .local கோப்பு உங்களுடையது, தொகுப்பு மேம்படுத்தல்களின் (package upgrades) போது அது பாதிக்கப்படாது. இதே விதி filters-க்கும் பொருந்தும்; அங்கு ஒரு *.local கோப்பு, ஏற்கனவே உள்ள filter.d/*.conf-ஐ மாற்றியமைக்கும் (override).
எனவே, நீங்கள் ஒரு சிறிய jail.local கோப்பை உருவாக்கி, உங்களுக்குத் தேவையான சில அமைப்புகளை மட்டும் மாற்றியமைக்க வேண்டும். jail.conf மற்றும் தொகுக்கப்பட்ட jail.d/defaults-debian.conf ஆகிய இரண்டையும் மாற்றாமல், அவற்றை ஒரு குறிப்புக்காக அப்படியே வைத்திருக்க வேண்டும்.
படி 3: /etc/fail2ban/jail.local கோப்பை எழுதுதல்
sudo nano /etc/fail2ban/jail.localகீழே உள்ளவற்றை உள்ளிடவும், ignoreip வரியில் உள்ள முகவரியை உங்கள் சொந்த பொது 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,maxretryஆகியவை கொள்கையை வரையறுக்கின்றன. மென்பொருளுடன் வரும் இயல்புநிலைbantimeபத்து நிமிடங்கள் மட்டுமே; ஒரு மணிநேரம் என்பது மிகவும் பொருத்தமான குறைந்தபட்ச கால அளவாகும். பத்து நிமிடங்களுக்குள் ஒரே முகவரியிலிருந்து ஐந்து முறை தோல்வியடைந்தால் தடை விதிக்கப்படும். உண்மையான பயனர்கள் கடவுச்சொல்லை ஒன்று அல்லது இரண்டு முறை தவறாக உள்ளிடலாம்; பத்து நிமிடங்களில் ஐந்து தோல்விகள் என்பது ஒரு ஸ்கிரிப்ட் (script) முயற்சியாகும்.ignoreipஉங்கள் பாதுகாப்பு வளையமாகும். நீங்கள் எங்கிருந்து இணைகிறீர்களோ அந்த பொது முகவரியை இங்கே குறிப்பிடவும், அப்போதுதான் Fail2ban உங்களை உங்கள் சொந்த server-லிருந்து வெளியேற்றாது. IP முகவரி மாறும் வீட்டு இணைய இணைப்பைப் பயன்படுத்துபவர்கள், இந்த வரியைத் தவிர்ப்பதற்குப் பதிலாக, இறுதியில் குறிப்பிடப்பட்டுள்ள VPN அணுகுமுறையைப் பின்பற்றுவது சிறந்தது.bantime.increment = trueஒவ்வொரு முறை மீண்டும் தடை விதிக்கப்படும்போதும் அதன் கால அளவை அதிகரிக்கிறது: ஒரு மணிநேரம், பின்னர் இரண்டு, நான்கு எனbantime.maxtimeவரை உயரும். மீண்டும் மீண்டும் வரும் முகவரிகள் படிப்படியாக நீண்ட காலத்திற்குத் தடை செய்யப்படும்.
நீங்கள் SSH மூலம் எங்கிருந்து இணைகிறீர்களோ அந்த கணினியிலிருந்து whitelist செய்ய வேண்டிய முகவரியைக் கண்டறியவும், server-லிருந்து அல்ல:
curl -s ifconfig.meஉங்கள் ports மற்றும் தடை கொள்கைகளுக்கு ஏற்ப மாற்றியமைக்கப்பட்ட jail.local-ஐ இங்கே உருவாக்கி, பின்னர் அதை கோப்பில் நகலெடுத்து ஒட்டலாம்:
படி 4: Restart செய்து, அது journal-ஐ வாசிக்கிறதா என சரிபார்த்தல்
sudo fail2ban-client -t
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd-t முதலில் ஒரு config சோதனையை இயக்கும். எனவே, jail.local-ல் ஏதேனும் தட்டச்சுப் பிழை (typo) இருந்தால், அது service-ஐ செயலிழக்கச் செய்யாமல், இங்கேயே பிழையைக் காட்டிவிடும். சரியாக இயங்கும் jail-ன் நிலை இவ்வாறு இருக்கும்:
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 ஆகும். இந்த எண் பூஜ்ஜியத்திற்கு மேல் இருந்தாலோ, அல்லது வேறொரு கணினியிலிருந்து நீங்கள் வேண்டுமென்றே தவறான login முயற்சி செய்யும்போது அதிகரித்தாலோ, journal சரியாக வாசிக்கப்படுகிறது என்று அர்த்தம். நீங்கள் எத்தனை முறை தவறான login முயற்சி செய்தாலும் இந்த எண் 0-லேயே இருந்தால், மற்றும் ignoreip-ல் உள்ள முகவரியிலிருந்து நீங்கள் சோதிக்கவில்லை என்பதை உறுதிப்படுத்திக்கொண்டால், கீழே உள்ள failure modes பகுதிக்குச் செல்லவும்.
Journal matches வரியில் இன்னும் sshd.service குறிப்பிடப்பட்டிருப்பதைக் கவனிக்கவும். Ubuntu-வில் SSH unit உண்மையில் ssh.service ஆகும், ஆனால் வழங்கப்பட்ட filter _COMM=sshd-உடனும் பொருந்தும். மேலும், 24.04-ல் உள்ள OpenSSH அதன் தோல்விகளை sshd என்ற பெயருடைய process மூலம் பதிவு செய்கிறது, எனவே இந்த match சரியாக வேலை செய்யும். நீங்கள் புதிய OpenSSH (9.8 அல்லது அதற்குப் பிந்தைய பதிப்பு, இதில் per-connection worker என்பது sshd-session ஆகும்) பயன்படுத்துகிறீர்கள் என்றால் மட்டுமே இந்த விவரம் முக்கியமானது; failure modes பகுதியில் அந்தச் சூழலுக்கான தீர்வுகள் உள்ளன.
படி 5: ஒரு ban நிகழ்வதைக் கண்காணித்தல் அல்லது சோதனையாக ஒன்றை உருவாக்குதல்
எந்தவொரு பொது VPS-லும் சில நிமிடங்களிலேயே தானாகவே ban-கள் நிகழும். அதைக் கண்காணிக்க, log-ஐ tail செய்யவும்:
sudo tail -f /var/log/fail2ban.logஒரு ban பின்வருமாறு தோன்றும்:
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காத்திருக்காமல் முழு செயல்பாட்டையும் உறுதிப்படுத்த, உங்கள் சொந்த IP-ஐத் தவிர்த்து, ஏதேனும் ஒரு முகவரியை நீங்களே ban செய்து சோதிக்கவும்:
sudo fail2ban-client set sshd banip 10.0.0.66இது 1 என்பதை அச்சிடும், மேலும் அந்த முகவரி fail2ban-client status sshd-ல் உள்ள Banned IP list-ன் கீழ் தோன்றும். இப்போது firewall-ல் அந்தத் தடுப்பு உண்மையில் உள்ளதா என்பதை உறுதிப்படுத்தவும். Ubuntu 24.04-ல் iptables-க்கு பதிலாக nftables பயன்படுத்தப்படுகிறது:
sudo nft list table inet f2b-table10.0.0.66-ஐக் கொண்ட addr-set-sshd என்ற set-ஐயும், அந்த set-ல் உள்ள எந்தவொரு source-ஐயும் நிராகரிக்கும் f2b-chain என்ற chain-ஐயும் நீங்கள் காண்பீர்கள். ஒரு முகவரி ban செய்யப்பட்டுள்ளதாக fail2ban-client காட்டினாலும், nft list-ல் எதுவும் தோன்றவில்லை என்றால், உங்கள் ban செயல்பாடு firewall-உடன் பொருந்தவில்லை என்று அர்த்தம். தோல்வி முறைகள் (failure modes) பகுதியில் உள்ள nftables/iptables குறிப்பைப் பார்க்கவும்.
படி 6: உங்களை நீங்களே unban செய்தல் மற்றும் வெளியேற்றப்பட்டால் மீட்டெடுத்தல்
நீங்கள் தவறுதலாக ஒரு முகவரியைத் தடை செய்திருந்தால், அது உங்களுடையதாக இருந்தால், அதை நீக்கவும்:
sudo fail2ban-client set sshd unbanip 10.0.0.66வெற்றிகரமாக முடிந்தால் இது 1 எனத் திரும்ப அளிக்கும். அனைத்து jail-களிலும் உள்ள அனைத்துத் தடைகளையும் நீக்க:
sudo fail2ban-client unban --allஏற்கனவே திறந்திருக்கும் SSH session உங்களைக் காப்பாற்றும் என்று நம்ப வேண்டாம்: nftables தடை, port 22-க்கு வரும் தடைசெய்யப்பட்ட முகவரியின் அனைத்து packet-களையும் நிராகரிக்கும். இதில் ஏற்கனவே உள்ள இணைப்புகளும் அடங்கும், எனவே தடை அமலுக்கு வந்தவுடன் தற்போதைய session உறைந்துவிடும். நீங்கள் உங்களை நீங்களே தடை செய்துவிட்டு, ignoreip உள்ளீடு எதுவும் இல்லையென்றால், தடை முடியும் வரை நீங்கள் வெளியேற்றப்படுவீர்கள். அத்தகைய சூழலில், SSH வழியாகச் செல்லாத உங்கள் provider-ன் web console (VNC அல்லது serial) மூலம் மீட்டெடுக்கவும். அங்கு bantime முடியும் வரை காத்திருக்கவும் அல்லது unban கட்டளையை இயக்கவும்.
படி 7: தடைகளைத் தொடரச் செய்தல் மற்றும் தீவிரப்படுத்துதல்
Fail2ban செயலில் உள்ள தடைகளை /var/lib/fail2ban/fail2ban.sqlite3-ல் உள்ள ஒரு சிறிய SQLite தரவுத்தளத்தில் வைத்திருக்கிறது. இதனால் service restart அல்லது reboot செய்தாலும் தடைகள் நீக்கப்படாது; அவை இழக்கப்படாது. நீங்கள் ஏற்கனவே சேர்த்த bantime.increment வரிகள், மீண்டும் மீண்டும் தவறு செய்பவர்களுக்குத் தடைகளைத் தீவிரப்படுத்துகின்றன. இது ஒரு மணிநேரத்திலிருந்து தொடங்கி ஒரு வாரம் வரை படிப்படியாக அதிகரிக்கிறது.
இதற்கு மேலாக, கணினி முழுமைக்கும் "மூன்று வாய்ப்புகள்" (three strikes) கொள்கையைச் செயல்படுத்த, Fail2ban ஒரு recidive jail-ஐ வழங்குகிறது. இது அதன் சொந்த /var/log/fail2ban.log-ஐக் கண்காணித்து, அனைத்து jail-களிலும் மீண்டும் மீண்டும் தடை செய்யப்பட்ட முகவரிகளுக்கு நீண்ட காலத் தடைகளை விதிக்கிறது. உங்கள் [DEFAULT] இப்போது systemd backend-ஐப் பயன்படுத்துவதால், இந்த jail-ஐ அது படிக்க வேண்டிய log கோப்புடன் இணைக்கவும்:
[recidive]
enabled = true
backend = auto
logpath = /var/log/fail2ban.log
bantime = 1w
findtime = 1d
maxretry = 5logpath-ஐக் கொண்ட backend = auto, recidive-ஐத் தொடர்ந்து fail2ban.log-ஐப் படிக்க வைக்கிறது. Ban வரிகள் அங்குதான் தோன்றும். நீங்கள் உலகளவில் அமைத்த systemd default-ஐப் பயன்படுத்தினால், அது journal-ஐக் காட்டும், அங்கு இந்த வரிகள் இருக்காது.
படி 8: Key-only SSH மற்றும் VPN உடன் இணைத்தல்
Key-based authentication-உடன் பயன்படுத்தும்போது மட்டுமே Fail2ban பயனுள்ளதாக இருக்கும். /etc/ssh/sshd_config.d/-ன் கீழ் உள்ள ஒரு drop-in கோப்பில், உதாரணமாக /etc/ssh/sshd_config.d/00-hardening.conf-ல், பின்வருவனவற்றை அமைக்கவும்:
PasswordAuthentication no
KbdInteractiveAuthentication noபிறகு sudo systemctl restart ssh செய்யவும். Password-களை முடக்கிவிட்டால், brute force தாக்குதல்கள் வெற்றிபெற வாய்ப்பில்லை; log-களில் ஏற்படும் தேவையற்ற இரைச்சலைக் குறைக்கவும், ஸ்கேனர்களை முன்கூட்டியே வெளியேற்றவும் மட்டுமே Fail2ban பயன்படும். SSH-ஐ பொது இணையத்திலிருந்து முற்றிலும் மறைத்து வைப்பது இன்னும் பாதுகாப்பானது: SSH-ஐ சுய-ஹோஸ்ட் செய்யப்பட்ட WireGuard VPN-க்கு பின்னால் வைத்து, port 22-ஐ firewall மூலம் மூடிவிடவும்; இது tunnel வழியாக மட்டுமே பதிலளிக்கும். அணுக முடியாத port-ஐ யாராலும் brute-force செய்ய முடியாது, அப்போது Fail2ban ஒரு முதன்மை பாதுகாப்பு அரணாக இல்லாமல், ஒரு கூடுதல் பாதுகாப்பு அடுக்காக (backstop) மட்டுமே செயல்படும்.
Fail2ban என்பது SSH-க்கு மட்டும் உரியதல்ல. தோல்வியுற்ற login முயற்சிகளை log செய்யும் எந்தவொரு சேவையையும், அதாவது ஒரு mail server, nginx தளம், அல்லது சுய-ஹோஸ்ட் செய்யப்பட்ட Vaultwarden password manager போன்றவற்றை jail-க்குள் கொண்டு வரலாம்; credential stuffing தாக்குதல்களுக்கு உங்கள் web login-ஐ திறந்து வைக்க வேண்டிய அவசியமில்லை. ஒரு web app Let's Encrypt certificate கொண்ட nginx தளத்திற்கு பின்னால் அமைந்தவுடன், SSH jail journal-ஐ கவனிப்பது போலவே, அதன் access log-ஐ கவனிக்க ஒரு Fail2ban filter-ஐ அமைக்கவும்.
தோல்வி முறைகள் மற்றும் நீங்கள் காணக்கூடிய துல்லியமான செய்திகள்
"Have not found any log file for sshd jail", மற்றும் Fail2ban தொடங்காது. இது பழைய auth.log சிக்கலாகும். Ubuntu 24.04-ல், தொகுக்கப்பட்ட இயல்புநிலை அமைப்பை ஏதேனும் ஒன்று மாற்றியிருந்தால் மட்டுமே இது நிகழும். உதாரணமாக, defaults-debian.conf இல்லாத pip நிறுவல், journal இல்லாத container, அல்லது jail.local-ல் நீங்கள் தவறுதலாகச் சேர்த்த backend = auto போன்றவை காரணமாக இருக்கலாம். /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அந்தப் பிழை fatal என்பதால், service தொடங்காது. அதன் விளைவாக, fail2ban-client status கீழ்நிலை அறிகுறியைக் காட்டுகிறது:
ERROR Failed to access socket path: /var/run/fail2ban/fail2ban.sock. Is fail2ban running?அந்த "socket path" வரி Fail2ban பழுதடைந்துள்ளது என்று அர்த்தமல்ல; ஒரு jail-ஆல் அதன் log-ஐக் கண்டறிய முடியாததால் அது தொடங்கவில்லை என்று அர்த்தம். [DEFAULT]-ல் backend = systemd-ஐ அமைப்பதன் மூலம் (இதை Ubuntu package ஏற்கனவே உங்களுக்காகச் செய்கிறது) இரண்டு செய்திகளும் ஒரே நேரத்தில் சரியாகிவிடும்.
Jail செயல்பாட்டில் உள்ளது, ஆனால் Total failed மாறவில்லை. Daemon இயங்குகிறது, journal வாசிக்கப்படுகிறது, ஆனால் உண்மையான தோல்விகள் journalctl -u ssh-ல் குவிகின்றன, அதே சமயம் counter 0-லேயே நிற்கிறது. முதலில் வெளிப்படையான காரணத்தை நீக்கவும்: நீங்கள் ignoreip-ல் பட்டியலிடப்பட்ட முகவரியிலிருந்து சோதிக்கிறீர்கள் என்றால், உங்கள் சொந்த தோல்விகள் வடிவமைப்பின்படி விலக்கப்படும். அது காரணமல்ல எனில், நீங்கள் OpenSSH-ன் sshd-session (9.8 மற்றும் அதற்குப் பிந்தைய பதிப்புகள்) கட்டமைப்பில் உள்ளீர்கள். அதன் journal _COMM என்பது sshd அல்ல, sshd-session ஆகும். எனவே, ஏற்கனவே உள்ள match அதைத் தவறவிடுகிறது. [sshd] தொகுதியில் match-ஐ விரிவுபடுத்தவும்:
[sshd]
enabled = true
backend = systemd
journalmatch = _SYSTEMD_UNIT=ssh.service + _COMM=sshd + _COMM=sshd-sessionRestart செய்யவும், ignoreip-ல் இல்லாத ஒரு முகவரியிலிருந்து வேண்டுமென்றே login தோல்வியடையச் செய்யவும், Total failed உயர்கிறதா என்பதை உறுதிப்படுத்தவும்.
நீங்களே தடைசெய்யப்பட்டீர்கள்: Connection refused. உங்கள் சொந்த முகவரியை ignoreip-ல் சேர்க்க மறந்து, சில தவறான login-களைச் சோதித்தீர்கள். இப்போது:
ssh: connect to host 10.0.0.10 port 22: Connection refusedஇது ஒரு அமைதியான timeout அல்ல, மாறாக nftables action-ன் இயல்புநிலை reject தீர்ப்பு தனது வேலையைச் செய்கிறது. இதை Step 6-ல் உள்ளபடி சரிசெய்யவும்: தடைசெய்யப்படாத வேறொரு முகவரியிலிருந்து அல்லது provider console வழியாக unban செய்யவும். தடைசெய்யப்பட்ட முகவரியிலிருந்து ஏற்கனவே திறந்திருக்கும் session-ம் முடங்கிவிடும். மீண்டும் இது நிகழாமல் இருக்க, உங்கள் முகவரியை ignoreip-ல் சேர்க்கவும்.
Fail2ban ஒரு முகவரி தடைசெய்யப்பட்டதாகக் கூறுகிறது, ஆனால் அது இன்னும் connect ஆகிறது. status sshd-ல் counter உயர்கிறது, ஆனால் அந்த முகவரி இன்னும் port 22-ஐ அடைகிறது. இது ban-action மற்றும் firewall-க்கு இடையிலான முரண்பாடு. Ubuntu 24.04-ல், iptables அடுக்கு இல்லாத ஒரு கணினியில், பழைய வழிகாட்டிகளிலிருந்து நகலெடுக்கப்பட்ட banaction = iptables-multiport மூலம் வேலை செய்யும் banaction = nftables-ஐ நீங்கள் மாற்றியமைத்தீர்கள் என்று அர்த்தம். fail2ban.log இதைக் காட்டுகிறது:
fail2ban.actions [812]: ERROR Failed to execute ban jail 'sshd' action 'iptables-multiport'அந்த மாற்றத்தை நீக்கிவிட்டு, தொகுக்கப்பட்ட nftables action-ஐ அப்படியே விடவும். அல்லது, நீங்கள் ufw மூலம் firewall-ஐ நிர்வகித்து, தடைகள் அங்கே தெரிய வேண்டும் என விரும்பினால், [DEFAULT]-ல் banaction = ufw-ஐ அமைக்கவும். Restart செய்து, sudo nft list ruleset | grep f2b மூலம் விதி தோன்றுகிறதா என்பதை உறுதிப்படுத்தவும்.
jail.local-ஐத் திருத்திய பிறகு Fail2ban தொடங்கவில்லை. ஒரு எழுத்துப் பிழை, தேவையற்ற heading அல்லது தவறான time value காரணமாக service தொடங்க மறுக்கும். Fail2ban இயங்குவதற்கு முன் அதன் config-ஐச் சரிபார்க்கச் சொல்லுங்கள்:
sudo fail2ban-client -tஇது சிக்கல் உள்ள கோப்பு மற்றும் jail-ன் பெயரைக் காட்டும் (உதாரணத்திற்கு Errors in jail 'sshd'. Skipping...). எனவே, ஊகிப்பதற்குப் பதிலாக மூல காரணத்தைச் சரிசெய்யலாம்.
FAQ
Ubuntu 24.04-ல் உள்ள Fail2ban, SSH தாக்குதல்களைத் தடுக்கிறதா?
ஆம். இந்த package /etc/fail2ban/jail.d/defaults-debian.conf-ஐக் கொண்டுள்ளது. இது sshd jail-ஐச் செயல்படுத்துகிறது, /var/log/auth.log இல்லாததால் systemd journal-ஐ வாசிக்க backend = systemd-ஐ அமைக்கிறது, மேலும் Ubuntu-வின் உண்மையான firewall மூலம் தடைகளை அமல்படுத்த banaction = nftables-ஐ அமைக்கிறது. ஒரு சாதாரண apt install fail2ban, முதல் boot-லிருந்தே SSH-ஐப் பாதுகாக்கிறது. இதை sudo fail2ban-client status sshd மூலம் உறுதிப்படுத்தி, பூஜ்ஜியமற்ற Total failed மதிப்பைப் பார்க்கவும்.
எனது server-ல் Fail2ban எதையும் ஏன் தடை செய்யவில்லை?
பொதுவான மூன்று காரணங்களை வரிசையாகச் சரிபார்க்கவும். நீங்கள் ignoreip-ல் உள்ள முகவரியிலிருந்து சோதிக்கலாம், இது வடிவமைப்பிலேயே விலக்கு அளிக்கப்பட்டது. பழைய வழிகாட்டியைப் பின்பற்றி jail.local-ல் backend = auto-ஐ நகலெடுத்து ஒட்டியிருக்கலாம், இது auth.log இல்லாத image-ல் journal வாசிப்பைத் தடுக்கும். அல்லது நீங்கள் systemd journal இல்லாத container-க்குள் இருக்கலாம். fail2ban-client status sshd-ல் Total failed-ஐச் சரிபார்க்கவும்: journalctl -u ssh உண்மையான தோல்விகளைக் காட்டும்போதும், இந்த மதிப்பு அதிகரிக்கவில்லை என்றால், jail தவறான இடத்திலிருந்து வாசிக்கிறது என்று அர்த்தம்.
எனது சொந்த IP முகவரியின் தடையை எப்படி நீக்குவது?
sudo fail2ban-client set sshd unbanip YOUR.IP.HERE கட்டளையை இயக்கவும்; இது வெற்றிகரமாக முடிந்தால் 1-ஐத் தரும், அல்லது அனைத்துத் தடைகளையும் நீக்க sudo fail2ban-client unban --all-ஐப் பயன்படுத்தவும். நீங்கள் SSH-லிருந்து வெளியேற்றப்பட்டால், உங்கள் provider-ன் web அல்லது VNC console மூலம் அதே கட்டளையை இயக்கவும். உங்கள் முகவரியிலிருந்து port 22-க்கு வரும் அனைத்து packet-களையும் இந்தத் தடை நிராகரிக்கும், எனவே ஏற்கனவே திறந்திருக்கும் session-ம் வேலை செய்யாது. பின்னர், மீண்டும் இது நடக்காமல் இருக்க உங்கள் முகவரியை ignoreip-ல் சேர்க்கவும்.
jail.conf மற்றும் jail.local ஆகியவற்றுக்கு என்ன வித்தியாசம்?
jail.conf என்பது Fail2ban-ன் இயல்புநிலை அமைப்புகளைக் கொண்டுள்ளது, இது ஒவ்வொரு package upgrade-ன் போதும் மேலெழுதப்படும், எனவே அங்கு செய்யப்படும் மாற்றங்கள் அழிந்துவிடும். Debian/Ubuntu package அதன் சொந்த அமைப்புகளை jail.d/defaults-debian.conf மூலம் மேலடுக்காகச் சேர்க்கிறது. உங்கள் மாற்றங்களை jail.local-ல் செய்ய வேண்டும்; இதுவே கடைசியாக வாசிக்கப்பட்டு மற்ற இரண்டையும் விட முன்னுரிமை பெறும், மேலும் upgrade-களால் இது பாதிக்கப்படாது. jail.conf-ஐ வாசிப்புக்கு மட்டுமேயான குறிப்பாக (read-only reference) வைத்திருக்கவும்.
Fail2ban, key-based SSH authentication-க்கு மாற்றா?
இல்லை. Fail2ban ஒரே முகவரியிலிருந்து வரும் தொடர்ச்சியான தோல்விகளை மட்டுமே கட்டுப்படுத்துகிறது; ஒவ்வொரு முகவரியும் வரம்பிற்குள் இருக்கும் வகையில் மெதுவாகச் செய்யப்படும் தாக்குதல்களை இது தடுக்காது. Key-only authentication (PasswordAuthentication no) கடவுச்சொல் ஊகத்தையே சாத்தியமற்றதாக்குகிறது, Fail2ban log-ல் ஏற்படும் தேவையற்ற இரைச்சலைக் குறைத்து, scanner-களை முன்கூட்டியே வெளியேற்றுகிறது. இரண்டையும் பயன்படுத்துவது சிறந்தது, முடிந்தவரை SSH-ஐ பொது இணையத்திலிருந்து முற்றிலும் மறைத்து வைப்பது இன்னும் பாதுகாப்பானது.