GNU/Linux >> Znalost Linux >  >> Cent OS

Blokujte špatné roboty pomocí Fail2ban

Fail2ban je všestranný bezpečnostní nástroj. Ačkoli se primárně používá k prevenci útoků hrubou silou proti SSH, lze jej použít také k ochraně jiných služeb.

Existují roboti, kteří skenují internet a posílají tisíce požadavků na webové servery v naději, že najdou zranitelná místa. Tento příspěvek je o blokování takových robotů pomocí Fail2ban.

Předpokládáme, že jako webový server používáte Apache. Tyto pokyny však lze snadno přizpůsobit pro nginx nebo jakýkoli jiný webový server.

Měli byste však mít na paměti, že Fail2ban není firewall webových aplikací (WAF) a nemůže blokovat škodlivé požadavky, pokud projdou. Důvodem je, že fail2ban provádí akci monitorováním protokolů; Proto musí být zaznamenán alespoň jeden škodlivý pokus, než může Fail2ban provést jakoukoli akci.

Co je vlastně špatný robot?

V tomto příspěvku se zaměříme na blokování robotů, kteří provádějí některou z následujících akcí:

  • Hledá na webu otevřený proxy
  • Odešle požadavek GET s parametry, které. obsahovat SQL injection Payloads
  • Odešle požadavek GET s parametry, které. obsahují neurózy Užitečné zatížení

Samozřejmě můžete blokovat i jiné typy útoků. Omezujeme se však na tři výše uvedené případy pro tento článek.

Nainstalujte Fail2ban

Fail2ban je k dispozici v úložišti většiny distribucí.

Chcete-li jej nainstalovat na Debian / Ubuntu, spusťte:

sudo apt-get update
sudo apt-get install fail2ban

Pod CentOS byste měli nejprve použít úložiště EPEL; Poté byste jej měli aktivovat a spustit.

sudo yum -y install epel-release
sudo yum -y install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Základy Fail2ban

V srdci pracovního mechanismu Fail2ban je řada věznic. Jednoduše řečeno, vězení nařídí Fail2ban, aby se podíval na několik protokolů a použil na ně filtr pokaždé, když se protokol změní. Pokud se počet shod pro filtr rovná maximálnímu počtu shod povolených vězením, provede se akce uvedená ve vězení.

Musíte tedy definovat dvě věci:filtr a vězení. Vězení je nakonfigurováno tak, aby se v protokolech Apache dívalo na škodlivé požadavky.

Definujte filtry

Filtr je jednoduše sbírka regulárních výrazů Pythonu, které jsou kontrolovány podle protokolu. Zde bychom museli definovat filtry pro kritéria popsaná výše.

Nejprve se však podívejme na záznam v protokolech Apache:

66.249.79.189 - - [17/Jan/2017:14:10:41 +0000] "GET /robots.txt HTTP/1.1" 200 3494 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +https:
//www.google.com/bot.html)"

Všimněte si, že hlavička požadavku GET /robots.txt HTTP/1.1 je ve dvojitých uvozovkách. Pokud taková pravidla navrhujete sami, měli byste věnovat dostatečnou péči tomu, aby se shodovala pouze hlavička požadavku. V opačném případě riskujete zablokování legitimních uživatelů.

Užitná zatížení SQL injection obecně obsahují řetězce ve tvaru union select(...) nebo select concat (...) . Můžete tedy zkusit spojit tento vzor s následujícím regulárním výrazem:



