• Partagez cet article avec vos amis !

Créer un serveur avec Ubuntu: Sécuriser son accès SSH

Voilà une petite surprise :grin: !! Après un certain succès des mes tutos sur l’installation d’un serveur Ubuntu, Velvetshadow m’a envoyer un tuto sur la sécurisation d’un accès SSH. Même si le protocole est très sécurisé en lui-même, une petite touche de protection en plus n’est pas de trop.

Voici donc le tuto de Velvetshadow et le lien vers son blog: http://blog.velvetshadow.fr/ (Je l’ai lu et avec un humour décalé mais tellement véridique, je me suis bien fendu la gueule :lol:)

tux-install-serveur11

Nous  allons voir comment en limiter l’accès pour plus de sécurité, et ensuite comment configurer Iptables pour restreindre les connexions entrantes à certains ports.

Le fichier de configuration SSH-Server se trouve dans:

[/etc/ssh/] et se nomme:

[sshd_config] : C’est ce fichier la que nous allons modifier en premier lieu.

Tout d’abord, afin d’éviter les attaque en Bruteforce (un robot test une par une toutes les combinaisons possible de mot de passe) visant l’accès SSH et donc en général le port par défaut : [22] nous allons définir un autre port d’écoute pour notre serveur:

sudo nano /etc/ssh/sshd_config

On ouvre le fichier de configuration avec Nano
Qui nous ouvre cette fenêtre :

config-ssh

On indique le nouveau port, disons 2424. Mais concrètement, cela nous protège que de la majorité des robots type Bruteforce. Toutefois si quelqu’un de mal intentionné cherche vraiment à vous nuire, il peut très facilement savoir que vous utilisez le port 2424 pour vos connections SSH. Il s’agit donc de renforcer la sécurité.

1) Interdire la connexion « root » :
Toujours dans ce fichier, il faut trouver la ligne [PermitRootLogin], et mettre [no] à la place de [yes]. Il est bien plus sur de se connecter en tant qu’utilisateur, et de devoir faire [su] avant une commande qui requiert les  permissions root.

2) N’autoriser que certains utilisateurs :
Il suffit d’ajouter une ligne [AllowUsers], suivi des noms d’utilisateurs autorisés séparés par des espaces. Ici, [AllowUsers MonsieurDupont] pour n’autoriser la connexion que pour l’utilisateur MoniseurDupont.

Voila déjà une bonne protection, facile à mettre en place. Tournons nous maintenant du côté d’iptables :

Iptable (seul) n’est rien d’autre qu’un parefeu. Le table que nous allons utiliser est « filter ». Elle contient les chaines [INPUT] (trafic entrant), [FORWARD] (le trafic routé au travers de la machine), et [OUTPUT] (trafic sortant)

Pour chacune de ces chaines, nous pouvons spécifier un port, un protocole, et une action (cible) à effectuer :

[ACCEPT]:  Accepte (!) le(s) paquet(s)
[DROP]: Rejette le(s) paquet(s)
[QUEUE]: Mets les paquets en attente pour les programmes et applications.

Avec ces connaissances, nous allons réaliser un script qui initialisera nos règles pour iptables de manière propre à chaque démarrage. Je détaillerais ce script à l’intérieur de celui-ci, via les commentaires désigné par un « # » . Créer le fichier avec un:

sudo nano /etc/init.d/omgitshot

Et remplissez-le avec ce qui se trouve dans la tableau ci-dessous.

# !/bin/sh

# Nettoyage complet des anciennes règles :

# -F efface toutes les règles

# -X seul, efface la table de toutes les chaines prédéfinies

# -Z remet à zero le compteur de paquet et d’octet dans toutes les chaines

# -t xxx : indique la table sur laquelle agir
# La table filter contient les chaines INPUT OUTPUT et FORWARD

iptables -t filter -F

iptables -t filter -X

iptables -Z

# Maintenant nous allons bloquer absolument tout le trafic entrant

iptables -t filter -P INPUT DROP

