防止 SSH 通告其版本号

Ler*_*kun 16 security linux

我使用的服务器是 Ubuntu 10.10。为了确保安全,我想编辑服务器发送给客户端的横幅。

如果我通过端口 22 telnet 到我的主机,它会告诉我我正在运行的 SSH 的确切版本 (SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu4)。MySQL 和 Cyrus 的情况相同。

有什么建议?至少对于SSH?

谢谢

Har*_*ers 46

虽然隐藏 SSH 守护程序的版本号非常困难,但您可以轻松隐藏 linux 版本 (Debian-3ubuntu4)

将以下行添加到 /etc/ssh/sshd_config

DebianBanner no
Run Code Online (Sandbox Code Playgroud)

并重新启动您的 SSH 守护进程:/etc/init.d/ssh restartservice ssh restart

  • 谢谢,这完美地工作!我同意删除版本信息是默默无闻的安全性,并且可能会引入它解决的更多问题。但是对于 Debian,OpenSSH 不仅会宣布它自己的版本,还会宣布操作系统的版本和特定风格 - 即“SSH-2.0-OpenSSH_6.7p1 Raspbian-5+deb8u3”。恭喜,没有任何类型的身份验证,您现在知道您正在与运行 Raspbian 的 RaspberryPi 通话,您的下一个明显步骤是尝试使用默认密码作为“pi”连接。恕我直言,这是在第一次约会时泄露了很多信息。 (10认同)

bah*_*mat 20

隐藏这些不会保护您的服务器。还有更多方法可以对系统正在运行的内容进行指纹识别。特别是对于 SSH,版本公告是协议的一部分并且是必需的。

http://www.snailbook.com/faq/version-string.auto.html

  • “对你的系统了解的人越少越好”。是的,这句话听起来不错,但作用不大,比如“如果我中了彩票,我就会……”。通过默默无闻的安全性充其量只是糟糕的安全性。 (10认同)
  • @lerikun:这不是与可怕的黑客分享它。这是关于 SSH 无法连接,因为它不知道要使用什么协议。SSHD 必须宣布。 (3认同)
  • 就其价值而言,罗伯特莫尔是完全正确的。 (2认同)

Jef*_*and 18

几乎普遍地,识别横幅是编译代码的一部分,并且没有配置选项来改变或抑制它们。您将不得不重新编译这些软件。

  • 它不仅被编译进来,还被客户端用来确定兼容的连接级别。 (6认同)

Bar*_*Vos 9

如上所述,更改版本号是

  1. 难做
  2. 通过默默无闻的安全
  3. 不灵活

我的建议是实施端口敲门。隐藏服务器上运行的任何内容是一种相当简单的技术。

这是一个很好的实现:http : //www.zeroflux.org/projects/knock

这就是我在我的服务器(其他号码)上实现它的方式,只向知道“秘密敲门”的人开放 SSH:

[openSSH]
    sequence = 300,4000,32
    seq_timeout = 5
    command = /opencloseport.sh %IP% 2305
    tcpflags = syn
Run Code Online (Sandbox Code Playgroud)

这将提供一个 5 秒的窗口,其中需要以正确的顺序接收 3 个 SYN 数据包。选择相距较远且不连续的端口。这样,端口扫描器就不会意外打开端口。这些端口不需要被 iptables 打开。

我调用的脚本就是这个。它为发送 SYN 数据包的 IP 打开一个特定端口 5 秒。

#!/bin/bash
/sbin/iptables -I INPUT -s $1 -p tcp --dport $2  -j ACCEPT
sleep 5
/sbin/iptables -D INPUT -s $1 -p tcp --dport $2  -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

发送 SYN 数据包真的很痛苦,所以我使用脚本连接到我服务器的 SSH:

#!/bin/bash
knock $1 $2
knock $1 $3
knock $1 $4
ssh $5@$1 -p $6
Run Code Online (Sandbox Code Playgroud)

(很明显这里发生了什么......)

建立连接后,可以关闭端口。提示:使用密钥认证。否则,您需要非常快地输入密码。


Sat*_*ppy 8

我很确定您实际上无法更改版本公告。

保护 sshd 的最佳方法是:

  1. 更改默认端口号。
  2. 禁止 root 登录。
  3. 强制协议 2(假设默认情况下未完成)。
  4. 将允许 SSH 进入的服务器列入白名单。

前三个可以通过修改/etc/sshd_config来完成

第四个取决于您使用的防火墙软件。