Si të mbroni SSH me Fail2Ban në Ubuntu 14.04


Prezantimi

Ndërsa lidhja me serverin tuaj përmes SSH mund të jetë shumë e sigurt, vetë demon SSH është një shërbim që duhet të ekspozohet ndaj internetit për të funksionuar siç duhet. Kjo vjen me një rrezik të natyrshëm dhe krijon një vektor sulmi për sulmuesit e mundshëm.

Çdo shërbim që është i ekspozuar ndaj rrjetit është një objektiv i mundshëm në këtë mënyrë. Nëse i kushtoni vëmendje regjistrave të aplikacioneve për këto shërbime, shpesh do të shihni përpjekje të përsëritura, sistematike të hyrjes që përfaqësojnë sulme me forcë brutale nga përdoruesit dhe robotët njësoj.

Një shërbim i quajtur fail2ban mund ta zbusë këtë problem duke krijuar rregulla që mund të ndryshojnë automatikisht konfigurimin e murit tuaj të zjarrit iptables bazuar në një numër të paracaktuar përpjekjesh për hyrje të pasuksesshme. Kjo do të lejojë serverin tuaj t'i përgjigjet përpjekjeve të paligjshme të aksesit pa ndërhyrjen tuaj.

Në këtë udhëzues, ne do të mbulojmë se si të instaloni dhe përdorni fail2ban në një server Ubuntu 14.04.

Instaloni Fail2Ban në Ubuntu 14.04

Procesi i instalimit për këtë mjet është i thjeshtë sepse ekipi i paketimit të Ubuntu mban një paketë në depot e paracaktuara.

Së pari, ne duhet të përditësojmë indeksin tonë lokal të paketës dhe më pas mund të përdorim apt për të shkarkuar dhe instaluar paketën:

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

Siç mund ta shihni, instalimi është i parëndësishëm. Tani mund të fillojmë të konfigurojmë programin për përdorimin tonë.

Konfiguro Fail2Ban me Cilësimet e Shërbimit

Shërbimi fail2ban ruan skedarët e tij të konfigurimit në drejtorinë /etc/fail2ban. Ekziston një skedar me parazgjedhje të quajtur jail.conf.

Meqenëse ky skedar mund të modifikohet nga përmirësimet e paketës, ne nuk duhet ta modifikojmë këtë skedar në vend, por ta kopjojmë atë në mënyrë që të mund të bëjmë ndryshimet tona në mënyrë të sigurt. Në mënyrë që këta dy skedarë të funksionojnë së bashku me sukses, është më mirë të përfshini vetëm cilësimet që dëshironi të anashkaloni në skedarin jail.local. Të gjitha opsionet e paracaktuara do të merren nga skedari jail.conf.

Edhe pse ne duhet të përfshijmë vetëm devijimet nga parazgjedhja në skedarin jail.local, është më e lehtë të krijosh një skedar jail.local bazuar në burgin ekzistues. skedar conf. Pra, ne do të kopjojmë mbi atë skedar, me përmbajtjen e komentuar, si bazë për skedarin jail.local. Ju mund ta bëni këtë duke shtypur:

  1. awk '{ printf "# "; print; }' /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local

Pasi skedari të kopjohet, ne mund të hapim skedarin origjinal jail.conf për të parë se si janë konfiguruar gjërat si parazgjedhje

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

Në këtë skedar, ka disa cilësime që mund të dëshironi t'i rregulloni. Cilësimet e vendosura nën seksionin [DEFAULT] do të zbatohen për të gjitha shërbimet e aktivizuara për fail2ban që nuk janë anashkaluar në seksionin e vetë shërbimit.

[DEFAULT]
. . .
ignoreip = 127.0.0.1/8
. . .