# Pour éviter de se faire ennuyer, on ne répondra pas aux pings en mettant DROP sur l’ICMP

# -A ajoute la règle en fin de chaine

# -p défini le protocole (ici donc, ICMP)

# -j défini la règle à appliquer (ici DROP)

iptables -t filter -A INPUT -p icmp -j DROP

# Bien, maintenant ouvrons laissons notre port SSH ouvert
iptables -t filter -A INPUT -p tcp –dport 2424 -j ACCEPT

iptables -t filter -A OUTPUT -p tcp –dport 2424 -j ACCEPT

# Je planifie d’en faire un serveur de fichier, donc je vais laisser ouvert les ports FTP

iptable -t filter OUTPUT -p tcp –dport 20:21 -j ACCEPT

iptables -t filter INPUT -p tcp –dport 20:21 -j ACCEPT

Voila notre configuration presque terminée ! Nous allons rendre ce fichier exécutable :

sudo chmod +x /etc/init.d/omgitshot

On l’ajoute aux scripts qui se lancent au démarrage :

sudo update-rc.d omgitshot defaults

On redémarre. Et nos nouvelles règles sont en place ! Pour vérifier, faites un:

sudo iptables -L

Remarque de Théo:

Merci à toi Velvetshadow, ton tuto est très bien fait. A part quelques notions et mise en pages, c’est le texte pur que tu m’a donné.
Alors qu’en pensez-vous de ce premier tuto ?

Articles Relatifs

  1. Créer son serveur avec Ubuntu: Création d’un accès SSH
  2. Créer son serveur avec Ubuntu: Préparation et explication
  3. Créer un serveur avec Ubuntu: Création d’un serveur SFTP
  4. Réparer la vidéo de Skype avec Ubuntu 8.10
  5. Accélérer Ubuntu

