使sshd侦听特定接口


15

在我的机器上,我正在使用使用tun0接口的OpenVPN。我希望sshd仅在此接口上侦听。

我知道,我可以指定要收听的IP地址

/etc/ssh/sshd_config

ListenAddress 0.0.0.0

指示。但是我的IP地址会更改,因此我无法在此处选择始终有效的IP。我知道只有在VPN启动时我才能启动守护程序-这不是问题。

如何使sshd仅在特定接口(tun0)上侦听?


2
在端口22上没有关闭防火墙的端口tun0
NickW 2014年

Answers:


7

您不能直接这样做,因为sshd仅了解IP地址。您可能可以使用openvpn up脚本将某些内容组合在一起

-up cmd Shell命令在成功打开TUN / TAP设备(更改--user UID之前)后运行。up脚本对于指定路由命令很有用,该路由命令会将发往VPN连接另一端的专用子网的IP流量路由到隧道中...

另请参阅--down清理选项以及详细描述脚本安全性的文档相关部分。

您会发现tun设备的IP地址作为环境变量传递到脚本。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脚本的环境变量。我只是没有东西可以测试。
user9517 2014年

1
优秀!IP以ifconfig_local = 10.xx.xx.xx的形式传递给up脚本。传递了许多其他数据(dev_type = tun,common_name = myservername,ifconfig_remote,route_gateway_1,untrusted_ip,ifconfig_local,proto_1,tls_serial_1,tls_serial_0 ...)。
菲利普2014年

是的,我知道,现在您也可以这样做:)
user9517 2014年

3
也许您想编辑答案并添加相关的环境变量名称?(面向将来的读者)
Philipp 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.