Si të mbroni një server Nginx me Fail2Ban në Ubuntu 14.04


Prezantimi

Kur përdorni një server në internet, është e rëndësishme të zbatoni masa sigurie për të mbrojtur faqen tuaj dhe përdoruesit. Mbrojtja e faqeve të internetit dhe aplikacioneve tuaja me politikat e murit të zjarrit dhe kufizimi i aksesit në zona të caktuara me vërtetimin e fjalëkalimit është një pikënisje e shkëlqyer për sigurimin e sistemit tuaj. Sidoqoftë, çdo kërkesë e fjalëkalimit të aksesueshëm publikisht ka të ngjarë të tërheqë përpjekje brutale të forcës nga përdoruesit me qëllim të keq dhe robotët.

Konfigurimi i fail2ban mund të ndihmojë në zbutjen e këtij problemi. Kur përdoruesit dështojnë në mënyrë të përsëritur të vërtetojnë në një shërbim (ose përfshihen në aktivitete të tjera të dyshimta), fail2ban mund të lëshojë një ndalim të përkohshëm në adresën IP ofenduese duke modifikuar në mënyrë dinamike politikën e ekzekutimit të murit të zjarrit. Çdo fail2ban \burg funksionon duke kontrolluar regjistrat e shkruar nga një shërbim për modele që tregojnë përpjekje të dështuara. Vendosja e fail2ban për të monitoruar regjistrat e Nginx është mjaft e lehtë duke përdorur disa prej përfshirë filtra të konfigurimit dhe disa do t'i krijojmë vetë.

Në këtë udhëzues, ne do të demonstrojmë se si të instaloni fail2ban dhe ta konfiguroni atë për të monitoruar regjistrat tuaj Nginx për përpjekjet për ndërhyrje. Ne do të përdorim një server Ubuntu 14.04.

Parakushtet

Përpara se të filloni, duhet të keni një server Ubuntu 14.04 të konfiguruar me një llogari jo-root. Kjo llogari duhet të konfigurohet me privilegje sudo në mënyrë që të lëshojë komanda administrative. Për të mësuar se si të konfiguroni një përdorues me privilegje sudo, ndiqni udhëzuesin tonë fillestar të konfigurimit të serverit për Ubuntu 14.04.

Instalimi i Nginx dhe konfigurimi i vërtetimit të fjalëkalimit

Nëse jeni të interesuar të mbroni serverin tuaj Nginx me fail2ban, mund të keni tashmë një server të konfiguruar dhe ekzekutuar. Nëse jo, mund ta instaloni Nginx nga depot e paracaktuara të Ubuntu duke përdorur apt.

Përditësoni indeksin e paketës lokale dhe instaloni duke shtypur:

  1. sudo apt-get update
  2. sudo apt-get install nginx

Shërbimi fail2ban është i dobishëm për mbrojtjen e pikave të hyrjes. Në mënyrë që kjo të jetë e dobishme për një instalim Nginx, vërtetimi i fjalëkalimit duhet të zbatohet për të paktën një nëngrup të përmbajtjes në server. Ju mund të ndiqni këtë udhëzues për të konfiguruar mbrojtjen me fjalëkalim për serverin tuaj Nginx.

Instaloni Fail2Ban

Pasi serveri juaj Nginx të funksionojë dhe të aktivizohet vërtetimi i fjalëkalimit, mund të vazhdoni dhe të instaloni fail2ban (ne përfshijmë një rimarrje të një depoje tjetër këtu në rast se tashmë e kishit konfiguruar Nginx në hapat e mëparshëm):

  1. sudo apt-get update
  2. sudo apt-get install fail2ban

Kjo do të instalojë softuerin. Si parazgjedhje, fail2ban është konfiguruar që të ndalojë vetëm përpjekjet e dështuara të hyrjes në SSH. Ne duhet të aktivizojmë disa rregulla që do ta konfigurojnë atë për të kontrolluar regjistrat tanë Nginx për modele që tregojnë aktivitet keqdashës.

Rregullimi i cilësimeve të përgjithshme brenda Fail2Ban

Për të filluar, ne duhet të rregullojmë skedarin e konfigurimit që përdor fail2ban për të përcaktuar se cilat regjistra të aplikacioneve duhet të monitorohen dhe çfarë veprimesh duhet të ndërmarrim kur gjenden hyrjet fyese. Skedari i dhënë /etc/fail2ban/jail.conf është burimi kryesor i ofruar për këtë.

