方法#1-パスワードログインを無効にする
パスワードログインを許可する必要がない場合は、単にログインを許可しないことで、目的の効果が得られます。この行を単にに追加して/etc/ssh/sshd_config
ください:
PasswordAuthentication no
さらに、次のようにMatch
演算子を使用して、パスワードの使用を特定のユーザーに制限できますsshd_config
。
Match User root,foo,bar
PasswordAuthentication no
Match User user1,user2
PasswordAuthentication yes
方法#2-iptables
を使用iptables
して、失敗したログイン試行を追跡し、特定のしきい値を超えた場合にそれらをドロップすることもできます。これは、hostingfuの例に似ていますが、理解しやすくなっています。
$ sudo iptables -I INPUT -p tcp --dport <YOUR PORT HERE> -i eth0 -m state --state NEW -m recent --set
$ sudo iptables -I INPUT -p tcp --dport <YOUR PORT HERE> -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
注:最初の行は基本的に、sshポートでの新しい接続試行に使用されるパケットにのみ適用されるルールを作成します。2行目は、60秒以内にIPからの試行が4回を超える場合、そのIPからのトラフィックはすべてブラックホール化されることを示しています。このソリューションでは、さまざまなユーザーアカウントでの試行の有無は関係ありません。
方法#3-PAMを使用する
PAMが利用できないとおっしゃっていましたが、利用できた場合、これがログインの失敗を遅らせる方法です。sshログインの失敗を単に遅らせることを意図している場合は、PAMモジュールを使用できますpam_faildelay
。このPAMモジュールは通常、デフォルトの組み合わせに含まれています。
私のFedora 19システムでは、これはデフォルトのインストールの一部です。
例
に関連するファイルを探しますpam_faildelay
。
$ locate pam|grep -i delay
/usr/lib/security/pam_faildelay.so
/usr/lib64/security/pam_faildelay.so
/usr/share/doc/pam-1.1.6/html/sag-pam_faildelay.html
/usr/share/doc/pam-1.1.6/txts/README.pam_faildelay
/usr/share/man/man8/pam_faildelay.8.gz
それらが提供するRPMを確認します。
$ rpm -qf /usr/share/man/man8/pam_faildelay.8.gz
pam-1.1.6-12.fc19.x86_64
pam-1.1.6-12.fc19.i686
使用法
失敗時に遅延を作成するには、このような行をsshd
pam構成ファイルに追加するだけです。再びFedora / CentOS / RHELシステムでは、このファイルは次の場所にあります/etc/pam.d/sshd
。
10秒の遅延を作成するには:
auth optional pam_faildelay.so delay=10000000
60秒の遅延:
auth optional pam_faildelay.so delay=60000000
例
上記の方法を使用して20秒の遅延で、PAM構成sshd
ファイルを次のように変更しました。
#%PAM-1.0
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
auth optional pam_faildelay.so delay=20000000
account required pam_nologin.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session optional pam_keyinit.so force revoke
session include password-auth
session include postlogin
ログインすると:
$ date
Tue Dec 17 09:16:30 EST 2013
$ ssh blah@localhost
blah@localhost's password:
Permission denied, please try again.
blah@localhost's password:
...Control + C....
$ date
Tue Dec 17 09:16:50 EST 2013
参考文献