Linuxでパスワード入力の試行回数を制限する これは単なる神経質な管理者の癖ではなく、デスクトップ環境とサーバー環境の両方において、ブルートフォース攻撃や不正アクセスを阻止する最も効果的な対策の一つです。コンピュータに機密情報が含まれている場合や、インターネットに接続されている場合は、システムのこの部分を保護する必要があります。 ローカルネットワークを監査する.
強力なパスワードを設定することに加えて、 複数回の障害発生後に一時的または永続的なロックを設定する これは重要なポイントです。攻撃者の速度を遅らせ、監査用のログをより多く生成し、この保護機能を他のパスワードポリシー(有効期限、複雑性、再利用など)と組み合わせることができます。それでは、さまざまなディストリビューションやシステムのさまざまなレベルで、これがどのように実現されているかを、落ち着いて詳細に見ていきましょう。
Red Hat、CentOS、およびその派生OSにおけるログイン試行失敗によるアカウントロックアウト
分布では Red Hatベース(RHEL、CentOS、Rocky、AlmaLinuxなど)試行失敗によるアカウントのブロックは、PAMモジュールで管理されます。 pam_faillockこのモジュールは、ログイン失敗の許容回数、アカウントのロック期間、および影響を受けるユーザー(必要に応じてrootユーザーを含む)を制御します。
このポリシーを適用するには、通常、グローバル PAM ファイルを編集する必要があります。 /etc/pam.d/システム認証 また、一部のバージョンでは、 /etc/pam.d/パスワード認証これらのファイルは、システム上のほとんどの認証サービス(コンソールログイン、sudo、SSHなど)のテンプレートとして機能します。
これらのファイルには、セクション内に次のような行が含まれています。 認証 y アカウント:
auth required pam_faillock.so preauth silent audit deny=2 unlock_time=120
auth pam_faillock.so authfail audit deny=2 unlock_time=120
account required pam_faillock.so
最初の行動 実際の認証前(事前認証)2 番目は認証が失敗したときに実行され、3 番目はフェーズ中にアカウントのロック状態を確認する役割を担います。 アカウントパラメータを変更することで、ポリシーをニーズに合わせて調整できます。
最も一般的なパラメータ pam_faillock 音:
- 監査ログイン試行の詳細なログ記録を有効にし、システムログに痕跡を残します(たとえば、 / var / log / secure).
- 拒否=2これは、アカウントがロックされるまでにパスワード入力に失敗する最大回数を設定します。この例では2回ですが、3回、5回、10回など、回数を増やすことができます。
- ロック解除時間=120:はブロック時間を秒単位で示します。ここでは、アカウントが自動的に再アクティブ化されるまで120秒(2分)になります。
- サイレント存在する場合、 ユーザーにはブロックされたことが表示されない単純にログインを受け付けなくなるため、攻撃者にとってシステムの「冗長性」が低くなる。
重要な詳細の1つは、デフォルトでは、 root はこのブロックから除外されます同じルールをそれにも適用したい場合は、パラメーターを追加する必要があります。 偶数拒否ルート 認証セクションのpam_faillock行に記述してください。これによりセキュリティは強化されますが、ミスが多すぎるとアクセス権を失うリスクも考慮する必要があります。
アカウントがロックされていて、パラメーターを使用しない場合 サイレントシステムは、ユーザーが許可された試行回数を超えたことを警告する明確なメッセージを表示できます。これは、テスト環境で設定を確認する際に役立ちますが、本番環境では通常、あまり多くの情報を提供しない方が良いでしょう。
特定のユーザーのログイン失敗履歴を表示するには、Red Hat システムでは次のコマンドを使用できます。 フェイルロック 興味のあるアカウントを指し示す:
faillock --user lionel
このコマンドは ユーザーはこれまでに何回の試行失敗を記録しましたか?SSH の場合に使用される IP アドレスや監査に関連するその他の詳細などが含まれます。さらに、いつでも以下に表示される内容を確認できます。 / var / log / secureこれらのセキュリティイベントは、ここに記録されます。

