mardi 3 mars 2009

Configurer correctement le SSH

Le ssh étant le seul moyen d'accès complet au serveur dédié (normalement...), il est important de le configurer correctement et de la manière la plus sécurisée possible.

La majeur partie des options se modifient dans le fichier /etc/ssh/sshd_config

ListenAddress 192.168.0.1
On doit indiquer ici une seule adresse où ssh écoute (le plus souvent sur eth0)

PermitRootLogin no
Il ne faut pas autoriser le root à se logguer directement, cela favoriserait encore plus les attaques par bruteforce. Avant d'interdire le root, assurez vous que vous avez un autre utilisateur qui pourra executer la commande su.

Port 666 (ou eventuellement ListenAddress 192.168.0.1:666)
Il est preferable de changer le port par defaut. Cela compliquera un peu la vie à ceux qui veulent rentrer dans votre machine.

PermitEmptyPasswords no
Les mots de passe vides sont un affront au système de sécurité.

AllowUsers alex@host.com jeff
Autorise alex seulement depuis tel domaine et jeff depuis partout. Evite que tous vos utilisateurs FTP aient un accès SSH par exemple. Nous verrons plus bas que cette fonction est également possible avec l'utilisation de l'authentification PAM.

AllowGroups wheel admin
Comme pour les utilisateurs, on peut autoriser seulement certains groupes.

Il existe aussi leurs pendants DenyUsers et DenyGroups.

PasswordAuthentication yes

Il vous appartient complètement de décider ce que vous voulez faire. Il est plus sûr d’autoriser l’accès à la machine uniquement aux utilisateurs avec des clés ssh placées dans le fichier ~/.ssh/authorized_keys. Si c’est ce que vous voulez, positionnez cette option à “no”.

Désactiver toute forme d’autorisation dont vous n’avez pas réellement besoin si vous n’utilisez pas, par exemple, RhostsRSAAuthentication, HostbasedAuthentication, KerberosAuthentication ou RhostsAuthentication, vous devriez les désactiver même s’ils le sont déjà par défaut.

Protocol 2
Désactiver le protocole version 1, car il a des défauts de conception qui facilite le crack.

Passer cette étape nous pouvons nous occuper de l'authentification PAM. Pam permet permet des authentification plus restrictives.

Nous allons commencer par créer le fichier /etc/.sshusers-allowed
touch /etc/.sshusers-allowed

Nous allons mettre dedans tous les utilisateurs autorisés à se connecter, séparés par des sauts de ligne. On voit ici la double-utilisation avec le parametre AllowUsers de sshd_config.

Ensuite à la fin du fichier /etc/pam.d/sshd nous allons ajouter ces 2 lignes
auth required pam_listfile.so onerr=fail item=user sense=allow file=/etc/.sshusers-allowed
password required pam_cracklib.so retry=3 minlen=6 difok=3

La premiere ligne fait que le serveur SSH exigera que l'utilisateur soint indiqué dans /etc/.sshusers-allowed pour pouvoir se connecter.

La seconde ligne fait que l'utilisateur ne pourra tenter plus de 3 mots de passes differents en cas d'erreur, et que les mots de passe devront faire au minimum 6 caracteres. Pour que cette methode soit efficace il sera bon de la coupler à fail2ban.

Si vous n'avez pas beaucoup d'utilisateurs ssh distants, ce qui normalement doit etre le cas, vous pouvez augmenter la securité en realisant un script d'authentification qui fera plusieurs choses:

1.-Ouvrir le firewall (iptables) seulement pour ces ip. Exemple si l'ip 192.168.1.250 est autorisée à se connecter.

iptables -A INPUT -p tcp -s 192.168.1.250 --dport 666 -i eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -d 192.168.1.250 --sport 666 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Ne pas utiliser ces commandes si vous ne connaissez pas iptables et son utilisation!

2-Autoriser seulement ces ip dans le tcpwrapper.

Dans /hosts.deny indiquer quelque chose qui ressemblerai à ceci
sshd : ALL EXCEPT 111.111.111.111, 222.222.222.222 : SPAWN echo "test %c" >> /var/log/test.txt &

Si l'ip n'est pas 111.111.111.111 ou 222.222.222.222 l'adresse ip sera logguée dans /var/log/test.txt. On peut imaginer à la place de echo "test %c" >> /var/log/test.txt & l'appel à un script iptables qui blacklisterait les indesirables (l'ip étant %c)

3.Autoriser seulement toto@111.111.111.111 dans AllowUsers de sshd_config

Avec fail2ban et portsentry le SSH devrait être suffisamment sécurisé pour décourager les petits malins si vous n'êtes pas la CIA ;) Pensez à faire le script qui fera l'inverse, cad qui dés-authentifiera un utilisateur pour une ip donnée.

Enfin, pour logguer tout ce qui se passe au niveau des logins, vous pouvez modifier dans le fichier fichier /etc/login.defs ces 2 lignes:
FAILLOG_ENAB=YES //loggue les erreurs
LOG_OK_LOGIN=YES //loggue les logins ok

et n'hesitez pas à utiliser la commande makepasswd pour generer vos mots de passe.

Aucun commentaire:

Enregistrer un commentaire