Bloquer des tentatives d'intrusions SSH automatiquement

Le problème dans tout ça c’est qu’il y a bien plus de chance de se faire hacker à cause d’un trou de sécurité dans une appli web, ou via une mauvaise configuration du serveur web, que par un bruteforce de ssh/ftp/etc… :stuck_out_tongue:

Ah, d’accord. Ta phrase “Un script qui m’ouvre la porte et la referme sitôt besoin assouvi” m’avait au contraire laissé penser à une ouverture et fermeture à distance à la demande, par un quelconque moyen (port knocking, mail, SMS, interface web…) plus ou moins bien sécurisé.

En effet, ma phrase était pour le moins évasive.
Je me répète mais étant donné les rares fois où je ne suis pas à la maison et où j’éprouverais le besoin d’aller sur mon serveur en SSH, je n’ai pas cherché plus loin la possibilité de ce que tu cites : ouverture à distance.
Fermeture, bien sûr, je le pourrais mais dans l’état, je serais incapable de rouvrir la “porte”.
Si tu as une idée (sûre) , juste pour ma curiosité, j’aimerais bien la connaitre.

[quote=“ricardo”]En effet, ma phrase était pour le moins évasive.
Je me répète mais étant donné les rares fois où je ne suis pas à la maison et où j’éprouverais le besoin d’aller sur mon serveur en SSH, je n’ai pas cherché plus loin la possibilité de ce que tu cites : ouverture à distance.
Fermeture, bien sûr, je le pourrais mais dans l’état, je serais incapable de rouvrir la “porte”.
Si tu as une idée (sûre) , juste pour ma curiosité, j’aimerais bien la connaitre.[/quote]

Avec du port knocking bien entendu, c’est pour ça que j’effectuais une digression sur knockd entre autre.

Mais pour ouvrir le port à distance, il faut une connexion SSH valide ?

