5

我想让一个 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
4

2 回答 2

7

您实际上可以完全不使用 iptables 来实现这一点,只需git-daemon绑定到环回接口,例如。

git daemon --listen=127.0.0.1

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

于 2011-06-12T09:27:31.860 回答
4

你可以试试这个(未经测试):

# 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

于 2011-06-12T07:50:43.067 回答