Jak chránit SSH server před útoky hrubou silou pomocí fail2ban. Ochrana serveru SSH Použijte nestandardní port

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 dokáže zmírnit útoky pomocí pravidel, která automaticky překonfigurují firewall iptables na základě předem definovaného počtu neúspěšných pokusů o přihlášení. 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 soubor 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í sekce bude platit pro všechny služby, které fail2ban podporuje (pokud tyto hodnoty nejsou přepsány v konfiguračních souborech těchto služeb).


. . .
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 blokovaný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 = $(akce_)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 upravují je podle potřeby. 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 danou konkrétní službu.

Hodnota parametru filter 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 VSTUP -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), zadejte jej do 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.

Secure Shell najdete všude. Od svého vydání v roce 1995 se SSH široce používá jako výkonný protokol pro vzdálený přístup pro Linux.

Jak však víme, s velkou mocí přichází velká zodpovědnost. Špatně nakonfigurovaný démon SSH může být spíše hrozbou než pomocí. V tomto článku se podíváme na pět kroků k posílení zabezpečení SSH.

1. Zakažte přihlášení uživatele root.

Nejjednodušší krok. Je zřejmé, že existuje jen malý důvod povolit přihlášení root přes SSH. Zakázání takového přístupu je poměrně jednoduché a zlepší zabezpečení.

Najdeme /etc/ssh/sshd_config (může být umístěn v jiném adresáři, záleží na distribuci). V něm definujeme umístění PermitRootLogin a nahradíme hodnotu „no“:

PermitRootLogin č

To samozřejmě nikomu nezabrání v nabourání se do systému jako běžný uživatel, ale stále to bude sloužit jako další překážka dominance systému.

Po přečtení všeho výše napsaného a uvedení do praxe nakonec obdržíme klíče pro autorizaci na serveru. Jakmile si budete jisti, že vše funguje, můžete interaktivní vstup zakázat:

HesloAuthentication no
ChallengeResponseAuthentication no

Pomocí tohoto skriptu Python může administrátor v případě neúspěšného přihlášení automaticky přidat hostitele na černou listinu a navždy je zakázat. Nejjednodušší způsob nastavení:

Europa ~ # emerge -pv denyhosts
Toto jsou balíčky, které budou sloučeny v tomto pořadí:
Výpočet závislostí... hotovo!
app-admin/denyhosts-2,5 0 kB
Celková velikost stahování: 0 kB
europa ~ # emerge denyhosts

K programu není mnoho dokumentace (pokud například něco existuje), nicméně všechny možnosti konfigurace jsou běžně popsány v konfigurační soubor.

Europa $ nano -w /etc/denyhosts.conf

Nemyslím si, že konfigurace DenyHosts způsobí nějaké zvláštní problémy - stačí si pozorně přečíst konfiguraci.

Po konfiguraci můžete program spustit jako démona nebo pomocí plánovače. V démonu Gentoo:

Rc-update přidat denyhosts výchozí

Přes cron říkejte každých 10 minut:

Python /usr/bin/denyhosts -c /etc/denyhosts.conf

Celá radost DenyHost nespočívá pouze v blokování hostitelů, kteří se snaží dostat na váš SSH server, ale také ve skutečnosti, že můžete synchronizovat svou „černou listinu“ se servery DenyHost. Tím se vytvoří společný seznam hostitelů obsahující všechny útočníky. Zabrání útoku na kořen.

4. Změňte číslo portu.

Většina pokusů o hackování pochází z automatických skriptů, které skenují síť na démony SSH. V drtivé většině případů se snaží proniknout do portu 22, což nám hraje pouze do karet. Změnou portu automaticky přerušíme většinu pokusů o neoprávněný přístup.

Vyplatí se změnit v konfiguraci.

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/doma)

$ 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 uvedeme, který port potřebujeme přeposlat

SSH je protokol používaný k zajištění bezpečnosti a šifrování přenosu dat v síti. Je široce používán v kruhu Linux správci pro správu vzdáleného serveru. Připojení serveru k internetu je velmi často napadáno službou SSH za účelem získání přístupu k serveru. Nejběžnější je uhodnutí hesla uživatele s administrátorskými právy. V této příručce se podíváme na základní bezpečnostní doporučení SSH spojení.

Nastavte složité heslo

Váš server může být napaden útočníky, kteří se snaží uhodnout heslo serveru pomocí SSH Chcete-li snížit riziko hackování, doporučujeme nastavit hesla pro účty serveru, která odpovídají následujícím parametrům:

  • Minimálně 8 znaků
  • Používejte velká a malá písmena (AaBb)
  • Používejte písmena – čísla a znaky (!BasDf345$@)

Silné heslo ochrání nejen před hackery SSH protokol, ale obecně zlepší zabezpečení serveru.

Použijte klíče SSH

Další ochranou pro váš server bude použití klíče pro připojení k serveru přes SSH, musíte vygenerovat klíč na počítači/serveru, ze kterého se budete připojovat:

Jak vytvořit SSH zapněte klíč OS Windows:

Chcete-li vytvořit klíč v Linux zadejte příkaz:

Ssh-keygen -t rsa

Chcete-li nainstalovat tento klíč na server, ke kterému se budete připojovat, zadejte příkaz:

Ssh-copy-id -p 22 [e-mail chráněný]

  • -p 22- port serveru, na kterém to funguje SSH protokol (změny vyhrazeny, více informací níže)
  • admin- Přihlaste se z vašeho serveru
  • 192.168.1.1 - IP adresa vašeho serveru

Pokud jste udělali vše správně, můžete se nyní připojit k serveru pomocí klíče a nebudete muset pokaždé zadávat heslo.

Použijte nestandardní port

Standard SSH služba běžící na serveru naslouchá 22 Port pro připojení/přenos dat toho mohou využít útočníci, kteří počítají s tím, že většina uživatelů nemění standardní port pro připojení k serveru. Proto změníme port, čímž opět snížíme riziko hacknutí našeho serveru.

Chcete-li to provést, otevřete konfigurační soubor SSH na serveru:

Sudo nano /etc/ssh/sshd_config

Najdeme takto komentovaný řádek:

# Port 22

Vymažte symbol # - odstranit možnost komentáře a změnit 22 na všechna čísla počínaje 11060 a v rostoucím pořadí, například budeme používat 11 060 , řádek by nyní měl vypadat takto:

Port 11060

Uložte konfiguraci" Ctrl+Ó"a ukončete editor" Ctrl+X".

Je třeba restartovat SSH služba - pro přijetí nových nastavení spusťte příkaz:

Restartování služby sudo sshd

Změnili jsme tedy port připojení, od nynějška - pro připojení k serveru musíte zadat nestandardní port s možností -p 11060 , Například:

Ssh -p 11060 [e-mail chráněný]

Omezit přístup pouze na podmnožinu uživatelů

SSH připojení lze omezit pro jednotlivé účty, například pokud jsou na serveru tři účty: admin , Sergey , alex- máte možnost povolit vzdálené připojení jen pro některé z nich. Chcete-li to provést, otevřete konfigurační soubor SSH:

V tomto souboru přejděte pomocí šipek dolů na poslední řádek a přidejte nový s následujícím obsahem:

AllowUsers admin alex

Uložte konfiguraci" Ctrl+Ó"a ukončete editor" Ctrl+X".

Restartujte službu SSH:

Restartování služby sudo sshd

Takhle jsi to dovolil vzdálený přístup pro uživatele admin A alex, zatímco uživatel Sergey se již nebude moci vzdáleně připojit.

Povolit protokol SSH 2

Podle standardu SSH funguje v režimu verze 1, tato verze je zastaralá a má mnoho zranitelností, ale zajistit lepší zabezpečení Doporučujeme přepnout do režimu verze 2. Chcete-li to provést, otevřete konfigurační soubor SSH:

Sudo nano /etc/ssh/ssh_config

Najděte řádek:

# Protokol 2

Odebrat znak # - pro odstranění možnosti komentáře a použití tohoto řádku by to mělo vypadat takto:

Protokol 2

Uložte konfiguraci" Ctrl+Ó"a ukončete editor" Ctrl+X".

Restartujte službu SSH:

Restartování služby sudo sshd

Zakázat prázdná hesla

Výchozí SSH služba zakazuje uživatelům bez hesla se připojit, ale tato možnost může být na vašem serveru zakázána, takže otevřete konfigurační soubor SSH:

Sudo nano /etc/ssh/ssh_config

Najděte čáru PermitEmptyPasswords a ujistěte se, že hodnota je "Ne".

PovolitEmptyHesla č

Povolit podrobné protokolování

Do servisu SSH vedl protokol neúspěšných připojení s uvedením IP adres, otevřete konfigurační soubor SSH:

Sudo nano /etc/ssh/ssh_config

Najděte čáru LogLevel a místo toho INFO prosím Ukaž VERBOSE, řádek by měl vypadat takto:

LogLevel VERBOSE

Uložte soubor" Ctrl+Ó"a ukončete editor" Ctrl+X".

Restartujte službu SSH:

Restartování služby sudo sshd

Můžete to zkontrolovat zadáním příkazu:

Cat /var/log/secure

Systém nám poskytne informace přibližně takto:

21. června 13:06:28 centos sshd: Neúspěšné heslo pro root z 118.212.143.47 port 48263 ssh2

To znamená, že z této nahrávky vidíme, že tomu tak bylo neúspěšný pokus pronikání na server ze zadané adresy.

Děkuji za pozornost, to je vše.

V této krátké poznámce jsem dal dohromady způsoby, jak zvýšit bezpečnost ssh serveru. Jsou popsány nejzákladnější a nejsnáze proveditelné techniky a ty složitější jsou uvedeny pouze pro zájemce.

Základní techniky

