Jak zabezpečit připojení SSH na serveru Linux. Omezení přístupu IP

OpenSSH umožňuje provádět vzdálené připojení na server, manipulovat se soubory a spravovat systém. Dnes chceme mluvit o nejlepších metodách, které zvýší bezpečnost systému založeného na OpenSSH.

Konfigurační soubory

  • /etc/ssh/sshd_config- konfigurační soubor serveru OpenSSH;
  • /etc/ssh/ssh_config- konfigurační soubor klienta OpenSSH;
  • ~/.ssh/- adresář, ve kterém jsou uložena uživatelská nastavení SSH;
  • ~/.ssh/authorized_keys nebo ~/.ssh/authorized_keys- seznam klíčů (RSA nebo DSA), které se používají pro připojení k uživatelským účtům;
  • /etc/nologin- pokud tento soubor v systému existuje, pak sshd zakáže všem uživatelům kromě roota připojení k systému;
  • /etc/hosts.allow a /etc/hosts.deny- zákazový systém (součást ostrahy). Funguje podobně jako ACL;
  • Výchozí port SSH - 22

Není potřeba - vypněte

Pokud váš server nevyžaduje vzdálené připojení SSH, nezapomeňte jej zakázat. Na systémech jako CentOS/RHEL se to dělá takto:

Chkconfig sshd off yum erase openssh-server

Použijte SSH verze 2

První verze protokolu SSH má bezpečnostní problémy, které řeší druhá verze. Proto použijte druhou verzi. Ujistěte se, že je v souboru /etc/ssh/sshd_config uvedena volba Protocol 2.

Omezit přístup SSH

Ve výchozím nastavení mají všichni uživatelé systému možnost připojit se k systému přes SSH. Z bezpečnostních důvodů doporučujeme omezit přístup SSH. Chcete-li například povolit SSH pro uživatele root, merion a sítě:

AllowUsers root merion sítě

Na druhou stranu můžete povolit přístup všem uživatelům kromě těch, kteří jsou uvedeni:

DenyUsers kořenové sítě merion

Doba nečinnosti

Je důležité uvést dobu, po kterou bude neaktivní relace ukončena (dokončena). To lze provést pomocí následujících možností:

ClientAliveInterval 300 ClientAliveCountMax 0

V tomto nastavení jsme zadali dobu nečinnosti na 300 sekund (5 minut).

O souborech .rhosts

Faktem je, že tento soubor obsahuje seznam hostitelů a uživatelů. Pokud v tento soubor obsahuje kombinaci hostitele a uživatele tohoto uživatele se bude moci připojit k systému přes SSH bez požadavku na heslo. Doporučujeme deaktivovat tuto „úžasnou“ funkci:

IgnorovatRhosts ano

Žádná autentizace založená na hostiteli!

Tzv Host-Based Authentication Umožňuje uživateli z určitého hostitele připojit se k serveru. Zakázat:

HostbasedAuthentication č

Přímé připojení přes root

PermitRootLogin č

Vytvořte banner

Pro každé připojení vytvořte banner, ve kterém můžete vyhrožovat útočníkům, kteří se pokoušejí o neoprávněný přístup. Parametr Banner je zodpovědný za nastavení banneru.

Port 22 pouze zevnitř!

Udělejte přístup k systémovému portu 22 pouze prostřednictvím řetězce pravidel brány firewall. Nejlepší je ponechat přístup pouze ze sítě LAN. Například v iptables můžete dát přístup k 192.168.11.0/24:

A RH-Firewall-1-INPUT -s 192.168.11.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT

Kde poslouchat

Ve výchozím nastavení SSH naslouchá připojení na všech dostupných rozhraních. Doporučujeme změnit výchozí port a zadat IP adresu, na které se má čekat na připojení. Například zadáme port 962 a IP adresu 192.168.11.24

Port 962 Adresa pro poslech 192.168.11.24

Kryptograficky silná hesla

