iptables规则阻止ssh远程转发的端口

我试图设置一个iptables的规则,将阻止通过SSH本地远程转发连接访问SSH远程转发连接。 所以,IOW:

客户端A连接到服务器:
 ssh -R 10000:localhost:23 someserver

客户端B连接到服务器:
 ssh -L 23:localhost:10000 someserver

我不能让iptables来阻止这个。 我需要在某些情况下转发sshd_config设置不能覆盖(我将有一个程序专门分发端口,客户端可以转发,希望程序会添加一个iptables规则,以允许这一点)。

我试过了:

 iptables --flush

 iptables -A INPUT -i lo -p tcp --dport 0:1024 -j ACCEPT
 iptables -A OUTPUT -o lo -p tcp --dport 0:1024 -j ACCEPT
 iptables --policy INPUT DROP
 iptables --policy OUTPUT DROP

 iptables -A INPUT -m状态 - 状态ESTABLISHED,RELATED -j ACCEPT
 iptables -A OUTPUT -m状态 - 状态NEW,ESTABLISHED,RELATED -j ACCEPT

 iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT

但它仍然允许SSH本地转发连接访问远程转发的端口。 任何想法如何得到iptables来处理这个?


编辑:试图改变:

 
 iptables --flush
 iptables --policy INPUT DROP 
 iptables --policy OUTPUT DROP 

 iptables -A INPUT -m状态 - 状态ESTABLISHED,RELATED -j ACCEPT 
 iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT 
 iptables -A OUTPUT -o eth1 -p tcp --sport 22 -j ACCEPT 
 iptables -A INPUT -j拒绝 

我仍然可以做转发的连接。 所以显然不是这样。 Thanx答案虽然。 你有什么其他的想法吗?

closuresssh服务器上的ssh转发不是更容易吗? 只需在/ etc / ssh / sshd_config中将AllowTcpForwarding从yes更改为no即可。 如果这不适合,你可以尝试一些东西

 iptables -A OUTPUT -o eth1 -p tcp --cmd-owner "sshd" -j DROP 

弄清楚了。 我原来的规则集封锁一切就好了。 问题是,在这台服务器上,localhost首先parsing(通过/ etc / hosts):: 1(IPv6回送)。 这些规则因此无效。 在我从/ etc / hosts文件中删除了这个条目之后,我能够很好地工作。 我的testing脚本如下所示:

 #!/斌/庆典
 iptables --flush

 iptables -A INPUT -i lo -p tcp --dport 0:1024 -j ACCEPT
 iptables -A OUTPUT -o lo -p tcp --dport 0:1024 -j ACCEPT
 iptables --policy INPUT DROP
 iptables --policy OUTPUT DROP
 iptables --policy FORWARD DROP

 iptables -A INPUT -m状态 - 状态ESTABLISHED,RELATED -j ACCEPT
 iptables -A OUTPUT -m状态 - 状态NEW,ESTABLISHED,RELATED -j ACCEPT

 iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT
 iptables -A INPUT -j拒绝

 #iptables -Iinput1 -i lo -p tcp --dport 10001 -m状态 - 状态NEW,ESTABLISHED -j ACCEPT
 #iptables -I OUTPUT 1 -o lo -p tcp --dport 10001 -m state --state NEW,ESTABLISHED -j ACCEPT

随着最后两行启用,我可以打开一个SSH端口10001本地转发连接。禁用它们,我不能。 完善!

转发的连接将来自本地系统。 您将需要删除允许出站连接的下面的规则,然后如果需要,可以使用一些只允许您明确允许的出站连接的规则来replace它。

 iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 

请注意,可以使用“localhost”来代替:

  • 任何回送地址127.xxx
  • 服务器上任何networking接口的地址

也没有写任何关于客户端B尝试直接连接到客户端A的信息:

ssh -L 23:clientA:80 someserver (我select了80端口,也许你的防火墙允许它出站)

我很抱歉,所有这些(以及更多)选项,以及您对iptables的基本知识,很可能会在您的设置中留下空隙。 如果有什么真正有价值的东西受到威胁,我会build议去找一个更好的人来做这件事。