SSHがバージョン番号を通知しないようにします


13

私が使用しているサーバーはUbuntu 10.10です。セキュリティを確保するために、サーバーがクライアントに送信するバナーを編集します。

ポート22でホストにtelnetを実行すると、実行しているSSHの正確なバージョンが表示されます(SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu4)。状況は、MySQLとCyrusでも同じです。

助言がありますか?少なくともSSHの場合は?

ありがとう


5
また、これらのバナーを削除するだけでなく、サーバーが安全であることを確認してください。
ベンピルブロー

10
その情報はほとんど無関係です。ボットは、サーバーが提供するバージョン情報に関係なく、古いバージョンで機能するハッキングを試みます。悪意を持ってサーバーを攻撃する敵意のあるユーザーは、心配する必要はありません。不注意なユーザーは通常、はるかに危険です。
クリスS

ベン、私は私が尋ねていることを知っていると思う。そして、NIX-Serverを保護する方法を知っています。クリス、暗闇で手探りするのもいい。いびきに関係なく、iptables fail2bansなど
Lerikun

これが多くのことの1つであることを知っている限り、それは大丈夫です。システムが非常に安全であると考えて、これをやめてほしいとは思いませんでした。それだけです。
ベンピルブロー

Auticracyが指摘したように、私は少なくとも「Debian-3ubuntu4」を隠したいです。
レリクン

回答:


17

ほとんどの場合、バナーの識別はコンパイルされたコードの一部であり、バナーを変更または抑制する構成オプションはありません。これらのソフトウェアを再コンパイルする必要があります。


ありがとう。ここで唯一の本当の有用な答え。TCP Wrapperはバナーを追加するだけで、実際の情報を非表示にしませんか?
レリクン

6
コンパイルされるだけでなく、クライアントが使用して互換性のある接続レベルを決定します。
ジェレミーボーズ

32

SSHデーモンのバージョン番号を隠すことは非常に困難ですが、Linuxバージョン(Debian-3ubuntu4)は簡単に隠すことができます

次の行を追加します /etc/ssh/sshd_config

DebianBanner no

SSHデーモンを再起動します:/etc/init.d/ssh restartまたはservice ssh restart


7
おかげで、これは完璧に機能します!バージョン情報を削除することは、あいまいさによるセキュリティであり、解決する問題が増える可能性があることに同意します。Debianでは、OpenSSHは自身のバージョンだけでなく、オペレーティングシステムのバージョンと特定のフレーバー、つまり「SSH-2.0-OpenSSH_6.7p1 Raspbian-5 + deb8u3」を発表します。おめでとう、どんな種類の認証もなしに、あなたはRaspbianを実行しているRaspberryPiと話していることを認識し、次の明白なステップはデフォルトパスワードで「pi」として接続しようとすることです。私見これは、最初の日に多くの情報に道を譲っています。
ザウストラップ

ブリリアント、ここにある最高の隠された宝石の一つ。
ルイFリベイロ

19

これらを非表示にしても、サーバーは保護されません。システムが実行しているものをフィンガープリントするには、さらに多くの方法があります。特にSSHの場合、バージョンの発表はプロトコルの一部であり、必須です。

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


あなたのシステムについて知る人が少なくなれば…あなたは反対することができます。他のサービスはどうですか?私は一般にCyrus(IMAP / POP3)およびMySQLなどについて話しています。そして、2人の管理者がいる場合-私はプロトコルに固執する必要はありませんか?!
レリクン

3
@lerikun:怖いハッカーと共有することではありません。使用するプロトコルがわからないため、SSHが接続できないということです。SSHDが発表する必要があります。
悪魔のような子犬

9
「システムについて知っている人が少ないほど良い」。確かに、それは良いように聞こえますが、あまり役に立たない文です。たとえば、「宝くじに当たったら…」などです。あいまいさによるセキュリティは、せいぜい不十分なセキュリティです。
ロブモワー

1
ロバート、それは多くのことを意味する声明です。なぜ金庫は誰も見えない暗い部屋にあるのですか?... 気にしないで。サーバーを保護する方法を尋ねません。私の質問は明確だったと思います。はい独裁私は少なくともそれらを取り除きたいです。
レリクン

2
それが価値のあることについては、ロバートモアは完全に正しいです。
Sirex

8

バージョンアナウンスを実際に変更することはできないと確信しています。

sshdを保護する最良の方法は次のとおりです。

  1. デフォルトのポート番号を変更します。
  2. ルートログオンを禁止します。
  3. プロトコル2を強制します(デフォルトでは行われていないと仮定)。
  4. SSHが許可されているサーバーをホワイトリストに登録します。

最初の3つは、/ etc / sshd_configを変更することで実行できます

4番目は、使用しているファイアウォールソフトウェアによって異なります。


1/2/3はすでに完了しています。証明書を使用しないでください。Fail2ban(IMAP、POP、SMTP、VPN、WEB)およびdenyhosts(SSH)質問は、他のサービスのバージョンの発表に関するものです。
レリクン

6

上記のように、バージョン番号の変更は

  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

これにより、3秒のSYNパケットを正しい順序で受信する必要がある5秒のウィンドウが表示されます。互いに離れており、連続していないポートを選択します。そうすれば、ポートスキャナーは誤ってポートを開くことができません。これらのポートは、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

SYNパケットを送信するのは非常に面倒な場合があるため、スクリプトを使用してサーバーのSSHに接続します。

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

(ここで何が起こっているかは明らかです...)

接続が確立されたら、ポートを閉じることができます。ヒント:キー認証を使用します。それ以外の場合は、パスワードを非常に高速に入力する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.