Për të bërë modifikime, duhet ta kopjojmë këtë skedar në /etc/fail2ban/jail.local. Kjo do të parandalojë që ndryshimet tona të mbishkruhen nëse një përditësim i paketës ofron një skedar të ri të paracaktuar:

  1. sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Hapni skedarin e sapokopjuar në mënyrë që të mund të konfigurojmë monitorimin tonë të regjistrit Nginx:

  1. sudo nano /etc/fail2ban/jail.local

Ndryshimi i parazgjedhjeve

Ne duhet të fillojmë duke vlerësuar standardet e vendosura brenda skedarit për të parë nëse ato i përshtaten nevojave tona. Këto do të gjenden në seksionin [DEFAULT] brenda skedarit. Këta artikuj përcaktojnë politikën e përgjithshme dhe secili mund të anashkalohet në burgje specifike.

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, megjithëse nëse jeni në gjendje të ruani aksesin në guaskë, pasi gjithmonë mund ta ktheni manualisht ndalimin. Ju mund 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 e një aktori keqdashës, ndërkohë që është mjaft e shkurtër për t'i lejuar përdoruesit legjitimë të korrigjojnë gabimet. Si parazgjedhje, kjo është vendosur në 600 sekonda (10 minuta). Rriteni ose uleni këtë vlerë siç e shihni të arsyeshme:

[DEFAULT]

. . .
bantime = 3600

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 = 3600   # These lines combine to ban clients that fail
maxretry = 6      # to authenticate 6 times within a half hour.

Konfigurimi i njoftimeve me postë (opsionale)

Ju mund të aktivizoni njoftimet me email nëse dëshironi të merrni postë sa herë që ndodh një ndalim. Për ta bërë këtë, do t'ju duhet së pari të vendosni një MTA në serverin tuaj në mënyrë që të mund të dërgojë email. Për të mësuar se si të përdorni Postfix për këtë detyrë, ndiqni këtë udhëzues.

Pasi të keni konfiguruar MTA-në tuaj, do t'ju duhet të rregulloni disa cilësime shtesë brenda seksionit [DEFAULT] të skedarit /etc/fail2ban/jail.local. Filloni duke vendosur direktivën mta. Nëse konfiguroni Postfix, siç tregon tutoriali i mësipërm, ndryshoni këtë vlerë në \mail:

[DEFAULT]

. . .
mta = mail

Ju duhet të zgjidhni adresën e emailit që do të dërgohen njoftimet. Modifiko direktivën destemail me këtë vlerë. Direktiva emri i dërguesit mund të përdoret për të modifikuar fushën \Dërguesi në emailet e njoftimit:

[DEFAULT]

. . .
destemail = youraccount@email.com
sendername = Fail2BanAlerts

Në gjuhën fail2ban, një \veprim është procedura e ndjekur kur një klient dështon vërtetimin shumë herë. Veprimi i paracaktuar (i quajtur action_) është thjesht ndalimi i adresës IP nga porti në fjalë. Megjithatë, ka dy veprime të tjera të parapërgatitura që mund të përdoren nëse keni konfiguruar postën.

Mund të përdorni veprimin action_mw për të ndaluar klientin dhe për të dërguar një njoftim me email në llogarinë tuaj të konfiguruar me një raport \whois në adresën ofenduese. Mund të përdorni gjithashtu kodin action_mwl veprim, i cili bën të njëjtën gjë, por përfshin gjithashtu linjat e regjistrit ofendues që shkaktuan ndalimin:

[DEFAULT]

. . .
action = %(action_mwl)s

Konfigurimi i Fail2Ban për të monitoruar regjistrat e Nginx

Tani që keni vendosur disa nga cilësimet e përgjithshme fail2ban, ne mund të përqendrohemi në aktivizimin e disa burgjeve specifike të Nginx që do të monitorojnë regjistrat e serverit tonë të internetit për modele specifike sjelljeje.

Ç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, ne do të aktivizojmë burgun [nginx-http-auth]. Ndryshoni direktivën enabled brenda këtij seksioni në mënyrë që të lexojë \true:

[nginx-http-auth]

enabled  = true
filter   = nginx-http-auth
port     = http,https
logpath  = /var/log/nginx/error.log
. . .

Ky është i vetmi burg specifik për Nginx i përfshirë me paketën fail2ban të Ubuntu. Megjithatë, ne mund të krijojmë burgjet tona për të shtuar funksionalitet shtesë. Frymëzimi dhe disa nga detajet e zbatimit të këtyre burgjeve shtesë erdhi nga këtu.

