如何在ssh中提供登录延迟


11

我想在通过ssh登录时提供登录延迟。我尝试了几种方法来完成登录,但找不到所需的结果。

我尝试了给定链接提供的步骤。

http://hostingfu.com/article/ssh-dictionary-attack-prevention-with-iptables

iptables -N SSH_CHECK
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_CHECK
iptables -A SSH_CHECK -m recent --set --name SSH
iptables -A SSH_CHECK -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP

我的机器上未安装pam模块,因此无法进行与pam文件相关的任何修改

因此,有谁能让我建议其他方法来做同样的事情?

我在嵌入式平台上运行着裸露的Linux内核。


为什么要引入延迟?您的最终目标是什么?
CVn 2013年

我想防止暴力攻击的可能性。
2013年

3
仅仅在新连接上引入延迟并不能防止暴力攻击。您需要查看旨在解决实际问题的工具。我建议先查看一下fail2ban,它专门用于通过执行给定的命令对重复的日志条目做出反应,并且通常专门用于防止暴力尝试获得未经授权的访问。
CVn 2013年

Michael很好,但是我必须使用我拥有的现有基础结构来做,每次通过ssh连接时如何引入延迟。
2013年

2
杜德(Dude)fail2ban使用您已经拥有的确切基础结构-ssh日志和iptables规则。
Shadur 2013年

Answers:


11

方法#1-禁用密码登录

如果您不需要允许密码登录,则只需禁用它们即可达到预期的效果。只需将此行添加到/etc/ssh/sshd_config

PasswordAuthentication     no

此外,您可以Matchsshd_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

用法

要创建失败延迟,您只需在sshdpam配置文件中添加这样的行即可。同样在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

参考文献


感谢@slm但我又不能安装PAM模块和我的sshd的验证是不是从pam.Would你喜欢周围建议一些其他的方式
拉姆

@AmitSinghTomar-对不起,我扩大了答案。我正在尝试为您的问题创建一个规范的答案,涵盖所有方法,而不仅仅是您的方法。
slm

再次感谢您@slm为您提供详细的答案,我有兴趣遵循您建议的第二种方法。将尝试一下并让您知道结果,还给我第一次通过ssh登录带来的延迟吗?
拉姆(Ram)2013年

@AmitSinghTomar-不,它应该仅在4次尝试后才延迟。当--hitcount 4超出该规则将黑洞违规IP地址为60秒。
slm

我想从您那里知道一点,要使您的第三个方法起作用(PAM),是否需要通过pam进行ssh身份验证?
拉姆

3

禁用密码。没有密码,没有暴力攻击。

您可以使用ssh-keys登录-应该更安全,更难破解。


0

使用全新安装Ubuntu 16.04 openssh-server,错误尝试输入大于0个字符的延迟已经存在。延迟似乎超过1秒

对于错误的零字符密码尝试,没有延迟,因此攻击者会立即确定您的密码不是空字符串,如果它确实不是空字符串。由于可能不允许使用空字符串作为密码,因此他们已经知道,因此他们不会尝试使用空字符串。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.