SSHサーバーを保護する

SSHサーバーを保護する

私は、http と https の Apache、jabber、管理用の openssh サーバーなど、いくつかのサービスを実行している debian マシンを持っています。ssh サーバーはポート 22 では実行されていません。ポート 62111 のようなところで実行されています。openssh は fail2ban で保護されています。そのため、攻撃者がポート 62111 で ssh に接続しようとすると、2 回試行した後で、ポート 62111 で fail2ban によって 2 日間禁止されます。

ポート22で(偽の)SSHサーバーを起動し、誰かがそのポートに接続しようとすると、そのポートで禁止されるようにしたい。全てポートは iptables によって永久に、または少なくとも iptables ルールを削除するまでは、iptables によって制御されます。すべての管理者が正しい SSH ポートを知っているため、合法的な SSH 接続はポート 22 に SSH しようとしません。

攻撃者はまずポート 22 を攻撃しようとするというのがその考え方です。したがって、攻撃者はポート 62111 に SSH で接続する機会すらありません。私は、クラッカーが自分の Web サイトを見ることなど気にしません。したがって、どのポート (80 と 443 を含む) でも、攻撃者をブロックしても問題ありません。

これを実行する方法について何か提案はありますか?

答え1

偏執狂の人のために別の解決策を提案してみます:)

http://www.portknocking.org/view/

これは、一連の定義済みの閉じたポートへの接続試行を要求することによって機能します。正しい順序のポート「ノック」(接続試行)を受信すると、ファイアウォールは特定のポートを開いて接続を許可します。

もちろん、SSH キー認証のみです。

答え2

良い考えではない(私見)。

ポート 22 に接続しているからといって、誰かがサーバーに侵入しようとしているとは限りません。

サーバーをハッカーやクラッカーから保護するには、いくつかの簡単なルールに従ってください (例)。

  • fail2banのようなツールを賢く使う
  • サービス(ssh、httpなど)を常に最新の状態に保つ
  • 強力なパスワードを使用する(そして定期的に変更する)
  • sshd に ssh-keys を使用し、パスワード認証を無効にする

答え3

他のポートで sshd を実行し、同じ fail2ban などを使用したい場合、ここで非常に優れた同様のマニュアルを見つけました:http://www.kudos.be/multiple_sshd

ここに再投稿して変更します:

目標は、2 つの異なるポートで同じデーモンを実行し、1 つのインスタンスであらゆる種類の認証を無効にすることです。

  1. 設定をコピー:

    cd /etc/ssh/sshd_config /etc/ssh/sshd_config-fake

  2. これに従って設定を変更します。

    Port、、SyslogFacility文字列を変更する*Authentication(偽の場合は無効にする)、PidFile

  3. シンボリックリンクを作成: ln -s /usr/sbin/sshd /usr/sbin/sshd-fake

  4. init スクリプトを作成し、 cp /etc/init.d/sshd /etc/init.d/sshd-fakeそれに応じて sshd-fake ファイルの内容を変更します。

  5. /etc/sysconfig/sshd-fake を変更します:OPTIONS="-f /etc/ssh/sshd_config-fake"

  6. サービスを追加chkconfig --add sshd-fake

  7. PAM 構成を作成します:cp /etc/pam.d/sshd /etc/pam.d/sshd-fake

  8. /etc/pam.d/sshd-fake を編集してすべてを禁止するか、ファイルにリストされているユーザーを許可するなどの別の方法を使用します。http://linux.die.net/man/8/pam_listfile

  9. サービスを再起動する:service sshd restart;service sshd-fake restart;chkconfig sshd-fake on

  10. それに応じてfail2banを設定する

答え4

これは最もエレガントではないかもしれませんが、迅速かつ機能的であるはずです。

iptables -I INPUT --m recent --name blocked --rcheck -j DROP
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --name blocked --set

説明:

入力チェーンにファイアウォール ルール (先頭) を挿入します。このルールは、パケットの送信元アドレスが現在「ブロック」リストに含まれているかどうかを確認し、含まれている場合はドロップします。

入力チェーンに、ポート 22 への接続試行の送信元アドレスを「ブロック」リストに追加する別のファイアウォール ルール (先ほど挿入したものの上に) を挿入します。

実際に (偽の) サーバーを実行したり、ポート 22 でリスナーを実行したりする必要性はまったくないと思います。

編集:私の回答を見ると、おそらくブロックリストをタイムアウトさせるには、他の方法でタイムアウトさせる必要があると思います。

「永遠に、または少なくとも iptables ルールを削除するまで」

動的 IP アドレスからのヒットが大量に発生し、後で (数時間または数分以内に) 正当なユーザーに再割り当てされるためです。

見る:http://www.netfilter.org/documentation/HOWTO/netfilter-extensions-HOWTO-3.html#ss3.16

関連情報