方法#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端口上用于新连接尝试的数据包。第二行说,如果一个IP在60秒内进行了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秒后,我sshd
像这样更改了我的PAM 配置文件:
#%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
参考文献