我在非标准端口上运行个人ssh服务器。 如果有人试图通过标准端口22login到我的SSH服务器,似乎服务器发送“连接被拒绝”消息。
$ ssh localhost ssh: connect to host localhost port 22: Connection refused
我怎样才能使它不发送这样的消息,它的行为就像没有运行?
服务器没有发送任何东西, 客户端告诉你服务器拒绝连接。 如果在尝试连接时TCP端口已closures ,则这是预期的行为。
如果您希望系统在不发送“此端口已closures”的情况下悄悄丢弃数据包,则需要在系统上和/或在它与客户端之间使用防火墙。
你已经做到了 – 连接被拒绝的响应是由操作系统发送的,当试图连接到一个没有任何监听的端口时。
你所看到的很可能是你的客户端对ICMP端口的反应-服务器在接收到不接受连接的端口的第一个TCP SYN数据包时发送的不可达的ICMP端口 。 这是正确的行为,并允许客户快速告诉你。
如果你的意思是隐藏的,就像“这个主机不存在,死机或者离线,并且根本不发送任何东西”,把你的防火墙设置为丢弃(而不是拒绝)到这个端口的数据包。 假设netfilter / iptables:
iptables -I INPUT -p tcp --dport 22 -j DROP
这导致客户挂了一段时间,因为它不能确定一个响应是否在运输或不存在。
注意:这实际上会立即终止所有连接,包括正在运行的连接。 莫莉切换警报!
服务器networking堆栈正在发送数据包以响应客户端TCP连接尝试。
当客户端程序发送一个TCP SYN数据包来请求连接时,根据捕获的数据包的检查, 设置了ACK和RST标志的应答数据包被分类为连接被拒绝错误 。 没有服务正在监听端口,并且端口被closures。
此外DROP不是一个“ 礼貌的目标”,因为它使客户的networking晦涩难懂。 应谨慎使用DROP。
如果你真的想要一个端口是一个很好的攻击者的敌人,你可能会对tarpit iptables模块感兴趣
如果你想迷惑你的攻击者,你可以joinREJECT目标,并使用exception组合的ICMP错误代码和–reject-type :
拒绝
–reject – 与types
给出的types可以
ICMP网无法到达
ICMP主机不可达
ICMP端口不可达
ICMP-原可达
ICMP网禁止
icmp-host-prohibited或者
ICMPpipe理员禁止
你可以用fwknop完全隐藏你的ssh端口,同时在iptables设置一个默认的拒绝策略来静默丢弃数据包。 所有nmap将会看到的是公共服务。
随着fwknop的部署,任何使用nmap来查找SSHD的人甚至不能告诉它正在监听 – 如果他们想运行一个针对SSHD的密码破解程序,或者即使他们有0天的漏洞,也没有什么区别。
请参阅我的fwknop指南和相关页面以获取安全的ssh密码。