Cilësimi ignoreip konfiguron adresat e burimit që fail2ban injoron. Si parazgjedhje, është konfiguruar që të mos ndalojë asnjë trafik që vjen nga makina lokale. Mund të shtoni adresa shtesë për t'i shpërfillur duke shtuar një seksion [DEFAULT] me një cilësim ignoreip nën të në skedarin jail.local. Ju mund të shtoni adresa shtesë duke i bashkangjitur ato në fund të direktivës, të ndara me një hapësirë.

[DEFAULT]
. . .
bantime = 600
. . .

Parametri bantime përcakton kohëzgjatjen që një klient do të ndalohet kur ai nuk ka arritur të vërtetojë saktë. Kjo matet në sekonda. Si parazgjedhje, kjo është vendosur në 600 sekonda ose 10 minuta.

[DEFAULT]
. . .
findtime = 600
maxretry = 3
. . .

Dy parametrat e ardhshëm që dëshironi t'u kushtoni vëmendje janë findtime dhe maxretry. Këto punojnë së bashku për të vendosur kushtet në të cilat një klient rezulton të jetë një përdorues i paligjshëm që duhet të ndalohet.

Variabli maxretry përcakton numrin e provave që një klient duhet të vërtetojë brenda një dritareje kohore të përcaktuar nga findtime, përpara se të ndalohet. Me cilësimet e paracaktuara, shërbimi fail2ban do të ndalojë një klient që tenton pa sukses të identifikohet 3 herë brenda një dritareje 10 minutash.

[DEFAULT]
. . .
destemail = root@localhost
sendername = Fail2Ban
mta = sendmail
. . .

Ju do të dëshironi të vlerësoni cilësimet destemail, sendername dhe mta nëse dëshironi të konfiguroni sinjalizimet me email. Parametri destemail cakton adresën e emailit që duhet të marrë mesazhe ndalimi. emri i dërguesit vendos vlerën e fushës \Nga në email. Parametri mta konfiguron se çfarë shërbimi të postës do të përdoret për të dërguar postë. Përsëri, shtoni këto në Skedari jail.local, nën titullin [DEFAULT] dhe vendoseni në vlerat e duhura nëse dëshironi t'i rregulloni ato.

[DEFAULT]
. . .
action = $(action_)s
. . .

Ky parametër 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ë thjesht konfigurimi i murit të zjarrit për të refuzuar trafikun nga hosti ofendues derisa të kalojë koha e ndalimit.

Nëse dëshironi të konfiguroni sinjalizimet me email, shtoni ose anuloni artikullin action në skedarin jail.local dhe ndryshoni vlerën e tij nga action_ në < kod>action_mw. Nëse dëshironi që emaili të përfshijë linjat përkatëse të regjistrit, mund ta ndryshoni atë në action_mwl. Sigurohuni që të keni konfiguruar cilësimet e duhura të postës nëse vendosni të përdorni sinjalizimet e postës.

Cilësimet individuale të burgut

Më në fund, arrijmë te pjesa e skedarit të konfigurimit që merret me shërbime individuale. Këto janë të specifikuara nga titujt e seksionit, si [ssh].

Secili prej këtyre seksioneve mund të aktivizohet duke hequr komentin e titullit në jail.local dhe duke ndryshuar rreshtin enabled në \true:

[jail_to_enable]
. . .
enabled = true
. . .

Si parazgjedhje, shërbimi SSH është i aktivizuar dhe të gjithë të tjerët janë të çaktivizuar.

Këto seksione funksionojnë duke përdorur vlerat e vendosura në seksionin [DEFAULT] si bazë dhe duke i modifikuar ato sipas nevojës. Nëse dëshironi të anashkaloni ndonjë vlerë, mund ta bëni këtë duke shtuar seksionin e duhur të shërbimit te jail.local dhe duke modifikuar vlerat e tij.

Disa cilësime të tjera që janë vendosur këtu janë filtri që do të përdoret për të vendosur nëse një rresht në një regjistër tregon një vërtetim të dështuar dhe logpath që tregon fail2ban se ku janë regjistrat për ai shërbim i caktuar ndodhet.

