linux:防暴力破解

一.配置SSH双机信任
1.开启ssh服务

第一次远程登陆时,系统会提示是否将对方服务器信息保存在本地,键入'yes'后,输入密码进入对方系统。



这时可以看到本地目录/root/.ssh/中生成文件known_hosts来保存对方服务器信息,会把你每个你访问过计算机的公钥(public key)都记录在此。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。


# vim /root/.ssh/known_hosts


可以看到IP为10.2.8.195~/.ssh/known_hosts。
不过known_hosts的内容一些只是以纯文本方式存放。如果你的帐号被人成功入侵,他可以由known_hosts直接得知你到访过的计算机列表。为减低出现类似情况的机会。OpenSSH在4.0p1引入了 Hash Known Hosts功能,在known_hosts中把访问过的计算机名称或IP地址以hash方式存放,令入侵都不能直接知道你到访过那些计算机。这项新项功能缺省是关闭的,要你手动地在ssh_config加上"HashKnownHosts yes"才会被开启。不过Debian Testing就缺省开启了个功能。

2.生成RSA密钥对

# ssh-keygen -t rsa

linux:防暴力破解_第1张图片

3.添加密钥到授权密钥文件中
# cat /root/.ssh/id_rsa >> authorized_keys
# scp authorized_keys

[[email protected]](mailto:[email protected]):/root/.ssh/
4.测试
二.修改SSH服务端口
1.服务器端修改配置文件

# vim /etc/ssh/config_sshd

2.客户端修改配置文件

# vim /etc/ssh/config_ssh

linux:防暴力破解_第2张图片

3.测试
三.限制root账户登录
1.修改服务器端配置文件

# vim /etc/ssh/config_sshd

2.客户端测试

# ssh root[@10.2.8.195](mailto:[email protected])


访问被拒绝,证明设置生效

# ssh

[[email protected]](mailto:[email protected])

其他用户登陆成功

四.配置Deny-Host开源软件
1.获得DenyHosts

软件免费,可直接从官方网站获得。
不过下载版本时要注意一下:
DenyHosts安装和运行要依赖python,如果机器安装了python,那需要检查一下python的版本

2.安装和启动DenyHosts
#tar xzvf DenyHosts-2.6.tar.gz
将安装包解压到任意位置

#cd DenyHosts-2.6
进入解压目录

#python setup.py install
执行安装程序,将DenyHosts安装到默认位置

如图所示:


linux:防暴力破解_第3张图片

DenyHosts默认安装到/usr/share/denyhosts目录
需要修改一下DenyHosts的配置文件才能正常启动程序,继续~

#cd /usr/share/denyhosts
进入denyhosts的主配置目录

#cp denyhosts.cfg-dist denyhosts.cfg
#cp daemon-control-dist daemon-control
复制出默认配置文件和程序执行文件

#chmod 770 daemon-control
修改一下程序执行文件的操作权限

#./daemon-control start
启动denyhosts

如图所示denyhosts已正常启动



如果想让denyhosts每次随系统自动启动,可以执行以下操作~

#cd /etc/init.d

#ln -s /usr/share/denyhosts/daemon-control denyhosts
在/etc/init.d/目录新建一个链接符号到daemon-control的启动执行文件,链接名随便起

#chkconfig --add denyhosts
#chkconfig --level 2345 denyhosts on
3.配置DenyHosts

denyhosts.cfg就是denyhosts的配置文件!
下面介绍一些常用的配置项

SECURE_LOG = /var/log/secure //sshd日志文件,denyhosts正是通过分析这个文件来屏蔽ip的,不同系统sshd的日志文件和位置有些差别,配置文件里都给列出来了,可以按实际情况修改

HOSTS_DENY = /etc/hosts.deny //控制用户登录文件,被屏蔽的ip都会写入这个文件

PURGE_DENY = 20m //这里可以设置经过多长时间解除已经屏蔽的ip的限制,单位是分钟,偶这里是留空的,表示不解禁~嘿嘿!

PURGE_DENY参数还有以下单位可参考

# 'm' = minutes
# 'h' = hours
# 'd' = days
# 'w' = weeks
# 'y' = years

BLOCK_SERVICE = sshd //禁止的服务名,除了sshd,denyhosts还可以用于其他服务,如smtp等

DENY_THRESHOLD_INVALID = 5 //允许无效用户的登录失败次数,超过设置的一律cut~~

DENY_THRESHOLD_VALID = 3 //允许普通用户的登录失败次数,超过设置的一律cut~~

DENY_THRESHOLD_ROOT = 1 //允许root用户的登录失败次数,超过设置的一律cut~~

DENY_THRESHOLD_RESTRICTED = 1 //允许受限用户的登录失败次数,超过设置的一律cut~~

HOSTNAME_LOOKUP=YES //是否做域名反解析,留空表示不做

DAEMON_LOG = /var/log/denyhosts //denyhosts日志文件位置

其他设置一般默认即可~

4.确认DenyHosts运作正常

确认denyhosts是否在运作非常简单,看看hosts.deny文件是否有写入被屏蔽的ip地址即可。

#vi /etc/hosts.deny

linux:防暴力破解_第4张图片

另附一个shell防暴力破解的脚本:

#!/bin/bash

#find failed

HEAD=$(lastb|grep ssh|head -n 100|tail -n 1|awk '{print $5" "$6" "$7}')
echo $HEAD
TIME=$(($(date +%s)-$(date +%s -d "$HEAD")))
echo $TIME
if [ $TIME -gt 3600 ]; then
    exit
fi

#input last 100 
echo "get ip config......"
lastb|grep ssh|head -n 100| \
awk '{ip[$3]++}END{ for(key in ip){ if(ip[key]>5){print key}}}'>antiip.txt

touch antiip_n.txt
#write host.deny
cat antiip.txt|while read line
do
    DENY_ALREADY=$(echo $line|awk '{print $2}')
  if [ "$DENY_ALREADY" != "writed" ];then
     echo "sshd:"$line>>/etc/hosts.deny
     echo $line>>antiip_n.txt
  else
      echo $line"  writed">>antiip_n.txt
  fi
done

service sshd restart /etc/init.d/sshd restart
mv antiip_n.txt antiip.txt

你可能感兴趣的:(linux:防暴力破解)