【SSH】任意の回数ログイン失敗でアカウントをロックする方法

CentOS7で任意の回数SSHでログインを失敗したユーザのアカウントをロックする方法です。

SSH設定

CentOS7ではPAMの「pam_faillock」モジュールの機能を使用することで、任意の回数ログインに失敗したユーザのアカウントをロックすることが出来ます。

そのためsshdでPAMが使用できるように「/etc/ssh/sshd_config」で「UsePAM yes」の設定が有効になっていることを確認して下さい。(CentOS7.5では初期状態で有効になっていました)

UsePAM yes

設定変更を行った場合はsshdを再起動して設定を反映させて下さい。

# systemctl restart sshd

PAM 設定 (password-auth)

SSHで任意の回数ログインに失敗したユーザのアカウントをロックさせたい場合、「/etc/pam.d/password-auth」のauthセクションとaccountセクションに「pam_faillock」モジュールの設定を追加します。(rootユーザはロック対象外)

auth  required      pam_faillock.so preauth silent audit deny=回数 unlock_time=解除時間
auth  [default=die] pam_faillock.so authfail audit deny=回数 unlock_time=解除時間

account   required      pam_faillock.so
  • 「deny=回数」でログイン失敗でアカウントをロックをするまでの回数を指定
  • 「unlock_time=解除時間」でロックが解除されるまでの時間(秒)を指定

「unlock_time」の値に「0」を指定すると、管理者が「faillock」コマンドでロック解除を行わない限りアカウントはロックされたままとなります。

※「/etc/pam.d/password-auth」の設定だけではコンソールから直接ログイン失敗した場合にアカウントをロックすることはできません。コンソールからのログイン失敗についてもアカウントのロックを行いたい場合は「/etc/pam.d/system-auth」にも、同様の設定を行う必要があります。

設定例

「/etc/pam.d/password-auth」にログイン失敗を3回繰り返すと600秒(10分)アカウントをロックする設定を追加します。

# vi /etc/pam.d/password-auth

赤字部分が追加した設定です。

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        required      pam_faillock.so preauth silent audit deny=3 unlock_time=600
auth        required      pam_faildelay.so delay=2000000
auth        sufficient    pam_unix.so nullok try_first_pass
auth        [default=die] pam_faillock.so authfail audit deny=3 unlock_time=600
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so

account     required      pam_unix.so
account     required      pam_faillock.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

ロックさせたくないユーザがいる場合

「auth required pam_faillock.so preauth silent audit deny=回数 unlock_time=解除時間」の上に下記の設定を追加してください。

複数ユーザを除外したい場合は「:」で除外したいユーザを区切って指定します。

auth [success=1 default=ignore] pam_succeed_if.so user in ユーザ1:ユーザ2:ユーザ3

下記は「tamohiko」ユーザろロック対象から除外するという設定になります。

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        [success=1 default=ignore] pam_succeed_if.so user in tamohiko
auth        required      pam_faillock.so preauth silent audit deny=3 unlock_time=600
auth        required      pam_faildelay.so delay=2000000
auth        sufficient    pam_unix.so nullok try_first_pass
auth        [default=die] pam_faillock.so authfail audit deny=3 unlock_time=600
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so

rootユーザもロックさせたい場合

「root」ユーザもロックしたい場合はauthセクションに追加する設定に「even_deny_root」を追加します。

auth  required      pam_faillock.so preauth silent audit deny=回数 even_deny_root unlock_time=解除時間
auth  [default=die] pam_faillock.so authfail audit deny=回数 even_deny_root unlock_time=解除時間

ログイン失敗回数の確認

「faillock」コマンドを実行することで、ユーザのログイン失敗情報を確認することが出来ます。

# faillock

「testuser」でログイン失敗を繰り返した後に「faillock」コマンドを実行してみると、ログイン失敗に関しての情報が確認できました。

# faillock
root:
When                Type  Source                                           Valid
tamohiko:
When                Type  Source                                           Valid
testuser:
When                Type  Source                                           Valid
2018-07-04 16:50:41 RHOST 192.168.1.26                                         V
2018-07-04 16:50:44 RHOST 192.168.1.26                                         V
2018-07-04 16:50:47 RHOST 192.168.1.26                                         V

特定ユーザのログイン失敗情報を確認したい場合は、「--user」オプションを使用することでユーザの指定が可能となります。

faillock --user ユーザ名

「testuser」というユーザのログイン失敗状況を確認してみます。

# faillock --user testuser
testuser:
When                Type  Source                                           Valid
2018-07-04 16:50:41 RHOST 192.168.1.26                                         V
2018-07-04 16:50:44 RHOST 192.168.1.26                                         V
2018-07-04 16:50:47 RHOST 192.168.1.26                                         V

アカウントロックの解除方法

アカウントのロックを解除したい場合は、「--user」でロックを解除したいユーザを指定した後に「--reset」を指定することでロックを解除することが出来ます。

faillock --user ユーザ名 --reset

実際に「testuser」のロックを解除してみます。

# faillock --user testuser --reset

「faillock」コマンドで確認してみると、ログイン失敗の情報が削除されてロックが解除されていることが確認できます。

# faillock
root:
When                Type  Source                                           Valid
tamohiko:
When                Type  Source                                           Valid
testuser:
When                Type  Source                                           Valid

コメント

タイトルとURLをコピーしました