web-dev-qa-db-ja.com

Ubuntu OpenSSHサーバーをブルートフォース攻撃から保護しますが、ファイアウォールやSSHキーペアはありませんか?

Ubuntu 16.04を使用して、特別な方法でSSH認証を強化しようとしています。

現状:

最小限のUbuntuサーバーを使用するマシンがあります。主にファイルの転送先ローカル経由OpenSSHサーバー。現在、いくつかの理由からそのマシンにファイアウォールがありません。また、キーペアの使用も避けているため、パスワードのみを使用しています。ブルートフォース攻撃から防御するために私が残した唯一の方法の1つであり、現時点で最も望ましい方法は、Yの接続が試行された後、X時間にわたってユーザーをブロックするメカニズムを使用することです。

望ましい状況:

総当たり攻撃から防御する方法としてYの接続が試行された後、Xの時間にわたってユーザーをブロックするスタンドアロンメカニズム(つまり、ファイアウォールの一部としてではない)が必要です。

私の質問:

希望する状況を実現できるユーティリティ(および特定の構成)を知っていますか?

1
JohnDoea

Fail2banでこれを行うことができます。

Sudo apt-get install fail2ban

次に:

Sudo vim /etc/fail2ban/jail.conf

bantimeを編集して、希望する禁止時間を設定します

maxretryを編集して最大失敗試行回数を設定します

他のコメントで述べたように、fail2banにはiptablesが必要です。


別のオプション-ポートノッキング:

これにはiptables、実質的に0メモリのみが必要で、ポートスキャンからサービスを効果的に隠します

直接質問に答えるわけではありませんが、繰り返し試行を禁止する代わりに、ポートのノッキングを実装してサービスの可用性を隠すことができます。

簡単なグーグル検索でこれが明らかになります: https://www.digitalocean.com/community/tutorials/how-to-configure-port-knocking-using-only-iptables-on-an-ubuntu-vps =

ただし、iptablesは必要です。

追伸:あいまいさによるセキュリティはまったくセキュリティではないことは知っていますが、他のプラクティスと併せて、より困難なターゲットにするのに役立ちます。

5
sergtech

この回答は、主な質問を満足させるための可能な方法を提供することを意図しています:ブルートフォース攻撃からUbuntu OpenSSHサーバーを保護しますが、ファイアウォールまたはSSHキーペアはありませんか?

実際には、ファイアウォールとSSHキーのペアを使用することを好み、実際に役立つためにDoug Smythiesから 回答 が提供されています。

2要素認証でSSHを保護する

二要素認証(2FA)は 多要素認証 の一種です。この例では、2FAは次の2つの異なるコンポーネントの組み合わせを使用して、ユーザーが主張するIDを確認します。

  • 時間ベースの6桁のトークンコード-認証コード。デフォルトでは、これらのトークンは30秒間有効であり、タイムスキューの可能性を補うために60秒が追加されます。

  • ユーザーのパスワード、それ自体は 十分に安全 でなければなりません。

実際、PermitRootLogin noを設定し、ユーザー名が適切に選択されている場合、この方法は3FAと呼ぶことができます。

さらに、ログインしているコンピューターが総当たりログイン試行に対して強化されていない場合は、認証モジュールのレート制限を有効にできます。

さぁ、始めよう:

1.依存関係をインストールする

Sudo apt-get install libpam-google-authenticator

2.構成ファイルを編集します

  • /etc/pam.d/sshdを編集して、このディレクティブを追加します。

    # Google Authenticator
    auth required pam_google_authenticator.so
    

    ファイルの先頭に追加します。このようにして、システムは最初の認証コードを要求し、その後だけパスワードを要求します。ファイルの最後に追加します-システムは最初のパスワードを要求します。

  • /etc/ssh/sshd_configを編集し、これらのディレクティブを変更または追加します。

    ChallengeResponseAuthentication yes
    UsePAM yes
    PasswordAuthentication no           # You can leave this 'yes' it doesn't matter.
    