Ne mund të krijojmë një burg [nginx-noscript] për të ndaluar klientët që po kërkojnë skripta në faqen e internetit për t'i ekzekutuar dhe shfrytëzuar. Nëse nuk përdorni PHP ose ndonjë gjuhë tjetër në lidhje me serverin tuaj të internetit, mund ta shtoni këtë burg për të ndaluar ata që kërkojnë këto lloje burimesh:

[nginx-noscript]

enabled  = true
port     = http,https
filter   = nginx-noscript
logpath  = /var/log/nginx/access.log
maxretry = 6
. . .

Ne mund të shtojmë një seksion të quajtur [nginx-badbots] për të ndaluar disa modele të njohura të kërkesave me qëllim të keq për bot:

[nginx-badbots]

enabled  = true
port     = http,https
filter   = nginx-badbots
logpath  = /var/log/nginx/access.log
maxretry = 2

Nëse nuk përdorni Nginx për të siguruar akses në përmbajtjen e uebit brenda direktorive shtëpiake të përdoruesve, mund t'i ndaloni përdoruesit që kërkojnë këto burime duke shtuar një burg [nginx-nohome]:

[nginx-nohome]

enabled  = true
port     = http,https
filter   = nginx-nohome
logpath  = /var/log/nginx/access.log
maxretry = 2

Ne duhet të ndalojmë klientët që përpiqen të përdorin serverin tonë Nginx si një përfaqësues të hapur. Ne mund të shtojmë një burg [nginx-noproxy] që të përputhet me këto kërkesa:

[nginx-noproxy]

enabled  = true
port     = http,https
filter   = nginx-noproxy
logpath  = /var/log/nginx/access.log
maxretry = 2

Kur të keni mbaruar duke bërë modifikimet që ju nevojiten, ruani dhe mbyllni skedarin. Tani duhet të shtojmë filtrat për burgjet që kemi krijuar.

Shtimi i filtrave për burgje shtesë Nginx

Ne kemi përditësuar skedarin /etc/fail2ban/jail.local me disa specifikime shtesë të burgut për të përshtatur dhe ndaluar një gamë më të madhe sjelljesh të këqija. Ne duhet të krijojmë skedarët e filtrit për burgjet që kemi krijuar. Këto skedarë filtri do të specifikojnë modelet për të kërkuar brenda regjistrave Nginx.

Filloni duke ndryshuar në drejtorinë e filtrave:

  1. cd /etc/fail2ban/filter.d

Në fakt duam të fillojmë duke rregulluar filtrin e autentifikimit të para-furnizuar Nginx që të përputhet me një model shtesë të regjistrimit të dështuar të hyrjes. Hapni skedarin për redaktim:

  1. sudo nano nginx-http-auth.conf

Nën specifikimin failregex, shtoni një model shtesë. Kjo do të përputhet me linjat ku përdoruesi nuk ka futur asnjë emër përdoruesi ose fjalëkalim:

[Definition]


failregex = ^ \[error\] \d+#\d+: \*\d+ user "\S+":? (password mismatch|was not found in ".*"), client: <HOST>, server: \S+, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"\s*$
            ^ \[error\] \d+#\d+: \*\d+ no user/password was provided for basic authentication, client: <HOST>, server: \S+, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"\s*$

ignoreregex =

Ruani dhe mbyllni skedarin kur të keni mbaruar.

Më pas, ne mund të kopjojmë skedarin apache-badbots.conf për ta përdorur me Nginx. Ne mund ta përdorim këtë skedar siç është, por do ta kopjojmë në një emër të ri për qartësi. Kjo përputhet me mënyrën se si i kemi referuar filtrit brenda konfigurimit të burgut:

  1. sudo cp apache-badbots.conf nginx-badbots.conf

Më pas, ne do të krijojmë një filtër për burgun tonë [nginx-noscript]:

  1. sudo nano nginx-noscript.conf

Ngjitni përkufizimin e mëposhtëm brenda. Mos ngurroni të rregulloni prapashtesat e skriptit për të hequr skedarët e gjuhës që serveri juaj përdor në mënyrë legjitime ose për të shtuar prapashtesa shtesë:

[Definition]

failregex = ^<HOST> -.*GET.*(\.php|\.asp|\.exe|\.pl|\.cgi|\.scgi)

ignoreregex =

Ruani dhe mbyllni skedarin.

Më pas, krijoni një filtër për burgun [nginx-nohome]:

  1. sudo nano nginx-nohome.conf

