Když jsme připojili server s Linuxem a chceme jej spravovat z internetu pomocí dálkového ovládání SSH, může se stát, že začneme přijímat útoky s cílem vstoupit do systému a být schopen jej ovládat pro jeho účely. Tyto útoky obvykle provádějí počítačové programy (roboti), které se na dlouhou dobu snaží dostat do systému pomocí hrubé síly.
V předchozích příspěvcích jsem hovořil o tom, jak konfigurovat službu SSH, ale někteří pokročilí roboti do služby nevstupují, ale mohou službu SSH na serveru zabít deaktivací vzdáleného přístupu.
Kompletní manuál SSH (Secure Shell)
Můžeme se tomu vyhnout pomocí nástroj fail2ban, je velmi praktický a nabízí velkou míru bezpečnosti. Trochu vysvětlit, jak to funguje. Je schopen vytvářet iptables před jakýmkoli neúspěšným pokusem o přihlášení více než 5krát za sebou, jakmile je zakázán, odmítne jakýkoli typ připojení.
Nainstalujte si Fail2ban
Instalaci lze provést přímo z apt. Nejprve aktualizujeme systém a poté nainstalujeme Fail2ban.
apt-get update && apt-get -y upgrade
apt-get install fail2banTím se program nejen nainstaluje, ale také nechá běžet a začíná se systémem.
Konfigurace Fail2ban
Služba Fail2ban má v adresáři svá nastavení / etc / fail2ban. V jail.conf máte několik předkonfigurovaných možností, nejlepší v tomto případě je zkopírovat soubor a neprovádět úpravy přímo v něm, při aktualizaci fail2ban se tyto soubory přepíší a můžete přijít o všechny dříve provedené změny.
V tomto případě zkopírujeme soubor a pojmenujeme ho jail.local, aby jej mohl najít.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localPo zkopírování jej můžeme otevřít a zjistit, jak funguje.
vim /etc/fail2ban/jail.localUvnitř souboru máme několik parametrů, které můžeme upravit. Jakýkoli parametr, který je pod značkou [DEFAULT], bude aplikován na všechny služby povolené Fail2banem, jako jsou SSH, NGINX, APACHE, budeme tomu říkat globální, pak budeme mít pro každou službu specifické sekce.
Začneme přidáním parametrů do globální sekce.
ignoreip = 127.0.0.1Přidáme náš localhost tímto způsobem, který bude ignorovat veškerý místní provoz, můžeme přidat další adresy oddělující je mezerou.
bantime = 600Bantime je časové období, po které bude klient zablokován poté, co byl zablokován. Jednotka je v sekundách, 600 sekund bude 10 minut, což je výchozí hodnota.
findtime = 600 maxretry = 3Pak tu máme findtime a maxretry. Jsou zodpovědní za stanovení podmínek pro klienta, který má být ve výchozím nastavení zakázán. Lze vyčíst, že jakýkoli uživatel s více než 3 neúspěšnými pokusy za méně než 10 minut bude zablokován.
destemail = root @ localhost sendername = Fail2Ban mta = sendmailPokud chceme vytvářet upozornění pro zakázané uživatele, jsou tyto 3 parametry nezbytné, definujeme cíl, komu zaslat výstražný e -mail, kdo bude mít jeho odeslání na starosti, a nakonec mta k definování, jakou e -mailovou službu budeme používat .
action = $ (action_) sZde definujeme, jaká opatření je třeba provést, když je vyžadován zákaz. Hodnota action_ je výchozí akce založená na odmítnutí veškerého provozu klienta, dokud nevyprší čas zákazu.
Pokud chceme odeslat upozornění poštou, musíme změnit hodnotu na action_mw, ale pokud chceme, aby také připojila řádky protokolu do těla pošty, použijeme action_mwl. Před změnou této hodnoty si musíme být jisti, že jsou nastavení pošty správná.
Nastavení podle služby
Jakmile budou globální konfigurace dokončeny, přidáme parametry, které budou použity výhradně na
Služba SSH, zajistíme přidání možností pod značku [SSH].
enabled = trueVe výchozím nastavení je služba SSH povolena, ale v případě potřeby ji můžeme v této možnosti upravit.
Celá tato část by mohla fungovat s hodnotami, které budu podrobně popisovat později, ale můžete je upravit tak, aby je přizpůsobily vašim potřebám, nebo je ve výchozím nastavení všechny nechat.
Další z konfigurací jsou filtry, které indikují, zda bylo přihlášení správné nebo ne, a lze je přidat pro jiné služby, například máme server s nginx a část stránky je chráněna heslem, ale klient útočí hrubou silou , můžeme to zastavit přidáním následujícího pod značku [nginx-http-auth].
[nginx-http-auth] enabled = true filter = nginx-http-auth port = http, https logpath = /var/log/nginx/error.logPokud má uživatel více než 3 neúspěšné pokusy o přihlášení, projeví se to v protokolech a fail2ban bude jednat a zablokuje veškerý uživatelský provoz.
Testovací prostředí
Poté, co porozumíme základům, uděláme malé testovací prostředí, ve kterém budeme chránit SSH a Nginx prostřednictvím Fail2ban vytvořením zásady zákazu, která nás upozorní na IP, která byla zakázána.
Pokud není nainstalován, nejprve nainstalujeme Nginx
apt-get install nginxnainstalujeme poštovní službu pro upozornění, že to může být sendmail
apt-get install sendmailkonečně chceme, aby naše iptables byly po bootování trvalé, můžeme buď vytvořit skript rc.0, nebo nainstalovat balíček iptables-persistent.
apt-get install iptables-persistentBude nainstalován.
Zřízení našeho firewallu
Po instalaci výše uvedeného musíme implementovat bránu firewall, aby mohla blokovat provoz. V dalších příspěvcích vytvořím základní firewall, o kterém budu mluvit více o iptables.
Umožníme zavedená připojení, provoz serveru, jako jsou aktualizace, a provoz určený pro porty SSH a Nginx. Veškerý zbývající provoz bude zamítnut.
sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED, SOUVISEJÍCÍ -j ACCEPT sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT sudo iptables -A INPUT - tcp --dport 80 -j PŘIJMOUT sudo iptables -A VSTUP -j DROPZměny můžeme vidět pomocí:
iptables -SMělo by to dát podobný výsledek.
-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 SOUVISEJÍCÍ, Zřízeno -j PŘIJMOUT -A VSTUP -p tcp -m tcp --dport 22 -j PŘIJMOUT -A VSTUP -p tcp -m tcp --dport 80 -j PŘIJMOUT -A VSTUP -j DROP -A selhání2ban -ssh -j NÁVRAT
Úprava nastavení Fail2ban
Nyní musíme nakonfigurovat soubor jail.local podle vlastního uvážení.
vi /etc/fail2ban/jail.localDobu, po kterou má uživatel zakázán přístup, můžeme prodloužit alespoň na 30 minut, hodnotu nastavte v sekundách.
bantime = 1800Musíme nakonfigurovat e -mail, který přijímá všechna upozornění na zákaz fail2ban, podívejme se na hodnotu e -mailu v souboru a vložte e -mail.
destemail = [email protected]Můžeme změnit odesílatele, který bude odesílat výstrahu, kterou obvykle vkládám, pod názvem fail2ban, abychom mohli lépe filtrovat mezi všemi protokoly.
Poté, co musíme změnit hodnotu akce, máme 2 možnosti:
- action_mw: odešle výstrahu se zprávou podobnou příkazu whois zakázaného klienta.
- action_mwl: odešlete mnohem podrobnější upozornění vložením protokolu do těla zprávy.
V tomto použijeme druhou možnost:
action =% (action_mwl) sPoté přejdeme do sekce [SSH] a můžeme před banem upravit maximální počet pokusů, ponecháme jej na 5:
maxretry = 5Pokud máme službu SSH na jiném portu než 22, což je velmi doporučeno, musíme zmínit její port.
port = 45024Poté budeme hledat značku [nginx-http-auth], necháme ji tak, jak je.
[nginx-http-auth] povoleno = trueJsme hotovi a můžeme soubor uložit a zavřít.
Restartování služby Fail2ban
Aby mohly být všechny změny použity, doporučuji službu zastavit.
služba selhání2ban stopPak je můžeme začít znovu
spuštění služby fail2banBude to chvíli trvat, asi po 5 minutách můžeme naše pravidla znovu vidět pomocí
iptables -S
-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 RETURNVidíme, jak fail2ban přidal nové zásady, může se lišit v závislosti na konfiguraci, kterou jste definovali v /etc/fail2ban/jail.local.
ZávěryNainstalovali jsme fail2ban a nakonfigurovali jsme práci s SSH a NGINX v případě APACHE musíme změnit popisky a adresář protokolů, ale je velmi podobný nginx. Konfigurovali jsme pouze základy, můžete vytvářet filtry a mnohem pokročilejší pravidla, doporučuji si trochu přečíst jejich manuálovou stránku, konfigurační soubory jsou dobře komentované, doporučuji postupovat postupně, abyste objevili všechny její funkce.
Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod