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 high performance web servers gericht en zijn dus ook bijvoorbeeld op eigen interne servers toe te passen. We gaan er wel vanuit dat u 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, u dient dit te vervangen door uw eigen server-adres.

Wat is SSH? 

SSH is een afkorting voor Secure Shell. Met behulp van SSH kunt op een versleutelde wijze op een andere computer of server inloggen op afstand. Naast inloggen kunt u ook werken op de server of de computer waar u hebt ingelogd. 

De software van SSH is veilig en zorgt ervoor dat uw data via een veilige verbinding wordt verstuurd. Iemand anders kan niet zomaar uw wachtwoorden achterhalen doordat de verbinding veilig is. Simpel gezegd is SSH dus niets meer dan een netwerkprotocol waarmee u veilig gegevens kunt uitwisselen en kunt communiceren tussen andere computers en servers. 

Hoe gebruikt u SSH? 

Met SSH kunt u dus veilig communiceren van computer naar computer of van server naar server. Om hier gebruik van te maken moet u eerst SSH-client downloaden. Hiermee kunt u een SSH-key aanmaken. Uiteindelijk kunt u vervolgens communiceren met andere computers of servers. Uiteraard moet uw hosting partij dit wel ondersteunen. LinQhost helpt u graag met de installatie van SSH. Neem gerust contact op voor meer informatie. 

Tip 1; 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 u op afstand bij de database kan. Niet alleen is dit inefficient maar de data gaat ook nog eens onbeveiligd over uw 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 u denkt! Op uw lokale machine gebruik u 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? Nadat u bent ingelogd via SSH op d-example.host-ed.eu:22622 begint de SSH-client op 127.0.0.1:3307 te luisteren. Hierna kunt u op de lokale pc de MySQL server aanroepen via 127.0.0.1:3307. Deze tunnel blijft draaien zolang u blijft ingelogd op de server.

Tip 2; 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 wilt u dus niet gebruiken.

Uw huidige OpenSSH configuratie kunt u zelf makkelijk testen op SSH Check.com. De kans is groot dat deze check met wat aandachtspuntjes zal komen. We zullen u het uitzoekwerk besparen. Om alles “groen” te krijgen dien uw 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 applicaties hebben de laatste versie nodig om te werken met bovenstaande configuratie:

  • CyberDuck
  • MySQL Workbench

Tip 3; Minder bits is beter

Sinds jaar en dag wordt er voor het opzetten van een public-key beveiligde verbinding gebruikgemaakt 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 high performance web servers ook het ECDSA key type. Met ECDSA kunt u hetzelfde 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 uw SSH-client nieuw genoeg zijn dan kunt u een ECDSA key genereren met:

ssh-keygen -t ecdsa -b 521

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

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

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

Tip 4; 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 datalimiet. Naast een besparing van dataverkeer zullen bestandsoverdrachten vaak sneller verlopen.

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

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

Als u deze standaard wilt instellen voor alle verbindingen dan kunt u de optie Compression yes toevoegen in ~/.ssh/config.