SSH je hlavním přístupovým bodem k vašemu cloudovému serveru. Proto však také nejvíce bývá vystaven různým útokům. V tomto návodu vám ukážeme, jak zvýšit úroveň zabezpečení SSH.
Změna portu
U SSH je výchozím portem pro naslouchání port 22. Změna tohoto portu zvýší zabezpečení serveru.
Aby nedošlo k narušení funkčnosti jiných existující služeb na serveru, doporučujeme pomocí příkazu netstat zkontrolovat, které porty jsou aktuálně využívány:
$ netstat -n -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::80 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
udp 0 0 127.0.0.53:53 0.0.0.0:*
Pomocí parametru -l v netstat příkazu dostaneme seznam všech spojení, která jsou ve stavu LISTEN. V našem případě byly využívány následující porty:
-
• 3306 MySQL service
-
• 22 SSH
-
• 80 Apache2 / HTTP
-
• 53 DNS
Chcete-li změnit port, upravte konfigurační soubor / etc / ssh / sshd_config. Odstraňte komentář smazáním znaku #:
Poté nastavte novou hodnotu, ideálně vysokou, abyste zabránili jejímu odhalení různými softwary pro automatické skenování portů (např. 2200, 5574, 1022):
Pro potvrzení a propsání změn použijte příkaz:
$ sudo service sshd reload
Neodpojujte již navázané SSH spojení. V případě problému můžete navrátit změny v původním již navázaném spojení.
Po provedení změn se připojte k serveru a zadejte nový port. Pokud například používáte klienta SSH z příkazového řádku, použijte příkaz:
Použití klíčů pro autentizaci
Hojně používaným přístupem je přístup přes RSA klíče. Je tomu tak hlavně kvůli tomu, že je bezpečnější alternativou k přihlášení založeném na hesle. V tomto typu autentizace klient generuje soukromý klíč a související veřejný klíč, který je nainstalován na serveru, aby s určitostí identifikoval klienta.
Chcete-li nainstalovat veřejný klíč, klient musí nejdříve vygenerovat pár klíčů použitím příkazu ssh-keygen:
$ ssh-keygen
Generating public/private rsa key pair.
Enter file where to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
Před vygenerováním klíčů si ssh-keygen vyžádá volitelnou přístupovou frázi, kterou lze využít pro autentizaci. V tomto příkladu byl pro zjednodušení tento řádek ponechán prázdný.
Po dokončení software uloží dva soubory v cílové destinaci:
-
• id_rsa: the client's private key, not to be shared with anyone.
-
• id_rsa.pub: the shareable public key .
Pro přípravu prostředí serveru vytvořte ve složce .ssh soubor s názvem authorized_keys. Soubor musí být umístěn v domovském adresáři uživatele, který bude klíč používat k přihlášení:
$ sudo mkdir ~/.ssh
$ sudo touch ~/.ssh/authorized_keys
$ sudo chmod 600 ~/.ssh/authorized_keys
Ujistěte se, že soubor má výše uvedená oprávnění.
Poté pokračujte vložením veřejného klíče vygenerovaného v jednom z předchozích kroků:
$ sudo nano ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoTzd9RnqT0yioQG1klsLEK/VG9myo7CQ47aRXu7hnPit6Lgw5kAjC7vzNWYLTy2oIlsrVI7R/tvWmVNISGkWDp9U3fONbSLp+vgBKDzRUVAIqP/AIJ2THanyZxj2b8XU/4s2uzGoTLSR3ViX0JU6zTc+IkaBp1o3W3OolvO15E10/VYJCKN3TkxPsSSGE3QReXnCcnIZYAnrPf9f1DPP1Lo+VUCIzZ7IzcZajAWQ53hC71mTYNHkUgIlWxpRyEhnsRfmqEfUSFbTwpNEarv7vGlK686C4xVxlVfKbqlNa3/g2Vrae4ArVBM958JPZ6aa+7KDZfH5TDgPPtlFCIGkd [email protected]
Soubor uložte a znovu načtěte SSH:
$ sudo service sshd reload
Nyní byste měli mít možnost přístupu na server bez nutnosti zadávání hesla:
Pokud vše funguje správně, zakažte přístup k serveru heslem úpravou soboru / etc / ssh / sshd_config s následujícími parametry:
ChallengeResponseAuthentication no
PasswordAuthentication no
Pamatujte, že máte možnost přidat další veřejné klíče tak, že je přidáte na konec souboru ~ / .ssh / authorized_keys na serveru.
Omezení doby dostupnosti služby
Další možností, jak se bránit proti neoprávněným přístupům a brute force útokům, je úprava doby dostupnosti SSH. Pokud víte, že k serveru nepotřebujete přístup v určitých hodinách (například od 23:00 do 8:00 následujícího dne), nastavte automatický plán blokování portu pro připojení.
Toho lze docílit použitím firewallu iptables. Před použitím této konfigurace mějte na paměti, že iptables ze své podstaty automaticky neukládá vytvořená nastavení.
Chcete-li uložit a načíst konfiguraci iptables při spuštění systému, použijte balíček iptables-persistent.
Nainstalujte balíček iptables-persistent:
$ sudo apt-get install iptables-persistent
Po dokončení instalace vytvořte chain pro SSH:
$ sudo iptables -N chain-ssh
$ sudo iptables -A INPUT -p tcp --dport 22 -j chain-ssh
Tímto způsobem budou všechna příchozí připojení na port 22 (pokud používáte pro SSH jiný port, změňte tuto hodnotu v příkazu) přiřazena nově vytvořenému chainu „chain-ssh“.
Uložte aktuální nastavení (které bude načteno pomocí iptables-perstitent) pomocí příkazu:
$ sudo iptables-save > /etc/iptables/rules.v4
Poté vytvořte časový plán pro zadávání a odstraňování pravidla v řetězci úpravou crontab takto:
$ sudo crontab -e
# m h dom mon dow command
0 23 * * * iptables -A chain-ssh -j DROP
0 8 * * * iptables -F chain-ssh
Jak můžete vidět, při první operaci je přidáno pravidlo DROP ve 23:00. Druhá operace naopak v 8:00 řetězec vyprázdní a tím obnoví službu.
Pro použití změn soubor uložte.