「Pam abl」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (アーカイブされた記事へのリンクを削除) |
(→PAM 認証スタックに pam_abl を追加: 情報を更新) |
||
(同じ利用者による、間の5版が非表示) | |||
12行目: | 12行目: | ||
[http://pam-abl.sourceforge.net/ pam_abl] は総当り攻撃による SSH パスワードの推測に対してセキュリティレイヤーを追加します。一定の時間内でログイン試行の失敗ができる限度を決めて、ホストやユーザーがその制限を越えた場合、ブラックリストに入れます。一度ブラックリストに入ったら、たとえ正しいパスワードが入力されたとしても認証は失敗します。一定期間ログインの試行を止めたホスト/ユーザーはブラックリストから削除されます。 |
[http://pam-abl.sourceforge.net/ pam_abl] は総当り攻撃による SSH パスワードの推測に対してセキュリティレイヤーを追加します。一定の時間内でログイン試行の失敗ができる限度を決めて、ホストやユーザーがその制限を越えた場合、ブラックリストに入れます。一度ブラックリストに入ったら、たとえ正しいパスワードが入力されたとしても認証は失敗します。一定期間ログインの試行を止めたホスト/ユーザーはブラックリストから削除されます。 |
||
− | ==インストール== |
+ | == インストール == |
+ | |||
[[makepkg]] を使って [[AUR]] の {{AUR|pam_abl}} の PKGBUILD をインストールしてください。 |
[[makepkg]] を使って [[AUR]] の {{AUR|pam_abl}} の PKGBUILD をインストールしてください。 |
||
− | ==設定== |
+ | == 設定 == |
− | ===PAM 認証スタックに pam_abl を追加=== |
||
− | お好きなエディタを使って {{ic|1=/etc/pam.d/sshd}} を root で開いて下さい。一番上の行に以下を追加します: |
||
− | auth required pam_abl.so config=/etc/security/pam_abl.conf |
||
+ | === PAM 認証スタックに pam_abl を追加 === |
||
− | 他に何も修正を加えていない場合、{{ic|1=/etc/pam.d/sshd}} は以下のようになります: |
||
− | #%PAM-1.0 |
||
− | auth required pam_abl.so config=/etc/security/pam_abl.conf |
||
− | auth include system-login |
||
− | account include system-login |
||
− | password include system-login |
||
− | session include system-login |
||
− | + | {{Note|これにより、system-remote-login を使用するすべてのサービス (ssh、php など) で pam_abl が有効になります。}} |
|
+ | 選択したエディターで root として {{ic|/etc/pam.d/system-remote-login}} を開きます。次の行を他のすべての行の上に追加します。 |
||
− | ===pam_abl.conf の作成=== |
||
− | サンプル設定ファイルをコピーして {{ic|1=/etc/security/pam_abl.conf}} を作成してください: |
||
− | # cp /etc/security/pam_abl.conf.example /etc/security/pam_abl.conf |
||
+ | {{hc|/etc/pam.d/system-remote-login|2= |
||
− | バージョン 0.6.0 現在、サンプル設定は以下のようになっています: |
||
+ | auth required pam_abl.so config=/etc/security/pam_abl.conf |
||
− | db_home=/var/lib/abl |
||
+ | }} |
||
− | host_db=/var/lib/abl/hosts.db |
||
− | host_purge=1d |
||
− | host_rule=*:30/1h |
||
− | user_db=/var/lib/abl/users.db |
||
− | user_purge=1d |
||
− | user_rule=*:3/1h |
||
− | host_clear_cmd=[logger] [clear] [host] [%h] |
||
− | host_block_cmd=[logger] [block] [host] [%h] |
||
− | user_clear_cmd=[logger] [clear] [user] [%u] |
||
− | user_block_cmd=[logger] [block] [user] [%u] |
||
− | limits=1000-1200 |
||
− | host_whitelist=1.1.1.1/24;2.1.1.1 |
||
− | user_whitelist=danta;chris |
||
+ | 他に何も変更を加えていないとすると、{{ic|1=/etc/pam.d/system-remote-login}} は次のようになります。 |
||
− | ルールなどをカスタマイズする方法は {{ic|1=man pam_abl.conf}} を見て下さい。 |
||
+ | {{hc|/etc/pam.d/system-remote-login|2= |
||
− | ===ブラックリストデータベースの作成=== |
||
+ | #%PAM-1.0 |
||
− | root で、データベースのディレクトリを作成 (上記で示したパスを指定した場合): |
||
+ | auth required pam_abl.so config=/etc/security/pam_abl.conf |
||
− | # mkdir /var/lib/abl |
||
+ | auth include system-login |
||
+ | account include system-login |
||
+ | password include system-login |
||
+ | session include system-login |
||
+ | }} |
||
+ | === pam_abl.conf の作成 === |
||
− | root で、pam_abl ユーティリティを実行してデータベースを初期化: |
||
− | # pam_abl |
||
+ | {{ic|1=/etc/security/pam_abl.conf}} を編集して、ルールやその他の設定をカスタマイズします。 |
||
− | これで Pam_abl が動作するようになります。PAM はデーモンではないため、変更を適用するために何かを再起動する必要はありません。故意にリモートホストをブラックリストに入れることで pam_abl がちゃんと動作しているか確認することを強く推奨します。手動でホストやユーザーをブラックリストに追加・削除する方法は下を見て下さい。 |
||
+ | |||
+ | 詳細については、{{ic|1=man pam_abl.conf}} を参照してください。 |
||
+ | |||
+ | == ブラックリストデータベースの管理 == |
||
+ | |||
+ | === ブラックリストのホスト/ユーザーの確認 === |
||
− | ==ブラックリストデータベースの管理== |
||
− | ===ブラックリストのホスト/ユーザーの確認=== |
||
root で、次のコマンドを実行: |
root で、次のコマンドを実行: |
||
# pam_abl |
# pam_abl |
||
+ | === 手動でブラックリストからホストやユーザーを削除 === |
||
− | {{Note|pam_abl はデーモンとしては実行されないため、ブラックリストから削除されるのはすぐに行われるわけではありません。つまり、認証試行がされるまでブラックリストからユーザー/ホストが削除されることはありません。とくに機能に影響はありませんが、上記のコマンドでブラックリストを確認したときに多目にユーザーやホストが表示されることになります。強制的に削除させるには、次のコマンドを実行: {{ic|# pam_abl -p}}。}} |
||
− | ===手動でブラックリストからホストやユーザーを削除=== |
||
root で、次を実行: |
root で、次を実行: |
||
# pam_abl -w -U <user> |
# pam_abl -w -U <user> |
||
74行目: | 59行目: | ||
# pam_abl -w -H <host> |
# pam_abl -w -H <host> |
||
上記のどちらのコマンドでも * をワイルドカードとして使って複数のホスト/ユーザーにマッチさせることができます。 |
上記のどちらのコマンドでも * をワイルドカードとして使って複数のホスト/ユーザーにマッチさせることができます。 |
||
+ | |||
− | ===手動でブラックリストにホストやユーザーを追加=== |
||
+ | === 手動でブラックリストにホストやユーザーを追加 === |
||
+ | |||
root で、次を実行: |
root で、次を実行: |
||
# pam_abl -f -U <user> |
# pam_abl -f -U <user> |
||
または: |
または: |
||
# pam_abl -f -H <host> |
# pam_abl -f -H <host> |
||
+ | |||
− | ===他の pam_abl コマンド=== |
||
+ | === 古いユーザー/ホストのエントリを削除する === |
||
+ | |||
+ | pam_abl はデーモンとして実行されないため、ブラックリストの "遅延パージ" を実行します。つまり、認証が試行されるまで、古いユーザー/ホストのエントリはブラックリストから削除されません。これは機能には影響しませんが、ブラックリストに登録されたホスト/ユーザーをチェックするときに追加のエラーが表示されることがよくあります。強制的にパージを実行するには、次のコマンドを実行します。 |
||
+ | # pam_abl -p |
||
+ | |||
+ | === 他の pam_abl コマンド === |
||
+ | |||
Linux のほぼ全てのユーティリティと同様に、[[man ページ]]を使って全てのオプションを確認できます: |
Linux のほぼ全てのユーティリティと同様に、[[man ページ]]を使って全てのオプションを確認できます: |
||
$ man pam_abl |
$ man pam_abl |
||
− | ==既知の問題== |
||
− | pam_abl の現在のバージョン (0.6.0) には特定の状況下でブラックリストに問題が発生することがあります。 |
||
+ | == 既知の問題 == |
||
− | sshd の挙動と pam モジュールへの情報の渡し方に問題があるため、ログインに失敗しても二回目の試行が行われたり接続が切られるまで記録が行われません。そのため攻撃者が一回の接続で一回しかログイン試行をせず、接続を切らなかった場合、その試行失敗は記録されないことになります。 |
||
+ | |||
+ | 現在のバージョン (1.0) の時点で、pam_abl には特定の条件下でブラックリストに登録する機能に影響を与える可能性がある問題があります。 |
||
+ | |||
+ | sshd の動作方法と pam モジュールに情報が渡される方法により、特定の試行の失敗は、2 回目の試行が行われるか、接続が閉じられるまでログに記録されません。これは、攻撃者が接続ごとに 1 回のみ試行し、接続を閉じない限り、失敗はログに記録されないことを意味します。 |
||
+ | 実際には、sshd_config 設定の "MaxStartups" (デフォルト 10) と、程度は低いですが "LoginGraceTime" (デフォルト 120 秒) により、このアプローチの実行可能性は制限されますが、それでも、指定したよりも多くの試行を絞り出すために使用できる可能性があります。 |
||
− | In practice, the sshd_config settings "MaxStartups" (default 10) and to a lesser degree "LoginGraceTime" (default 120s) limit the viability of this approach, but it still could be used to squeeze out more attempts then you specify. |
||
+ | それまでの回避策は、"MaxAuthTries" を 1 に設定することです (または、pam_abl 構成で指定した値を超えて追加の "MaxStartups" 試行が行われる可能性があることを期待します) |
||
− | In the meantime, the workaround is to set "MaxAuthTries" to 1 (or expect that an additional "MaxStartups" number of attempts could be made above and beyond what you specify in your pam_abl config). |
2023年11月1日 (水) 03:29時点における版
pam_abl は総当り攻撃による SSH パスワードの推測に対してセキュリティレイヤーを追加します。一定の時間内でログイン試行の失敗ができる限度を決めて、ホストやユーザーがその制限を越えた場合、ブラックリストに入れます。一度ブラックリストに入ったら、たとえ正しいパスワードが入力されたとしても認証は失敗します。一定期間ログインの試行を止めたホスト/ユーザーはブラックリストから削除されます。
目次
インストール
makepkg を使って AUR の pam_ablAUR の PKGBUILD をインストールしてください。
設定
PAM 認証スタックに pam_abl を追加
選択したエディターで root として /etc/pam.d/system-remote-login
を開きます。次の行を他のすべての行の上に追加します。
/etc/pam.d/system-remote-login
auth required pam_abl.so config=/etc/security/pam_abl.conf
他に何も変更を加えていないとすると、/etc/pam.d/system-remote-login
は次のようになります。
/etc/pam.d/system-remote-login
#%PAM-1.0 auth required pam_abl.so config=/etc/security/pam_abl.conf auth include system-login account include system-login password include system-login session include system-login
pam_abl.conf の作成
/etc/security/pam_abl.conf
を編集して、ルールやその他の設定をカスタマイズします。
詳細については、man pam_abl.conf
を参照してください。
ブラックリストデータベースの管理
ブラックリストのホスト/ユーザーの確認
root で、次のコマンドを実行:
# pam_abl
手動でブラックリストからホストやユーザーを削除
root で、次を実行:
# pam_abl -w -U <user>
もしくは:
# pam_abl -w -H <host>
上記のどちらのコマンドでも * をワイルドカードとして使って複数のホスト/ユーザーにマッチさせることができます。
手動でブラックリストにホストやユーザーを追加
root で、次を実行:
# pam_abl -f -U <user>
または:
# pam_abl -f -H <host>
古いユーザー/ホストのエントリを削除する
pam_abl はデーモンとして実行されないため、ブラックリストの "遅延パージ" を実行します。つまり、認証が試行されるまで、古いユーザー/ホストのエントリはブラックリストから削除されません。これは機能には影響しませんが、ブラックリストに登録されたホスト/ユーザーをチェックするときに追加のエラーが表示されることがよくあります。強制的にパージを実行するには、次のコマンドを実行します。
# pam_abl -p
他の pam_abl コマンド
Linux のほぼ全てのユーティリティと同様に、man ページを使って全てのオプションを確認できます:
$ man pam_abl
既知の問題
現在のバージョン (1.0) の時点で、pam_abl には特定の条件下でブラックリストに登録する機能に影響を与える可能性がある問題があります。
sshd の動作方法と pam モジュールに情報が渡される方法により、特定の試行の失敗は、2 回目の試行が行われるか、接続が閉じられるまでログに記録されません。これは、攻撃者が接続ごとに 1 回のみ試行し、接続を閉じない限り、失敗はログに記録されないことを意味します。
実際には、sshd_config 設定の "MaxStartups" (デフォルト 10) と、程度は低いですが "LoginGraceTime" (デフォルト 120 秒) により、このアプローチの実行可能性は制限されますが、それでも、指定したよりも多くの試行を絞り出すために使用できる可能性があります。
それまでの回避策は、"MaxAuthTries" を 1 に設定することです (または、pam_abl 構成で指定した値を超えて追加の "MaxStartups" 試行が行われる可能性があることを期待します)