Faire écouter sshd à une interface spécifique

15

Sur ma machine, j'utilise OpenVPN qui utilise l'interface tun0. Je veux que sshd écoute uniquement sur cette interface.

Je sais, je peux spécifier l'adresse IP à écouter dans

/etc/ssh/sshd_config

avec un

ListenAddress 0.0.0.0

directif. Mais mon adresse IP va changer, donc je ne peux pas choisir ici une IP qui est toujours valide. Je sais que je ne peux démarrer le démon que lorsque le VPN est en place - ce n'est pas le problème.

Comment puis-je faire en sorte que sshd n'écoute que sur une interface spécifique (tun0)?

Philipp
la source
2
Pare-feu hors port 22 sur tous les ports qui ne le sont pas tun0?
NickW

Réponses:

7

Vous ne pouvez pas le faire directement car sshd ne comprend que les adresses IP. Vous pourrez peut-être faire quelque chose ensemble en utilisant un script openvpn up

-up cmd Shell à exécuter après l'ouverture réussie du périphérique TUN / TAP (modification de l'UID avant l'utilisateur). Le script up est utile pour spécifier les commandes de route qui acheminent le trafic IP destiné aux sous-réseaux privés qui existent à l'autre extrémité de la connexion VPN dans le tunnel ...

Voir également l' --downoption de nettoyage et les parties pertinentes de la documentation détaillant la sécurité des scripts, etc.

Vous trouverez que l'adresse IP du périphérique tun est transmise au script en tant que variable d'environnement. Sshd prend également des options sur la ligne de commande du formulaire

-oSomeOption=SomeValue

Option -o Peut être utilisée pour donner des options au format utilisé dans le fichier de configuration. Cela est utile pour spécifier les options pour lesquelles il n'y a pas d'indicateur de ligne de commande distinct. Pour plus de détails sur les options et leurs valeurs, voir sshd_config (5)

Vous pouvez donc utiliser

-o ListenAddress=<some address>

Vraisemblablement, vous avez une méthode hors bande pour parler à votre VPS afin que lorsque cela se casse, vous pouvez contacter le serveur.

user9517
la source
1
Essayez:-o ListenAddress=$(ip addr | awk '/inet/ && /tun0/{sub(/\/.*$/,"",$2); print $2}')
pjz
@pjz Je ne pense pas que vous ayez besoin de faire cela car je suis assez sûr que l'adresse IP du périphérique est disponible en tant que variable d'environnement dans le script up. Je n'ai tout simplement pas le matériel nécessaire pour le tester.
user9517
1
Excellent! L'IP est transmise au script up comme ifconfig_local = 10.xx.xx.xx. Un tas d'autres données (dev_type = tun, common_name = myservername, ifconfig_remote, route_gateway_1, untrusted_ip, ifconfig_local, proto_1, tls_serial_1, tls_serial_0 ...) sont transmises.
Philipp
Oui je sais et maintenant vous aussi :)
user9517
3
Vous souhaitez peut-être modifier votre réponse et ajouter le nom de variable env approprié? (pour les futurs lecteurs)
Philipp