Ochrana SSH démona proti útokům (2)

Další možností jak předejít útokům (úvod do této problematiky a jedno z možných řešení lze nalézt zde) je úplné vypnutí autentizace na základě jména a hesla a používání pouze autentizace na základě klíčů.

Jak to funguje?

Vygenerujeme si na daném klientském počítači (ze kterého se na server/další počítač budeme přihlašovat) pár klíčů (soukromý a veřejný) a veřejný klíč si pomocí bezpečného kanálu (tedy opět přes SSH) zkopírujeme na server. Poté co ověříme funkčnost tohoto způsobu přihlašování, tak na serveru zakážeme přihlášení pomocí jména a hesla. Pro názornost budu klientskou stanici nazývat client a server budu nazývat server. Uživatel bude na obou stanicích stejný (může se samozřejmě lišit, to není podmínkou) - bude se jmenovat ondra.

Nastavení

ondra@client:~$ ssh-keygen -t dsa

Tímto jsme si vytvořili veřejný a soukromý klíč na klientské stanici. Pokud se chcete přihlašovat pod nějakým heslem (pro přesnost - není to klasické heslo, ale passphrase), tak jej zadejte, pokud ne, tak jej zadejte prázdné. Pokud jsme nezměnili adresář pro uložení klíčů, tak je nalezneme v adresáři /home/ondra/.ssh/, kde id_dsa je soubor se soukromým klíčem a id_dsa.pub je soubor s veřejným klíčem. Veřejný klíč následně zkopírujeme na server a přejmenujeme tímto příkazem (záměrně nepoužívám příkaz scp pro kopírování, protože by mohlo dojít k přepsání stávajícího souboru s klíčema):

ondra@client:~$ cat ~/.ssh/id_dsa.pub | ssh ondra@server "cat >> .ssh/authorized_keys"

Tento příkaz nebude fungovat pokud na serveru nemáte vytvořený adresář .ssh. Ještě je víc než vhodné změnit práva souboru authorized_keys (SSH odmítne spojení v případě, že práva na tomto souboru budou příliš benevolentní). Lze to provést zase vzdáleně za pomoci ssh a to takto:

ondra@client:~$ ssh ondra@server chmod 600 .ssh/authorized_keys

Teď už zbývá jen vyzkoušet komunikaci, tzn. připojit se k serveru pomocí příkazu ssh ondra@server. Pokud jste nastavili passphrase, tak po vás bude požadováno její zadání.

Pokud výše uvedené funguje, tak můžeme přistoupit k hlavnímu kroku a tím je zakázání autentizace pomocí hesla a tím zabránění útokům, kdy se útočník snaží periodicky hádat jednoduchá hesla. Autentizace zakážeme na serveru tak, že změníme následující direktivy (v souboru /etc/ssh/sshd_config) na hodnoty no.

PasswordAuthentication no
ChallengeResponseAuthentication no
PermitRootLogin no

Změna volby ChallengeResponseAuthentication na hodnotu no je velice důležitá, protože pokud by byla ponechána zapnutá a systém by využíval pro přihlášení PAM (což u většiny distribucí využívá), tak by přihlášení uživatele, bez ohledu na hodnotu direktivy PasswordAuthentication, probíhalo klasickým způsobem - tedy na základě uživatelského jména a hesla.

Po tomto kompletním nastavení musíme restartovat/reloadnout démona sshd a to například následujícím způsobem:

/etc/init.d/sshd reload

Pokud se přihlásíte ze stanice ze které byl generován klíč, tak bude (po případném zadání passphrase) přihlášení úspěšné. Při přihlašování z jiné (nedůvěryhodné) stanice nám ssh démon odpoví následující hláškou:

Permission denied (publickey,gssapi-with-mic).

což znamená, že naše nastavení je správné.

Naposledy změněno: 29.6.2006 8:51