Používejte silná hesla. Na internetu je mnoho nástrojů, které vygenerují kryptosilné heslo online, zdarma a bez SMS :)

Zakázat prázdná hesla

Existují uživatelé bez hesla. Jejich přístup k SSH musí být také odepřen pomocí možnosti:

Port 962 PermitEmptyPasswords no

Analyzujte protokoly

Nastavte protokolování událostí na režim INFO nebo DEBUG – to vám umožní mít rozšířenou kontrolu nad systémem:

LogLevel INFO

Byl pro vás tento článek užitečný?

Řekni mi prosím proč?

Je nám líto, že pro vás článek nebyl užitečný: (Pokud to není obtížné, uveďte proč? Budeme velmi vděční za podrobnou odpověď. Děkujeme, že nám pomáháte být lepšími!

Jakmile se služba „rozsvítí“ ve veřejné síti, okamžitě se stane cílem útoku. Jedním z problémů je pokus o získání přístupu pomocí hesel (hrubá síla). A SSH v tomto případě není výjimkou.

Analýza souboru protokolu autentizace /var/log/auth.log nebo analogu ukazuje, že pokus o uhodnutí hesla se obvykle provádí z několika IP adres najednou a časem se prodlužuje.

Ochrana SSH Bruteforce

Před tím se můžete chránit různými způsoby:

  • Použití možností konfigurace démona SSH
  • Paketový filtr
  • Speciální aplikace
  • Klepání přístavu

Nejjednodušší a efektivní způsob- jedná se o změnu výchozího portu 22, například na 2002, pokud to nezasahuje do jiných úloh. Uděláme záznam v /etc/ssh/sshd_config:

Poté se pokusy o uhodnutí hesel prakticky zastaví. Jsou chvíle, kdy nemůžete změnit port. Případně můžete omezit přístup SSH na určité uživatele (zejména root) nebo skupinu. V sshd_config je za to zodpovědná řada parametrů: AllowUsers, AllowGroups, DenyUsers a DenyGroups. Je pohodlné, že můžete zadat IP nebo podsíť s vaším přihlášením. Povolme například přístup uživateli admin a uživateli, posledně jmenovanému pouze z jedné IP adresy:

Další účinnou možností ochrany před hrubou silou je použití certifikátů pro autentizaci. Navíc pomocí speciálního parametru shody můžete vytvořit podmíněný blok, ve kterém předefinujete parametry globální sekce. Například zakážeme přihlášení přes SSH pomocí hesla pro uživatele root, což všem ostatním umožní:

# Umožněte všem přístup pomocí hesla
Ověření heslem ano
# root použije pouze certifikát
odpovídat kořenovému adresáři uživatele
HesloAuthentication no
KbdInteractiveAuthentication no

Pomocí TCP Wrapperu můžeme také omezit přístup k jakékoli službě pouze z určitých IP adres, stačí zapsat požadované pravidlo do souboru /etc/hosts.allow nebo /etc/hosts.deny. Povolme přístup v /etc/hosts.allow pouze z požadované podsítě:

sshd:192.168.1.0/24:allow

Nebo v /etc/hosts.deny:

sshd: ALL: zamítnout
sshd: VŠECHNY KROMĚ 192.168.1.0/24: povolit

Paketový filtr umožňuje velmi přesně nastavit parametry připojení a zahodit nepotřebné pakety. S jeho pomocí je snadné omezit přístup k portu 22 pouze na určité adresy. Jednoduchý příklad:

iptables -A INPUT -s !192.168.0.1 -p tcp -m tcp --dport 22 ↵
-j REJECT -reject-with icmp-port-unreachable

Filtrování paketů podle portů a IP adres není příliš efektivní, pokud správce není vázán na pracoviště. V tomto případě pomohou speciální pomůcky: Fail2ban, Sshguard. Fail2ban byl původně vyvinut pro zabezpečení SSH. I když dnes se již jedná o framework, který lze snadno upravit pro jakoukoli aplikaci. Princip fungování je velmi jednoduchý. Démon pravidelně kontroluje protokoly, zda neobsahují záznamy o jakékoli podezřelé aktivitě. Podezřelá IP adresa je pak zablokována pomocí iptables nebo TCP Wrapper. Po uplynutí doby uvedené v nastavení je blokování obvykle odstraněno, aby nedošlo k náhodnému zablokování legitimního uzlu. Když je pravidlo spuštěno, událost se zapíše do protokolu /var/log/fail2ban.log a lze odeslat e-mail.

Jeden proces může ovládat několik služeb najednou a balíček je dodáván s hotovými nastaveními pro oblíbené linuxové aplikace. Ve výchozím nastavení je chráněno pouze SSH.

Na Ubuntu a Debianu se instaluje pomocí příkazu:

$ sudo apt-get install fail2ban

Všechna nastavení jsou provedena v několika souborech umístěných v adresáři /etc/fail2ban. fail2ban.conf ukládá spouštěcí parametry samotného démona, jail.conf popisuje řízené služby (uvnitř sekce SSH).

Povoleno = pravda
port = 22
filtr = sshd
logpath = /var/log/auth.log
maxretry = 3

Filtry a akce se zapisují do souborů umístěných v podadresářích filter.da action.d. Ve výchozím nastavení mají všechny soubory příponu .conf, je lepší se jich nedotýkat (včetně jail.conf). Všechny změny by měly být provedeny v souboru s příponou .local (například jail.local), jehož parametry nahrazují nastavení z prvního a během aktualizace se neztratí. Chcete-li zkontrolovat fungování filtru, můžete použít nástroj fail2ban-regex.

Několik pravidel pro ochranu přístupu na ssh server.

1. Přidejte do konfigurace ssh serveru, aby naslouchal ještě jednomu portu kromě standardního. (Pro snadnější zapamatování můžete použít 4 opakující se čísla pro všechny vaše servery).

$ sudo vi /etc/ssh/sshd_config Port 22 Port xxxx

2. Volání na port 22 omezujeme pouze na důvěryhodné IP adresy *například 8.8.8.8 (můžete vytvořit několik takových pravidel, práce/domů)

$ sudo vi /etc/sysconfig/iptables -A INPUT -s 8.8.8.8 -p tcp -m state --state NEW -m tcp --dport 22 -j PŘIJÍMAT

3. Nezapomeňte zkontrolovat, zda používáme ipv6, pokud ano, zavřete nepotřebný

$ sudo vi /etc/sysconfig/ip6tables *filtr:INPUT ACCEPT :FORWARD ACCEPT :OUTPUT ACCEPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p ipv6-icmp -j ACCEPT -A INPUT - i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j PŘIJMOUT -A VSTUP -j ODMÍTNUTÍ --odmítnout-s icmp6-adm-zakázáno -A VPŘED -j ODMÍTnout --odmítnout-s icmp6-adm-zakázáno ZAKÁZAT

Aby bylo možné používat ssh pouze na konkrétní adrese, stačí v konfiguračním souboru sshd_config specifikujte parametr PoslouchejteAdresu(například ListenAddress 74.125.200.100). V tomto případě bude ssh dostupné pouze na této adrese a nebude fungovat přes ipv6

4. Použijte konfigurační soubor ssh na straně klienta.

Umístění: ~/.ssh/config

# oprava Zápis se nezdařil: přerušené potrubí ServerAliveInterval 120 TCPKeepAlive ne # použít krátké názvy Host dev-vps # IP adresa nebo veřejná Doménové jméno hostitel Název hostitele 127.0.0.3 # Pod kterým uživatelem se má přihlásit Uživatel vývojář # Soubor klíče pro autorizaci (pokud je použit) IdentityFile ~/.ssh/id_rsa.dev

A další příklad použití konfiguračního souboru:
{<1>}

Hostitel ssh-server-1 Hostname 1.2.3.4 User dev Port 1234 Host ssh-server-2 User root # Hostname 192.168.10.20 # nc bez -q0 pokud je založeno na RHEL a s -q0 debian based IdentityFile ~/.ssh/id_rsa.work -pc ProxyCommand ssh -q0 ssh-server-1 nc -q0 192.168.10.20 22

A nyní, když se připojujeme k ssh-server-1, okamžitě skočíme na hostitele, kterého potřebujeme. (Vhodné pro použití například s různými klíči na serverech)

A bederní možnost proxy:

{<2>}

Stáhněte si klienta ngrok na server, který je umístěn za firewallem. Spustíme binární soubor a určíme, který port potřebujeme přeposlat

SSH umožňuje vytvořit zabezpečené připojení k serveru, ale samotná služba SSH musí mít přístup k internetu, aby správně fungovala. To vytváří útočný vektor pro potenciální útočníky, proto SSH potřebuje další ochranu.

Obecně je potenciálním cílem jakákoli služba s přístupem k síti. V protokolech těchto služeb si můžete všimnout opakovaných systematických pokusů o přihlášení – jedná se o útoky hrubou silou prováděné uživateli a roboty.

Služba fail2ban může zmírňovat útoky pomocí pravidel, která automaticky mění konfiguraci firewallu iptables na základě předem definovaného počtu neúspěšné pokusy přihlásit se. To serveru umožní rychle reagovat na neoprávněný přístup bez zásahu správce.

Tato příručka vám pomůže nainstalovat a nakonfigurovat fail2ban na serveru Ubuntu 14.04.

Instalace fail2ban

Úložiště Ubuntu poskytuje balíček fail2ban, takže jej lze nainstalovat pomocí standardního správce balíčků.

Aktualizujte svůj index balíčku a nainstalujte fail2ban pomocí těchto příkazů:

aktualizace sudo apt-get
sudo apt-get install fail2ban

Nyní můžete začít nastavovat nástroj.

konfigurace fail2ban

Konfigurační soubory fail2ban jsou uloženy v adresáři /etc/fail2ban. Výchozí nastavení lze nalézt v souboru jail.conf.

Protože tento soubor lze změnit během aktualizace balíčku, není třeba jej upravovat. Jeho obsah je lepší zkopírovat do jiného souboru a tam upravit parametry. Chcete-li zajistit, aby tyto dva soubory fungovaly správně, je nejlepší ponechat v novém souboru pouze ta nastavení, která chcete v souboru jail.local přepsat. Všechna výchozí nastavení budou načtena ze souboru jail.conf.

Zkopírujte jail.conf a použijte jej jako základ pro soubor jail.local. Chcete-li to provést, zadejte:

awk "( printf "# "; print; )" /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local

Poté se podívejte na jail.conf:

sudo nano /etc/fail2ban/jail.conf

Některé parametry lze v tomto souboru aktualizovat. Nastavení oddílu se použije pro všechny služby, které fail2ban podporuje (pokud tyto hodnoty nejsou přepsány v konfigurační soubory tyto služby).


. . .
ignoreip = 127.0.0.1/8
. . .

Parametr ignoreip konfiguruje zdrojové adresy, které bude fail2ban ignorovat. Ve výchozím nastavení povoluje jakýkoli provoz přicházející z místního počítače. Další adresy k ignorování můžete přidat tak, že je umístíte na konec direktivy ignoreip oddělené mezerou.


. . .
bantime = 600
. . .

Parametr bantime nastavuje dobu, po kterou bude klient zablokován, pokud se nezdaří autentizace. Jeho hodnota se měří v sekundách. Výchozí hodnota je 600 sekund (10 minut).


. . .
čas hledání = 600
maxretry = 3
. . .

Další dva parametry, kterým je třeba věnovat pozornost, jsou findtime a maxretry. Společně definují podmínky, za kterých budou nelegální uživatelé blokováni.

Proměnná maxretry určuje počet pokusů o přihlášení a findtime určuje časový interval, ve kterém se musí uživatel autentizovat. Pokud klient překročí některý z těchto ukazatelů, bude zablokován. Ve výchozím nastavení služba fail2ban blokuje klienty, kteří neposkytnou přihlašovací údaje třikrát během 10 minut.


. . .
destemail = root@localhost
jméno odesílatele = Fail2Ban
mta = sendmail
. . .

Parametry destemail, sendername a mta vám umožňují konfigurovat e-mailová upozornění. Parametr destemail určuje adresu E-mailem, který by měl dostávat zprávy o zablokovaných uživatelích. Parametr sendername určuje odesílatele zprávy. Parametr mta určuje, které Poštovní služba bude použit k odeslání pošty. Přidejte tyto parametry do sekce jail.local a nastavte příslušné hodnoty.


. . .
akce = $(action_)s
. . .

Toto nastavení konfiguruje, co udělá fail2ban v případě zákazu. Hodnota action_ je definována v souboru kousek před tímto parametrem. Výchozí akce bude blokovat útočníkův provoz až do vypršení zákazu překonfigurováním brány firewall.

Pokud chcete konfigurovat e-mailová upozornění, přidejte nebo zrušte komentář element action do souboru jail.local a změňte jeho hodnotu z action_ na action_mw. Pokud chcete, aby e-mail obsahoval odpovídající řádky z protokolů, můžete zadat hodnotu action_mwl. Pokud se rozhodnete používat e-mailová upozornění, ujistěte se, že je vaše nastavení e-mailu podporuje.

Individuální parametry

Podpora jednotlivých služeb je obsažena ve stejnojmenných speciálních sekcích. V sekci lze například zadat parametry služby ssh.

Každou z těchto sekcí lze povolit zrušením komentáře v záhlaví sekce v jail.local a změnou povoleného řádku na „true“:


. . .
povoleno = pravda
. . .

Ve výchozím nastavení je podporována pouze služba SSH a všechny ostatní služby jsou zakázány.

Tyto sekce používají hodnoty nastavené v sekci jako základ a podle potřeby je upravují. Chcete-li přepsat jakékoli hodnoty, přidejte sekci pro příslušnou službu do jail.local a změňte její hodnoty.

Nastavují se zde i některé další parametry. Parametr filtru pomáhá určit, zda řádek v protokolu označuje neúspěšný pokus o ověření; Parametr logpath sděluje fail2ban, kde se nacházejí protokoly pro tuto konkrétní službu.

Hodnota parametru filtru je odkaz na soubor s příponou .conf umístěný v adresáři /etc/fail2ban/filter.d. Tyto soubory obsahují regulární výrazy, které určují, zda je řádek v protokolu zprávou o neúspěšném pokusu o ověření. Tyto soubory jsou nad rámec tohoto návodu, protože jsou poměrně složité a výchozí nastavení jsou ve většině případů v pořádku.

Filtry můžete zobrazit v tomto adresáři:

ls /etc/fail2ban/filter.d

Najděte soubor spojený s požadovanou službou a otevřete jej pomocí textový editor. Většina souborů je docela dobře okomentována a můžete se seznámit se skriptem ochrany služby. Většina těchto filtrů má odpovídající sekce v souboru jail.conf (ve výchozím nastavení jsou zakázány). V případě potřeby je lze povolit v souboru jail.local.

Řekněme, že máte web, který je obsluhován pomocí Nginx. Protokoly webového serveru jsou neustále aktualizovány při neúspěšných pokusech o přihlášení. Obslužný program fail2ban může pomocí souboru nginx-http-auth.conf neustále kontrolovat /var/log/nginx/error.log.

Téměř všechny parametry potřebné k tomu jsou již v sekci v souboru /etc/fail2ban/jail.conf. Stačí odkomentovat tuto sekci v souboru jail.local a nastavit parametr enabled na true.

. . .
povoleno = pravda
. . .

Poté musíte restartovat fail2ban.

Nastavení fail2ban

Nyní znáte základy toho, jak fail2ban funguje. Zkuste nastavit zásady automatického blokování pro službu SSH a Nginx. K odeslání e-mailu, pokud je IP adresa blokována, potřebujete také nástroj fail2ban.

Chcete-li začít, nainstalujte potřebný software.

Budete potřebovat nginx, protože fail2ban bude sledovat své protokoly a sendmail k odesílání upozornění. Potřebujete také balíček iptables-persistent, aby server uložil a automaticky načetl pravidla brány firewall při spuštění serveru. Všechny tyto balíčky lze stáhnout ze standardních repozitářů Ubuntu:

aktualizace sudo apt-get
sudo apt-get install nginx sendmail iptables-persistent

Zastavte službu fail2ban a nastavte základní firewall.

Nastavení firewallu

Základní firewall musí podporovat navázaná spojení, stejně jako provoz generovaný samotným serverem a provoz určený pro porty SSH a webového serveru. Veškerý ostatní provoz bude zablokován. Pravidla vypadají takto:

sudo iptables -A INPUT -i lo -j PŘIJÍMAT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j PŘIJÍMAT
sudo iptables -A INPUT -p tcp -m multiport --dports 80 443 -j PŘIJÍMAT
sudo iptables -A INPUT -j DROP

Tyto příkazy implementují výše uvedené zásady. Chcete-li zobrazit aktuální pravidla brány firewall, zadejte:

sudo iptables -S
-P VSTUP PŘIJMOUT
-P VPŘED PŘIJMOUT
-P AKCEPT VÝSTUPU
-A VSTUP -i lo -j PŘIJÍMAT




-A INPUT -j DROP

Uložte si pravidla brány firewall, aby se po restartu neztratila.

sudo dpkg-reconfigure iptables-persistent

Restartujte fail2ban:

spuštění služby sudo fail2ban

Dotaz na pravidla brány firewall:

sudo iptables -S
-P VSTUP PŘIJMOUT
-P VPŘED PŘIJMOUT
-P AKCEPT VÝSTUPU
-N fail2ban-ssh

-A VSTUP -i lo -j PŘIJÍMAT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j PŘIJÍMAT
-A INPUT -p tcp -m tcp --dport 80 -j PŘIJÍMAT
-A INPUT -j DROP
-A fail2ban-ssh -j RETURN

Každý řetězec má nyní svou vlastní výchozí politiku. Firewall má také pět základních pravidel. Struktura fail2ban je zvýrazněna červeně: tento nástroj již vynucuje pravidla zákazu SSH. Někdy se tato struktura nejprve nezobrazí, protože fail2ban nemusí strukturu přidat až do prvního zákazu.

Nastavení fail2ban

Nyní musíte přidat nastavení fail2ban do souboru jail.local:

sudo nano /etc/fail2ban/jail.local

Zde můžete nastavit přísnější časový interval blokování. Najděte a odkomentujte název. V této části změňte parametr bantime tak, aby služba blokovala klienta na půl hodiny:


. . .
bantime = 1800
. . .

Musíte si také nastavit notifikace. Nejprve najděte parametr destemail, který by měl být také v sekci. Zadejte e-mailovou adresu, kterou chcete používat ke shromažďování těchto zpráv:


. . .
destemail = [e-mail chráněný]
. . .

Do pole sendername zadejte libovolnou vhodnou hodnotu. Zde se doporučuje použít popisnou hodnotu, kterou může e-mailová služba snadno odfiltrovat.

Pak musíte opravit hodnotu akce. Můžete nastavit action_mw tak, aby zablokoval klienta a poté poslal zprávu „whois“. Hodnota action_mwl dělá totéž, ale také odesílá odpovídající řádky protokolu ve zprávě.


. . .
akce = %(action_mwl)s
. . .

V sekci SSH direktivy maxretry můžete změnit počet neúspěšných pokusů o autentizaci. Pokud používáte nestandardní port(ne 22), uveďte jej v parametru port. Jak bylo uvedeno výše, tento server je již povolen.

Poté najděte sekci nginx-http-auth. Odkomentujte záhlaví a změňte povolený parametr na „true“.

. . .

povoleno = pravda
. . .

To je vše, co v této části musíte udělat, pokud webový server používá standardní porty a jeho protokoly jsou uloženy ve standardním adresáři.

Restartujte fail2ban

Uložte a zavřete soubor.

Poté restartujte službu fail2ban. Někdy je dokonce lepší to zastavit a pak to znovu spustit.

sudo služba fail2ban stop
spuštění služby sudo fail2ban

Stažení všech pravidel brány firewall může trvat několik minut. Někdy jsou pravidla přidána až po zablokování prvního klienta. Po chvíli budete moci zkontrolovat nová pravidla:

sudo iptables -S
-P VSTUP PŘIJMOUT
-P VPŘED PŘIJMOUT
-P AKCEPT VÝSTUPU
-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 VSTUP -i lo -j PŘIJÍMAT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j PŘIJÍMAT
-A INPUT -p tcp -m tcp --dport 80 -j PŘIJÍMAT
-A INPUT -j DROP
-A fail2ban-nginx-http-auth -j RETURN

-A fail2ban-ssh -j RETURN

Řádky vytvořené zásadou fail2ban jsou zvýrazněny červeně. Právě teď jednoduše směrují provoz do nových, většinou prázdných řetězců, a poté předávají tok provozu zpět do řetězce INPUT.

Do těchto řetězců budou přidána pravidla blokování.

Testování zásad blokování

Nyní můžete otestovat pravidla připojením z jiného serveru, který nemá přihlašovací údaje na serveru fail2ban.

Zkuste vytvořit připojení SSH k serveru pomocí neexistujících přihlašovacích údajů:

ssh bla@fail2ban_server_IP

Jako heslo zadejte náhodnou sadu znaků. Opakujte několikrát. V určitém okamžiku fail2ban odepře přístup a zobrazí zprávu „Povolení odepřeno“.

Vraťte se na první server a zobrazte nová pravidla iptables:

sudo iptables -S
-P VSTUP PŘIJMOUT
-P VPŘED PŘIJMOUT
-P AKCEPT VÝSTUPU
-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 VSTUP -i lo -j PŘIJÍMAT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j PŘIJÍMAT
-A INPUT -p tcp -m tcp --dport 80 -j PŘIJÍMAT
-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

Nové pravidlo je zvýrazněno červeně. Blokuje provoz z IP adresy druhého serveru na port SSH. Brzy obdržíte upozornění, že klient byl zablokován.

Závěr

Nyní jste obeznámeni se základy fail2ban a můžete vytvořit základní konfiguraci tohoto nástroje.

V tomto článku se podíváme na základní metodu ochrany SSH před Hmotnost Bruteforce útoky. V tomto případě masivní útok bruteforce neznamená cílené hádání hesla specificky pro vaše SSH, ale rozsáhlé zachycení řady serverů pro následnou identifikaci párů login-heslo, které nejsou odolné vůči uhodnutí.

Hlavní rysy masivního útoku SSH bruteforce jsou rozsáhlé skenování rozsahů IP na otevřený port 22 a použít jako uživatelské jméno a heslo, často používané (například root:passwd123, admin:server123 atd.).

Chcete-li zobrazit statistiky ze souborů protokolu neúspěšných pokusů o autorizaci SSH na vašem serveru, zadejte příkaz:

Cat /var/log/secure* | grep "Neúspěšné heslo" | grep sshd | awk "(tisk $1,$2)" | řazení -k 1,1M -k 2n | jedinečný -c

Tento snímek obrazovky poskytuje statistiku počtu neúspěšných autorizací podle dnů. Pokud podobná data ukradnete, měli byste podniknout kroky k ochraně vašeho SSH před masivní brutální silou.

1. Pokud jste nepoužívejte pro autorizaci často používaná uživatelská jména jako root, admin, administrátor, uživatel atd. a pro autorizaci použijte složité heslo, pak můžete okamžitě přejít k druhému bodu. Chcete-li změnit heslo na složitější, zadejte příkaz:

Passwd #vaše_přihlášení#

Kde #vaše_přihlášení#- Vaše uživatelské jméno.
Při zadávání nového hesla se heslo nezobrazuje, kurzor zůstane na jednom místě.

Přihlásíme se na server přes SSH, vytvoříme nového uživatele a dáme mu heslo, k tomu zadáme příkazy:

Adduser #newuser# passwd #newuser#

Kde #nový uživatel#— Vaše nové uživatelské jméno, nepoužívejte jako uživatelské jméno často používané, dobrá volba your_nameadmin(například foxadmin, useralex, rootidler).

2. Poté se přihlaste přes SSH s novým uživatelským jménem a heslem. A otevřete konfiguraci démona SSH (sshd_config) pomocí příkazu:

Vi /etc/ssh/sshd_config

Poté byste měli vidět něco takového:

Řádky začínající na # jsou komentovány.

Na chránit SSH před masivní hrubou silou, odkomentujte a změňte nebo přidejte následující parametry soubor:
A) přístav- port, na kterém SSHD přijímá a obsluhuje spojení. Odkomentujte (smažte před začátkem řádku # ) a změňte výchozí hodnotu 22 , na jakékoli jiné od 1024 do 65536, kromě vyhrazených - seznam rezervovaných portů, například:

Port 2022

Vymazat # a změnit hodnotu port 22, stiskněte nejprve na klávesnici i, po úpravě požadovaný řádek stiskněte klávesu ESC

b) LoginGraceTime— čekací doba na registraci uživatele do systému. Pokud se uživateli nepodaří přihlásit v době stanovené touto direktivou, relace je ukončena. Snižme tuto hodnotu:

