Si të mbroni një server Nginx me Fail2Ban në Rocky Linux 9
Prezantimi
Kur konfiguroni një server në internet, shpesh ka seksione të faqes në të cilat dëshironi të kufizoni aksesin. Aplikacionet në ueb shpesh ofrojnë metodat e tyre të vërtetimit dhe autorizimit, por vetë serveri i uebit mund të përdoret për të kufizuar aksesin nëse këto janë të pamjaftueshme ose të padisponueshme. Megjithatë, vërtetimi i serverit të uebit përfaqëson gjithashtu një sipërfaqe sulmi ose vektor sulmi shumë të parashikueshëm përmes të cilit njerëzit mund të përpiqen të kenë akses.
Çdo shërbim që është i ekspozuar ndaj rrjetit është një objektiv i mundshëm në këtë mënyrë. Nëse rishikoni regjistrat për çdo server në internet të trafikuar gjerësisht, shpesh do të shihni përpjekje të përsëritura, sistematike për hyrje që përfaqësojnë sulme me forcë brutale nga përdoruesit dhe robotët njësoj.
Shpërndarjet e prodhimit në shkallë të gjerë për të cilët ky detyrim është plotësisht i papranueshëm zakonisht do të zbatojnë një VPN të tillë si WireGuard përpara çdo pikë fundore private, kështu që është e pamundur të lidheni drejtpërdrejt me këto URL nga interneti i jashtëm pa abstraksion softuerësh ose porta shtesë. Këto zgjidhje VPN janë gjerësisht të besueshme, por do të shtojnë kompleksitet dhe mund të thyejnë disa automatizime ose grepa të tjera të vogla softuerësh.
Përpara ose përveç angazhimit për një konfigurim të plotë VPN, mund të zbatoni një mjet të quajtur Fail2ban. Fail2ban mund të zbusë ndjeshëm sulmet e forcës brutale duke krijuar rregulla që ndryshojnë automatikisht konfigurimin e murit të zjarrit për të ndaluar IP-të specifike pas një numri të caktuar përpjekjesh të pasuksesshme për hyrje. Kjo do të lejojë serverin tuaj të forcohet kundër këtyre përpjekjeve për akses pa ndërhyrjen tuaj.
Në këtë udhëzues, do të mësoni se si të instaloni fail2ban
në një server Rocky Linux 9 dhe ta konfiguroni atë për të monitoruar regjistrat tuaj Nginx për përpjekjet për ndërhyrje.
Parakushtet
- Qasje në një mjedis serveri Rocky Linux 9 me një përdorues joroot me privilegje
sudo
për të kryer detyra administrative. Për të mësuar se si të krijoni një përdorues të tillë, ndiqni udhëzuesin fillestar të konfigurimit të serverit Rocky Linux 9. - Nginx i instaluar në sistemin tuaj, duke ndjekur Hapat 1 dhe 2 të këtij udhëzuesi se si të instaloni Nginx në Rocky Linux 9.
- Nginx është instaluar dhe konfiguruar me vërtetimin e fjalëkalimit duke ndjekur mënyrën e konfigurimit të vërtetimit të fjalëkalimit me Nginx në Rocky Linux 9.
Hapi 1 - Instalimi dhe konfigurimi i Fail2ban
Fail2ban nuk është i disponueshëm në magazinat e paracaktuar të softuerit të Rocky. Megjithatë, ai është i disponueshëm në depon e EPEL ose Paketa të zgjeruara për Enterprise Linux, e cila përdoret zakonisht për paketat e palëve të treta në Red Hat dhe Rocky Linux. Nëse nuk e keni shtuar tashmë EPEL në burimet e paketës së sistemit tuaj, mund ta shtoni depon duke përdorur dnf
, si do të instalonit çdo paketë tjetër:
- sudo dnf install epel-release -y
Menaxheri i paketave dnf
tani do të kontrollojë EPEL përveç burimeve tuaja të paracaktuara të paketave kur instaloni softuer të ri. Vazhdoni të instaloni Fail2ban:
- sudo dnf install fail2ban -y
Fail2ban do të konfigurojë automatikisht një shërbim në sfond pasi të instalohet. Megjithatë, ai është i çaktivizuar si parazgjedhje, sepse disa nga cilësimet e tij të paracaktuara mund të shkaktojnë efekte të padëshiruara. Ju mund ta verifikoni këtë duke përdorur komandën systemctl
:
- systemctl status fail2ban.service
Output○ fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; disabled; vendor preset: disabled
Active: inactive (dead)
Docs: man:fail2ban(1)
Mund ta aktivizoni menjëherë Fail2ban, por së pari, do të rishikoni disa nga veçoritë e tij.
Shërbimi fail2ban ruan skedarët e tij të konfigurimit në drejtorinë /etc/fail2ban
. Ekziston një skedar me parazgjedhje të quajtur jail.conf
. Shkoni në atë drejtori dhe printoni 20 rreshtat e parë të atij skedari duke përdorur head -20
:
- cd /etc/fail2ban
- head -20 jail.conf
Output#
# WARNING: heavily refactored in 0.9.0 release. Please review and
# customize settings for your setup.
#
# Changes: in most of the cases you should not modify this
# file, but provide customizations in jail.local file,
# or separate .conf files under jail.d/ directory, e.g.:
#
# HOW TO ACTIVATE JAILS:
#
# YOU SHOULD NOT MODIFY THIS FILE.
#
# It will probably be overwritten or improved in a distribution update.
#
# Provide customizations in a jail.local file or a jail.d/customisation.local.
# For example to change the default bantime for all jails and to enable the
# ssh-iptables jail the following (uncommented) would appear in the .local file.
# See man 5 jail.conf for details.
#
# [DEFAULT]
Siç do ta shihni, disa rreshta të parë të këtij skedari komentohen – ato fillojnë me karaktere #
që tregojnë se ato duhet të lexohen si dokumentacion dhe jo si cilësime. Siç do ta shihni gjithashtu, këto komente po ju drejtojnë që të mos e modifikoni drejtpërdrejt këtë skedar. Në vend të kësaj, ju keni dy opsione: ose krijoni profile individuale për Fail2ban në skedarë të shumtë brenda drejtorisë jail.d/
, ose krijoni dhe mblidhni të gjitha cilësimet tuaja lokale në një jail.local skedari. Skedari jail.conf
do të përditësohet periodikisht ndërsa vetë Fail2ban përditësohet dhe do të përdoret si një burim i cilësimeve të paracaktuara për të cilat nuk keni krijuar asnjë zëvendësim.
Në këtë tutorial, ju do të krijoni jail.local
. Ju mund ta bëni këtë duke kopjuar jail.conf
:
- sudo cp jail.conf jail.local
Tani mund të filloni të bëni ndryshime në konfigurim. Redaktori i parazgjedhur i tekstit që vjen me Rocky Linux 9 është vi
. vi
është një redaktues teksti jashtëzakonisht i fuqishëm, por mund të jetë disi i trashë për përdoruesit që nuk kanë përvojë me të. Ju mund të dëshironi të instaloni një redaktues më miqësor për përdoruesit, si nano
për modifikimin e skedarëve të konfigurimit në serverin tuaj Rocky Linux 9:
- sudo dnf install nano -y
Tani mund të përdorni nano
për të modifikuar skedarin tuaj të konfigurimit Nginx:
- sudo nano jail.local
Ndryshimi i parazgjedhjeve
Do të filloni duke vlerësuar standardet e vendosura brenda skedarit. Këto do të gjenden në seksionin [DEFAULT]
brenda skedarit. Këta artikuj përcaktojnë politikën e përgjithshme dhe mund të anashkalohen mbi bazën e aplikimit. Nëse jeni duke përdorur nano
, mund të kërkoni brenda skedarit duke shtypur Ctrl+W
, duke futur një varg kërkimi dhe më pas duke shtypur enter.
Një nga pikat e para që duhet parë është lista e klientëve që nuk i nënshtrohen politikave fail2ban
. Kjo është vendosur nga direktiva ignoreip
. Ndonjëherë është një ide e mirë të shtoni adresën tuaj IP ose rrjetin në listën e përjashtimeve për të shmangur mbylljen. Ky është më pak problem me hyrjet e serverit në ueb sesa SSH, pasi nëse jeni në gjendje të ruani aksesin në shell, gjithmonë mund ta ktheni një ndalim. Ju mund ta çkomentoni këtë linjë dhe të shtoni adresa IP shtesë ose rrjete të kufizuara nga një hapësirë, në listën ekzistuese:
[DEFAULT]
. . .
#ignoreip = 127.0.0.1/8 your_home_IP
Një tjetër artikull që mund të dëshironi të rregulloni është bantime
, i cili kontrollon se për sa sekonda ndalohet një anëtar ofendues. Është ideale ta caktoni këtë në një kohë mjaft të gjatë për të prishur përpjekjet me qëllim të keq dhe të automatizuar, ndërsa është mjaft e shkurtër për t'i lejuar përdoruesit të korrigjojnë gabimet. Si parazgjedhje, kjo është vendosur në 10 minuta. Ju mund ta rrisni ose ulni këtë vlerë:
[DEFAULT]
. . .
bantime = 10m
Dy artikujt e ardhshëm përcaktojnë shtrirjen e linjave të regjistrit të përdorur për të përcaktuar një klient ofendues. findtime
specifikon një sasi kohe në sekonda dhe direktiva maxretry
tregon numrin e përpjekjeve që duhen toleruar brenda asaj kohe. Nëse një klient bën më shumë se përpjekje për maxretry
brenda kohës së caktuar nga findtime
, ai do të ndalohet:
[DEFAULT]
. . .
findtime = 10m
maxretry = 5
Parametri action
konfiguron veprimin që kryen Fail2ban kur dëshiron të vendosë një ndalim. Vlera action_
përcaktohet në skedar pak para këtij parametri. Veprimi i parazgjedhur është të përditësoni konfigurimin tuaj të murit të zjarrit për të refuzuar trafikun nga hosti ofendues derisa të kalojë koha e ndalimit.
[DEFAULT]
. . .
action = $(action_)s
. . .
Ekzistojnë skripte të tjera action_
të ofruara si parazgjedhje, të cilat mund t'i zëvendësoni $ (action_)
me më lart:
…
# ban & send an e-mail with whois report to the destemail.
action_mw = %(action_)s
%(mta)s-whois[sender="%(sender)s", dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]
# ban & send an e-mail with whois report and relevant log lines
# to the destemail.
action_mwl = %(action_)s
%(mta)s-whois-lines[sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]
…
Në hapin tjetër, do të kaloni te konfigurimi specifik i Nginx.
Hapi 2 – Konfigurimi i Fail2Ban për të monitoruar regjistrat e Nginx
Tani që keni vendosur disa nga cilësimet e përgjithshme fail2ban
, mund të aktivizoni disa burgje specifike të Nginx që do të monitorojnë regjistrat e serverit tuaj të internetit për modele specifike.
Çdo burg brenda skedarit të konfigurimit shënohet nga një kokë që përmban emrin e burgut në kllapa katrore - çdo seksion përveç seksionit [DEFAULT]
tregon një konfigurim specifik të burgut. Si parazgjedhje, vetëm burgu [ssh]
është i aktivizuar.
Për të aktivizuar monitorimin e regjistrave për përpjekjet e hyrjes në Nginx, aktivizoni burgun [nginx-http-auth]
. Shtoni një direktivë enabled=true
brenda këtij seksioni:
…
[nginx-http-auth]
enabled = true
port = http,https
logpath = %(nginx_error_log)s
. . .
Kur të keni mbaruar me modifikimet, ruani dhe mbyllni skedarin. Nëse jeni duke përdorur nano
, shtypni Ctrl+X
, më pas kur të kërkohet, Y
dhe më pas Enter. Më pas, do të rishikoni konfigurimin e filtrit për nginx-http-auth
.
Hapi 3 – Rishikimi i filtrave për burgjet Nginx
Ju mund të keni vënë re se blloku [nginx-http-auth]
në jail.local
nuk përmban ndonjë rregull specifik për Nginx. Këto rregulla nuk kodohen automatikisht brenda Fail2ban - në fakt, titulli [nginx-http-auth]
korrespondon drejtpërdrejt me një emër skedari brenda drejtorisë filter.d
të Fail2ban të filtrave të parapaketuar . Nëse renditni përmbajtjen e kësaj drejtorie, mund të shihni filtrat e tjerë të parapaketuar në dispozicion, nëse do t'ju duhet t'i përdorni:
- ls /etc/fail2ban/filter.d
Output3proxy.conf freeswitch.conf proftpd.conf
apache-auth.conf froxlor-auth.conf pure-ftpd.conf
apache-badbots.conf gitlab.conf qmail.conf
apache-botsearch.conf grafana.conf recidive.conf
apache-common.conf groupoffice.conf roundcube-auth.conf
apache-fakegooglebot.conf gssftpd.conf scanlogd.conf
apache-modsecurity.conf guacamole.conf screensharingd.conf
apache-nohome.conf haproxy-http-auth.conf selinux-common.conf
apache-noscript.conf horde.conf selinux-ssh.conf
apache-overflows.conf ignorecommands sendmail-auth.conf
apache-pass.conf kerio.conf sendmail-reject.conf
apache-shellshock.conf lighttpd-auth.conf sieve.conf
assp.conf mongodb-auth.conf slapd.conf
asterisk.conf monit.conf softethervpn.conf
bitwarden.conf murmur.conf sogo-auth.conf
…
Tani për tani, hidhini një sy nginx-http-auth.conf
:
- cat /etc/fail2ban/filter.d/nginx-http-auth.conf
Output# fail2ban filter configuration for nginx
[Definition]
failregex = ^ \[error\] \d+#\d+: \*\d+ user "(?:[^"]+|.*?)":? (?:password mismatch|was not found in "[^\"]*"), client: <HOST>, server: \S*, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"(?:, referrer: "\S+")?\s*$
ignoreregex =
datepattern = {^LN-BEG}
…
Këta skedarë përmbajnë shprehje të rregullta (një stenografi e zakonshme për analizimin e tekstit) që përcaktojnë nëse një rresht në regjistër është një përpjekje e dështuar e vërtetimit. Ato mund të modifikohen drejtpërdrejt sipas nevojës.
Në hapat e ardhshëm, do të aktivizoni dhe testoni Fail2ban.
Hapi 4 – Aktivizimi i burgjeve tuaja Nginx
Në këtë pikë, mund të aktivizoni shërbimin tuaj Fail2ban në mënyrë që ai të funksionojë automatikisht tani e tutje. Së pari, ekzekutoni systemctl enable
:
- sudo systemctl enable fail2ban
Më pas, niseni manualisht për herë të parë me systemctl start
:
- sudo systemctl start fail2ban
Mund të verifikoni që po funksionon me status systemctl
:
- sudo systemctl status fail2ban
Output● fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled
Active: active (running) since Wed 2022-09-14 20:48:40 UTC; 22h ago
Docs: man:fail2ban(1)
Main PID: 5962 (fail2ban-server)
Tasks: 7 (limit: 2327)
Memory: 12.6M
CPU: 195ms
CGroup: /system.slice/fail2ban.service
└─5962 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
Shënim: Për të zbatuar çdo ndryshim të ardhshëm të konfigurimit, do t'ju duhet të rinisni shërbimin fail2ban
. Ju mund ta bëni këtë duke përdorur sudo systemctl restart fail2ban
Marrja e informacionit rreth burgjeve të aktivizuara
Ju mund t'i shihni të gjitha burgjet tuaja të aktivizuara duke përdorur komandën fail2ban-client
:
- sudo fail2ban-client status
Ju duhet të shihni një listë të burgjeve të aktivizuara:
OutputStatus
|- Number of jail: 2
`- Jail list: nginx-http-auth, sshd
Nëse dëshironi të shihni detajet e ndalimeve që zbatohen nga çdo burg, përdorni përsëri fail2ban-client
:
- sudo fail2ban-client status nginx-http-auth
OutputStatus for the jail: nginx-http-auth
|- filter
| |- File list: /var/log/nginx/error.log
| |- Currently failed: 0
| `- Total failed: 0
`- action
|- Currently banned: 0
| `- IP list:
`- Total banned: 0
Në hapin e fundit të këtij tutoriali, do të testoni qëllimisht ndalimin për të verifikuar që konfigurimi juaj Fail2ban po funksionon.
Hapi 5 – Testimi i politikave Fail2Ban
Është e rëndësishme të testoni politikat tuaja Fail2ban për t'u siguruar që ato bllokojnë trafikun siç pritej. Për ta bërë këtë, lundroni te serveri juaj në një shfletues uebi lokal. Në kërkesën e vërtetimit të Nginx, vendosni në mënyrë të përsëritur kredencialet e pasakta. Pas disa përpjekjeve, serveri duhet të ndalojë së reaguari plotësisht ndaj jush, sikur lidhja juaj të jetë e prishur:
Nëse shikoni statusin e konfigurimit nginx-http-auth
me fail2ban-client
, do të shihni që adresa juaj IP është e ndaluar nga faqja:
- sudo fail2ban-client status nginx-http-auth
OutputStatus for the jail: nginx-http-auth
|- Filter
| |- Currently failed: 0
| |- Total failed: 5
| `- File list: /var/log/nginx/error.log
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 108.172.85.62
Kur të jeni të kënaqur që rregullat tuaja po funksionojnë, mund ta zhbllokoni manualisht adresën tuaj IP me fail2ban-client
duke shtypur:
- sudo fail2ban-client set nginx-http-auth unbanip 108.172.85.62
Tani duhet të jeni në gjendje të provoni përsëri vërtetimin.
konkluzioni
Fail2ban ofron një fleksibilitet të madh për të ndërtuar politika që do t'i përshtaten nevojave tuaja specifike të sigurisë. Duke i hedhur një sy variablave dhe modeleve brenda skedarit /etc/fail2ban/jail.local
dhe skedarëve nga të cilët varet brenda skedarit /etc/fail2ban/filter.d
dhe drejtorive /etc/fail2ban/action.d
, mund të gjeni shumë pjesë për t'i modifikuar dhe ndryshuar ndërsa zhvillohen nevojat tuaja. Mbrojtja e serverit tuaj me fail2ban
mund t'ju ofrojë një bazë të dobishme sigurie.
Për të zbuluar më shumë mënyra për të përdorur fail2ban
, shikoni Si të mbroni SSH me Fail2Ban në Rocky Linux 9.