如何只允许隧道连接到端口?

时间:2011-06-12 07:43:27

标签: linux ssh port tunnel

我想让一个git-daemon通过一个永久的ssh隧道。我完成了这项任务。如何阻止任何与GIT_DAEMON端口的远程无连接连接(在我的情况下为9418)?

我已经在iptables中尝试过简单的规则(阻止除localhost之外的所有内容):

$ iptables -A INPUT -p tcp -d ! localhost --destination-port 9418 -j DROP

但它也会阻塞隧道(因为它会保存源IP地址)。如果我有一个主机用于防火墙,可以通过阻止与该端口的任何远程连接来完成,但我需要这个主机来完成这项工作。

隧道是以两种方式之一创建的:

对于Windows:

plink.exe -N -i <key> -L 127.0.0.1:9418:192.168.1.69:9418 tunnel@192.168.1.69

对于Linux:

ssh -N -i <key> -L 127.0.0.1:9418:192.168.1.69:9418 tunnel@192.168.1.69

2 个答案:

答案 0 :(得分:7)

你可以在不使用iptables的情况下实现这一点,只需将git-daemon绑定到loopback接口,例如。

git daemon --listen=127.0.0.1

这将使它只能从localhost连接,并且不需要root权限来设置。

答案 1 :(得分:3)

您可以尝试此操作(未经测试):

# accept localhost
iptables -A INPUT -p tcp -d localhost --destination-port 9418 -j ACCEPT

# send everyone else packing
iptables -A INPUT -p tcp --destination-port 9418 -j DROP

使用iptables -L说:

ACCEPT     tcp  --  anywhere             localhost.localdomain tcp dpt:git
DROP       tcp  --  anywhere             anywhere            tcp dpt:git

修改

这可能(可能)应该如何设置隧道:

ssh -N -i <key> -L 127.0.0.1:9418:127.0.0.1:9418 tunnel@192.168.1.69

重要的是下半场是127.0.0.1而不是正常的IP