LoginGraceTime 1m

C) PermitRootLogin- umožnit uživateli vykořenit přihlášení přes SSH protokol. Pojďme se změnit na Ne.

PermitRootLogin č

d) AllowUsers— uživatelská jména povolená pro přihlášení přes protokol SSH, oddělená mezerou. Zde místo #your_login# uvádíme nově vytvořené uživatelské jméno.

AllowUsers #vaše_přihlášení#

E) MaxAuthTries— počet pokusů o přihlášení na relaci. Po dosažení maximálního povoleného počtu pokusů je relace ukončena.

MaxAuthTries 2

V důsledku toho dostaneme:

Port 2022 LoginGraceTime 1m PermitRootLogin no AllowUsers #your_login# MaxAuthTries 2

V tomto článku dokončíme nastavení SSH pro ochranu před masivními hrubou silou. Po úpravě , stiskněte na klávesnici : , dole se objeví řádek a pak do něj zadejte wq a stiskněte klávesu Vstupte. V tomto případě budou všechny provedené změny uloženy.

Pokud jste něco udělali špatně (například jste něco omylem smazali), pro ukončení bez uložení použít místo klávesové zkratky wq, klíče q!

Po dokončení nastavení SSH restartujte démona příkazem:

Restart služby sshd

Nyní při připojení přes SSH použijte nový port 2022 (nebo ten, který jste určili v nastavení). standardní port 22.

V dalším článku o nastavení SSH bych vám rád řekl, že zakážeme autentizaci heslem a povolíme autorizaci pouze pomocí soukromého klíče SSH, čímž se maximálně ochráníme před uhodnutím hesla.

V kontaktu s