2011-06-12 90 views
5

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

我已经在iptables的尝试简单的规则(阻止除本地主机的所有内容):

$ 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 [email protected] 

对于Linux:

ssh -N -i <key> -L 127.0.0.1:9418:192.168.1.69:9418 [email protected] 

回答

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 [email protected] 

重要的是,下半年是127.0.0.1和不是正常的IP

+0

现在它的测试,但不是太有帮助,它提供了相同的效果,作为规则在一个问题:( – kravitz 2011-06-12 08:09:32

+0

@kravitz你能解释一下更好的交通路径应该是什么? – cnicutar 2011-06-12 08:10:26

+0

@cnicutar肯定,假设我们有三个主机:A,B,C。主机A有一个运行的git-daemon,主机B想要与A进行通信(推/拉请求),主机C不应该能够在A访问git-daemon。我模拟所以B创建本地隧道到A(9418端口到9418,在-L openssh中有-L选项),这意味着B发送到本地9418端口的所有内容都通过ssh(22端口)并发生在A的9418我需要一个过滤机制,这将阻止连接到A:9418,除了隧道之外的任何东西。 – kravitz 2011-06-12 08:18:08

7

你完全可以通过简单地将git-daemon绑定到loopback接口,而不使用iptables来实现这一点,例如。

git daemon --listen=127.0.0.1 

这将使它所以它是从本地主机连接只,且不需要root权限进行设置。

+0

感谢,干净,简单。但@ cnicutar的正确隧道建议值得“正确答案”的印记。 – kravitz 2011-06-12 09:54:01

相关问题