Skip to main content

 路由器设置 > 新闻资讯 >

ssh 安全防护备忘录

2014-01-23 22:24 浏览:

现在类unix系统都使用ssh协议进行服务器管理工作,因为攻击都喜欢通过暴力破解(一般利用密码字典),直接获得服务器权限。因此为了服务器安全,我们必须做好最基本的访问控制工作。一般修改ssh服务器的参数、设置复杂口令、非对称密钥登录访问、堡垒机之类的吧,都能有效阻击攻击者取得服务器权限。可是以上措施可以让攻击者做不成功某事,可是攻击者一直不停尝试,我们需要禁止他进行ssh登录连接,也就是把异常连接SSH服务器IP封掉了。

  以下有两种措施:

  1.fail2ban服务,调用iptables短暂性封锁IP

  2.编写脚本,周期调用,通过tcp wrappers封锁IP

 

-----------------------------------------------------

fail2ban

-----------------------------------------------------

      fail2ban作为一个守护进程存在,主要是能周期地扫描/var/log/secure,再调用iptables去进行流量过滤防御,会短暂性封锁IP。已经用了半年,感觉一般,服务经常罢工。

 

1.安装  由于基于开源平台处理,使用epel仓库才能自动通过YUM安装,所以需要进行安装EPEL.。根据系统平台不同,
centos 5  平台使用epel-release-5-4.noarch.rpm

centos 6 平台使用  epel-release-6-8.noarch.rpm

 

2. 安装

rpm -ivh epel-release-5-4.noarch.rpm       安装软件仓库

yum install fail2ban                                    顺便会安装些依赖软件

 

3.软件介绍

 

Description :
Fail2ban scans log files like/var/log/pwdfail or
/var/log/apache/error_logand bans IP that makes too many password

failures. It updates firewall rules to reject the IP address.

 

4. 内容介绍
drwxr-xr-x 2 root root 4096 Aug 19 19:50 action.d          根据匹配内容,进行操作调用
-rw-r--r-- 1 root root  859 Aug 19 19:50 fail2ban.conf          

#fail2ban.conf  守护进程配置文件,一般只是修改下fail2ban日志位置,logtarget = /var/log/fail2ban.log

drwxr-xr-x 2 root root 4096 Aug 19 19:50 filter.d            匹配内容
-rw-r--r-- 1 root root 6517 Aug 19 19:51 jail.conf          

#工作内容配置文件,里面有很多定义选项,常用iptables。还有很多访问控制里面定义

 

5.服务器启动

service iptables restart     #习惯重启下iptables

service fail2ban restart    #fail2ban依赖iptables,必须跟在其后启动,而且还是restart那种操作,否则不生效

 

6. 平时可以看下/var/log/fail2ban.log日志,看看最近阻挡情况。

  fail2ban不单针对ssh服务器,还提供www,mail等服务器控制,用途广泛

  另外提供第三方接口,可以定义filter策略,action操作,反正很灵活

  缺点是经常罢工假死,这是我的使用体验

  由于是短暂性封锁IP,如果某IP连接攻击,就变成封了开,开了封了。

 

###############################################

-----------------------------------------------------

脚本dropssh

-----------------------------------------------------

 

有些服务器由于各种原因,没有成功安装第三文库,我们可以通过简单的脚本,来实现防御处理的。

有台服务器的YUM已经不能安装文件,不能编译,所以通过脚本来实现防护。

这是抄写余洪春大师的安全防范脚本,我自己修改点内容

 

#!/bin/bash

#filename dropssh.sh

#time: 2013-12-10

#Deny SHELL Script

#1 */1 * * * bash /opt/bin/dropssh.sh

count=10

file=/var/log/secure

#iplist=$(awk -v ac=$count '/Failed/{a[$(NF-3)]++}END{for(i in a){printf "%s\n",i}}' $file)

iplist=$(awk -v ac=$count '/Failed/{a[$(NF-3)]++}END{for(i in a){if(a[i]>ac)printf "%s\n",i}}'$file)

for ip in $iplist

do

grep $ip /etc/hosts.deny > /dev/null

if [ $? -gt 0 ];

then

echo "sshd:$ip" >> /etc/hosts.deny

fi

done

这个服务器定时扫描/var/log/secure文件,找到一定次数登录失败的的IP,把它写入到/etc/hosts.deny文件,禁止这些IP进行ssh访问。

另外,有次开发登录某台服务器,反正他就是当时在/var/log/secure日志失败记超过阀值,服务器禁止公司内部ssh访问。

第一,找到公司出口IP;

第二,去/etc/hosts.deny把这个IP相关记录清掉;

第三,使用logrotate -fv /etc/logrotate.conf,刷新轮转日志文件,让脚本读取新的日志

第四,这个脚本比较笨,它是读取/var/log/secure文件内的失败次数,并不是读取一段时间内次数的