27
Sep

Beveiligde SSH-verbinding

 

De eenvoudigste manier om een CentOS-server te beheren als administrator is via het ssh-protocol. Zelfs vanaf een Android-smartphone en een simpel 3G-abonnement kan eenvoudig en snel ingegrepen worden indien nodig.

SSH is licht en snel. Maar wanneer we vanaf eender welk netwerk connectie gaan maken met onze server, dan doen we dat best op een veilige manier.

Opvolgen:


Om te beginnen creëren we een sleutelpaar (combinatie private/publieke sleutel). Ik doe dit op mijn laptop (Fedora 12) en kies voor de rsa-versleutelingsmethode :

[jonas@jonas ~]$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/jonas/.ssh/id_rsa):

Enter passphrase (empty for no passphrase): ik-beveilig-mijn-sleutel

Enter same passphrase again:ik-beveilig-mijn-sleutel

Your identification has been saved in /home/jonas/.ssh/id_rsa.

Your public key has been saved in /home/jonas/.ssh/id_rsa.pub.

 

Dit resulteert in 2 bestanden in de verborgen .ssh-map van mijn home-directory :

[jonas@jonas .ssh]$ ls -l

-rw------- 1 jonas jonas 1743 2009-08-17 21:26 id_rsa <-- private sleutel !

-rw-r--r-- 1 jonas jonas 405 2009-08-17 21:26 id_rsa.pub

 

Op de server maken we een normale gebruiker aan met minimale rechten :

-bash-3.2# useradd jonas
-bash-3.2# passwd jonas
Changing password for user jonas.
New UNIX password: mijnpaswoord
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
-bash-3.2# grep jonas /etc/passwd
jonas:x:500:500::/home/jonas:/bin/bash

 

Standaard heeft een nieuwe gebruiker de bash-shell. Een shell is nodig voor ssh. De standaardwaarden van een nieuwe account zijn opgeslagen in /etc/default/useradd of op te vragen via useradd -D :

-bash-3.2# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

 

De publieke sleutel van het sleutelpaar gaan we installeren op de server(s) die we willen beheren. Ik gebruik secure copy (scp) om de sleutel over te pompen :

[jonas@jonas .ssh]$ scp id_rsa.pub jonas@mijn.server.ip:/home/jonas/
jonas@xx.xx.xx.xx's password:
id_rsa.pub                  100%  405     0.4KB/s   00:00

 

Op de server creëren we de juiste directories en het bestand authorized_keys2 om de tekstuele presentatie van de sleutel in op te slaan :

[jonas@server ~]$ mkdir .ssh
[jonas@server ~]$ chmod 700 .ssh/
[jonas@server ~]$ cd .ssh/
[jonas@server .ssh]$ touch authorized_keys2
[jonas@server .ssh]$ chmod 600 authorized_keys2
[jonas@server .ssh]$ cat ../id_rsa.pub >> authorized_keys2
[jonas@server .ssh]$ rm ../id_rsa.pub

 

Tenslotte maken we instellingen voor het SSH-proces in /etc/ssh/sshd_config om SSH-connecties met de server te beperken tot een absoluut veilige manier.

1. het is "good practise" om de standaard poort 22 te veranderen (port scanning !) :

Port 55111

2. Beperk SSH-communicatie tot versie 2

Protocol 2

3. Beperk de gebruikerslijst

AllowUsers jonas

4. Verbied root toegang via SSH

PermitRootLogin no

5. Laat enkel authenticatie via de RSA-sleutel toe

PubkeyAuthentication yes
RhostsRSAAuthentication no
HostbasedAuthentication no
IgnoreRhosts yes
PermitEmptyPasswords no
PasswordAuthentication no
ChallengeResponseAuthentication no
GSSAPIAuthentication no

 

Wanneer we nu een SSH-verbinding willen maken met onze server, moeten we de juiste private sleutel meegeven via de -i optie van het ssh commando :

[Jonas@jonas ~]$ ssh -2 -p 55111 -l jonas -i /home/jonas/.ssh/id_rsa mijn.server.ip


Het is belangrijk dat de private sleutel in de juiste handen blijft. Mocht echter deze private sleutel gebruikt worden door onbevoegden, dan nog moet men bij de connectie de passphrase opgeven waarmee de private sleutel beveiligd is.

 


free b2evolution skin