我试图设置一个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”来代替:
也没有写任何关于客户端B尝试直接连接到客户端A的信息:
ssh -L 23:clientA:80 someserver (我select了80端口,也许你的防火墙允许它出站)
我很抱歉,所有这些(以及更多)选项,以及您对iptables的基本知识,很可能会在您的设置中留下空隙。 如果有什么真正有价值的东西受到威胁,我会build议去找一个更好的人来做这件事。