web-dev-qa-db-fra.com

Comment désactiver le transfert de port local SSH?

J'ai un serveur sous Ubuntu et le démon OpenSSH. Appelons cela S1.

J'utilise ce serveur depuis des machines clientes (appelons l'un d'eux C1) pour effectuer un tunnel inverse SSH en utilisant un transfert de port distant, par exemple:

ssh -R 1234:localhost:23 login@S1

Sur S1, j'utilise le fichier sshd_config par défaut. D'après ce que je peux voir, toute personne ayant les bonnes références {login, pwd} sur S1 peut se connecter à S1 et effectuer une redirection de port à distance et redirection de port locale. De telles informations d'identification pourraient être un certificat dans le futur, donc si je comprends bien, toute personne qui récupère le certificat peut se connecter à S1 depuis n'importe où (pas nécessairement C1) et ainsi créer des redirections de ports locaux.

Pour moi, autoriser le transfert de port local est trop dangereux, car cela permet de créer une sorte de proxy public. Je cherche un moyen de ne désactiver que les transferts.

J'ai essayé ce qui suit, mais cela désactive le transfert local et distant:

AllowTcpForwarding No

J'ai aussi essayé ce qui suit, cela ne permettra que -L à SX: 1. C'est mieux que rien, mais ce n'est toujours pas ce dont j'ai besoin, c'est une option "aucune".

PermitOpen SX:1

Je me demande donc s'il existe un moyen pour interdire à tous les transmetteurs de port locaux d'écrire quelque chose comme:

PermitOpen none:none

Est-ce que ce qui suit est une bonne idée?

PermitOpen localhost:1
20
SCO

n'importe qui avec des identifiants de connexion peut créer sa propre instance de sshd, s'exécutant sur un port aléatoire et autoriser ce qu'il veut, y compris les redirections locales -L:

% /usr/sbin/sshd -d -f mysshd.config -p 12345

si vous ne faites pas confiance aux utilisateurs pour qu'ils fassent quelque chose avec votre machine, vous ne devriez pas leur permettre de se connecter en premier lieu.

(d'ailleurs, le drapeau -D est aussi un peu "problématique par rapport au proxy")

15
akira

Une autre solution serait d’autoriser uniquement la redirection de port à des utilisateurs spécifiques:

De SSH: Le guide définitif

Le transfert de port peut être activé ou désactivé globalement dans sshd. Ceci est fait avec le mot-clé de configuration au niveau du serveur AllowTcpForwarding dans/etc/sshd_config. Le mot clé peut avoir la valeur oui (valeur par défaut, activation du transfert) ou non (désactivation du transfert):

# SSH1, SSH2, OpenSSH
AllowTcpForwarding no

De plus, SSH2 offre les options suivantes:

# SSH2 only
AllowTcpForwardingForUsers
AllowTcpForwardingForGroups

La syntaxe de ceux-ci est la même que pour les options AllowUsers et AllowGroups. [Section 5.5.2.1, "Contrôle d'accès au compte"] Ils spécifient une liste d'utilisateurs ou de groupes autorisés à utiliser le transfert de port; le serveur refuse d'honorer les demandes de redirection de port pour quiconque. Notez qu'ils font référence au compte cible de la session SSH, pas au nom d'utilisateur du client (qui est souvent inconnu).

...

Il est important de comprendre que les directives de cette section n'empêchent pas la redirection de port, à moins que vous ne désactiviez également les connexions interactives et que vous limitiez les programmes pouvant être exécutés du côté distant. Sinon, les utilisateurs avertis peuvent simplement exécuter leur propre application de transfert de port sur la session SSH. Ces paramètres à eux seuls pourraient constituer un moyen de dissuasion suffisant dans une communauté non technique, mais ils n'arrêteront pas une personne qui sait ce qu'elle fait.

17
Christian

Il existe maintenant une option pour autoriser uniquement le transfert local/distant.

AllowTcpForwarding Spécifie si le transfert de TCP est autorisé. Les options disponibles sont “oui” ou “tous” pour autoriser le transfert de TCP, “non” pour empêcher tout transfert de TCP, “local” pour autoriser le transfert local (du point de vue de ssh ( 1)) transfert uniquement ou "distant" pour autoriser le transfert à distance uniquement. La valeur par défaut est "oui". Notez que la désactivation du transfert TCP n'améliore pas la sécurité sauf si les utilisateurs se voient également refuser l'accès Shell, car ils peuvent toujours installer leurs propres redirecteurs.

Ainsi, comme indiqué précédemment, vous devez également définir le shell sur nologin.

2
Markus Rathgeb

Je cherche un moyen de ne désactiver que les transferts

Si je vous ai bien compris, vos utilisateurs ont un accès complet à Shell, mais vous ne voulez pas qu’ils puissent ouvrir des connexions vers le reste du réseau.

La "redirection de port locale" autorisée par SSH n'est qu'un des moyens possibles de le faire. D'autres incluent le lancement d'une instance de socat, netcat ou de tout autre nombre d'outils.

Le meilleur moyen de contrôler les connexions sortantes et entrantes sous Linux est Netfilter, alias IPTables.

Il possède un module spécial appelé propriétaire (ipt_owner) qui vous permet de faire correspondre différentes caractéristiques du créateur de paquet, pour les paquets générés localement. Il est valide dans les chaînes OUTPUT et POSTROUTING.

Vous pouvez l'utiliser pour refuser les paquets sortants générés par certains groupes d'utilisateurs, interdisant ainsi tout type de transfert de port, pas seulement l'option -L de SSH.

0
Tobia

Ma solution à ce problème a été d'ajouter: PermitOpen for.local: 8 dans la section principale de sshd_config.

Cela refuse simplement toute demande de transfert local en dehors de fo.local: 80.

0
MrMisu