私が使用しているサーバーはUbuntu 10.10です。セキュリティを確保するために、サーバーがクライアントに送信するバナーを編集します。
ポート22でホストにtelnetを実行すると、実行しているSSHの正確なバージョンが表示されます(SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu4)。状況は、MySQLとCyrusでも同じです。
助言がありますか?少なくともSSHの場合は?
ありがとう
私が使用しているサーバーはUbuntu 10.10です。セキュリティを確保するために、サーバーがクライアントに送信するバナーを編集します。
ポート22でホストにtelnetを実行すると、実行しているSSHの正確なバージョンが表示されます(SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu4)。状況は、MySQLとCyrusでも同じです。
助言がありますか?少なくともSSHの場合は?
ありがとう
回答:
SSHデーモンのバージョン番号を隠すことは非常に困難ですが、Linuxバージョン(Debian-3ubuntu4)は簡単に隠すことができます
次の行を追加します /etc/ssh/sshd_config
DebianBanner no
SSHデーモンを再起動します:/etc/init.d/ssh restart
またはservice ssh restart
これらを非表示にしても、サーバーは保護されません。システムが実行しているものをフィンガープリントするには、さらに多くの方法があります。特にSSHの場合、バージョンの発表はプロトコルの一部であり、必須です。
バージョンアナウンスを実際に変更することはできないと確信しています。
sshdを保護する最良の方法は次のとおりです。
最初の3つは、/ etc / sshd_configを変更することで実行できます
4番目は、使用しているファイアウォールソフトウェアによって異なります。
上記のように、バージョン番号の変更は
私が提案するのは、ポートノッキングの実装です。サーバー上で実行されているものをすべて隠すのは、かなり簡単な手法です。
良い実装は次のとおりです。 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
(ここで何が起こっているかは明らかです...)
接続が確立されたら、ポートを閉じることができます。ヒント:キー認証を使用します。それ以外の場合は、パスワードを非常に高速に入力する必要があります。