
Я пытаюсь настроить dropbear для выполнения следующих действий.
1) Прослушивать только порт 22 интерфейса tun0 (созданного службой openvpn). 2) Использовать только авторизацию с открытым ключом.
Я вижу, что dropbear.socket может просматривать порт 22. Но как сделать так, чтобы он просматривал только интерфейс OpenVPN (например, tun0)?
Я попробовал «BindToDevice» в системном файле dropbear.socket, но у меня возникла проблема «курица или яйцо», когда сокет dropbear необходим для отображения работоспособности сети, но openvpn требует работоспособности сети для запуска и создания устройства tun0.
Есть ли лучший способ настроить dropbear так, чтобы он смотрел только на определенный интерфейс?
решение1
После того, как я сам столкнулся с той же проблемой, я придумал два решения. Первое немного неуклюже, но позволяет использовать BindToDevice
. Оно требует настройки DefaultDependencies=no
и последующего копированиязависимости по умолчанию, за исключением зависимости Before=sockets.target
. .socket
Файл может выглядеть следующим образом:
[Unit]
Description=Dropbear Activation Socket
DefaultDependencies=no
After=sysinit.target
Requires=sysinit.target
Before=shutdown.service
Conflicts=shutdown.service
Requires=sys-devices-virtual-net-tun0.device
After=sys-devices-virtual-net-tun0.device
[Socket]
ListenStream=:22
BindToDevice=tun0
Accept=yes
[Install]
WantedBy=multi-user.target
WantedBy=
Обратите внимание также, что я использовал for multi-user.target
, а не sockets.target
.
Однако есть другое решение, которое проще, если ваш вариант использования позволяет указать tun0
IP-адрес в .socket
файле. Для этого укажите IP-адрес в ListenStream
директиве и используйтеFreeBind=yes
вместо BindToDevice=tun0
. Результирующий .socket
файл может выглядеть так:
[Unit]
Description=Dropbear Activation Socket
[Socket]
ListenStream=<tun0 IP address>:22
FreeBind=yes
Accept=yes
[Install]
WantedBy=sockets.target