Змусити sshd прослуховувати певний інтерфейс


15

На своїй машині я використовую OpenVPN, який використовує інтерфейс tun0. Я хочу, щоб sshd слухав лише в цьому інтерфейсі.

Я знаю, я можу вказати IP-адресу, яку потрібно слухати

/etc/ssh/sshd_config

з

ListenAddress 0.0.0.0

директива. Але моя IP-адреса зміниться, тому я не можу вибрати IP-адресу тут, яке завжди дійсне. Я знаю, що я можу запустити демон лише тоді, коли VPN працює - це не проблема.

Як я можу змусити sshd слухати лише певний інтерфейс (tun0)?


2
Брандмауер відключений через порт 22 на будь-яких портах, яких немає tun0?
NickW

Відповіді:


7

Ви не можете це зробити безпосередньо, оскільки sshd розуміє лише IP-адреси. Можливо, ви зможете щось збити разом, використовуючи сценарій openvpn

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

Дивіться також --downможливість очищення та відповідних частин документації, що деталізують захист сценарію тощо.

Ви знайдете, що IP-адреса пристрою tun передається в сценарій як змінна середовище. Також sshd приймає параметри в командному рядку форми

-oSomeOption=SomeValue

-o Опція Може використовуватися для надання параметрів у форматі, який використовується у файлі конфігурації. Це корисно для визначення параметрів, для яких немає окремого прапора командного рядка. Детальну інформацію про параметри та їх значення див. У sshd_config (5)

Таким чином, ви можете використовувати

-o ListenAddress=<some address>

Імовірно, у вас є якийсь позадіапазонний метод розмови з вашим VPS, так що коли ця помилка ви можете звернутися до сервера.


1
Спробуйте:-o ListenAddress=$(ip addr | awk '/inet/ && /tun0/{sub(/\/.*$/,"",$2); print $2}')
pjz

@pjz Я не думаю, що вам це потрібно робити, оскільки я досить впевнений, що IP-адреса пристрою доступна у вигляді змінної середовища для сценарію up. У мене просто немає речей, які б можна було перевірити.
користувач9517

1
Відмінно! IP передається до сценарію up як ifconfig_local = 10.xx.xx.xx. Подається ціла купа інших даних (dev_type = tun, common_name = myservername, ifconfig_remote, route_gateway_1, nepruted_ip, ifconfig_local, proto_1, tls_serial_1, tls_serial_0 ...).
Філіпп

Так, я знаю, і зараз ви теж :)
користувач9517

3
Можливо, ви хочете відредагувати свою відповідь та додати відповідну назву змінної env? (для майбутніх читачів)
Філіпп
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.