Vlera filter është në fakt një referencë për një skedar të vendosur në drejtorinë /etc/fail2ban/filter.d, me shtesën e tij .conf të hequr . Këta skedarë përmbajnë shprehje të rregullta që përcaktojnë nëse një rresht në regjistër është një përpjekje e dështuar e vërtetimit. Ne nuk do t'i mbulojmë këto skedarë në thellësi në këtë udhëzues, sepse ato janë mjaft komplekse dhe cilësimet e paracaktuara përputhen mirë me linjat e duhura.

Sidoqoftë, mund të shihni se çfarë lloj filtrash janë të disponueshëm duke shikuar në atë drejtori:

  1. ls /etc/fail2ban/filter.d

Nëse shihni një skedar që duket se ka lidhje me një shërbim që po përdorni, duhet ta hapni atë me një redaktues teksti. Shumica e skedarëve janë komentuar mjaft mirë dhe ju duhet të jeni në gjendje të paktën të tregoni se nga çfarë lloj gjendjeje është krijuar skenari për t'u mbrojtur. Shumica e këtyre filtrave kanë seksione të përshtatshme (të çaktivizuara) në skedarin jail.conf që mund t'i aktivizojmë në skedarin jail.local nëse dëshironi.

Për shembull, pretendoni se po i shërbejmë një faqe interneti duke përdorur Nginx dhe kuptoni se një pjesë e faqes sonë e mbrojtur me fjalëkalim po përplaset me përpjekjet për hyrje. Mund t'i themi fail2ban të përdorë skedarin nginx-http-auth.conf për të kontrolluar këtë gjendje brenda skedarit /var/log/nginx/error.log.

Kjo në fakt është vendosur tashmë në një seksion të quajtur [nginx-http-auth] në skedarin tonë /etc/fail2ban/jail.conf. Do të na duhet vetëm të çkomentojmë seksionin në skedarin jail.local dhe të kthejmë parametrin enabled për të mbrojtur shërbimin tonë:

. . .
[nginx-http-auth]

enabled = true
. . .

Nëse e aktivizoni këtë, do të dëshironi të rinisni shërbimin tuaj fail2ban për t'u siguruar që rregullat tuaja janë ndërtuar në mënyrë korrekte.

Duke i vënë të gjitha së bashku

Tani që e kuptoni idenë bazë pas fail2ban, le të kalojmë përmes një konfigurimi bazë.

Ne do të konfigurojmë një politikë të ndalimit automatik për SSH dhe Nginx, ashtu siç e përshkruam më lart. Ne duam që fail2ban të na dërgojë email kur një IP është e ndaluar.

Së pari, le të instalojmë të gjithë softuerin përkatës.

Nëse nuk e keni tashmë, do t'ju duhet nginx, pasi ne do të monitorojmë regjistrat e tij dhe do t'ju duhet sendmail për të na dërguar njoftime me postë. Ne do të rrëmbejmë gjithashtu iptables-persistent për të lejuar serverin të vendosë automatikisht rregullat tona të murit të zjarrit në nisje. Këto mund të merren nga depot e paracaktuara të Ubuntu:

  1. sudo apt-get update
  2. sudo apt-get install nginx sendmail iptables-persistent

Ndaloni shërbimin fail2ban për një moment në mënyrë që të mund të krijojmë një mur bazë zjarri pa rregullat që shton:

  1. sudo service fail2ban stop

Krijoni një Firewall Bazë

Kur kjo të përfundojë, ne duhet të implementojmë një mur zjarri të paracaktuar. Mund të mësoni se si të konfiguroni një mur zjarri iptables në Ubuntu 14.04 këtu. Ne thjesht do të krijojmë një mur bazë zjarri për këtë udhëzues.

