アカウントロックとアドレス禁止:OpenVPNが実際に数える場所
送信元の禁止とアカウントロックは別のものを数えます。PAM連携VPNのしきい値を選ぶ前に、失敗回数を所有する保存先を特定してください。
アドレスを遮断することとアカウントをロックすることは別の仕組みであり、失敗する方向も逆です。アドレス禁止は一つの送信元だけを止め、対象アカウントは別の場所から到達可能なままです。アカウントロックはその身元をどこからでも止め、正規ユーザー自身のノートPCからも止めます。
認証をPAMに委任するVPNでは、数えるのはPAMスタックが到達する先であり、リスナーが記録した内容ではありません。
二つのカウンタ、二種類の被害者
レート制限は送信元を見て、最近そこから何回試行があったかを問います。ロックは身元を見て、そのアカウントが何回失敗を積んだかを問います。前者は可用性を守り、後者は資格情報を守ります。どちらも他方を置き換えません。
だから五回失敗したらIPを遮断するという文は、資格情報の埋め立て報告への答えになりません。攻撃者は送信元を回し、それぞれが少数の試行だけを得て、アカウントは決して数えられません。逆に送信元制御のないロックは、わざと失敗し続けることでアカウントを無期限にロックさせます。
二つの制御は復旧の筋書きも異なります。アドレス禁止は誰も意識しないタイマーで切れます。アカウントロックは管理者、文書化された待機期間、またはセルフサービス解除を必要とすることがあります。
すでに集計を持つ保存先を探す
何かを追加する前に、失敗の保存先がすでにあるか確認します。ローカルLinuxアカウント、ディレクトリサービス、外部IDプロバイダーはそれぞれ独自の集計を持ち、その手前に置くPAMモジュールは最初のものを拡張せず二つ目を作ります。
grep -rnE 'faillock|pam_tally|pam_unix' /etc/pam.d/
ls -l /etc/pam.d/ | head -20
VPNが実際に指定するサービスファイルを読み、そのinclude行をたどります。多くのディストリビューションではVPNサービスが共通ファイルを読み込むため、調整する集計はSSHやローカルログインにも適用されます。
ディレクトリがすでにロックを強制しているなら、有用な問いはPAM対話がその判断にどう至るか、VPNがどう報告するかです。上に足したローカル集計はディレクトリのカウンタにはならず、二つの方針は解除の時点で食い違うことがあります。
pam_faillockの呼び出し位置は一つではなく三つ
モジュールは、コピーした一行が曖昧にしがちな三つの操作を分けています。すでにロックされているかの確認、失敗の記録、成功後の履歴の消去です。
古い集計モジュールからの移行がたいてい誤るのはここです。動くpam_tally2の例から行をpam_faillockスタックへコピーするのは改名ではありません。文書化された設定は異なり、誤った位置の呼び出しは失敗を一度も確認せずに記録し続けます。
faillock --user alice
faillock --user alice --reset
検査ユーティリティはカウンタが本物かを見る最短の方法です。アカウントの記録済み失敗を表示し、消去もできます。統制した失敗でその出力が変わらないなら、呼び出し位置が誤っています。
専用のサービス名は分離ではない
VPNに専用のPAMサービスファイルを与えると意図した方針は見えますが、影響は限定されません。共通ファイルのincludeはそのファイルの動作をそのまま持ち込み、システム全体に及ぶ集計も含みます。
ロックがVPNアクセスだけを覆うのか、同じアカウントを認証する全サービスを覆うのかを明示的に決めます。どちらの答えも擁護できます。誤りは一方を選んだと思い込みながら、スタックが他方を実装していることです。
次にコストを考えます。ロックは攻撃者が起こせますし、苦しむのはそのアカウントの所有者です。しきい値、待機期間、管理者による復旧経路はいずれも方針の一部であり、復旧は障害時にVPNを再設定することに依存してはなりません。
単一の拒否ではなく順序を受け入れる
承認された計画のもと、指定した身元で試験し、単一の事象ではなく連鎖を試験します。有効なアカウントは認証し、意図的に誤ったパスワードはカウンタを動かし、設定したロックが効き、文書化された復旧がアクセスを戻します。
faillock --user test-vpn-01
journalctl -u openvpn-server@lab -n 30 --no-pager | grep -i 'auth\|pam'
成功時の挙動も失敗時と同じ注意深さで見ます。成功したログインが履歴を消さないなら、通常の誤りの緩やかな蓄積の後にアカウントはロックされます。全サービスからすべて消すなら、カウンタは方針の主張より弱いものです。
最後に、勝利を宣言する前に無人のクライアントを止めます。保存された資格情報が背後で再試行すると、復旧の数分後に再び失敗を作り、アカウントをまたロックします。送信元ベースのレート制限は追加の制御として残せますが、それはアカウント方針ではありません。