Comment limiter le transfert de port ssh * remote *?

22

J'ai besoin de limiter les ports qui peuvent être distants ' ssh -R' transmis par un utilisateur.

Je connais l' permitopenoption sur authorized_keys, mais comme il est dit sur la page de manuel, cela ne limite que ssh -Lla redirection de port locale ' '

Comme discuté ici, un utilisateur obtiendrait la même chose avec netcatou similaire, mais dans ce cas, l'utilisateur n'a pas accès au shell

J'ai également trouvé ce fil qui parle de l'utilisation de selinux ou LD_PRELOAD, mais je n'ai jamais configuré selinux auparavant et je ne trouve pas d'informations sur la façon de le faire LD_PRELOAD.

peut-être que quelqu'un a fait un patch pour openssh pour l'implémenter?

EDIT: J'ai trouvé ce rapport de bug, donc je suppose qu'il n'est pas encore implémenté

Lluís
la source
Avez-vous trouvé une solution à cela?
alex88
Je ne l'ai pas fait, je suppose que cela ne peut pas être fait tant que le bogue ci-dessus n'est pas fermé ou que quelqu'un n'a pas écrit de correctif pour l'implémenter
Lluís

Réponses:

3

Cela a été implémenté dans OpenSSH 7.8p1, qui a été publié le 2018-08-24. Citation des notes de version:

ajoutez une directive PermitListen à sshd_config (5) et une option permitlisten = authorized_keys correspondante qui contrôlent les adresses d'écoute et les numéros de port pouvant être utilisés par le transfert à distance (ssh -R ...).

Franc
la source
4

Il existe une option no-port-forwardingque vous pouvez utiliser, qui empêche toute redirection de port. Présent au moins à partir d'OpenSSH 4.3p2 (CentOS 5.3 - la plus ancienne machine à laquelle j'ai accès). Mettez-le au même endroit que vous auriez mis permitopen.

utopiabound
la source
13
La désactivation complète de la redirection de port semble exagérée et ne convient pas à la question. Je suppose que OP veut limiter , tout en autorisant certaines redirections de ports distants spécifiques.
gertvdijk
2
Oui, je dois autoriser la redirection de certains ports
Lluís
0

Il n'est pas possible de limiter cela en utilisant ssh. Peut-être que selinux ou iptables pourraient être utilisés à cette fin. Cependant, il existe une stratégie alternative qui peut ou non convenir à vos besoins. Utilisez la liaison aux sockets UNIX. Cela devrait être disponible à partir de la version 6.8 de openssh.

Lorsque vous utilisez des sockets, vous avez à votre disposition l'ACL du système de fichiers (bien que les sockets respectent ce qui peut dépendre de * nix) et vous pouvez l'utiliser pour empêcher un utilisateur de se lier à d'autres sockets. Cependant, cela n'empêche en aucune façon la liaison aux ports, donc selon votre cas d'utilisation, cela peut ne pas aider, mais peut-être que les ports n'ont pas d'importance si vous ne pouvez utiliser que des sockets de manière cohérente.

Avec les sockets UNIX, la gestion des fichiers de socket pendantes peut être problématique lorsque les éditeurs inversés tentent de se reconnecter. J'ai une autre question (et réponse) à ce problème. En bref, vous souhaitez probablement également utiliser StreamLocalBindUnlink yes:

Comment nettoyer le socket du tunnel inverse SSH après la connexion fermée?

Timo
la source
-1

Dupliquer: /superuser/516417/how-to-restrict-ssh-port-forwarding-without-denying-it

On dirait que vous pouvez utiliser ce qui suit?

Dans le fichier de configuration du serveur, il y a un PermitOpen option . Cette option peut être utilisée pour spécifier des hôtes et des ports pour lesquels des transferts peuvent être établis. Cette option peut être utilisée dans un bloc de correspondance, elle peut donc être restreinte par utilisateur, groupe ou nom d'hôte ou modèle d'adresse IP.

Edit: Donc, dans la configuration du serveur, ajoutez ce qui suit

Hôte PermitOpen: port

PermitOpen IPv4_addr: port

PermitOpen [IPv6_addr]: port

PHoBwz
la source
1
Uniquement sur U&L peut être marqué comme doublon.
GAD3R
1
Comme indiqué dans la question, c'est pour -L et c'est déjà connu comme une non solution
alex88
1
Y aura-t-il jamais une solution à cela (à côté d'iptables)?
davesave