Linux服务器用DenyHosts防范ssh尝试攻击

文件包:

DenyHosts-2.6.tar.gz

 为了防止此类无聊之人再次光临,就得想办法不让他们进行扫描,本人在网上查找资料,得知Denyhosts软件可以达到该效果,DenyHostsPython语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重复的攻击时就会记录IP/etc/hosts.deny文件,从而达到自动屏IP的功能。如果是手动添加的话不把人累死才怪。

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



.检查安装要求

1.首选检查sshd是否支持Tcpwrap,只有支持Tcpwrap才可以安装Denyhost

#ldd /usr/sbin/sshd |grep wrap

libwrap.so.0=> /usr/lib/libwrap.so.0 (0x00864000) //出现此信息时表示支持

2.再检查Python的版本,Python2.3以上版本可以直接安装

#python -V

Python2.4.3

  均达到要求

.安装Denyhosts

#tar -zxvf DenyHosts-2.6.tar.gz

#cd DenyHosts-2.6

#python setup.py install   (执行Python脚本进行安装)

(默认是安装到/usr/share/denyhosts目录的

程序脚本自动安装到/usr/share/denyhosts

库文件自动安装到/usr/lib/python2.4/site-packages/DenyHosts

denyhosts.py安装到/usr/bin

.配置

#cd /usr/share/denyhosts/

#cp denyhosts.cfg-dist denyhosts.cfg    (拷贝模板文件)

#vim denyhosts.cfg

中:修改和解释

SECURE_LOG= /var/log/secure               #ssh日志文件,它是根据这个文件来判断的,如还有其他的只要更改名字即可,例如将secure改为secure.1等。

HOSTS_DENY= /etc/hosts.deny               #将阻止IP写入到hosts.deny/#控制用户登陆的文件,将多次连接失败的IP添加到此文件,达到屏蔽的作用

PURGE_DENY=  5h                           #过多久后清除已阻止IP,这里为5小时(空表示永远不解禁)  #(s表示秒,m表示分,h表示小时,d表示天,w表示周,y表示年)

BLOCK_SERVICE= sshd                       #阻止服务名

DENY_THRESHOLD_INVALID= 1                 #允许无效用户登录失败的次数

DENY_THRESHOLD_VALID= 10                  #允许普通/有效用户登录失败的次数

DENY_THRESHOLD_ROOT= 5 #允许root登录失败的次数

WORK_DIR= /usr/local/share/denyhosts/data  #denyhostip纪录到Work_dir

DENY_THRESHOLD_RESTRICTED= 1               #设定denyhost 写入到该资料夹

LOCK_FILE= /var/lock/subsys/denyhosts      #DenyHOts启动的pid纪录到LOCK_FILE中,已确保服务正确启动,防止同时启动多个服务。

HOSTNAME_LOOKUP=NO                         #是否做域名反解

ADMIN_EMAIL=                               #设置管理员邮件地址

DAEMON_LOG= /var/log/denyhosts             #自己的日志文件

DAEMON_PURGE= 5h                           #该项与PURGE_DENY设置成一样,也是清除hosts.deniedssh用户的时间。

其他:

AGE_RESET_VALID=5d                         #有效用户登录失败计数归零的时间


#(s
表示秒,M表示分钟,h表示小时,d表示天,m表示月,w表示周,y表示年)

AGE_RESET_ROOT=25d                          #root用户登录失败计数归零的时间

AGE_RESET_RESTRICTED=25d

AGE_RESET_INVALID=10d                       #无效用户登录失败计数归零的时间

  总的#用户的登陆失败计数会在多长时间后重置为0

RESET_ON_SUCCESS= yes                        #如果一个ip登陆成功后,失败的登陆计数是否重置为0

DAEMON_SLEEP= 30s                             #当以后台方式运行时,每读一次日志文件的时间间隔。

DAEMON_PURGE= 1h                              #当以后台方式运行时,清除机制在HOSTS_DENY中终止旧条目的时间间隔,这个会影响PURGE_DENY的间隔。

.设置启动脚本

启动前要把自己的IP和服务器的IP放在白名单: vim/etc/hosts.allow

1.# cp daemon-control-dist daemon-control

#chown root daemon-control            (设置好启动脚本的所属用户和权限)

#chmod 700 daemon-control

( 可以不打生成Denyhost的主配置文件,将模板文件中开头是#的过滤后再导入到Denyhost.cfg )

#grep -v "^#" denyhosts.cfg-dist > denyhosts.cfg   )

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

2.启动Denyhost的进程

#./daemon-control start  (最好用这个)或  #/usr/share/denyhosts/daemon-control start

报错:

[root@linuxdenyhosts]# ./daemon-control start
starting DenyHosts:/usr/bin/envpython /usr/bin/denyhosts.py –daemon–config=/usr/share/denyhosts/denyhosts.cfg
DenyHosts could notobtain lock (pid: )
[Errno 17] File exists:‘/var/lock/subsys/denyhosts’
[root@linux denyhosts]#
rm -f /var/lock/subsys/denyhosts
Youhave new mail in /var/spool/mail/root
[root@linux denyhosts]#./daemon-control start
starting DenyHosts: /usr/bin/env python/usr/bin/denyhosts.py –daemon–config=/usr/share/denyhosts/denyhosts.cfg

解决:

rm-f /var/lock/subsys/denyhosts

OK

3.可以查看到Denyhost在运行中

#ps -ef |grep deny

在另外一台机器上使用ssh进行连接,当在连续几次输入错误的密码后,会被自动阻止掉,在一定时内不可以再连接ssh连接记录的日志文件。

4.DenyHosts添加自动启动项:

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

#chkconfig --add denyhosts

#chkconfig denyhosts on

(或将 Denyhost启动脚本添加到自动启动中 #echo '/usr/share/denyhosts/daemon-control start' >>/etc/rc.d/rc.local )

5.启动服务:

#service denyhosts start

6.让一台电脑失败连接数次。

在看看vim/etc/hosts.deny内是否有禁止的IP,有的话说明已经成功了。


7.
查看我的/etc/hosts.deny文件发现里面已经有22条记录。

#cat /etc/hosts.deny | wc -l

22

. denyhosts使用

如果不想让主机拒绝某一个ip,做法如下:

vi/etc/hosts.allow

sshd192.168.0.1#允许192.168.0.1访问该主机的ssh服务

如果想拒绝某一个ip同样使用vi/etc/hosts.deny添加就Ok

总结:

黑名单:vim/etc/hosts.deny

白名单:vim/etc/hosts.allow

假如在黑名单了,把IP写白名单里,同样是不受限制的。