我已经configuration我的服务器的sshd在非标准端口42上侦听。
然而,在工作中,我在防火墙/代理的后面,它只允许传出连接到端口21,22,80和443.因此,我不能ssh到我的服务器工作,这是不好的。 我不想把sshd返回到22号港口。
这个想法是这样的:在我的服务器上, 如果源IP与我工作networking的外部IP相匹配, 则将本地端口22转发到端口42。 为了清楚起见,让我们假设我的服务器的IP为169.1.1.1(在eth1上),我的工作外部IP为169.250.250.250。 对于与169.250.250.250不同的所有IP,我的服务器应该以预期的“连接被拒绝”来响应,就像它对非监听端口所做的那样。
我对iptables很新。 我简要地浏览了长长的iptables手册和这些相关/相关的问题:
然而,这些问题涉及到更复杂的几个主机场景,我不清楚哪些表和链我应该用于本地端口转发,如果我应该有2个规则(“问题”和“答案”数据包)或“问题”数据包只有1个规则。
到目前为止,我只通过sysctl启用转发。 我将在明天开始testing解决scheme,并将欣赏指针或者实现我的简单场景的具体案例。
下面的草案解决scheme是否正确?
iptables -A INPUT [-m state] [-i eth1] --source 169.250.250.250 -p tcp --destination 169.1.1.1:42 --dport 22 --state NEW,ESTABLISHED,RELATED -j ACCEPT
我应该使用mangle表而不是filter吗? 和/或FORWARD链,而不是INPUT ?
要转发/redirect,必须编辑NAT表。
像这样的规则可能最接近你所需要的。
/sbin/iptables --table nat --append PREROUTING --protocol tcp \ --source 169.250.250.250 --dport 22 \ --jump REDIRECT --to-ports 42
将SSH保留在标准端口并妥善保护它会更容易,也许更好。 使用一个备用端口只会使一个有动机的攻击者减速几秒钟。 设置入侵防护系统,如denyhosts / fail2ban,禁用基于密码的authentication。 或考虑速率限制传入的SSH连接。
看到:
我会使用Shorewall来pipe理IP表。 它build立了一个体面的基础防火墙,做你喜欢的事情很简单。 将规则添加到/ etc / shorewall /规则中,如:
DNAT净值:169.250.250.250 loc:169.250.250.250 tcp 42 22
像其他人一样,我不确定你为什么在另一个端口上运行sshd。 如果这是一个互联网端口,你可能想看看端口敲门,以保持端口closures,除非你先打另一个端口。 Shorewall处理这个简单。