Ne do t'i themi që të lejojë lidhjet e vendosura, trafikun e krijuar nga vetë serveri, trafikun e destinuar për portet tona të SSH dhe serverit të internetit. Ne do të heqim të gjithë trafikun tjetër. Mund ta vendosim këtë mur bazë të zjarrit duke shtypur:

  1. sudo iptables -A INPUT -i lo -j ACCEPT
  2. sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  3. sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  4. sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
  5. sudo iptables -A INPUT -j DROP

Këto komanda do të zbatojnë politikën e mësipërme. Ne mund të shohim rregullat tona aktuale të murit të zjarrit duke shtypur:

  1. sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP

Ju mund t'i ruani muret e zjarrit në mënyrë që ato t'i mbijetojnë një rindezjeje duke shtypur:

  1. sudo dpkg-reconfigure iptables-persistent

Më pas, mund të rinisni fail2ban për të zbatuar rregullat e mbështjelljes:

  1. sudo service fail2ban start

Ne mund të shohim rregullat tona aktuale të murit të zjarrit duke shtypur:

  1. sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban-ssh -j RETURN

Ne kemi politikën tonë të paracaktuar për secilin prej zinxhirëve tanë, dhe më pas pesë rregullat bazë që kemi vendosur. Në të kuqe, ne kemi gjithashtu strukturën e paracaktuar të vendosur nga fail2ban pasi ajo tashmë zbaton politikat e ndalimit të SSH si parazgjedhje. Këto mund të shfaqen ose jo në fillim, pasi ndonjëherë fail2ban nuk e shton strukturën derisa të zbatohet ndalimi i parë.

Rregullimi i konfigurimit të Fail2ban

Tani, ne duhet të konfigurojmë fail2ban duke përdorur cilësimet që duam. Hapni skedarin jail.local:

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

Këtu mund të vendosim një kohë më të rëndë ndalimi. Gjeni dhe hiqni komentin e titullit [DEFAULT]. Nën titullin e paracaktuar, ndryshoni cilësimin bantime në mënyrë që shërbimi ynë të ndalojë klientët për gjysmë ore:

[DEFAULT]
. . .
bantime = 1800
. . .

Ne gjithashtu duhet të konfigurojmë informacionin tonë të emailit të alarmit. Së pari, gjeni parametrin destemail, i cili gjithashtu duhet të jetë nën titullin [DEFAULT]. Vendosni adresën e emailit që dëshironi të përdorni për të mbledhur këto mesazhe:

[DEFAULT]
. . .
destemail = admin@example.com
. . .

Nëse dëshironi, mund ta vendosni emri i dërguesit në diçka tjetër. Megjithatë, është e dobishme të keni një vlerë që mund të filtrohet lehtësisht duke përdorur shërbimin tuaj të postës, ose përndryshe kutia juaj e zakonshme hyrëse mund të përmbytet me sinjalizime nëse ka shumë pushim në përpjekje nga vende të ndryshme.

Duke lëvizur poshtë, duhet të rregullojmë parametrin action në një nga veprimet që na dërgojnë email. Zgjedhjet janë midis action_mw që vendos ndalimin dhe më pas na dërgon me email një raport \whois për hostin ofendues, ose action_mwl që bën sa më sipër, por gjithashtu dërgon email përkatës linja log.

Ne do të zgjedhim action_mwl sepse linjat e regjistrit do të na ndihmojnë të zgjidhim problemet dhe të mbledhim më shumë informacion nëse ka probleme:

[DEFAULT]
. . .
action = %(action_mwl)s
. . .

Duke kaluar te seksioni ynë SSH, nëse duam të rregullojmë sasinë e përpjekjeve të pasuksesshme që duhet të lejohen përpara se të vendoset një ndalim, ju mund të modifikoni hyrjen maxretry. Nëse jeni duke përdorur një port të ndryshëm nga \22, do të dëshironi të rregulloni parametrin port në mënyrë të përshtatshme. Siç thamë më parë, ky shërbim është aktivizuar tashmë, kështu që nuk kemi nevojë të modifikojmë se.

