Accueil > Logiciel, Réseau, Sécurité > Knockd : Sécuriser vos connexions

Knockd : Sécuriser vos connexions

07/11/2013 Categories: Logiciel, Réseau, Sécurité Tags: , , , , ,
source: http://www.debianworld.org/securite.knockd

Knockd est un petit daemon qui autorise ou non une connexion à votre serveur. Pour cela il écoute les ports de votre machine et attend une séquence bien précise de connexions sur les ports que vous avez définis. Si la séquence définie est exécuté dans le bon ordre, le daemon va ouvrir le port et permettre une connexion pour un temps déterminé sur le port ssh par exemple. La séquence peut utiliser des connexions TCP ou UDP ou les deux.

Ainsi, d’un point de vue extérieur le serveur n’a aucun port d’ouverts exception faite pour les clients qui ont la séquence « magique ».

Notre exemple va dévoiler comment configurer knockd pour établir une connexion ssh.
Notre environnement se compose de bureaux avec des serveurs dans un datacenter. La configuration du firewall dans le datacenter est faite en sorte pour que l’on ne puisse accéder aux serveurs que depuis les adresses ip du bureau. Nous nous retrouvons donc avec un problème si nous voulons nous connecter aux serveurs du datacenter depuis chez vous par exemple. De quelles solutions disposons-nous ? :

  • Demander à quelqu’un de désactiver le firewall (très mauvaise idée) ou ajouter mon adresse ip actuelle dans les filtres du firewall (mieux mais si personne ne sait comment faire on est de retour à la case départ)
  • Se connecter au réseau du bureau puis ensuite sur le serveur du datacenter. Encore une fois nous avons les mêmes problèmes concernant le firewall

Dans cette situation précise, knockd va nous être très utile.
Pour avoir une meilleure vision de notre environnement, voici le schéma de notre réseau :
knock-knock

Passons à l’installation de knockd. Dans notre exemple, nous procédons à son installation sur le serveur PostgreSQL.
L’installation comme d’habitude se fait relativement facilement :

# apt-get install knockd

Maintenant, passons à la configuration du fichier /etc/knockd.conf :

[openSSH]
sequence    = 6666,7532,9123
seq_timeout = 5
command     = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags    = syn

[closeSSH]
sequence    = 9123,7532,6666
seq_timeout = 5
command     = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags    = syn

Pour envoyer la bonne combinaison, nous utiliserons le logiciel client knock ainsi :

$ knock -v 91.207.12.87 6666 7532 9123

Vous pourriez également utiliser telnet, netcat, hping, etc …
Cette commande nous permet de créer une règle iptables avec notre adresse ip actuelle afin de nous ouvrir un accès vers notre serveur si la bonne séquence a été acceptée par knockd :

$ iptables -L -n
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     tcp  --  81.132.12.38        0.0.0.0/0           tcp dpt:22
ACCEPT     tcp  --  192.25.206.10        0.0.0.0/0           tcp dpt:22
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22

Comme nous le voilons ici, une règle a été ajoutée a la configuration du serveur où knockd est installé.
Maintenant, nous pouvons facilement nous connecter via ssh depuis notre domicile avec l’adresse ip 81.132.12.38.
Une fois mon intervention sur le serveur terminée, je vais envoyer une nouvelle séquence afin de retirer la règle ajoutée au filtrage d’iptables :

$ knock -v  91.207.12.87 9123 7532 6666

Simple et efficace 😉

Poussons un peu la configuration de notre knockd. Tout fonctionne correctement mais nous pouvons aller un peu plus loin en définissant un temps maximum pour lancer la connexion ssh. Modifions notre configuration :

/etc/knockd.conf:
[opencloseSSH]
sequence = 6666,8213,12312,9432
seq_timeout = 5
tcpflags = syn
start_command = /usr/sbin/iptables -I INPUT -s %IP% -p tcp –syn –dport 22 -j ACCEPT
cmd_timeout = 25
stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp –syn –dport 22 -j ACCEPT

Comme vous l’avez remarqué, nous avons modifié différentes choses :

  • le nombre de ports pour la séquence est maintenant de 4 ports. Vous pouvez définir autant de ports que vous voulez et mixer également avec les ports udp et tcp (6666,8213:udp,12312:tcp,9432:udp) si vous êtes vraiment très parano ;
  • nous avons défini un temps maximum de 25 secondes (option cmd_timeout=25) pour nous connecter. Au bout de 25 secondes, la règle est supprimée et vous devez relancer la séquence pour vous connecter.

Knockd est un outil assez simple à utiliser et permet de sécuriser un peu plus notre serveur. Dans notre exemple, nous l’avons configuré pour ssh mais vous pouvez le configurer pour postgreSQL, mySQL ou tout autre service.

Print Friendly, PDF & Email

Related Post

Les commentaires sont fermés.