pam_abl
pam_abl は総当り攻撃による SSH パスワードの推測に対してセキュリティレイヤーを追加します。一定の時間内でログイン試行の失敗ができる限度を決めて、ホストやユーザーがその制限を越えた場合、ブラックリストに入れます。一度ブラックリストに入ったら、たとえ正しいパスワードが入力されたとしても認証は失敗します。一定期間ログインの試行を止めたホスト/ユーザーはブラックリストから削除されます。
目次
インストール
makepkg を使って AUR の pam_ablAUR の PKGBUILD をインストールしてください。
設定
PAM 認証スタックに pam_abl を追加
お好きなエディタを使って /etc/pam.d/sshd
を root で開いて下さい。一番上の行に以下を追加します:
auth required pam_abl.so config=/etc/security/pam_abl.conf
他に何も修正を加えていない場合、/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
上記の設定では ssh でのみ pam_abl が有効になります。他のサービスに影響はありません。
pam_abl.conf の作成
サンプル設定ファイルをコピーして /etc/security/pam_abl.conf
を作成してください:
# cp /etc/security/pam_abl.conf.example /etc/security/pam_abl.conf
バージョン 0.6.0 現在、サンプル設定は以下のようになっています:
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
ルールなどをカスタマイズする方法は man pam_abl.conf
を見て下さい。
ブラックリストデータベースの作成
root で、データベースのディレクトリを作成 (上記で示したパスを指定した場合):
# mkdir /var/lib/abl
root で、pam_abl ユーティリティを実行してデータベースを初期化:
# pam_abl
これで Pam_abl が動作するようになります。PAM はデーモンではないため、変更を適用するために何かを再起動する必要はありません。故意にリモートホストをブラックリストに入れることで pam_abl がちゃんと動作しているか確認することを強く推奨します。手動でホストやユーザーをブラックリストに追加・削除する方法は下を見て下さい。
ブラックリストデータベースの管理
ブラックリストのホスト/ユーザーの確認
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 コマンド
Linux のほぼ全てのユーティリティと同様に、man ページを使って全てのオプションを確認できます:
$ man pam_abl
既知の問題
pam_abl の現在のバージョン (0.6.0) には特定の状況下でブラックリストに問題が発生することがあります。
sshd の挙動と pam モジュールへの情報の渡し方に問題があるため、ログインに失敗しても二回目の試行が行われたり接続が切られるまで記録が行われません。そのため攻撃者が一回の接続で一回しかログイン試行をせず、接続を切らなかった場合、その試行失敗は記録されないことになります。
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.
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).