Faça o sshd ouvir uma interface específica

15

Na minha máquina, estou usando o OpenVPN, que usa a interface tun0. Eu quero que o sshd escute apenas nessa interface.

Eu sei, posso especificar o endereço IP para ouvir em

/etc/ssh/sshd_config

com um

ListenAddress 0.0.0.0

directiva. Mas meu endereço IP mudará, portanto não posso escolher um IP aqui que seja sempre válido. Eu sei que só posso iniciar o daemon quando a VPN estiver ativa - esse não é o problema.

Como posso fazer com que o sshd escute apenas em uma interface específica (tun0)?

Philipp
fonte
2
Firewall fora da porta 22 em alguma porta que não seja tun0?
NickW

Respostas:

7

Você não pode fazer isso diretamente, pois o sshd entende apenas os endereços IP. Você pode conseguir juntar algo usando um script openvpn up

-up Comando do comando cmd para executar após a abertura bem-sucedida do dispositivo TUN / TAP (alteração do UID pré-usuário). O script up é útil para especificar comandos de rota que direcionam o tráfego IP destinado a sub-redes privadas que existem na outra extremidade da conexão VPN no túnel ...

Consulte também a --downopção de limpeza e as partes relevantes da documentação que detalham a segurança do script, etc.

Você encontrará o endereço IP do dispositivo tun que é passado para o script como uma variável de ambiente. Também o sshd aceita opções na linha de comando do formulário

-oSomeOption=SomeValue

-o opção Pode ser usada para fornecer opções no formato usado no arquivo de configuração. Isso é útil para especificar opções para as quais não há sinalizador de linha de comando separado. Para detalhes completos das opções e seus valores, consulte sshd_config (5)

Então você poderia usar

-o ListenAddress=<some address>

Presumivelmente, você tem algum método fora de banda para conversar com seu VPS, para que, quando isso ocorra, entre em contato com o servidor.

user9517
fonte
1
Tente:-o ListenAddress=$(ip addr | awk '/inet/ && /tun0/{sub(/\/.*$/,"",$2); print $2}')
pjz 16/06
@ pjz Acho que você não precisa fazer isso, pois tenho certeza de que o endereço IP do dispositivo está disponível como uma variável de ambiente para o script up. Só não tenho o material disponível para testá-lo.
user9517
1
Excelente! O IP é passado para o script ativo como ifconfig_local = 10.xx.xx.xx. Um monte de outros dados (dev_type = tun, common_name = myservername, ifconfig_remote, route_gateway_1, untrusted_ip, ifconfig_local, proto_1, tls_serial_1, tls_serial_0 ...) são transmitidos.
Philipp
Sim, eu sei, e agora você também :)
user9517
3
Talvez você queira editar sua resposta e adicionar o nome da variável env relevante? (para futuros leitores)
Philipp