socat TCP-LISTEN:22,fork TCP:192.168.0.15:5900
我如何告诉 to socat
,端口 22 仅受远程 IP 地址 8.8.8.8 的信任,并且不应接受来自其他 IP 地址的连接?这是在 Linux 服务器上。
答案1
您可以将range
选项添加到 socat 监听地址:
socat TCP-LISTEN:22,fork,range=8.8.8.8/32 TCP:192.168.0.15:5900
或者您可以添加tcpwrap=vnc_forward
选项并为其定义全局规则vnc_forward
服务按照主机访问(5)。
这不会阻止连接到达socat
,但socat
如果它们不是来自 8.8.8.8,则会忽略它们(并发出警告)。
答案2
像这样的东西对我有用,让 socat 仅在本地主机上监听。
socat TCP-LISTEN:22,fork,bind=127.0.0.1 TCP:192.168.0.15:5900
所以你可以试试这个。
socat TCP-LISTEN:22,fork,bind=8.8.8.8 TCP:192.168.0.15:5900
答案3
大多数人为此使用防火墙。看一下iptables
限制端口 22 的流量,即:
iptables -I INPUT -p tcp '!' -s 8.8.8.8 --dport 22 -j REJECT
或者,如果防火墙已经受到限制,则仅允许一个地址:
iptables -A INPUT -p tcp -s 8.8.8.8 --dport 22 -j ACCEPT
请注意,这不是 iptables 防火墙的完整配置,在使用上述配置之前,您首先需要设置正确的配置。
答案4
如果您的主要目标是安全并且您控制客户端计算机,那么通过 SSL 隧道连接到 socat 服务器是更安全的选择,使服务器在接受连接之前验证客户端证书。
我最近经历了这个尝试确保协同客户端/服务器设置的安全。
本教程清楚地解释了设置
http://www.dest-unreach.org/socat/doc/socat-openssltunnel.html
我发现的一个与说明不同的是,由于 logjam 补丁,您的客户端 SSL 库应该默认拒绝服务器密钥
将以下内容附加到服务器 PEM 使一切正常
openssl dhparam 2048 >> "$FILENAME".pem
当通过基于 IP 的身份验证来验证主机时,这种基于密钥的交换机制更加权威。