(?i)^<HOST> -.*"[^"]+(?:union[^"]+select[^"]*|select[^"]+concat[^"]*)(?:%%2[8C]|[,(])

<HOST> Část definuje pozici IP adresy v záznamu protokolu a (?i) označuje, že regulární výraz nerozlišuje malá a velká písmena.

[^"] v regulárním výrazu zajišťuje, že odpovídající text je uzavřen do dvojitých uvozovek. To zajišťuje, že regulární výraz odpovídá pouze hlavičce požadavku a ničemu jinému. (?:%%2[8C]|[,(]) označuje, že union select nebo select concat následuje čárka (, ) nebo závorku (( ), buď přímo, nebo v jejich procentuálně zakódované podobě.

Roboti, kteří hledají otevřené proxy, často odesílají požadavky ve tvaru:

101.33.59.9 - - [17/Jan/2017:14:10:41 +0000] "GET https://google.com/ HTTP/1.1" 400 3494 "-" "Mozilla"
101.33.59.9 - - [17/Jan/2017:14:10:44 +0000] "CONNECT yahoo.com:80" 400 3499 "-" "Mozilla"

Regulární výraz, jako je následující, může snadno odpovídat těmto:

(?i)^<HOST> -.*"(?:(?:GET|POST|HEAD) https?:|CONNECT [a-z0-9.-]+:[0-9]+)

Regulární výraz (?:(?:GET|POST|HEAD) https?: odpovídá požadavkům prvního typu, zatímco regulární výraz CONNECT [a-z0-9.-]+:[0-9]+ splňuje požadavky druhého typu.

Boti, kteří vyhledávají Shellshock, často posílají požadavky jako:

10.11.12.13 - - [17/Jan/2016:16:00:00 +0000] "GET /cgi-bin/printenv.cgi HTTP/1.0" 200 1 "-" "() { test;};echo "Content-type: text/plain"; echo; echo; /bin/rm -rf /var/www/"

Regulární výraz, jako je tento, odpovídá vzoru pro Shellshock:

<HOST> -.*"()s*{[^;"]+[^}"]+}s*;

Zde je zkontrolujeme () { <command>; } Vzor a s bere v úvahu mezery, které mohou být zahrnuty do škodlivého požadavku.

Pokud je zkombinujeme, můžeme nyní napsat náš filtr:

[Definition]
failregex = <HOST> -.*"()s*{[^;"]+[^}"]+}s*;
            (?i)^<HOST> -.*"[^"]+(?:union[^"]+select[^"]*|select[^"]+concat[^"]*)(?:%%2[8C]|[,(])
            (?i)^<HOST> -.*"(?:(?:GET|POST|HEAD) https?:|CONNECT [a-z0-9.-]+:[0-9]+)
ignoreregex =

ignoreregex umožňuje přidat položky na seznam povolených. Ignorované regulární výrazy můžete přidat stejně jako u failregex.

Uložte výše uvedený filtr do /etc/fail2ban/filter.d/badbot.local

Definujte vězení

Nyní, když jste definovali filtr, je čas definovat vězení. Zde zablokujeme IP adresu na šest minut, pokud odešle tři takové požadavky do šesti minut.

Přidejte toto k vašemu /etc/fail2ban/jail.local Soubor:

[badbot]
enabled   = true
port      = http,https
filter    = badbot
logpath   = /var/log/apache*/*access.log
maxretry  = 3
banaction = iptables-multiport
findtime  = 360
bantime   = 360

Po konfiguraci vězení byste měli restartovat fail2ban, aby se tyto změny projevily. V závislosti na vaší distribuci bude k restartování vyžadován jeden z těchto příkazů:

sudo systemctl restart fail2ban
sudo service fail2ban restart

fail2ban nyní blokuje všechny pokusy špatných robotů, kteří se snaží napadnout váš webový server. Tato pravidla můžete rozšířit na svůj další webový server nebo jakýkoli jiný typ útoku, se kterým se můžete setkat.




Cent OS
  1. Zabezpečení Linuxu:Chraňte své systémy pomocí fail2ban

  2. Nainstalujte a nakonfigurujte fail2ban na ubuntu 17.04 a zablokujte na všech portech

  3. Debian – Jak blokovat Non-free s předvolbami Apt?

  1. Použití Fail2ban k blokování nesprávných přihlášení ISPConfig

  2. Jak chránit Apache a SSH pomocí Fail2Ban na CentOS 8

  3. Jak nainstalovat Fail2ban s Firewalld na Rocky Linux 8

  1. Zabezpečte svůj Linuxový server pomocí Fail2Ban [Příručka pro začátečníky]

  2. Blokovat rozsah IP ze zemí s GeoIP a iptables

  3. Fail2Ban Howto:Blokování IP adresy pomocí Fail2ban a IPTables