Centos下防止ssh暴力破解密码的方法,有两个,我用了第一种,效果很好。

公司服务器查看/var/log/secure 文件可以看到很多认证失败的Failure的ip登录信息。所以想到根据secure文件查看失败的ip如果超过五次,那么就把此ip写入/etc/hosts.deny文件,禁止此ip登录。我用了第一种方法,设置了定时任务,每分钟执行一次。执行之后,查看secure文件就没有那么多失败的信息日志输出了。

方法一,

收集 /var/log/secure 里面的信息,若是某个IP 链接次数超过一定次数 ,则把此ip记录到/etc/hosts.deny里面。

通过crontab来执行,每分钟执行一次。

*/1 * * * /bin/bash /root/Denyhosts/Denyhosts.sh


 

#!/bin/bash
#Denyhosts SHELL SCRIPT


cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"=" $1;}' >/root/Denyhosts/Denyhosts.txt
DEFINE="5"
for i in `cat /root/Denyhosts/Denyhosts.txt`
do
        IP=`echo $i|awk -F= '{print $1}'`
        NUM=`echo $i|awk -F= '{print $2}'`
        if [ $NUM -gt $DEFINE ]
        then
                ipExists=`grep $IP /etc/hosts.deny |grep -v grep |wc -l`
                if [ $ipExists -lt 1 ]
                then
                echo "sshd:$IP" >> /etc/hosts.deny
                fi
        fi
done

方法二,

DenyHosts官方网站为:http://denyhosts.sourceforge.net

1. 安装

# tar -zxvf DenyHosts-2.6.tar.gz 
# cd DenyHosts-2.6 
# python setup.py install 
默认是安装到/usr/share/denyhosts目录的。

2. 配置

# cd /usr/share/denyhosts/ 
# cp denyhosts.cfg-dist denyhosts.cfg 
# vi denyhosts.cfg 
PURGE_DENY = 50m #过多久后清除已阻止IP 
HOSTS_DENY = /etc/hosts.deny #将阻止IP写入到hosts.deny 
BLOCK_SERVICE = sshd #阻止服务名 
DENY_THRESHOLD_INVALID = 1 #允许无效用户登录失败的次数 
DENY_THRESHOLD_VALID = 10 #允许普通用户登录失败的次数 
DENY_THRESHOLD_ROOT = 5 #允许root登录失败的次数 
WORK_DIR = /usr/local/share/denyhosts/data #将deny的host或ip纪录到Work_dir中 
DENY_THRESHOLD_RESTRICTED = 1 #设定 deny host 写入到该资料夹 
LOCK_FILE = /var/lock/subsys/denyhosts #将DenyHOts启动的pid纪录到LOCK_FILE中,已确保服务正确启动,防止同时启动多个服务。 
HOSTNAME_LOOKUP=NO #是否做域名反解 
ADMIN_EMAIL = #设置管理员邮件地址 
DAEMON_LOG = /var/log/denyhosts #自己的日志文件 
DAEMON_PURGE = 10m #该项与PURGE_DENY 设置成一样,也是清除hosts.deniedssh 用户的时间。

3. 设置启动脚本

# cp daemon-control-dist daemon-control 
# chown root daemon-control 
# chmod 700 daemon-control

完了之后执行daemon-contron start就可以了。

# ./daemon-control start

如果要使DenyHosts每次重起后自动启动还需做如下设置:

# ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts 
# chkconfig --add denyhosts 
# chkconfig denyhosts on

然后就可以启动了:

# service denyhosts start 
可以看看/etc/hosts.deny内是否有禁止的IP,有的话说明已经成功了。

提高ssh安全性的方法


1. 修改sshd服务器的配置文件/etc/ssh/sshd_config,将部分参数参照如下修改,增强安全性。

系统缺省使用22号端口,将监听端口更改为其他数值(最好是1024以上的高端口,以免和其他常规服务端口冲突),这样可以增加入侵者探测系统是否运行了 sshd守护进程的难度。
Port 5555
对于在服务器上安装了多个网卡或配置多个IP地址的情况,设定sshd只在其中一个指定的接口地址监听,这样可以减少sshd的入口,降低入侵的可能性。
ListenAddress 192.168.0.1
如果允许用户使用root用户登录,那么黑客们可以针对root用户尝试暴力破解密码,给系统安全带来风险。
PermitRootLogin no
允许使用空密码系统就像不设防的堡垒,任何安全措施都是一句空话。
PermitEmptyPasswords no
只允许指定的某些用户通过ssh访问服务器,将ssh使用权限限定在最小的范围内。
AllowUsers sshuser1 sshuser2
同上面的AllowUsers类似,限定指定的用户组通过ssh访问服务器,二者对于限定访问服务器有相同的效果。
AllowGroups sshgroup
禁止使用版本1协议,因为其存在设计缺陷,很容易使密码被黑掉。
Protocol 2
关闭X11Forwarding,防止会话被劫持。
X11Forwarding no
sshd服务运行时每一个连接都要使用一大块可观的内存,这也是ssh存在拒绝服务攻击的原因。一台服务器除非存在许多管理员同时管理服务器,否则上面这 个连接数设置是够用了。
MaxStartups 5
注意:以上参数设置仅仅是一个示例,用户具体使用时应根据各自的环境做相应的更改。

2. 修改sshd服务器的配置文件/etc/ssh/sshd_config的读写权限,对所有非root用户设置只读权限,防止非授权用户修改sshd 服务的安全设置。


chmod 644 /etc/ssh/sshd_config

3. 设置TCP Wrappers。服务器默认接受所有的请求连接,这是非常危险的。使用TCP Wrappers可以阻止或允许应用服务仅对某些主机开放,给系统在增加一道安全屏障。这部分设置共涉计到两个文件:hosts.allow和 hosts.deny。
将那些明确允许的请求添加到/etc/hosts.allow中。如系统仅允许IP地址为192.168.0.15和10.0.0.11的主机使用 sshd服务,则添加如下内容:


sshd:192.168.0.15 10.0.0.11


将需要禁止使用的信息添加到/etc/hosts.deny中。如对除了在hosts.allow列表中明确允许使用sshd的用户外,所有其他用户都禁止使用sshd服务,则添加如下内容到hosts.deny文件中:
sshd:All
注意:系统对上述两个文件的判断顺序是先检查hosts.allow文件再查看hosts.deny文件,因此一个用户在hosts.allow允许使用网络资源,而同时在hosts.deny中禁止使用该网络资源,在这种情况下系统优先选择使用hosts.allow配置,允许用户使用该网络资源。

你可能感兴趣的:(Centos下防止ssh暴力破解密码的方法,有两个,我用了第一种,效果很好。)