Më pas, kërkoni për seksionin nginx-http-auth. Çkomentoni titullin dhe ndryshoni parametrin enabled për të lexuar \true.

. . .
[nginx-http-auth]

enabled = true
. . .

Kjo duhet të jetë gjithçka që duhet të bëni këtë seksion, përveç nëse serveri juaj i uebit funksionon në porte jo standarde ose nëse keni lëvizur shtegun e paracaktuar të regjistrit të gabimeve.

Rinisja e Shërbimit Fail2ban

Kur të keni mbaruar, ruani dhe mbyllni skedarin.

Tani, nisni ose rinisni shërbimin tuaj fail2ban. Ndonjëherë, është më mirë të mbyllni plotësisht shërbimin dhe pastaj ta filloni përsëri:

  1. sudo service fail2ban stop

Tani mund ta rifillojmë duke shtypur:

  1. sudo service fail2ban start

Mund të duhen disa momente që të plotësohen të gjitha rregullat e murit tuaj të zjarrit. Ndonjëherë, rregullat nuk shtohen derisa të vendoset ndalimi i parë i atij lloji. Sidoqoftë, pas një kohe, mund të kontrolloni rregullat e reja duke shtypur:

  1. sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-nginx-http-auth -N fail2ban-ssh -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 INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban-nginx-http-auth -j RETURN -A fail2ban-ssh -j RETURN

Vijat me të kuqe janë ato që kanë krijuar politikat tona fail2ban. Tani për tani, ata thjesht po e drejtojnë trafikun në zinxhirë të rinj, pothuajse të zbrazët dhe më pas e lënë trafikun të rrjedhë përsëri në zinxhirin INPUT.

Megjithatë, këto zinxhirë të rinj janë vendi ku do të shtohen rregullat e ndalimit.

Testimi i politikave të ndalimit

Nga një server tjetër, ai me të cilin nuk do të duhet të regjistrohet në serverin tuaj fail2ban, ne mund të testojmë rregullat duke ndaluar serverin tonë të dytë.

Pasi të keni hyrë në serverin tuaj të dytë, provoni të futni SSH në serverin fail2ban. Mund të provoni të lidheni duke përdorur një emër që nuk ekziston, për shembull:

  1. ssh blah@fail2ban_server_IP

Futni karaktere të rastësishme në kërkesën e fjalëkalimit. Përsëriteni këtë disa herë. Në një moment, serveri fail2ban nuk do të përgjigjet me mesazhin Leja u refuzua. Kjo sinjalizon që serveri juaj i dytë është ndaluar nga serveri fail2ban.

Në serverin tuaj fail2ban, mund të shihni rregullin e ri duke kontrolluar përsëri iptablet tona:

  1. sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-nginx-http-auth -N fail2ban-ssh -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 INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban-nginx-http-auth -j RETURN -A fail2ban-ssh -s 203.0.113.14/32 -j REJECT --reject-with icmp-port-unreachable -A fail2ban-ssh -j RETURN

Siç mund ta shihni në rreshtin e theksuar, ne kemi një rregull të ri në konfigurimin tonë i cili refuzon trafikun në portin SSH që vjen nga adresa IP e serverit tonë të dytë. Duhet të kishit marrë gjithashtu një email për ndalimin në llogarinë që keni konfiguruar.

konkluzioni

Tani duhet të jeni në gjendje të konfiguroni disa politika bazë ndalimi për shërbimet tuaja. Fail2ban është shumë i lehtë për t'u konfiguruar dhe është një mënyrë e shkëlqyer për të mbrojtur çdo lloj shërbimi që përdor vërtetimin.

Nëse dëshironi të mësoni më shumë se si funksionon fail2ban, mund të shikoni tutorialin tonë se si funksionojnë rregullat dhe skedarët fail2ban.

Për informacion se si të përdorni fail2ban për të mbrojtur shërbime të tjera, provoni këto lidhje:

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