我有一台带有 docker 和 UFW 防火墙的服务器(我知道它可能会发生冲突,因为 docker 尽管有 UFW 规则但仍打开了一些端口)但是:
当我从外部在随机关闭的端口上远程登录该服务器时,远程登录停留在“试...“而不是发送”拒绝连接”
如果我转到服务器并使用 telnet 127.0.0.1 7777 执行相同操作,我会得到“拒绝连接”
任何想法 ?
答案1
许多防火墙会“隐藏”端口,而不是实际“关闭”它。这意味着,它不会肯定地发回“连接被拒绝”,而是会浪费客户端的时间,使其认为自己会在超时之前收到响应。这样一来,潜在攻击者的端口扫描就没那么有用了,因为无法判断哪些端口实际上已关闭,哪些端口背后可能只是缓慢或当前无响应的服务。这也意味着狡猾的攻击者无法让目标变得浪费它是时间发送大量“抱歉,我们已关闭”数据包而不是什么也不发送。
答案2
尽管最常用的防火墙规则是allow
和deny
,但通常还有另一种选择可用,通常称为reject
。 UFW也有。
“拒绝”和“拒绝”之间的区别在于,“拒绝”使防火墙完全忽略收到的数据包,而“拒绝”则使防火墙始终发送适当的“抱歉,我们已关闭”代表实际收件人,无论是否有任何服务实际侦听传入连接。
大多数操作系统,甚至任何半像样的防火墙,总是会为发送“抱歉,我们已经关闭”数据包的任务赋予非常低的优先级 - 因此,如果系统有任何稍微更重要的事情要做,无论是否有防火墙,这些数据包都会被延迟或完全忽略。
因此,如果您想阻止防火墙中的某些内容,但需要对该端口的任何连接尝试快速失败并出现明显的“连接被拒绝”错误,请reject
在防火墙中使用规则而不是默认规则deny
。