阻止SSH发布其版本号


13

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

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

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

谢谢


5
我希望您也意识到,要确保服务器安全,不仅仅需要删除这些横幅即可。
Ben Pilbrow 2010年

10
该信息基本上无关紧要,无论您的服务器提供什么版本信息,机器人都会尝试在较旧版本上起作用的黑客手段。恶意攻击您的服务器的用户最少是您的后顾之忧。粗心的使用者通常更加危险。
克里斯·S

本,我想我知道我在问什么。而且我知道如何保护NIX服务器。克里斯,在黑暗中摸索也很好。不管
发出什么声音

只要您知道这是要做的许多事情之一,就可以了。我不想让您以为您的系统超级安全,就这样而已。
Ben Pilbrow 2010年

正如Auticracy指出的那样,我至少要隐藏“ Debian-3ubuntu4”。
Lerikun 2010年

Answers:


17

几乎所有情况下,标识标语都是已编译代码的一部分,并且没有配置选项来更改或隐藏它们。您将不得不重新编译这些软件。


谢谢。唯一真正有用的答案在这里。关于TCP包装器,他们只是添加一个横幅但不隐藏实际信息怎么办?
Lerikun 2010年

6
它不仅被编译,还被客户端用来确定兼容的连接级别。
杰里米·布斯

32

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

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

DebianBanner no

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


7
谢谢,这很完美!我同意删除版本信息是一种默默无闻的安全措施,并且可能会引入更多解决的问题。在Debian中,OpenSSH不仅宣布自己的版本,而且还宣布了操作系统的版本和特定风格-即“ SSH-2.0-OpenSSH_6.7p1 Raspbian-5 + deb8u3”。恭喜,没有任何类型的身份验证,您现在知道您正在与运行Raspbian的RaspberryPi进行通信,接下来的显而易见的步骤是尝试使用默认密码作为“ pi”进行连接。恕我直言,这是在第一天就给很多信息提供了方式。
Saustrup

辉煌,这里发现的最好的隐藏宝石之一。
Rui F Ribeiro

19

隐藏这些将无法保护您的服务器。还有许多方法可以识别系统正在运行的内容。特别是对于SSH,版本声明是协议的一部分,也是必需的。

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


越来越少的人了解您的系统...您可以不同意。那其他服务呢?我通常在谈论Cyrus(IMAP / POP3)和MySQL等。如果有两个管理员-我不需要遵守协议吗?
Lerikun 2010年

3
@lerikun:这不是要与可怕的黑客共享。关于SSH无法连接,因为它不知道使用哪种协议。SSHD必须宣布。
Satanicpuppy

9
“了解您的系统的人越少越好”。是的,这是一个听起来不错但效果不大的声明,例如“如果我中奖了,我会...”。默默无闻的安全性充其量是最差的安全性。
罗伯·摩尔

1
罗伯特,这是很重要的声明。为什么保险箱在没人看到的黑暗房间里?... 没关系。我不问如何保护服务器。我认为我的问题很明确。是的,我想至少摆脱那些专制政体。
Lerikun 2010年

2
就其价值而言,罗伯特·莫尔是完全正确的。
Sirex 2010年

8

我敢肯定,您实际上不能更改版本公告。

保护sshd的最佳方法是:

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

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

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


1/2/3已经完成。使用证书没有密码。Fail2ban(IMAP,POP,SMTP,VPN,WEB)和denyhosts(SSH)问题是有关其他服务的版本公告。
Lerikun 2010年

6

如上所述,更改版本号是

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

我建议实施Port Knocking。这是一种相当简单的技术,可以隐藏服务器上正在运行的所有内容。

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

这就是我在服务器(其他号码)上实施该协议的方式,以便仅向知道“秘密敲门”的人开放SSH:

[openSSH]
    sequence = 300,4000,32
    seq_timeout = 5
    command = /opencloseport.sh %IP% 2305
    tcpflags = syn

这将提供一个5秒的窗口,其中需要以正确的顺序接收3个SYN数据包。选择彼此相距较远且不连续的端口。这样,portscanner不会偶然打开端口。这些端口不需要由iptables打开。

我叫的脚本就是这个。它为IP发送SYN数据包打开一个特定的端口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

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

#!/bin/bash
knock $1 $2
knock $1 $3
knock $1 $4
ssh $5@$1 -p $6

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.