我在 DMZ 中拥有一个具有公共 IP 和私有 IP 的 Debian 服务器。我需要能够通过私有端的 SSH 连接到它,然后阻止对公共地址的所有访问。/etc/hosts.deny 和 sshd_config 似乎都只允许一个阻止传入的 IP 地址。我真正想要的是禁用公共 IP 的 SSH 连接。我一直在尝试 iptables,但也没有成功。
任何帮助都将受到赞赏。
--编辑因此,收集我迄今为止的尝试列表:
- SSH
- iptables
iptables -I INPUT -d $public_ip -p tcp --dport 22 -j REJECT
- /etc/hosts.deny-
sshd: ALL except 192.168.2.12 $DHCPaddressrange : deny
插入。 - 网络状态- 的结果
netstat -tunlp | grep 22
到目前为止,/etc/init.d/ssh 和 /etc/init.d/network 已经重新启动。
尝试连接服务器时已使用内部和外部网络连接。两者都可以通过公共地址访问。
- 编辑
它还活着!显然我们的访客网络获得了访问权限,但效果并不理想,但我尝试通过 SSH 从我们的访客网络和没有 SSH 的手机进行连接。显然,除非我在我们的网络之一上,否则我无法访问它。不过我发现那里存在一些防火墙问题。
谢谢你们的回复。
答案1
您可以使用 来执行此操作iptables -I INPUT -d $public_ip -p tcp --dport 22 -j REJECT
,或者您可以将 sshd 绑定为仅在您的私有 IP 上ListenAddress $private_ip
监听/etc/ssh/sshd_config
。
答案2
您可以通过配置 sshd 不监听公共地址来实现这一点。默认情况下,sshd 监听所有本地地址,您可以使用以下ListenAddress
指令更改此设置/etc/ssh/sshd_config
ListenAddress private.ip.add.ress
重新启动 sshd,然后您就可以开始了,但是在退出用于进行更改的会话之前请进行测试。
如果您有多个想要监听的私人地址,您可以在其自己的 ListenAddress 指令中指定每个地址。
答案3
如果你使用 2 个接口,你可以将 ssh 配置为只监听其中一个接口!在你的 sshd_conf 中,你会发现一行
ListenAddress 0.0.0.0
这将绑定每个接口来监听 ssh!
现在将其更改为内部设备的 IP,例如:
ListenAddress 192.168.0.1
重新启动 ssh,现在 ssh 将只监听内部接口!