DebianおよびUbuntuでログイン試行の失敗によりアカウントがロックアウトされる
の場合 Debian、Ubuntuおよび派生物ロジックは似ていますが、使用するPAMモジュールが異なります。従来は、 pam_tally2 失敗した試行回数をカウントし、アカウントを自動的にブロックしますが、最新バージョンでは移行することが推奨されています。 pam_faillockそれでも、pam_tally2は依然として多くのガイドや環境で広く使われています。
一般的な Debian で、失敗回数に基づいてロックを適用するには、通常、ファイルを編集します。 /etc/pam.d/common-authこれは、ほとんどのローカルサービスにおける標準認証ポリシーを定義するものです。次のような行を追加できます。
auth required pam_tally2.so onerr=fail deny=3 unlock_time=120 audit even_deny_root root_unlock_time=600
この構成では、システムは アカウントは3回のログイン失敗後にブロックされます。通常ユーザーの場合は120秒間、rootユーザーの場合は600秒間ロックを維持します。さらに、モジュールでエラーが発生した場合(onerr=失敗セキュリティ上の理由から、アクセスは許可されるのではなく拒否されます。
主なパラメータ pam_tally2 音:
- onerr=失敗試行回数カウンターの読み取りまたは更新に問題が発生した場合、意図せず認証が解除されないことを防ぐため、認証は拒否されます。
- 拒否=3アカウントがロックされるまでに許容される最大失敗回数。実際には、3という値が妥当な場合が多い。
- ロック解除時間=120: 標準ユーザーの場合、アカウントがロックされたままになる時間(秒)。
- 監査: 認証失敗情報をログに記録します (Debian では通常、 /var/log/auth.log).
- 偶数拒否ルート: このロックシステムにおいてルート権限もカウントされるように強制します。これは慎重に使用する必要があります。
- ルートロック解除時間=600: 他のユーザーとは独立して、ルートアカウントにのみ適用される特定のロック時間(秒単位)。
ブロック機能が有効になると、ログイン試行回数が多すぎるためアカウントが一時的に無効になったことを示すメッセージがユーザーに表示されます。これにより、管理者は不審な行動を検知し、ユーザーに何らかの問題が発生していることを知らせることができます。
記録された失敗した試行を表示するには pam_tally2 特定のユーザー(例えば、lionel)に対しては、以下を使用できます。
pam_tally2 -u lionel
このコマンド 累積故障数を示します また、必要に応じてカウンターを手動でリセットすることも可能で、追加オプションも用意されています。さらに、Red Hatと同様に、いつでも確認するオプションがあります。 /var/log/auth.log 各認証試行で何が起こったのかをより詳細に確認するため。
MaxAuthTries を使用して SSH の試行回数を制限する
Linuxサーバーで最も一般的なエントリーポイントの1つは SSHそのため、接続ごとに許可される認証試行回数を制御することが非常に重要です。ここでポリシーが重要な役割を果たします。 MaxAuthTriesこれはファイルで設定されています /etc/ssh/sshd_config OpenSSHサーバーから。
アイデアはシンプルです: MaxAuthTries は、SSH 接続ごとに許可される認証試行の最大回数を定義します。この制限を超えると、サーバーは接続を切断し、攻撃者は組み合わせを試行し続けるために新しいセッションを開始せざるを得なくなるため、自動化された総当たり攻撃の速度が大幅に低下する。
設定するには、設定ファイルを編集するだけです。
sudo nano /etc/ssh/sshd_config
次に、次のような行を探すか追加します。
MaxAuthTries 3
この値では、 SSH接続ごとに許可される認証試行回数は3回までです。ユーザーが同じ間違いを複数回繰り返すと、sshdデーモンはログアウトします。変更を有効にするには、サービスを再ロードまたは再起動する必要があります。例えば、以下のように実行します。
sudo systemctl restart sshd
MaxAuthTries は pam_tally2 や pam_faillock などの PAM モジュールを置き換えるものではなく、 並行して動作するSSHサーバーは、1回のセッションで許可される連続試行回数を制御する一方、PAMはユーザーごとにグローバルな試行回数を保持し、システムレベルでアカウントをブロックすることができます。
MaxAuthTriesに加えて、他のSSHセキュリティ対策を組み合わせることで、サービスの堅牢性を大幅に向上させることができます。
- デフォルトのポートを変更するポート22の使用をやめて、SSHをより目立たないポートに移動すると、多くの基本的な自動スキャンをフィルタリングするのに役立ちます。
- パスワードだけでなく公開鍵も使用してください。SSHキーを使用した認証は、脆弱なパスワードの問題を解消し、ブルートフォース攻撃に対してはるかに堅牢です。
- ファイアウォールを使用して送信元を制限するか、DMZを構成してください。特定のIPアドレスまたはネットワーク範囲からのみSSH接続を許可するように設定することで、ネットワークレベルで非常に効果的な障壁を設けることができます。
PAMを使用してローカル認証の試行を制限する
SSHを超えて、 ローカル認証 (コンソール、TTY、sudo、グラフィカルディスプレイマネージャ) も PAM で管理されます。たとえば、Debian と Ubuntu では、ファイル /etc/pam.d/common-auth これはこの構成の中核であり、Red Hat システムではその役割を果たします システム認証 (場合によってはパスワード認証も必要となる。)
pam_faillock や pam_tally2 のような専用のブロックモジュールに加えて、一部のディストリビューションでは、ログイン試行回数と時間を直接制限することができます。 login.defsこのファイルは、 /etc/login.defs以下のような値が宣言されます。
- ログイン_再試行ログインプロンプトで処理を中止するまでに許可される最大再試行回数。
- ログインタイムアウトログインセッションがユーザー入力を待機できる最大時間(秒単位)。
例えば、調整すると ログイン_再試行 パスワードの制限が3回の場合、ユーザーは1回のログインセッションでパスワードを3回しか入力できず、それ以上入力するとシステムがその試行を終了し、プロセスをやり直す必要があります。これはアカウント自体をロックするわけではありませんが、 セッションごとの試行回数を制限する.
同じファイル内 login.defs その他、以下のような関連するセキュリティパラメータも調整できます。
- PASS_MAX_DAYSパスワードを強制的に変更されるまでに使用できる最大日数。
- PASS_MIN_DAYS: パスワード変更の間隔を最低何日間空けるか。過度に頻繁な変更や「連鎖」による変更を避けるため。
- PASS_WARN_AGEパスワードの有効期限が切れる前に数日前に通知することで、ユーザーが対応する時間を確保できるようにする。
- パス_最小長さ y PASS_MAX_LENパスワードの最小および最大文字数。
- PASS_ALWAYS_WARNパスワードが特定の強度基準を満たしていない場合に警告を発します。
- パス_変更_試行新しいパスワードが簡単すぎると判断された場合の、パスワード変更の最大試行回数。
- ENCRYPT_METHOD: パスワードに使用するハッシュアルゴリズム (今日では一般的には SHA-512、として示される $ $ 6).
これらの指令は主に 新しい利用者 これらはlogin.defsを調整した後に作成されるため、組織全体の基本ポリシーを確立するのに便利な方法です。
/etc/shadowとchangeコマンドを使用して試行回数と有効期限を管理する
ファイル / etc / shadow ここに、ローカルユーザーの暗号化されたパスワードと有効期限情報がシステムによって保存されます。これらのパスワードは毎日手動で変更されるわけではありませんが、その構造を理解することは、セキュリティポリシーの監査と改善に大いに役立ちます。
各行で / etc / shadow コロンで区切られた複数の項目が表示されます。当社のポリシーに最も関連性の高い項目は以下のとおりです。
- ユーザー名:残りのフィールドが属するアカウントを識別します。
- 暗号化されたパスワード: は次のように保存されます $id$salt$hashedどこで $id$ アルゴリズムを示します(1ドルMD5, 2a/2y$ フグ, 5ドル SHA-256, 6ドル SHA-512)、続いて塩とハッシュ。
- 最終パスワード変更: 1970年1月1日(エポック)から最後に変更されてからの日数。
- 最低および最大利用日数パスワードを再度変更できるタイミングと有効期限は、彼らが管理します。
- 有効期限通知日数有効期限の何日前からユーザーに通知を開始しますか。
- 活動のない日々パスワードの有効期限が切れてから、アカウントが完全に無効になるまでどれくらい時間がかかりますか?
- 絶対アカウント有効期限: また、1970年以降は日数形式でも表示され、そのユーザーのログインが許可されなくなった時点を示します。
/etc/shadow を直接変更せずにこれらのパラメータを管理するには、次のコマンドを使用します。 chage (年齢を変える)これにより、特定のユーザーのパスワードとアカウントの有効期限を調整できます。
一般的な選択肢としては chage 音:
- -d、-最終日: 最後のパスワード変更日を設定します(エポックからの日数形式、または読みやすい日付形式)。
- -E、-有効期限アカウントの有効期限日を設定します。
- -I、-非アクティブ: パスワードの有効期限が切れてから一定日数経過後、アカウントを非アクティブとしてマークします。
- -m、-分日: パスワード変更間の最小日数を定義します。
- -M、-maxdays: パスワードが有効な最大日数を示します。
- -W、-警告日: 有効期限の何日前から通知を開始するかを設定します。
- -l、–list: ユーザーの現在の有効期限ステータスを表示します。
例えば、ユーザーの有効期限情報を確認する場合 ペペ 実行方法:
chage -l pepe
出口は以下を示します 最終変更日、パスワードの有効期限の有無、非アクティブ期間、最小および最大日数…その他データも含まれます。このツールを使用すると、ポリシーを個別に、ユーザーごとに適用したり、アカウントグループ全体を処理するスクリプトに適用したりできます。
pam_cracklibとpam_pwqualityを使用したパスワード複雑性ポリシー
パスワードの入力試行回数を制限するのは良いことですが、パスワードが「123456」や「qwerty」のようなものだと、あまり効果はありません。だからこそ、これは非常に重要なのです。 強力なパスワードを強制する PAMモジュールを使用する例: pam_cracklib そして、より新しいバージョンでは、 pam_pwquality.
モジュール pam_pwquality これは cracklib の進化版であり、次のようなライブラリと統合されています。 libpw品質 パスワードが辞書に含まれていないか、短すぎないか、単純なパターンやユーザーの個人データを繰り返していないかを確認します。RHEL ベースの環境にはネイティブに含まれており、Debian/Ubuntu ではパッケージを使用してインストールできます。 libpam-cracklib y libpam-pwquality.
インストール後、主な設定は通常ファイルで行います。 /etc/security/pwquality.confここでは、次のような複雑性パラメータを定義できます。
- 申し訳ありません: 前回のパスワードと異なる必要がある文字数。
- ミンレン: 新しいパスワードに許容される最小文字数。
- クレジット, ユークレジット, クレジット, と彼は信じている数字、大文字、小文字、その他の文字を含めたことに対するクレジット。
- 最小クラス: 必要な文字クラスの最小数(小文字、大文字、数字、記号)。
- マックスリピート連続して使用できる同一文字の最大数。
- マックスクラスリピート: 同じクラスの連続文字の最大数。
- ゲコチェック: パスワードに /etc/passwd のユーザーの GECOS (コメント) フィールドの単語が含まれていないことを確認します。
- ディクテーションパス: パスワードが既知の単語の一部であるかどうかを確認するために使用される辞書へのパス。
- 悪い言葉: 明示的に禁止されている単語のリスト。
システム クレジット 特に柔軟性が高い。基本的に、パスワードにはさまざまな文字を含めることでクレジットが加算され、そのクレジットによって若干の長さの短さを補うことができる。例えば、 minlen=10 y dcredit=22 桁の 8 文字のパスワードは、2 クレジットを追加するためフィルターを通過する可能性があります。ただし、負のクレジットを定義する場合は、少なくとも 1 つの負の文字 (たとえば、 dcredit=-1 (少なくとも1桁の数字が必要です。例外はありません。)
とともに 最小クラス パスワードには、複数の異なる種類の文字や記号を含めるように要求できます。例えば、2つの文字の組み合わせ、文字と数字の組み合わせ、文字と記号の組み合わせなどです。 minclass=4 そのためには、小文字、大文字、数字、特殊文字を同時に使用する必要があり、これは厳しい企業ポリシーでよく見られる典型的な要件です。
のようなツール PWスコア これらを使用すると、定義されたポリシーに対してパスワードの強度をテストできます。パスワードが渡されると、 PWスコアこれは、鍵が要件を満たしているかどうか、満たしていない場合はどの規則に違反しているか(長さが不十分、単純すぎる、前の鍵と似すぎているなど)を示します。
pam_cracklibを使用してDebianおよびUbuntu上で堅牢なポリシーを設定する
Debian/Ubuntu システムでは、 pam_cracklib (またはPAM経由のpwquality)を使用してパスワードポリシーを適用します。 /etc/pam.d/共通パスワードこれは、システムユーザーのパスワード変更の管理方法を定義するものです。
何かを操作する前に、ファイルのバックアップコピーを作成しておくことをお勧めします。
sudo cp /etc/pam.d/common-password /root/
その後、スーパーユーザー権限で、お好みのテキストエディタ(nano、vimなど)を使って編集できます。中には、次のような行があります。
password requisite pam_cracklib.so retry=3 minlen=8 difok=3
ここでは、以下のようなパラメータが定義されています。
- リトライ: パスワード変更時にユーザーが試行できる回数。この回数を超えると変更は失敗します。
- ミンレン: パスワードの最小長。
- 申し訳ありません: 前回のパスワードと異なる必要がある文字数。
- ユークレジット, クレジット, クレジット, と彼は信じている大文字、小文字、数字、その他の文字に対するプラスまたはマイナスのクレジット。
例えば、かなり厳しい方針としては次のようなものが考えられます。
password requisite pam_cracklib.so retry=3 minlen=12 difok=3 ucredit=-3 lcredit=-3 dcredit=-3 ocredit=-3
この構成により、 新しいパスワードはすべて12文字以上でなければなりません。パスワードは、前回のパスワードと少なくとも3文字異なり、かつ大文字3文字以上、小文字3文字以上、数字3桁以上、記号3文字以上を含んでいる必要があります。非常に厳格なルールですが、安易なパスワードに対しては極めて効果的です。
ポリシーを変更したら、以下の手順で自分のパスワードを変更してテストできます。
sudo passwd
パスワードが要件を満たしていない場合、システムは理由を示すメッセージを表示します。例えば、短すぎる、辞書に載っている単語と似ている、文字の繰り返しが多すぎるなどです。パスワードがポリシーに準拠すれば、変更は問題なく適用されます。
新しい変更に関するポリシーを厳格化することに加え、DebianとUbuntuは 既存ユーザーにパスワードの変更を強制する 新しいルールに適応するため。コマンドは次のとおりです。
passwd -e USUARIO
そのユーザーのパスワードは期限切れとしてマークされ、次回のログイン時には、現在のポリシーに準拠した新しいパスワードを設定する必要があります。グローバルパスワードの有効期限は、以下の方法でも制御できます。
passwd -w 5 -x 30 USUARIO
どこ -x 30 パスワードの最大有効期間を30日間に設定し、 -w 5 これにより、システムは有効期限の5日前から通知を開始します。 -i 1:
passwd -w 5 -x 30 -i 1 USUARIO
ユーザーがパスワードを変更しない場合、アカウントは非アクティブとしてマークされます。 有効期限が切れた翌日そのため、管理者が介入して再起動する必要が生じる。
パスワードを頻繁に変更することは長年推奨されてきたが、現代のセキュリティガイドライン(NISTなどのガイドライン)では、この慣行に以下の条件を付けている。 長くて複雑なパスワードと二要素認証システムを選択するのが望ましい。過度に頻繁な変更を強制して、結果的に予測可能なキーを生成するのではなく。
PAMモジュール(pam_faillock、pam_tally2、pam_cracklib、pam_pwquality)とキーファイルなどを慎重に設定します。 /etc/pam.d/common-auth, /etc/pam.d/共通パスワード, /etc/login.defs, /etc/ssh/sshd_config そして、それらの決定がどのように反映されるかを理解する / etc / shadowこれは、「標準的な」システムと、不正アクセスやブルートフォース攻撃に対して真に強固な環境との違いを示すものです。
