Заставьте sshd прослушивать определенный интерфейс

15

На моей машине я использую OpenVPN, который использует интерфейс tun0. Я хочу, чтобы sshd слушал только на этом интерфейсе.

Я знаю, я могу указать IP-адрес для прослушивания в

/etc/ssh/sshd_config

с

ListenAddress 0.0.0.0

директивы. Но мой IP-адрес изменится, поэтому я не могу выбрать здесь IP-адрес, который всегда действителен. Я знаю, что могу запустить демон только при включенном VPN - это не проблема.

Как я могу заставить sshd слушать только на определенном интерфейсе (tun0)?

Philipp
источник
2
Брандмауэр отключен от порта 22 на любых портах, которых нет tun0?
NickW

Ответы:

7

Вы не можете сделать это напрямую, так как sshd понимает только IP-адреса. Вы можете собрать что-то вместе, используя скрипт openvpn up

-up cmd Командная консоль, запускаемая после успешного открытия устройства TUN / TAP (изменение UID до пользователя). Сценарий up полезен для указания команд маршрутизации, которые направляют IP-трафик, предназначенный для частных подсетей, которые существуют на другом конце VPN-соединения, в туннель ...

См. Также --downвозможность очистки и соответствующие части документации, подробно описывающие безопасность сценариев и т. Д.

Вы обнаружите, что IP-адрес устройства tun передается в сценарий как переменная окружения. Также sshd принимает параметры в командной строке вида

-oSomeOption=SomeValue

-o опция Может использоваться для задания параметров в формате, используемом в файле конфигурации. Это полезно для указания параметров, для которых нет отдельного флага командной строки. Для получения полной информации о параметрах и их значениях, смотрите sshd_config (5)

Так что вы могли бы использовать

-o ListenAddress=<some address>

Предположительно, у вас есть какой-то внеполосный метод общения с вашим VPS, чтобы, когда это не получится, вы могли связаться с сервером.

user9517
источник
1
Попробуйте:-o ListenAddress=$(ip addr | awk '/inet/ && /tun0/{sub(/\/.*$/,"",$2); print $2}')
pjz
@pjz Я не думаю, что вам нужно это делать, поскольку я уверен, что IP-адрес устройства доступен в качестве переменной среды для сценария up. У меня просто нет материала для проверки.
user9517
1
Отлично! IP передается в сценарий up как ifconfig_local = 10.xx.xx.xx. Целая куча других данных (dev_type = tun, common_name = myservername, ifconfig_remote, route_gateway_1, untrusted_ip, ifconfig_local, proto_1, tls_serial_1, tls_serial_0 ...) передаются вместе.
Филипп
Да, я знаю, и теперь вы тоже :)
user9517
3
Может быть, вы хотите отредактировать свой ответ и добавить соответствующее имя переменной env? (для будущих читателей)
Филипп