Před čtyřmi měsíci jsem přešel z Windows 7 k Linux přesněji k distribuci Ubuntu protože mě chytl amok z modré smrti která mi oznámila že OS není možné spustit. Přechod pro mě nebyl úplně jednoduchý protože v Linux to chodí prostě jinak. Tímto chci jen říct že nejsem žádný Linuxový Guru pro kterého není problém nainstalovat SSH. Teď k tomu proč jsem SSH chtěl. V práci mi vyvstal problém protože jsem se potřeboval připojit zabezpečeně z firemního PC na domácí bez ohrožení firemní sítě. Po chvíli googlování jsem si přečetl o SSH a tak jsem se dal do práce. Pro mě instalace nebyla nejjednodušší ale když už se na to podívám zpětně tak to žádná věda není. Takže tedy hurá do toho a půl je hotovo.
Co potřebujeme
http://putty.cz -> putty.exe -> puttygen.exe
Ubuntu -> ssh server -> sudo apt-get install ssh
Ubuntu -> ssh server -> sudo apt-get install ssh
Nastavení ssh
nainstalujeme ssh server na Ubuntu příkazem
sudo apt-get install ssh
potom upravíme konfigurační soubor ssh příkazem
sudo gedit /etc/ssh/sshd_config
najdeme řádky v sshd_config
AuthorizedKeysFile %h/.ssh/authorized_keys
PasswordAuthentication no
PasswordAuthentication no
odkomentujeme řádek s
AuthorizedKeysFile %h/.ssh/authorized_keys
pro zapnutí ověřování s klíči. Pro načtení změn, musíme restartovat server příkazem
sudo service ssh restart
nyní máme nastavenou konfiguraci ssh, takže zbývá nastavit firewall na požadovaný port.
(Default SSH port je 22)
(POZOR pokud chcete přistupovat na ssh z internet,u nezapomeňte udělat pravidlo i na routeru)
Generování klíče
Teď přichází na řadu program puttygen.exe, pro vytvoření certifikátu PuTTy *.ppk protože unix tvoří jiný a PuTTy umí pracovat pouze se svým vlastním. Takže vytvoříme pár klíčů. Spustíme si puttygen.exe nastavíme dole parametr SSH-2 DSA a klikneme nahoře na key -> generate key pair. Během generování klíčů je potřeba pohybovat myší přes šedou plochu puttygenu. Po vytvoření zadáme heslo do pole key passphrase, které bude chránit náš klíč. Do pole key comment zadáme "jméno uživatele@server". Nyní uložíme oba klíče tlačítkem save public key a save private key do odlišných složek pojmenovaných public a private, aby se nám nepomíchaly a nazveme je např. id_dsa.pub a id_dsa.ppk. Aby server mohl ověřit klíč, tak potřebuje znát náš veřejný klíč. Zkopírujeme si tedy obsah z pole "Public key for pasting into OpenSSH authorized_keys file" do txt souboru a nějak dostaneme na server (např. přes flash disk) a překopírujeme obsah do souboru ~/.ssh/authorized_keys Nejlépe příkazem
(soubor authorized_keys má mít co řádek to certifikát).
Ještě musíte mít na serveru správně nastavený chmod na
a
Server zapisuje log přihlášených do /var/log/auth.log nebo tyto hlášky také můžete najít v syslogu.
POZOR pokud chcete přistupovat z jiného PC, než na kterém jste generovali klíč, tak musíte na PC ze kterého se chcete připojit spustit znovu puttygen.exe a kliknout nahoře na file -> load private key -> najít id_dsa.ppk vyplnit heslo které jste zadávali při vytvoření -> kliknout na save private key a uložit id_dsa.ppk. Tohle musíte udělat protože v klíči je zapsána i vače MAC adresa.
~/. znamená /home/?uživatel?/.ssh/authorized_keys
jinak vynikající návod na generování klíče je zde: http://frantovo.cz/blog/?q=ssh-klice-ve-windows-putty
cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
(soubor authorized_keys má mít co řádek to certifikát).
Ještě musíte mít na serveru správně nastavený chmod na
chmod 600 ~/.ssh/authorized_keys
a
chmod 700 ~/.ssh
Server zapisuje log přihlášených do /var/log/auth.log nebo tyto hlášky také můžete najít v syslogu.
POZOR pokud chcete přistupovat z jiného PC, než na kterém jste generovali klíč, tak musíte na PC ze kterého se chcete připojit spustit znovu puttygen.exe a kliknout nahoře na file -> load private key -> najít id_dsa.ppk vyplnit heslo které jste zadávali při vytvoření -> kliknout na save private key a uložit id_dsa.ppk. Tohle musíte udělat protože v klíči je zapsána i vače MAC adresa.
~/. znamená /home/?uživatel?/.ssh/authorized_keys
jinak vynikající návod na generování klíče je zde: http://frantovo.cz/blog/?q=ssh-klice-ve-windows-putty
Nastavení PuTTy
Server je nastavený, takže se připojíme z Windows přes program PuTTy a to tak že v kategorii session -> saved session vyplníme jméno relace, např. connect_banan plus příslušný port, dále session -> host name -> vyplníme vaší adresu serveru, např. 192.168.0.100 nebo banan.cz
connection -> data -> auto-login username -> "vaše uživatelské jméno v unix"
connection -> ssh -> auth "cesta k certifikátu *.ppk"
Teď už jen kliknete na connect a zadáme heslo co jsme vyplňovali u generování certifikátu. Jednoduché že? :) Pokud jste líní, a nudí vás klikat na connect_banan a connect tak jednoduše vytvořte zástupce z putty.exe a vyplňte "cesta/putty.exe" -load "connect_banan" kde connect_banan je volitelné jméno v saved session. A jestli jste líní vyplňovat i heslo, tak si nainstalujte Pageant.
connection -> data -> auto-login username -> "vaše uživatelské jméno v unix"
connection -> ssh -> auth "cesta k certifikátu *.ppk"
Teď už jen kliknete na connect a zadáme heslo co jsme vyplňovali u generování certifikátu. Jednoduché že? :) Pokud jste líní, a nudí vás klikat na connect_banan a connect tak jednoduše vytvořte zástupce z putty.exe a vyplňte "cesta/putty.exe" -load "connect_banan" kde connect_banan je volitelné jméno v saved session. A jestli jste líní vyplňovat i heslo, tak si nainstalujte Pageant.
Směrování portů v PuTTy
Pokud chcete ještě připojit např. VNC na server přes SSH, tak nejdřív musíte mít spuštěný VNC server. Na Ubuntu se to dělá v
systém -> předvolby -> vzdálená pracovní plocha
kde zafajfkujete zaškrtávátko "umožnit jiným uživatelům zobrazit vaši pracovní plochu" a hned pod tím "umožnit jiným uživatelům ovládat vaší pracovní plochu". Dle libosti si zadejte heslo, nebo se můžete připojovat i bez. Ještě doporučuji zaškrtnout dole" Zobrazovat ikonu pouze když je někdo připojen".
Teď si ještě nastavíme PuTTy v sekci
connection -> SSH -> tunnels
a do políčka secure port nastavíme 5900 (defautl port VNC) a do destination "lokální IP serveru":5900 např. 192.168.55.1:5900 a klikneme na add. Nezapomeňte na save, nebo se vám nastavení neuloží. Teď už stačí jen stáhnout z http://www.tightvnc.com/ VNC viewer zapnout, zadat do adresy localhost a kliknout a na connect. Pokud chcete nastavit více portů, tak stačí do PuTTy stejným způsobem přidat další a pro připojení zadat do příslušné aplikace localhost:0 localhost:1 atd. podle toho které pravidlo chcete využít.
Vidíle-li v logu /var/log/auth.log takovéto hlášení, tak se s největší pravděpodobností jedná o pokus o útok přes DNS server. Na obranu stačí přidat do /etc/ssh/sshd_config řádek
Tato zpráva pochází také z /var/log/auth.log a znamená že se někdo pokusil o přístup na váš server ale zadal špatné uživatelské jméno a heslo. Tomuto jevu se dá poměrně jdenoduše bránit pomocí programu Denyhosts nebo fail2ban. V článcích Obrana SSH proti Brute-force útokům a Obrana SSH proti Brute-force útokům 2 se zabývám nastavením.
Ještě jako doplněk bych uvedl že pokud připojujete více uživatelů, je dobré mít je pod vlastním loginem. Takže vytvoříme dalšího uživatele příkazem
A protože každý uživatel má svuj klíč /home/vojta/.ssh/ nebo-li ~/.ssh tak jej musíme vytvořit u každého účtu.
Pozor na práva jelikož budete určitě tvořit adresář .ssh přes příkaz sudo a to znamená že tvoříte jako root, takže pro ostatní uživatele nečitelný adresář. Aby jsme se vyhnuli této chybě použijte příkaz
Za případné překlepy a hrubky se omlouvám :)
systém -> předvolby -> vzdálená pracovní plocha
kde zafajfkujete zaškrtávátko "umožnit jiným uživatelům zobrazit vaši pracovní plochu" a hned pod tím "umožnit jiným uživatelům ovládat vaší pracovní plochu". Dle libosti si zadejte heslo, nebo se můžete připojovat i bez. Ještě doporučuji zaškrtnout dole" Zobrazovat ikonu pouze když je někdo připojen".
Teď si ještě nastavíme PuTTy v sekci
connection -> SSH -> tunnels
a do políčka secure port nastavíme 5900 (defautl port VNC) a do destination "lokální IP serveru":5900 např. 192.168.55.1:5900 a klikneme na add. Nezapomeňte na save, nebo se vám nastavení neuloží. Teď už stačí jen stáhnout z http://www.tightvnc.com/ VNC viewer zapnout, zadat do adresy localhost a kliknout a na connect. Pokud chcete nastavit více portů, tak stačí do PuTTy stejným způsobem přidat další a pro připojení zadat do příslušné aplikace localhost:0 localhost:1 atd. podle toho které pravidlo chcete využít.
Tipy a triky
Vidíle-li v logu /var/log/auth.log takovéto hlášení, tak se s největší pravděpodobností jedná o pokus o útok přes DNS server. Na obranu stačí přidat do /etc/ssh/sshd_config řádek
UseDNS no
Jan 3 23:31:31 "nezev serveru" sshd[20872]: reverse mapping checking getaddrinfo for segment-124-30.sify.net [124.30.157.4] failed - POSSIBLE BREAK-IN ATTEMPT!
Jan 3 23:31:32 "nezev serveru" sshd[9404]: error: PAM: Authentication failure for root from 200.69.115.174
Jan 3 23:31:32 "nezev serveru" sshd[9404]: error: PAM: Authentication failure for root from 200.69.115.174
Tato zpráva pochází také z /var/log/auth.log a znamená že se někdo pokusil o přístup na váš server ale zadal špatné uživatelské jméno a heslo. Tomuto jevu se dá poměrně jdenoduše bránit pomocí programu Denyhosts nebo fail2ban. V článcích Obrana SSH proti Brute-force útokům a Obrana SSH proti Brute-force útokům 2 se zabývám nastavením.
Jan 3 23:31:33 "nezev serveru" sshd[20873]: Invalid user mike from 216.240.145.212
Ještě jako doplněk bych uvedl že pokud připojujete více uživatelů, je dobré mít je pod vlastním loginem. Takže vytvoříme dalšího uživatele příkazem
sudo adduser vojta
A protože každý uživatel má svuj klíč /home/vojta/.ssh/ nebo-li ~/.ssh tak jej musíme vytvořit u každého účtu.
Pozor na práva jelikož budete určitě tvořit adresář .ssh přes příkaz sudo a to znamená že tvoříte jako root, takže pro ostatní uživatele nečitelný adresář. Aby jsme se vyhnuli této chybě použijte příkaz
sudo chown vojta:vojta /home/vojta/.ssh
sudo chown vojta:vojta /home/vojta/.ssh/authorized_keys
chmod 600 .ssh/authorized_keys
Nyní už stačí jen každému uživateli přiřadit klíč do authorized_keys a máte hotovo. sudo chown vojta:vojta /home/vojta/.ssh/authorized_keys
chmod 600 .ssh/authorized_keys
Za případné překlepy a hrubky se omlouvám :)