Non une simple séquence de port ou l’on fais toc-toc (une combianison assez simple du type "ports en udp et 3 ports en tcp) et ton port SSH s’ouvrira alors ^^

C’est justement l’avantage du port knocking de pouvoir fermer et ouvrir des ports ou lancer des scripts au besoin par application d’une simple séquence.

Le fais de faire du port-knocking n’imose pas de réponse de la part du serveur.

Va falloir que j’étudie ça de façon plus approfondie car c’est opaque pour moi.
Je ne comprends pas comment faire “toc-toc” à mon serveur étant en dehors du LAN et sans possibilité de connexion SSH et surtout de façon sécurisée ?
Si tu as un bon tuto, je suis preneur.

Salut,

[quote=“ricardo”][quote=“lol”]…
Par contre sur Postfix, sasl et le ftp c’est la grande orgie des tentatives… :laughing:[/quote]
Sftp avec les précautions citées dans le précédent message, plus aucune tentative car systématiquement vouées à l’échec.[/quote]

FTP est inévitable. Je travaille avec des dizaines de personnes qui ont besoin d’un accès ftp.
J’ai bien essayé de déplacer le ftp sur un autre port que le 21, j’ai laissé tombé, les gens sont imperméables au changement.
J’arrive seulement à imposer le ssl explicite (et c’est déjà pas toujours de la tarte).

Le but n’est pas de s’enfermer, il faut qu’un serveur public soit accessible quand même… :laughing:

[quote=“agentsteel”]Le problème dans tout ça c’est qu’il y a bien plus de chance de se faire hacker à cause d’un trou de sécurité dans une appli web, ou via une mauvaise configuration du serveur web, que par un bruteforce de ssh/ftp/etc… :stuck_out_tongue:[/quote]+1

Je suis maintenant bien plus attentif à la santé de mes application Web qu’aux tentatives d’intrusions. Les failles y sont bien plus nombreuses… Quand tu vois le nombre de sites infectés sur le net…

[quote=“ricardo”]Va falloir que j’étudie ça de façon plus approfondie car c’est opaque pour moi.
Je ne comprends pas comment faire “toc-toc” à mon serveur étant en dehors du LAN et sans possibilité de connexion SSH et surtout de façon sécurisée ?
Si tu as un bon tuto, je suis preneur.[/quote]

Par exemple pour une première approche :
http://www.debianworld.org/securite.knockd

Après si ce n’est que pour gérer l’ouverture/fermeture du port SSH c’est assez simple, mais pour automatisé plus de choses il te faut un script derrière que tu appellera avec la ‘commande’ dans la configuration du démon knockd.

[quote=“ricardo”]Va falloir que j’étudie ça de façon plus approfondie car c’est opaque pour moi.
Je ne comprends pas comment faire “toc-toc” à mon serveur étant en dehors du LAN et sans possibilité de connexion SSH et surtout de façon sécurisée ?
Si tu as un bon tuto, je suis preneur.[/quote]
C’est assez simple.

Tu mets en place un serveur qui écoute sur n’importe quel port UDP.
Comme c’est de l’UDP, il n’y a pas besoin d’être connecté pour envoyer des données sur le serveur. Tu peux envoyer ce que tu veux dessus sans jamais recevoir de réponse. Et donc un pirate ne saura jamais ce qu’il peut attendre de ce port.

Ensuite tu configures ton serveur pour qu’il regarde constamment ce qui entre sur le port donné, et si jamais il reçoit un paquet (un datagramme pour être précis car les paquets n’existent qu’en mode connecté, ce qu’UDP n’est pas) contenant par exemple “c’est moi Ricardo, Sésame ouvre toi ou jte fracasse la tête”, alors hop il ouvre le port SSH. Et le temps qu’il ne reçoit pas ce message précis il fait le mort.

Après on peut pousser le vice un peu plus loin en mettant en place un système de chiffrement pour éviter d’envoyer systématiquement le même datagramme, comme ça si quelqu’un espionne le réseau il ne pourra pas connaître le message à envoyer. La notion de changement systématique est obligatoire car s’il suffit d’envoyer un message chiffré qui est tout le temps le même, alors il est très simple pour le pirate d’envoyer le même message, aussi chiffré soit-il. Mais là c’est déjà plus complexe à concevoir car il faut trouver un moyen d’être en phase entre ce qu’attend le serveur et ce que tu vas lui fournir. Autrement dit il faut avoir un algorithme qui te permet de savoir ce qu’attend le serveur.

Mais ça peut être très simple finalement : il suffit de définir une liste de mots et à chaque fois que tu veux ouvrir le port, tu envoies le mot suivant dans la liste. Et le serveur n’ouvre le port SSH que s’il reçoit à chaque demande d’ouverture le mot suivant dans la liste. C’est simple et très efficace… le temps que personne d’autre n’a la liste. Ca revient à utiliser une clé aléatoire unique, c’est exactement le même principe. Et si en plus tu bannies les IP qui font X essais sur le serveur, tu es sûr que personne ne pourra tenter une force brute pour faire fonctionner ton ouvreur de port SSH.

Donc en définitive le port knocking peut s’avérer très efficace s’il est bien mis en place selon moi. Il faut juste veiller à ce que personne ne mette la main sur la liste de mots.

Merci à tous, quand j’aurai digéré tout ça, je reviendrai car le sujet m’intéresse.
:006

[quote=“ricardo”]Merci à tous, quand j’aurai digéré tout ça, je reviendrai car le sujet m’intéresse.
:006[/quote]

Pas besoin de digérer grand chose, une petite séquence sympa avec qutre port en tcp et quatre port en udp exécute un script (comme précisé dans mon lien) pour ouvrir le port ssh et inversement une autre séquence pour refermer après utilisation :wink:

Je ne préconise par contre pas d’utiliser uniquement de l’udp ou du tcp pour justement accroître la difficulté.

Changer la séquence de temps à autre améliore un peu plus la sécurité du bouzin.

Comme expliquer après tu peu même te permettre d’ouvrir et fermer des ports autre que SSH ou lancer des scripts bien plus complexe.
L’exemple tout bête un script pour virer la liste des banni de portsentry ou de fail2ban (comme ça si tu te retrouve bloquer tu peu de nouveau accéder à ton serveur, mais pas seulement …

Les paquets et les datagrammes existent quel que soit le mode connecté ou non connecté. Les paquets sont à l’interface entre la couche IP (réseau) et la couche inférieure (liaison), et les datagrammes sont à l’interface entre la couche réseau et la couche supérieure (transport). Un paquet peut contenir soit un datagramme complet, soit un fragment de datagramme.

Extrait de la RFC 791 qui spécifie le protocole IP :

La meme séquence peut ouvrir le port et le refermer selon une durée limité et ceci uniquement pour l’adresse IP qui envoie la séquence. Dans la mesure ou les échanges “en cours” sont autorisés.

Merci à tous.
@ Clochette : impec et relativement simple ce démon knockd. Je testerai ça la prochaine fois que je vais chez un enfant.
Question concernant mon état actuel (liaison avec mon serveur seulement en LAN) :
puis-je considérer comme une assez bonne sécurité le fait de n’autoriser la connexion SSH qu’avec mon IP locale ?

Attention, l’installation de knockd peut t’enquiquiner si tu es derrière un parefeu rigoureux et que tu cherches à joindre ta machine (les paquets ne passent pas). Ça peut vraiement être pénible.

Merci François.
Je vais juste faire un petit test de chez moi selon ce site :
http://www.system-linux.eu/index.php?post/2010/10/11/Port-knocking-sur-Debian
Comme je peux facilement intervenir en direct (écran et clavier facile à connecter à chaud) sur mon serveur-maison, je pense que j’arriverai à faire machine arrière s’il y a un problème.

Salut,
A mon sens c’est un peu beaucoup pour protéger un ssh. C’est intéressant et amusant…

Un simple changement de port et un mot de passe blindé suffisent.

Vous connaissez beaucoup de monde qui avec les précautions cités plus haut se sont fait hacker ?

mon iptables est une vrai forteresse et aucun problème cette méthode fonctionne, mais j’ y vois tout de même un inconvénient: le fai peut facilement en déduire la séquence knock utilisée et comme je ne fais pas confiance non plus au fai je préfère garder ma méthode de la liste des ip autorisées via vpn.
il est certes possible de changer la séquence à chaque connexion mais il faut faire à chaque fois la redirection de ports sur 2 routeurs, box et un dlink…(pas pratique)

[quote=“lol”]Salut,
A mon sens c’est un peu beaucoup pour protéger un ssh. C’est intéressant et amusant…

Un simple changement de port et un mot de passe blindé suffisent.

Vous connaissez beaucoup de monde qui avec les précautions cités plus haut se sont fait hacker ?[/quote]
Bien sûr que c’est beaucoup, surtout pour moi qui m’autohéberge et qui n’ai pas souvent l’occasion de me connecter en SSH depuis l’extérieur.
Ce n’est que pour le fun, pour savoir, c’est tout.
J’ai souvent entendu parler du port-knocking sans savoir de quoi il retournait et comme je suis curieux … :smiley: