您的位置:首页 > 大数据 > 人工智能

ssh 安全防护备忘录

2014-01-23 02:14 316 查看
release 20140123 创建文档,发布51cto

release 20140409 添加对IP地址过滤,防止sshd: unknown
现在类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.rpmcentos 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 passwordfailures. 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 创建文件
#time: 2014-04-04 添加对IP地址过滤,防止sshd: unknown
#Deny SHELL Script
#logrotate -vf /etc/logrotate.conf
#*/30  * * * * root bash /root/bin/dropssh.sh
count=10
srcfile=/var/log/secure
dstfile=/etc/hosts.deny
awk -v ac=$count '/Failed/{a[$(NF-3)]++}END{for(i in a){if(a[i]>ac)printf "%s %s\n",a[i],i}}' $srcfile | sort -rn > /tmp/dropssh.txt
iplist=$(awk -v ac=$count '/Failed/{a[$(NF-3)]++}END{for(i in a){if(a[i]>ac)printf "%s\n",i}}' $srcfile)
for ip in $iplist
do
echo $ip | grep -q '^[^0-9]' && continue
grep $ip $dstfile > /dev/null
if [ $? -gt 0 ];then
echo "sshd:$ip" >> $dstfile
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文件内的失败次数,并不是读取一段时间内次数的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ssh 安全防护 fail2ban dr