Hacer que sshd escuche una interfaz específica

15

En mi máquina estoy usando OpenVPN que usa la interfaz tun0. Quiero que sshd escuche solo en esta interfaz.

Lo sé, puedo especificar la dirección IP para escuchar

/etc/ssh/sshd_config

con un

ListenAddress 0.0.0.0

directiva. Pero mi dirección IP cambiará, por lo que no puedo elegir una IP aquí que siempre sea válida. Sé que puedo iniciar el demonio solo cuando la VPN está activa, ese no es el problema.

¿Cómo puedo hacer que sshd solo escuche en una interfaz específica (tun0)?

Philipp
fuente
2
¿Cortafuegos fuera del puerto 22 en algún puerto que no lo sea tun0?
NickW

Respuestas:

7

No puede hacerlo directamente ya que sshd solo comprende las direcciones IP. Es posible que puedas juntar algo usando un script openvpn up

-up comando cmd Shell para ejecutarse después de abrir con éxito el dispositivo TUN / TAP (cambio de UID previo al usuario). El script up es útil para especificar comandos de ruta que enrutan el tráfico IP destinado a subredes privadas que existen en el otro extremo de la conexión VPN al túnel ...

Consulte también la --downopción de limpieza y las partes relevantes de la documentación que detalla la seguridad del script, etc.

Encontrará que la dirección IP del dispositivo tun se pasa al script como una variable de entorno. También sshd toma opciones en la línea de comando del formulario

-oSomeOption=SomeValue

-o opción Se puede usar para dar opciones en el formato utilizado en el archivo de configuración. Esto es útil para especificar opciones para las cuales no hay un indicador de línea de comando separado. Para obtener detalles completos de las opciones y sus valores, consulte sshd_config (5)

Entonces podrías usar

-o ListenAddress=<some address>

Presumiblemente, tiene algún método fuera de banda para hablar con su VPS para que cuando esto se rompa pueda contactar al servidor.

usuario9517
fuente
1
Prueba:-o ListenAddress=$(ip addr | awk '/inet/ && /tun0/{sub(/\/.*$/,"",$2); print $2}')
pjz
@pjz No creo que tenga que hacer eso, ya que estoy bastante seguro de que la dirección IP del dispositivo está disponible como una variable de entorno para el script up. Simplemente no tengo las cosas a mano para probarlo.
user9517
1
¡Excelente! La IP se pasa al script ascendente como ifconfig_local = 10.xx.xx.xx. Se pasan muchos otros datos (dev_type = tun, common_name = myservername, ifconfig_remote, route_gateway_1, untrusted_ip, ifconfig_local, proto_1, tls_serial_1, tls_serial_0 ...).
Philipp
Sí, lo sé y ahora tú también :)
user9517
3
¿Quizás quiera editar su respuesta y agregar el nombre de la variable env relevante? (para futuros lectores)
Philipp