我在非标准端口上运行个人 ssh 服务器。如果有人尝试通过标准端口 22 登录我的 ssh 服务器,服务器似乎会发送“连接被拒绝”消息。
$ ssh localhost
ssh: connect to host localhost port 22: Connection refused
我怎样才能使它不发送这样的消息并且表现得像没有运行一样?
答案1
服务器没有发送任何内容,而是客户告诉您服务器拒绝连接。如果 TCP 端口关闭当您尝试连接时。
如果你希望你的系统默默地丢弃数据包而不发送“此端口已关闭”的 TCP 应答(所谓的隐身若要阻止任何端口,则需要在系统上和/或系统与客户端之间使用防火墙。
答案2
您已经完成了——当尝试连接到没有任何监听的端口时,操作系统会发送连接被拒绝响应。
答案3
您所看到的很可能是您的客户对ICMP 端口不可达服务器在收到第一个 TCP SYN 数据包(针对不接受连接的端口)时发送此消息。这是正确的行为,并且允许客户端快速告知您。
如果您实际上指的是“此主机不存在、已死或离线且不发送任何内容”的隐身,请配置防火墙以丢弃(而不是拒绝)发往此端口的任何数据包。假设 netfilter/iptables:
iptables -I INPUT -p tcp --dport 22 -j DROP
这会导致客户端挂起一段时间,因为它无法确定响应是否正在传输中或不存在。
注意:这实际上会立即终止所有连接,包括正在运行的连接。Molly 开关警报!