K mému Raspberry PI přistupuji většinou vzdáleně pomocí SSH a ve většině případu v rámci LAN sítě. Přihlašování standardně pomocí jména a hesla. Ne vždy jsem ale doma a občas bych potřeboval k Raspberry PI přistoupit i z venčí (z internetu). Nechat ovšem otevřený port 22 na routeru vedoucí rovnou k RPI a přihlašování pomocí jména+hesla by nebyl zrovna dobrý nápad.
Abych si troufl přesměrovat ten port a nechat RPI dosažitelné i z internetu bylo potřeba prvně zabezpečit přihlášení. Budu předpokládat, že RPI máte zprovozněné a dokážete se k němu pomocí SSH připojit.
Připojení pomocí klíče
- Vygenerujeme si klíč pomocí programu PuTTYgen. Program po stažení spustíme (není třeba nic nastavovat) a klikneme na tlačítko Generate. Při generování hýbeme myší přes okno programu - budeme nám nabíhat progressbar. Po vygenerování klíče se nám zobrazí okno - více na následujícím obrázku.
- Zkopírujeme text z prvního velkého políčka označeného jako Public key for pasting into OpenSSH authorized_keys file. Do pole Key passphrase vepíšeme něco, co si zapamatujeme (heslo), do pole Confirm passphrase to heslo vepíšeme znovu. Nyní si uložíme veřejný a privátní klíč (pomocí tlačítek save public key a save private key).
- Připojíme se přes SSH k Raspberry PI a vytvoříme si v domovském adresáři adresář s názvem .ssh (příkaz mkdir ~/.ssh), nastavíme vytvořenému adresáři práva 700 (chmod 700 ~/.ssh).
- Spustíme si libovolný textový editor a budeme editovat soubor authorized_keys v adresáři .ssh (nano ~/.ssh/authorized_keys). Do tohoto souboru vložíme zkopírovaný text z programu PuttyGen. Soubor následně uložíme a zavřeme.
- Aby SSH fungovalo na základě klíče a ne hesla (jako doposud) bude nutné upravit konfigurační soubor SSH daemona. Budeme editovat soubor /etc/ssh/sshd_config (sudo nano /etc/ssh/sshd_config). Asi v polovině tohoto souboru se nachází řádek #PasswordAuthentication yes. Tento řádek změníme na PasswordAuthentication no. Konfigurační soubor uložíme a zavřeme. Nyní můžeme restartovat SSH daemona (sudo /etc/init.d/ssh restart).
- Nyní musíme nastavit SSH klienta tak, aby se identifikoval privátním klíčem, který jsme si uložili. V Putty se to provádí v nastavení relace Connection-SSH-Auth (viz následující obrázek).
- Po tomto nastavení se můžeme opět připojit, nyní stačí vyplnit jen jméno a jsme připojeni. Tímto máme vše nastavené a nemusíme se bát nechat přístupné Raspberry PI z internetu pomocí SSH.
Zabezpečení proti útokům
Po povolení vzdáleného připojení z internetu jsem si po nějakém čase v logu auth.log všimnul pokusů o přístup. Jelikož mi toto vadilo tak jsem hledal další možnost zabezpečení. Tou je například program fail2ban, který slouží jako blokovač IP adresy při několika špatných pokusech o připojení. Toto částečně znemožňuje prolomení pomocí bruteforce útoku.
Instalace je velice jednoduchá, protože se tento program nachází v oficiálních balíčcích, nainstalujeme jej pomocí příkazu sudo apt-get install fail2ban. Po nainstalování můžeme editovat konfiguraci v souboru /etc/fail2ban/jail.conf. Tam doporučím upravit především položky maxretry (maximální počet pokusů) a bantime (doba zablokování v sekundách). Řekl bych, že každému stačí tak 3 pokusy, bantime nechávám na uvážení, osobně jsem ho nastavil na pár dní.
Po tomto nastavení by mělo být vzdálené připojení k SSH v relativním bezpečí. Funguji takhle již pár měsíců, nějaké útoky jsou na SSH vedené, ovšem zatím žádný neprošel.
Komentáře