SSH is een veel gebruikte manier om een systeem op afstand te beheren. M.a.w. een toegangspoort tot een computersysteem. Deze poort is handig om uw eigen systeem te beheren, maar ook aantrekkelijk voor personen die uw systeem willen misbruiken. Je kunt de reeds beveiligde SSH toegang tot uw systeem met een paar simpele tips en trucs nog beter beveiligen.
Je aanmelden met een wachtwoord is gemakkelijk. Je hebt enkel het wachtwoord nodig om vanaf om het even welke computer toegang tot uw systeem te krijgen. De keerzijde is echter dat men je wachtwoord kan proberen te achterhalen met brute-force aanvallen. Hoe sterker uw wachtwoord, hoe langer het duurt om uw wachtwoord via een brute-force aanval te achterhalen.
dany@pindabook:~> sudo zypper install pwgen
[sudo] wachtwoord voor root:
Gegevens van installatiebron laden...
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...
Het volgende NIEUWE pakket zal worden geïnstalleerd:
pwgen
1 nieuw te installeren pakket.
Totale downloadgrootte: 16,9 KiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 29,6 KiB worden
gebruikt.
Doorgaan? [j/n/...? alle opties tonen] (j):
pakket pwgen-2.07-7.1.x86_64 wordt opgehaald (1/1), 16,9 KiB ( 29,6 KiB uitgepakt)
Ophalen: pwgen-2.07-7.1.x86_64.rpm .....................................................................[gereed]
Controleren op conflicten tussen bestanden: ............................................................[gereed]
(1/1) Installeert: pwgen-2.07-7.1.x86_64 ...............................................................[gereed]
Om een reeks sterke wachtwoorden met 12 tekens te genereren, gebruik je de volgende opdracht:
dany@pindabook:~> pwgen 12
Fioghaih6eew iek6Quohxahb ahQuiesh8hi7 aidoNahsh0og joh4waChaipi Gah0vaech5Ae
ahH5athin0ie thu8chah3Am5 iechieTu5EiC ouR0eir4isou si3sai5OeG4o ooJo3wae1chi
Uc2soiC4uche yohPo3Oojoob reexeiY5aeku moom4iFeighu wi9sum6Oomoo Shooseix3beo
aTei7aepho0a rooghooBo3im Ahjoo3Yee5ae Ejei6IetahPh eipaech9IZ1i soo2Goe6iech
pheinae6Oonu oomaeV6Lahle quooHee0Shoh nohni5ou8Ahf ahsh7ahchohG Orei7iephual
xiNie3iesaiy oas6Afoikoh1 Eex5kan3Gae0 gah8xeuyuC2y hieV0rie5li7 raereet4Ui7o
dae2eesh7Aij Moo4eeghai2i xai9UJ8Yeequ uugaiS4Ahngi eeyeez9daiW7 yiJeish7ooZi
iceunei8ahYa ux5ooPh6raep airu8aiF2ooC hu2uw6eeLoo0 aiT6DeiGhahm jiev3uaTo6Ba
eiph9Aeghein Eiquewa6eih4 fie2Shai7ieV kai3Raejovei iuweegh3Ohng ahphunaiNg7l
OoH3aeghahd9 ig0ba3iRohdu eeyeigh5tooJ aish8aiGh6ou ohFeegier0ai yaezeejieNe3
ShaDeiS5thah Iech8iqueeze Ve3eilohbeuz IeR0tuYe7Sua yohnahj4Yuy7 ieQu1Iezee3e
Oshahchah9zu eihooph3aV0w ohlai6Tixei5 Ooku5eesh4ph eiPoqu9chaec vainah2Aez8d
ne3Aeshachai GeirieNu2doh sio9OoV8sho9 kooBem2thahP xaiQu8aex4ie Gei3Goo4reCe
ofi6oKaengee Loh7ChuGah8j eolaeQuie5oh eirahsoHa8au muphai0Baqui oop3Chee7aph
Peshio4Xe4xo Ieshaiv9Aibi Ahnge0uz4zae nei5oonieF0e Aic6tei0Uhaj Meej2aekaeth
ce3oo5iB0soh ohk8Wei5aech uvoo7qua9Esh iuD9Ohb6Tohb Vahp2Laiwaiv Uumaizea8UNg
OhXie2Yi2rah oogohv0ifoGe icheef7Phang Ish7phoh6ou7 ouW1aisoumae wep7ahguDee5
lo5vad7Eghoh Coosaechoh6a booG3eifiede wae9iephieVu ahB0Aiphaesh egiPaey6toh5
Ji1Ae9ietee1 muiZi9it9ail ahmohRo0xas5 aeGh3aeThohr Vie0upohthi9 Eeghai2eiyei
ooWoh0fiufe1 uQu3tahghaiv Sha9Egoophe4 efai1Tiz8Lah phahJ3aiDeil eewooy3Lohxe
dany@pindabook:~> sudo joe /etc/ssh/sshd_config
Public Key Authentification is veel robuster dan wachtwoord authentification. Public Key Authentificatie is bestand tegen brute-force aanvallen, maar is door het gebruik van RSA key pairs (sleutelparen) niet zo gebruiksvriendelijk. Je begint dus met het aanmaken van een publieke/private sleutelpaar. De private sleutel gaat naar het systeem waarvan je wilt aanmelden, de publieke sleutel kopieer je naar het systeem waarop je wilt aanmelden. Je kunt dus enkel aanmelden vanaf computers waarop uw private sleutel staat. Uw private sleutel is dus even belangrijk als uw huissleutel, iedereen die de private sleutel bezit, kan zich op uw systeem aanmelden.
RSA sleutelparen zijn ook handig bij het beheren van veel gebruikers. Wanneer een gebruiker vertrekt, verwijder je de gebruikers publieke sleutel van de server waardoor deze gebruiker zich niet meer kan aanmelden.
Met de volgende opdracht creëer je een nieuw sleutelpaar met een 3072 bit sterkte, wat sterker is dan de standaard 2048:
dany@main:~> ssh-keygen -t rsa -b 3072
Generating public/private rsa key pair.
Enter file in which to save the key (/home/dany/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/dany/.ssh/id_rsa.
Your public key has been saved in /home/dany/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:+WVj5Y598ui2QmvcnqbrXZAo5piR8BB1x2vpITCi/SE dany@main
The key's randomart image is:
+---[RSA 3072]----+
| ... ... |
| ..o. .. |
| oo. o o. |
| . E+.o. =+ . |
| oS.o+*.+ |
| .B =o= . |
| o oo.o+ o|
| =.+B |
| o+OB..|
+----[SHA256]-----+
Deze opdracht creëert in de map /home/dany/.ssh/ twee nieuwe sleutels, id_rsa en id_rsa.pub.
id_rsa is uw private sleutel - hou die voor jezelf!
Kopieer met de opdracht ssh-copy-id
uw publieke sleutel versleuteld naar de server waarop je je wilt aanmelden.
Daarvoor moet de server al een werkende SSH verbinding kunnen opbouwen:
dany@main:~> ssh-copy-id -i ~/.ssh/id_rsa.pub dany@pindabook.local
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/dany/.ssh/id_rsa.pub"
The authenticity of host 'pindabook.local (192.168.1.6)' can't be established.
ECDSA key fingerprint is SHA256:unpcDR96wzAEaKLFH26YPfY0UUacZOHdfthntVWhFmU.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'dany@pindabook.local'"
and check to make sure that only the key(s) you wanted were added.
ssh-copy-id
controleert daarbij de sleutel, zodat je niet per ongeluk uw private sleutel kopieert.
Test uw nieuwe sleutel door de opdracht in de uitvoer van de ssh-copy-id
opdracht uit te voeren:
dany@main:~>ssh 'dany@pindabook.local'
Last failed login: Sat Sep 23 12:56:53 CEST 2017 from 192.168.1.4 on ssh:notty There was 1 failed login attempt since the last successful login. Last login: Sat Sep 23 12:33:20 2017 from 192.168.1.4 Have a lot of fun... dany@pindabook:~>exit
uitgelogd Connection to pindabook.local closed. dany@main:~>
Je zou nu met de nieuwe sleutel moeten kunnen aanmelden. Mocht je een sleutel gebruiken met een wachtzin (passphrase) dan moet je deze ingeven.
Als je het aanmelden met uw sleutelpaar lukt, kan je het aanmelden met wachtwoorden uitschakelen. De server is dan niet meer vatbaar voor brute-force aanvallen. Pas daarvoor de SSH server configuratie aan door de eigenschap PasswordAuthentication op no te zetten:
dany@main:~>ssh 'dany@pindabook.local'
Last login: Sat Sep 23 15:06:06 2017 from 192.168.1.4 Have a lot of fun... dany@pindabook:~>sudo joe /etc/ssh/sshd_config
[sudo] wachtwoord voor root:
Daarna herstart je de SSH server met de opdracht:
dany@pindabook:~>sudo systemctl restart sshd.service
dany@pindabook:~>exit
uitgelogd Connection to pindabook.local closed. dany@main:~>
Aliassen gebruik je om moeilijk te onthouden opdrachten (of namen) een kortere en vooral gemakkelijk te onthouden naam te geven.
In plaats van aan te melden met de opdracht ssh -l dany -p 22 pindabook.local
gebruik je de opdracht ssh pindabook
.
Daarvoor pas je het ~/.ssh/config configuratiebestand aan met de opdracht:
dany@main:~> joe ~/.ssh/config
En voeg je de volgende inhoud toe:
Host pindabook HostName pindabook.local Port 22 User dany
Sla deze nieuwe configuratie op en test deze met de opdracht:
dany@main:~>ssh pindabook
Last login: Sat Sep 23 15:38:06 2017 from 192.168.1.4 Have a lot of fun... dany@pindabook:~>exit
uitgelogd Connection to pindabook.local closed. dany@main:~>
Mocht je ooit een melding krijgen waarin ssh:notty voorkomt, dan is deze afkomstig van een aanmelding via een FISH (SFTP) client waarmee je bestanden uitwisselt. Een voorbeeld:
Last failed login: Sat Sep 23 12:56:53 CEST 2017 from 192.168.1.4 on ssh:notty
Je hebt dus geen aanval te verwerken als je op het vermelde ogenblik bezig was bestanden uit te wisselen vanaf een computer op hetzelfde netwerk (192.168.1.4). notty staat voor no tty (geen tekstomgeving of TeleTypeWriter).
In thuisnetwerken wordt meestal gebruik gemaakt van een DHCP server om IP adressen aan de apparaten uit te delen. Apparaten krijgen zo geen vast IP adres, maar regelmatig een ander IP adres. Als je in een SSH verbinding opbouwt met een apparaat dat een ander IP adres kreeg dan bij een vorige SSH verbinding, krijg je een waarschuwing:
dany@main:~>ssh 'dany@pindabook.local'
Warning: the ECDSA host key for 'pindabook.local' differs from the key for the IP address '192.168.1.6' Offending key for IP in /home/dany/.ssh/known_hosts:6 Matching host key in /home/dany/.ssh/known_hosts:2 Are you sure you want to continue connecting (yes/no)? yes Last login: Sat Sep 23 15:53:13 2017 from 192.168.1.4 Have a lot of fun... dany@pindabook:~>exit
uitgelogd Connection to pindabook.local closed. dany@main:~>
Deze waarschuwing is een veiligheidsmaatregel om DNS spoofing aanvallen op te merken. Deze waarschuwingen kan je negeren door in uw ~/.ssh/config configuratiebestand de volgende regels toe te voegen:
Host pindabook.local Hostname pindabook.local CheckHostIP no
De aanmelding verloopt nu als volgt:
dany@main:~> ssh 'dany@pindabook.local' Last login: Sat Sep 23 15:54:56 2017 from 192.168.1.4 Have a lot of fun... dany@pindabook:~> exit uitgelogd Connection to pindabook.local closed. dany@main:~>
De OpenSSH handleidingen zijn uitgebreid en gedetailleerd, maar eenmaal je de basis kent, zijn de handleidingen nuttig en bevatten ze veel te ontdekken extra's.