28 Commentaires

  • Hey :) Merci pour la publication :smile:
    Si je dois faire quelques autres tutos simples pour mes études ou sur mon temps libres, je te les enverrais ;)

  • Ah bah ce sera avec plaisir :) )

  • Excellent tuto :)
    Et pour renforcer un peu plus si l’on est parano, il suffit de rajouter une dose de « port knocking » en spécifiant des ports en TCP ou TDP et ça fait l’affaire ;)

    Salutations amicales

  • Merci à toi, c’est sympa… c’est ce genre de commentaire qui donne envie de continuer.

  • :cool: Pour se protéger des brutforce, on peut aussi ajouter fail2ban pour bannir les personnes qui font plusieurs tentatives qui échouent.

  • Intéressant, je vais voir ça. Merci ;)

  • Très bon tuto
    mais il y a une petit erreur c’est « sudo update-rc.d omgitshot defaults » qu’il faut mettre et non « sudo update.rc.d omgitshot defaults ».

  • Merci, je rectifie ! :smile:

  • Au fait, pour ceux qui passent par ici, je viens d’apprendre après des mois de surfs qu’on peut lancer le serveur SSH sur deux ports différents.

    Je m’explique :
    Sur mon dédié, j’ai autorisé cache.ovh.net afin qu’il se connecte sur le port 22 de ma machine et il n’y a que cache.ovh.net qui peut se connecter sur ce port et toutes les autres IP ne le sont pas.

    Puis dans la config du serveur SSH j’ai mit Port 2425 par exemple afin de me connecter dessus avec mon IP fixe.

    Ce qui me fait deux accès sur un même serveur pour uniquement 2 IP et dropant toutes les autres.

    J’espère que vous arriverez à comprendre un peu mon charabia :)
    Salutations amicales

  • Merci pour l’astuce, ça devrait aider :)

  • Ah oui merci Jinfoa ^^ et bonne astuce ButterflyOfFire :)

    Fail2ban est une bonne sécurité supplémentaire Grigric, donc +1 :smile:

  • Je viens de découvrir ce site.Il est intéressant et complet, je repasserai avec plaisir :) Je voulais juste signaler pour les lignes sur le parefeu :iptables -t filter -A INPUT -p tcp –dport 2424 -j ACCEPTAccepte les paquets qui rentrent sur le port 2424.iptables -t filter -A OUTPUT -p tcp –dport 2424 -j ACCEPTAccepte les paquets qui sortent à destination du port 2424.Je pense qu’il faudrait remplacer le dport en sport sur la dernière ligne pour autoriser les paquets à sortir à partir du port 2424.Bonne continuation !

  • super tes petits tutos !!!!

  • J’ai un petit soucis avec mon serveur !!!!Je ne peux plus me connecter dessus via mon navigateur quelqu’un a une idée.

  • Tu rentres la bonne IP ?
    Tu as fais quoi depuis, entre le moment où ça marchait et là ?

  • Et bien une panne de courant !Par contre en local je peux me connecter mais plus d’accès internet sur mon serveur.

  • Panne de courant…je pense à la box qui à été réinitialisée. Remet l’IP du serveur dans ta box.

  • Déjà fait ! en plus ma box est sur un onduleur.Bon je suis passé par une reinstall sous unbuntu server 10.04, par contre il faut que je remette mes fichiers sur mon serveur. Avec un un chmod -r 777  ça ira.

  • Faut que je le fasse aussi… quand j’aurais le courage et le temps :)

  • et franchement le seul truc qui manque sur le site c’est un petit forum !!!!!!!!!!!

  • bon j’ai trouvé mon soucis: c’est à partir du moment que je fais la manip sur iptable après le redémarrage je ne peux plus connecter à mon serveur

  • Ouais, c’est vrai un forum serait bien. J’y pense t’inquiètes pas. Avec Iptables, tu as dû peut-être te mettre dans les IP « bannies ». Malheureusement, je connais très mal Iptables.

  • Donne le résultat de « iptables -L -vn » et on verra ce qu’on peut faire…

  • bon j’ai trouvé (en partie) j’ai modifié iptables en ignorant la ligne qui bloque tout le trafic; Pas top !!!Voilà ce que tu m’as demandé Guizmo:
    Chain INPUT (policy ACCEPT 141 packets, 12310 bytes) pkts bytes target     prot opt in     out     source               destination             0     0 DROP       icmp –  *      *       0.0.0.0/0            0.0.0.0/0           Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination         Chain OUTPUT (policy ACCEPT 92 packets, 10375 bytes) pkts bytes target     prot opt in     out     source               destination        

  • C’est super chiant à lire mais si je vois bien, tu laisses tout passer sauf les paquets icmp en entrée.Si c’est pour faire un firewall comme ça, tu peux le désactiver…Les policy sont à accept, donc tous les paquets qui ne matchent aucune ligne seront acceptés par défaut.Ce n’est pas la bonne politique de filtrage car tu ne peux pas penser à tous les paquets qu’il faudrait bloquer.Pour faire un truc propre, il faut mettre les policy à drop :
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP
    Et ensuite accepter uniquement les paquets dont on a besoin.Pour cela tu peux voir le mien : static.guillaumeg.eu/rat/opt/firewall/firewall-6.5 ou en trouver plein d’autre sur le web. Bon courage pour ton firewall, c’est une partie importante du serveur !

  • Je sais bien que mon firewall ne sert pas à grand chose puisque justement la ligne iptables -P input DROP j’ai du la commenter pour pouvoir accès à mon serveur.En fait j’ai fait comme dit dans le tuto j’ai fait un copier coller de la config et c’est que ça coince !!!!

  • Peut-être as-tu oublié les lignes autorisant le SSH ?
    Je ne les vois pas dans ta config.
    iptables -t filter -A INPUT -p tcp –dport 2424 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp –dport 2424 -j ACCEPT

  • encore moi !!!!!je viens de trouver ça en fouinant sur la toile: http://www.canonne.net/linux/iptables/index.php Si ça peut aider…………..

Laisser un commentaire

Suivre Geek-Lab sur Facebook


Me suivre sur Twitter