2 votes

Iptables accepte uniquement les connexions sécurisées

Disons que je veux le port 12345 ouvert sur ma machine, mais je veux seulement permettre une connexion via un socket sécurisé (SSL). Existe-t-il un indicateur que je peux ajouter à la commande suivante :

/sbin/iptables -A INPUT -p tcp --dport 12345 -j ACCEPT

Merci !

4voto

Insyte Points 9294

Non. Malheureusement, iptables ne connaît que les informations de la couche 2/3 : ports, protocoles IP, adresses IP source/destination ou adresses Ethernet, etc.

Pour que iptables sache que le flux TCP contient SSL, il faudrait analyser le contenu. Ce n'est pas ce qu'il fait. Ce dont vous auriez besoin est un pare-feu de couche 7, comme le projet l7-filter :

http://l7-filter.sourceforge.net/

1 votes

Insyte : ce n'est pas tout à fait vrai, car il existe des modules comme ip_conntrack_ftp qui sont conscients du protocole. Si un tel module existait pour la discrimination SSL/nonSSL, iptables pourrait en effet faire ce que demande l'OP - mais comme je ne crois pas qu'un tel module existe, vous avez raison et iptables ne peut pas être utilisé pour aider ici. +1 de ma part, de toute façon !

0 votes

Est-ce que un tel filtre entraînerait une latence réseau significative?

1 votes

Cela dépend du CPU et de ce que vous entendez par "significatif". Dans le cas général, en utilisant des CPU de bureau/serveur typiques, la réponse est "Non".

2voto

MadHatter Points 77602

Je suis revenu sur cela après y avoir réfléchi pendant quelques jours, et j'ai réalisé que ce n'était pas un problème. Voici pourquoi:

Les démons activés SSL écoutent sur un port et s'attendent à négocier la connexion SSL avant de faire quoi que ce soit d'autre. Si vous vous connectez et essayez de faire autre chose que de négocier SSL, étant donné où vous êtes dans le chemin du code, cela constitue une erreur aussi sûrement que de vous connecter à un serveur web et de taper MAIL FROM: fred@example.com. La connexion sera simplement abandonnée. Essayez de vous connecter à un serveur web HTTPS sur le port 443 et d'émettre une requête GET normale:

[madhatta@anni tmp]$ telnet www 443
Trying 193.219.118.100...
Connected to www.teaparty.net (193.219.118.100).
Caractère d'échappement est '^]'.
GET /

[...]

Requête incorrecte!

Et c'est assez aimable, pour des rejets SSL. Voici une expérience similaire avec un serveur POP/S, sur le port 995:

[madhatta@risby video]$ telnet www 995
Trying 193.219.118.100...
Connected to www.
Caractère d'échappement est '^]'.
USER fred
Connexion fermée par l'hôte distant.

Remarquez, il s'agit d'une commande POP tout à fait légale; c'est juste qu'à ce moment-là dans la conversation, le démon exige que je construise d'abord une connexion SSL, car c'est ce qu'il a été configuré pour faire. Je lui ai donné quelque chose qui n'est pas SSL, et il m'a rejeté comme une pomme de terre lépreuse.

Cette discussion ne s'applique pas au TLS, d'ailleurs. Le TLS, une extension des protocoles SSL, permet explicitement à une connexion d'être établie en texte clair puis négociée jusqu'à une connexion SSL par une extrémité, cette extrémité ayant établi que l'autre extrémité est compatible avec le TLS.

Mais votre question portait spécifiquement sur la SSL, pas le TLS, et de toute façon la solution est simple:

Exécutez un démon sur le port 12345 qui exige l'utilisation de SSL (c'est-à-dire n'est pas compatible avec le TLS) et votre travail sera fait.

0 votes

Merci d'avoir pris le temps d'expérimenter et d'analyser ce problème! C'est un post très informatif et utile!

0 votes

Je suis heureux que vous ayez pensé ainsi; merci pour vos commentaires courtois.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X