V tomto krátkém příspěvku jsem dal dohromady způsoby, jak zvýšit bezpečnost ssh serveru. Jsou popsány nejzákladnější a nejjednodušší techniky a ty složitější jsou pouze naznačeny pro zájemce.

Základní triky

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

### Síť ### # Použít nestandardní port (>1024) port 5679 # Použít pouze připojení IPv4 # inet = IPv4, inet6 = IPv6, libovolné = obě AddressFamily inet # Může přijímat pouze připojení z určitých IP adres #ListenAddress 0.0.0.0 # Používáme druhou verzi protokolu, protože první z nich je zranitelný # známým protokolem 2 zranitelnosti # Zakažte přesměrování grafiky (X server), dokud # jej nebudete jasně potřebovat X11Forwarding ne # Zakažte Deaktivujte TCPKeepAlive a místo toho použijte ClientAliveInterval, # abyste zabránili útokům jako TCP Spoofing TCPKeepAlive ne # Vyhoďte uživatele po 10 minutách (600 sekundách) 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 processing # Use an process to z klientského provozu # sandbox - openSSH >= 5,9 ("ano" - pro nižší verze) UsePrivilegeSeparation sandbox # Pokud tyto hodnoty změníte, vyžaduje odstraně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 generování nový klíč# v případě, že byl použit předchozí. KeyRegenerationInterval 1h # Síla klíče ServerKeyBits 2048 # Povolit autentizaci veřejným klíčem PubkeyAuthentication yes # Ukládat důvěryhodné klíče do adresáře uživatele AuthorizedKeysFile .ssh/authorized_keys ### Protokolování ### # Samotná předpona pro syslog SyslogFacility forvelsh AUTH #MessageLeverbos AUTH ## Autentizace ### # seznam povolených uživatelů AllowUsers ivan # omezit čas pro zadání hesla pro ssh klíč LoginGraceTime 30s # zakázat vzdálené přihlášení pod root účtem PermitRootLogin no # Povolit explicitní kontrolu oprávnění k souborům a adresářům pomocí ssh klíčů StrictModes ano # Kolikrát znovu požádat o heslo, pokud je zadání nesprávné MaxAuthTries 3 # Zakázat přihlášení s prázdným heslem PermitEmptyPasswords ne # Zásadně zakázat přihlášení pomocí hesla # (místo toho použijte veřejný / soukromý klíč) PasswordAuthentication ne # Zakažte použití autorizace „challenge-responce“, # protože . při použití klíčů je to k ničemu ChallengeResponseAuthentication no # Protože nepoužíváme heslo, nepotřebujeme (PAM, login(1)) UsePAM no UseLogin no # Povolit klientovi odeslat pouze určitou sadu proměnné 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 Accept LCENTALLvIFURICATION

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í autorizace na základě klíče je klíč vyžadován dříve vygenerovat na klientském počítači a zkopírovat 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. Pokud 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.

  • Při použití nestandardního portu může být nutné nakonfigurovat firewall (iptables, firewalld atd.).
    Příklad nastavení pro iptables:
root# iptables -A INPUT -p tcp -m stát --stát NOVÉ, ZAKÁZÁNO --dport 5679 -j PŘIJÍMAT službu root# iptables uložit root# iptables -L -n Řetězec INPUT (přijetí zásad) cíl prot opt ​​​​zdroj cíl PŘIJET 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 NOVÝ tcp dpt:80 PŘIJÍMAT tcp -- 0.0.00.0/ 0,0/ 0 stav NOVÝ, ZAKÁZÁN tcp dpt:5679 ...

Pokud toto nestačí

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

  • firewall (iptables)

Jakmile se služba „rozsvítí“ ve veřejné síti, okamžitě se stává objektem útoku. Jedním z problémů je pokus o získání přístupu pomocí hesla brute force (brute force). 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 je v průběhu času natahován.

Ochrana hrubou silou SSH

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 je změnit výchozí port 22, například na 2002, pokud to nekoliduje s jinými úkoly. Uděláme záznam v /etc/ssh/sshd_config:

Poté se pokusy o uhodnutí hesel prakticky zastaví. Jsou chvíle, kdy port nelze změnit. Případně můžete omezit přístup přes SSH určitých uživatelů(konkrétně root) nebo skupina. V sshd_config je za to zodpovědná řada parametrů: AllowUsers, AllowGroups, DenyUsers a DenyGroups. Je vhodné, že můžete zadat IP nebo podsíť s 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 hrubou silou je použití certifikátů pro autentizaci. A s pomocí speciální parametr shoda, můžete vytvořit podmíněný blok, ve kterém předefinujete parametry globální sekce. Například zakažme přihlášení SSH heslem pro uživatele root, což umožní všem ostatním:

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

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

sshd: 192.168.1.0/24: povolit

Nebo v /etc/hosts.deny:

sshd:ALL:deny
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 22. portu 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 Admin není vázán na pracoviště. V tomto případě pomozte speciální pomůcky: Fail2ban, Sshguard. Fail2ban byl původně navržen pro zabezpečení SSH. I když dnes už jde o framework, který lze snadno přizpůsobit pro jakoukoli aplikaci. Princip fungování je velmi jednoduchý. Démon pravidelně kontroluje protokoly, zda neobsahují nějakou podezřelou aktivitu. Podezřelá IP adresa je pak blokována iptables nebo TCP Wrapperem. Po uplynutí doby uvedené v nastavení je blokování obvykle odstraněno, aby nedošlo k náhodnému zablokování legálního uzlu. Když je pravidlo spuštěno, událost se zapíše do protokolu /var/log/fail2ban.log a lze odeslat e-mail.

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

Na Ubuntu a Debianu nainstalujte 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 upgradu se neztratí. Chcete-li zkontrolovat, zda filtr funguje, 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 přebytek

$ 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 zadejte parametr PoslouchejteAdresu(např. 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 Hostname 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ř různé klíče na serverech)

Stejně jako bederní možnost proxy:

{<2>}

Stáhněte si klienta ngrok na server za firewallem. Spusťte binární soubor a určete, který port potřebujeme přeposlat

SSH je bezpečný protokol pro přenos dat (příkazů, souborů, videa atd.) mezi počítači.

Ve výchozím nastavení je povolena na VPS a dedikovaných serverech většiny poskytovatelů hostingu, protože vám umožňuje snadno a bezpečně spravovat vzdálený počítač. Mimochodem, na službě Well-Web si můžete levně pronajmout VPS server. Protože je SSH povoleno na všech VPS, je nutná správná ochrana SSH, aby se předešlo problémům při používání Secure Shell.

Zakázat přístup root

Nejprve se doporučuje deaktivovat možnost vzdáleného připojení ke stroji pod účet superuživatel (kořen). Chcete-li to provést, musíte najít soubor sshd_config, který se obvykle (ale ne vždy) nachází v adresáři /etc/ssh/, a otevřít jej.

Budete v něm muset najít položku PermitRootLogin a nahradit její hodnotu „no“, to znamená, že byste měli dostat následující záznam:

PermitRootLogin č

Přirozeně to nezabrání hackování, ale bude to stále poněkud obtížnější.

Pro minimalizaci možnosti hackingu se doporučuje používat autorizaci pomocí klíčů místo autorizace přihlášením a heslem. To lze provést několika způsoby. To je mimochodem také dobrá SSH ochrana proti hrubé síle.

Změňte výchozí port

Vzhledem k tomu, že k hacknutí serveru přes SSH obvykle dochází pomocí hesla hrubou silou, bylo by rozumné změnit standardní 22. port na jiný. Je to velmi snadné. Nejprve musíte otevřít již zmíněný soubor sshd_config a přidat tam jeden řádek:

Port číslo_portu

Záznam bude vypadat například takto:

Port 3048

To výrazně sníží počet lidí, kteří chtějí získat neoprávněný přístup k serveru. Před změnou čísla portu se ujistěte, že to nepoškozuje provoz jiných aplikací. Musíte také vybrat port, který se ještě nepoužívá, aby kvůli němu programy nebyly v konfliktu.

Omezení přístupu pomocí IP

Dalším způsobem ochrany, který sníží pravděpodobnost neoprávněného připojení téměř na nulu, je nastavení omezení autorizace. SSH lze nakonfigurovat tak, aby se k serveru mohly přihlásit pouze vzdálené počítače s určitými IP adresami. Chcete-li to provést, v souboru sshd_config v řádku AllowUser přidejte ke jménu každého uživatele @IP_number. Záznam může vypadat takto:

AllowUsers [e-mail chráněný], [e-mail chráněný]

Před použitím této metody se doporučuje ujistit se, že nenastaly situace, kdy by bylo nutné přistupovat k serveru ze stroje, jehož IP adresa není poskytována v konfiguraci.

Zabezpečené heslo

A samozřejmě byste měli používat heslo, které je odolné vůči hrubé síle. Dlouhé a s co nejvíce různými symboly, nejlépe s krakozyabry. Tohle musíte mít.

OpenSSH umožňuje provádět vzdálené připojení na server, manipulovat se soubory a spravovat systém. Dnes chceme mluvit o osvědčené postupy, což 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ář, kde 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 zabezpečení). Funguje podobně jako ACL;
  • SSH port ve výchozím nastavení - 22

Není potřeba - vypněte

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

chkconfig sshd off yum erase openssh-server

Použijte SSH verze 2

Protokol SSH první verze má bezpečnostní problémy, které jsou ve druhé verzi uzavřeny. Proto použijte druhou verzi. Ujistěte se, že soubor /etc/ssh/sshd_config je nastaven na Protokol 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. Například povolte 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 300 sekund (5 minut).

O souborech .rhosts

Faktem je, že tento soubor obsahuje seznam hostitelů a uživatelů. Pokud v daný soubor obsahuje kombinaci hostitele a uživatele daný uživatel 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:

Host-basedAuthentication č

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

PermitRootLogin č

Vytvořte banner

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

22 port pouze zevnitř!

Udělejte přístup k systémovému portu 22 pouze prostřednictvím řetězce pravidel brány firewall. Nejlepší ze všeho 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, kde je třeba č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

Silná hesla

Používejte silná hesla. Na síti je mnoho nástrojů, které vygenerují heslo odolné vůči kryptoměnám 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

Je 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 prosím z jakého důvodu? Budeme velmi vděční za podrobnou odpověď. Děkujeme, že nám pomáháte být lepšími!