3.ユーザーの2要素認証をアクティブにします

2要素認証を使用するユーザーに切り替えて、ターミナルに入力します。

 $ google-authenticator Enter
 
認証トークンを時間ベース(y/n)にしたいですか yEnterhttps://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/user@Host%3Fsecret%3DE3CY3TNSNBXXXXXX
新しい秘密鍵は次のとおりです。 E3CY3TNSNBXXXXXX
確認コードは229999 
緊急スクラッチコードは次のとおりです。
 19999711 
 ... 
 
 「/home/user/.google_authenticator」ファイルを更新します(y/n) yEnter
 
同じ認証トークンの複数の使用を禁止しますか?これにより、30秒ごとに1回のログインに制限されますが、man-in-the-middle攻撃
(y/n) yEnter
 
デフォルトでは、トークンは30秒間有効です。クライアントとサーバー間のタイムスキューを補正するために、現在時刻の前後に追加のトークンを許可します。時間の同期に問題がある場合は、ウィンドウをデフォルトのサイズである1:30分から約4分に増やすことができます。そうしますか
(y/n) yEnter
 
ログインしているコンピューターが強化されていない場合 ブルートフォースログイン試行に対して、レート制限を有効にできます 認証モジュール用。デフォルトでは、これにより、攻撃者は30秒ごとに3回までのログイン試行に制限されます。レート制限を有効にしますか
(y/n) yEnter

このダイアログは、ユーザーのホームディレクトリに配置される.google_authenticatorという認証ファイルを生成します。すべてのユーザーが同じトークンを使用する場合、このファイルは他のユーザーのアカウントにも使用できます。さらに、このファイルはカスタマイズでき、 Apache2内の2FA にも使用できますが、これは別の話です。

4.認証コードを生成する

上記の手順で生成された秘密キー-E3CY3TNSNBXXXXXX-は、一部のアプリケーション内での認証コードの生成に使用されます。

5.使用例

この例では、Chromium/ChromeのAuthenticator拡張機能が使用されています。

enter image description here

6.さらに読む


編集:

場合によっては、Googleの時計とサーバーの時計との間に差がある可能性があります。この問題に関するいくつかのヒントを次に示します。

残念ながら :VPSの場合、これを行う権限がない可能性があります... VPSを使用している場合は、プロバイダーに連絡して処理してください。

プロバイダーが要件に対応したくない場合、上記のセットアップは機能しますが、タイムシフトが必要です。サーバーのコンソールでdateと入力し、このタイムシフトを測定します。次に、認証コード生成の瞬間とその使用の瞬間の間のこのタイムシフトを使用します。

7
pa4080

そのような保護のために何かをインストールする必要はありません-あなたの iptables system に関連するルールを追加するだけです。

1.前提条件ルール:

ルールセットの初期段階で、関連するトラフィックがサーバーに戻ることを許可します。

Sudo iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

2.検出およびブロックルール:

動的なBadguyリストを設定します。 SSHでパスワード攻撃を行う不正なIPを検出して削除します。 BADGUYリストに追加されると、システムはすべてのパケットをドロップします。

Sudo iptables -A INPUT -i eth0 -m recent --update --hitcount 3 --seconds 90000 --name BADGUY_SSH -j LOG --log-prefix "SSH BAD:" --log-level info
Sudo iptables -A INPUT -i eth0 -m recent --update --hitcount 3 --seconds 90000 --name BADGUY_SSH -j DROP
Sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -m recent --set --name BADGUY_SSH -j ACCEPT
  • 上記のコードでは、90000秒(25時間)がブロック時間です。

  • ブロックされたIPアドレスからのすべての試行は、SSHに関連していない場合でも(他のルールがある場合とない場合、および順序によって)、ブロック時間タイマーをリセットします。

3.検出の強化:

接続ごとの不正なパスワードの数を2に制限します。デフォルトは6です。

Sudoとして/etc/ssh/sshd_configを編集すると、次のように設定されます:

    MaxAuthTries 2
5
Doug Smythies