Vendosni informacionin e mëposhtëm të filtrit në skedar:

[Definition]

failregex = ^<HOST> -.*GET .*/~.*

ignoreregex =

Ruani dhe mbyllni skedarin kur të përfundoni.

Më në fund, ne mund të krijojmë filtrin për burgun [nginx-noproxy]:

  1. sudo nano nginx-noproxy.conf

Ky përkufizim filtri do të përputhet me përpjekjet për të përdorur serverin tuaj si një përfaqësues:

[Definition]

failregex = ^<HOST> -.*GET http.*

ignoreregex =

Ruani dhe mbyllni skedarin kur të keni mbaruar.

Aktivizimi i burgjeve tuaja Nginx

Për të zbatuar ndryshimet e konfigurimit, do t'ju duhet të rinisni shërbimin fail2ban. Ju mund ta bëni këtë duke shtypur:

  1. sudo service fail2ban restart

Shërbimi duhet të riniset, duke zbatuar politikat e ndryshme të ndalimit që keni konfiguruar.

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:

  1. sudo fail2ban-client status

Ju duhet të shihni një listë të të gjitha burgjeve që keni aktivizuar:

Output
Status |- Number of jail: 6 `- Jail list: nginx-noproxy, nginx-noscript, nginx-nohome, nginx-http-auth, nginx-badbots, ssh

Mund të shikoni iptables për të parë që fail2ban ka modifikuar rregullat e murit tuaj të zjarrit për të krijuar një kornizë për ndalimin e klientëve. Edhe pa asnjë rregull të mëparshëm të murit të zjarrit, tani do të kishit të aktivizuar një kornizë që lejon fail2ban të ndalojë në mënyrë selektive klientët duke i shtuar ata në zinxhirë të krijuar me qëllim:

  1. sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-nginx-badbots -N fail2ban-nginx-http-auth -N fail2ban-nginx-nohome -N fail2ban-nginx-noproxy -N fail2ban-nginx-noscript -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-noproxy -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-nohome -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-badbots -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-noscript -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-http-auth -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A fail2ban-nginx-badbots -j RETURN -A fail2ban-nginx-http-auth -j RETURN -A fail2ban-nginx-nohome -j RETURN -A fail2ban-nginx-noproxy -j RETURN -A fail2ban-nginx-noscript -j RETURN -A fail2ban-ssh -j RETURN

Nëse dëshironi të shihni detajet e ndalimeve që zbatohen nga çdo burg, ndoshta është më e lehtë të përdorni përsëri fail2ban-client:

  1. sudo fail2ban-client status nginx-http-auth
Output
Status 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

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 shembull, për kërkesën e vërtetimit Nginx, mund të jepni kredenciale të pasakta disa herë. Pasi të keni tejkaluar kufirin, duhet të ndaloheni dhe të mos jeni në gjendje të hyni në sajt. Nëse konfiguroni njoftimet me email, duhet të shihni mesazhe në lidhje me ndalimin në llogarinë e emailit që keni dhënë.

Nëse shikoni statusin me komandën fail2ban-client, do të shihni që adresa juaj IP është e ndaluar nga faqja:

  1. sudo fail2ban-client status nginx-http-auth
Output
Status for the jail: nginx-http-auth |- filter | |- File list: /var/log/nginx/error.log | |- Currently failed: 0 | `- Total failed: 12 `- action |- Currently banned: 1 | `- IP list: 111.111.111.111 `- Total banned: 1

Kur të jeni të kënaqur që rregullat tuaja po funksionojnë, mund ta zhbllokoni manualisht adresën tuaj IP me fail2ban-client duke shtypur:

  1. sudo fail2ban-client set nginx-http-auth unbanip 111.111.111.111

Tani duhet të jeni në gjendje të provoni përsëri vërtetimin.

konkluzioni

Vendosja e fail2ban për të mbrojtur serverin tuaj Nginx është mjaft e thjeshtë në rastin më të thjeshtë. Megjithatë, 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. Mësimi i bazave se si të mbroni serverin tuaj me fail2ban mund t'ju ofrojë një siguri të madhe me përpjekje minimale.

Nëse dëshironi të mësoni më shumë rreth fail2ban, shikoni lidhjet e mëposhtme:

  • Si funksionon Fail2Ban për të mbrojtur shërbimet në një server Linux
  • Si të mbroni SSH me Fail2Ban në Ubuntu 14.04
  • Si të mbroni një server Apache me Fail2Ban në Ubuntu 14.04