我已将服务器的 sshd 配置为监听非标准端口 42。
但是,在工作时,我处于防火墙/代理后面,仅允许向外连接到端口 21、22、80 和 443。因此,我无法从工作中 ssh 到我的服务器,这很糟糕。我不想将 sshd 返回到端口 22。
想法是这样的:在我的服务器上,本地将端口 22 转发到端口 42如果源 IP 与我工作网络的外部 IP 匹配。为清楚起见,我们假设我的服务器 IP 为 169.1.1.1(在 eth1 上),我的工作外部 IP 为 169.250.250.250。对于所有不同于 169.250.250.250 的 IP,我的服务器应该响应预期的“连接被拒绝”,就像它对非监听端口所做的那样。
我对 iptables 很陌生。我简要浏览了冗长的 iptables 手册和以下相关/相关问题:
但是,这些问题涉及更复杂的多主机场景,我不清楚应该使用哪些表和链进行本地端口转发,以及是否应该有 2 条规则(针对“问题”和“答案”数据包),或者只有 1 条针对“问题”数据包的规则。
到目前为止,我只通过 sysctl 启用了转发。明天我将开始测试解决方案,并希望得到一些指导或具体案例来实现我的简单场景。
下面的方案草案正确吗?
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
?
答案1
要转发/重定向内容,您必须编辑 NAT 表。
这样的规则可能最接近您的需要。
/sbin/iptables --table nat --append PREROUTING --protocol tcp \
--source 169.250.250.250 --dport 22 \
--jump REDIRECT --to-ports 42
让 SSH 留在标准端口上并妥善保护它会更加简单,而且可能更好。使用备用端口只会减慢有动机的攻击者几秒钟的速度。设置像denyhosts/fail2ban这样的入侵防御系统并禁用基于密码的身份验证。或者考虑限制传入 ssh 连接的速率。
看:
答案2
我会使用 Shorewall 来管理 ip 表。它设置了一个不错的基础防火墙,做你想做的事情很简单。向 /etc/shorewall/rules 添加一条规则,例如:
DNAT 网络:169.250.250.250 位置:169.250.250.250 tcp 42 22
与其他人一样,我不确定你为什么在另一个端口上运行 sshd。如果这是一个互联网端口,你可能需要查看端口敲击以保持端口关闭,除非你先访问另一个端口。Shorewall 可以简单地处理这个问题。