Všechny akce se provádějí v konfiguračním souboru démona sshd - /etc/ssh/sshd_config. Níže poskytnu část mého konfiguračního souboru s komentáři.

### Síť ### # Používáme nestandardní port (>1024) port 5679 # Používáme pouze připojení IPv4 # inet = IPv4, inet6 = IPv6, libovolné = obojí AdresaFamily inet # Můžete přijímat pouze připojení z určitých IP adresy #ListenAddress 0.0 0.0 # Používáme druhou verzi protokolu, protože první podléhá # známým zranitelnostem Protokolu 2 # Zakažte přesměrování grafiky (X server), dokud to # výslovně nepotřebujete X11Forwarding ne # Zakažte Deaktivujte TCPKeepAlive a místo toho použijte ClientAliveInterval #, abyste zabránili útokům jako TCP Spoofing TCPKeepAlive ne # Vykopněte uživatele po 10 minutách ( 600 sec) nečinnosti ClientAliveInterval 600 ClientAliveCountMax 3 ### Konfigurační soubory klíčů ### # HostKeys pro protokol verze 2 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key # Použít #proces z nepřivilegovaného klienta traffic # sandbox - openSSH >= 5,9 ("ano" - pro nižší verze) UsePrivilegeSeparation sandbox # Když se tyto hodnoty změní, vyžaduje smazání starý klíč# /etc/ssh/ssh_host_rsa_key(,.pub) a vytvořte nový # restartováním sshd. # # Životnost klíče, tzn. Jak dlouho bude trvat, než se vygeneruje? nový klíč# v případě, že byl použit předchozí. KeyRegenerationInterval 1h # síla klíče ServerKeyBits 2048 # Povolit autorizaci pomocí veřejného klíče PubkeyAuthentication yes # Umístění důvěryhodných klíčů v uživatelském adresáři AuthorizedKeysFile .ssh/authorized_keys ### Protokolování ### detail # Prefix pro syslog SyslogFacility level ssh AUTH samo LogLevel INFO ### Authentication ### # seznam povolených uživatelů AllowUsers ivan # omezit čas pro zadání hesla pro ssh klíč LoginGraceTime 30s # zákaz vzdáleného přihlášení účet root PermitRootLogin ne # Povolit explicitní kontrolu práv souborů a adresářů pomocí ssh klíčů StrictModes ano # Kolikrát znovu požádat o heslo, pokud je zadáno nesprávně MaxAuthTries 3 # Zakázat přihlášení s prázdným heslem PermitEmptyPasswords ne # Zakázat přihlášení pomocí hesla v princip # (místo tohoto použijte veřejný/soukromý klíč) PasswordAuthentication no # Zakažte použití autorizace "challenge-response", # protože je to k ničemu při použití klíčů ChallengeResponseAuthentication ne # Protože nepoužíváme heslo, nepotřebujeme (PAM, login(1)) UsePAM ne UseLogin ne # Povolit klientovi předat pouze určitou sadu proměnných prostředí # RH BZ#CVE-2014-2532 # ShellShock exploit AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELELEPHONE LC_MEASUREMENT_IDEn Accept

Toto jsou parametry, které se konfigurují v konfiguračním souboru sshd. Po změně nastavení je třeba restartovat službu sshd.

Komentáře

  • Při použití autentizace klíčem je klíč vyžadován dříve generovat na klientský stroj a zkopírujte veřejný klíč na server. Příklad:
klient $ klient ssh-keygen $ cat ~/.ssh/id_rsa.pub | ssh -p 5679 [e-mail chráněný]"cat >> ~/.ssh/authorized_keys"
  • Soubor /var/log/auth.log bude obsahovat zprávy od sshd. V případě, že tento soubor chybí, musíte nakonfigurovat systém protokolování. příklad pro syslog a syslon-ng. Používám syslog-ng a potřeboval jsem přidat následující řádky do souboru /etc/syslog-ng/syslog-ng.conf:
cílový authlog ( file("/var/log/auth.log"); ); log ( source(src); destination(authlog););

a restartujte službu syslog-ng.

  • Pokud používáte nestandardní port, možná budete muset nakonfigurovat firewall (iptables, firewalld atd.).
    Příklad nastavení pro iptables:
root# iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --dport 5679 -j PŘIJÍMAT službu root# iptables uložit root# iptables -L -n Řetězec VSTUP (přijetí zásad) cíl prot opt ​​​​zdrojový cíl PŘIJÍMAT icmp -- 0.0.0.0/0 0.0.0.0/0 PŘIJÍMAT tcp -- 0.0.0.0/0 0.0.0.0/0 stav NOVÝ tcp dpt:22 PŘIJÍMAT tcp -- 0.0.0.0/0 0.0.0.0/0 stav tcp dpt :80 PŘIJÍMAT tcp -- 0.0.0.0/0 0.0.0.0/0 stav NOVÝ, ZALOŽENÝ tcp dpt:5679 ...

Pokud to nestačí

Je to jen základní nastavení. Navíc můžete konfigurovat

  • firewall (iptables)