SSH tips voor pro’s

SSH is misschien wel de meest gebruikte tool door ons, maar ook zeker door de meeste ontwikkelaars. In deze blog delen wij een paar tips die het gebruik van SSH veiliger en efficiënter maken. Deze tips zijn niet specifiek op onze HPW servers gericht en zijn dus ook bijvoorbeeld op eigen interne servers toe te passen. We gaan er wel vanuit dat je een wat recentere versie van OpenSSH (zowel client als server) gebruikt. In de onderstaande tekst gebruiken wij d-example.host-ed.eu als een voorbeeld, je dient dit te vervangen door je eigen server-adres.

MySQL server extern aanroepen

We krijgen vaak de vraag van klanten dat ze vanaf een externe locatie de database server willen benaderen. Een mogelijke oplossing zou zijn om een extra IP-adres in de firewall te plaatsen zodat je op afstand bij de database kan. Niet alleen is dit inefficient maar de data gaat ook nog eens onbeveiligd over je internet verbinding heen.

Een andere, heel erg makkelijke en veilige, oplossing is om een MySQL tunnel op te zetten over de SSH verbinding. En dat is makkelijker dan je denkt! Op je lokale machine gebruik je het volgende commando:

ssh -L 3307:127.0.0.1:3306 u_user@d-example.host-ed.eu -p 22622

Wat gebeurt er nu precies? Na dat je bent ingelogd via SSH op d-example.host-ed.eu:22622 begint de SSH client op 127.0.0.1:3307 te luisteren. Hierna kan je op je lokale pc de MySQL server aanroepen via 127.0.0.1:3307. Deze tunnel blijft draaien zolang je blijft ingelogd op de server.

Encryptie OpenSSH server verbeteren

De standaard OpenSSH server configuratie die met een besturingssysteem mee komt is redelijk relaxed ingesteld om te zorgen dat ook oude(re) en exotische SSH clients kunnen verbinden. Zo mogen SSH clients gebruik maken van SHA1. SHA1 wordt als onveilig bestempeld en wil je dus niet gebruiken.

Je huidige OpenSSH configuratie kan je zelf makkelijk testen op SSH Check.com. De kans is groot dat deze check met wat aandachtspuntjes zal komen. We zullen je het uitzoek werk besparen. Om alles “groen” te krijgen dien je de OpenSSH server configuratie (vaak /etc/ssh/sshd_config) aan te passen:

KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com

Vergeet niet de OpenSSH server na bovenstaande wijziging te restarten!

Het resultaat zou er dan ongeveer zo uit moeten komen te zien:

Update 21-06-2017:
De volgende applicatie’s hebben de laatste versie nodig om te werken met bovenstaande configuratie:

  • CyberDuck
  • MySQL Workbench

Minder bits is beter

Sinds jaar en dag wordt er voor het opzetten van een public-key beveiligde verbinding gebruik gemaakt van SSH-RSA (en SSH-DSA is helemaal oud!). Op zich is dit nog steeds veilig mits het het aantal bits hoog genoeg is. Een paar jaar geleden werden nog veel keys van 1024 bits gebruikt tegenwoordig is 4096 bits niet meer ongewoon en ook zeker aan te raden. Het nadeel van het hoge aantal bits is dat er meer rekenkracht nodig is om dit allemaal te verwerken.

Naast SSH-RSA ondersteunen onze HPW servers ook het ECDSA key type. Met ECDSA kun je het zelfde beveiligingsniveau bereiken als SSH-RSA maar met een lager aantal bits (op dit moment 256, 384 of 521 bits).  Onder ander het opzetten van een SSH verbinding zal hier sneller door verlopen. Mocht je SSH client nieuw genoeg zijn dan kan je een ECDSA key genereren met:

ssh-keygen -t ecdsa -b 521

Hierna zal er er een id_ecdsa.pub bestand aanwezig zijn in je .ssh map. Deze kun je op je eigen server toevoegen in het ~/.ssh/authorized_keys bestand. Als deze niet bestaat kan je het bestand zelf aanmaken. Vergeet dan niet het bestand de correcte bestandsrechten (chmod 600) te geven.

Mocht je na het testen niet gelijk de ECDSA key gebruiken dan kan je deze hard opgeven met de -i parameter:

ssh d-example.host-ed.eu -p 22622 -i ~/.ssh/id_ecdsa.pub

Minder is meer

Veel mensen gebruiken geen compressie bij het gebruik van hun OpenSSH client naar onze servers toe. Wat op zich erg jammer is! Dit kan namelijk veel dataverkeer schelen, wat natuurlijk een voordeel kan zijn op een verbinding met beperkte capaciteit of een data limiet. Naast een besparing van dataverkeer zullen bestandsoverdrachten vaak sneller verlopen.

Om compressie in te schakelen kun je de -C parameter (werkt ook met SCP!) meenemen:

ssh -C d-example.host-ed.eu -p 22622

Als je deze standaard wil instellen voor alle verbindingen dan kun je de optie Compression yes toevoegen in ~/.ssh/config.