私は、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 つのインスタンスであらゆる種類の認証を無効にすることです。
設定をコピー:
cd /etc/ssh/sshd_config /etc/ssh/sshd_config-fake
これに従って設定を変更します。
Port
、、SyslogFacility
文字列を変更する*Authentication
(偽の場合は無効にする)、PidFile
シンボリックリンクを作成: ln -s /usr/sbin/sshd /usr/sbin/sshd-fake
init スクリプトを作成し、
cp /etc/init.d/sshd /etc/init.d/sshd-fake
それに応じて sshd-fake ファイルの内容を変更します。/etc/sysconfig/sshd-fake を変更します:
OPTIONS="-f /etc/ssh/sshd_config-fake"
サービスを追加
chkconfig --add sshd-fake
PAM 構成を作成します:
cp /etc/pam.d/sshd /etc/pam.d/sshd-fake
/etc/pam.d/sshd-fake を編集してすべてを禁止するか、ファイルにリストされているユーザーを許可するなどの別の方法を使用します。http://linux.die.net/man/8/pam_listfile
サービスを再起動する:
service sshd restart;service sshd-fake restart;chkconfig sshd-fake on
それに応じて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