分享

用fail2ban来防止暴力破解FTP/SSH等服务

 用勿龍潛 2012-03-09
用fail2ban来防止暴力破解FTP/SSH等服务

引言

最近本人博客一直被别人暴力破解FTP密码。虽然没有成功,但会导致系统负载很高,原因是在暴力破解的时候,系统会不断地认证用户,从而导致访问博客速度很慢。至于原因我就不想多说了。为了阻止这样的事情发生,我在网上找了点资料,并成功应用上了,现分享出来,希望给有类似经历的朋友一些参考。

今天要登场的是我们的fail2ban大师,fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送e-mail通知系统管理员,是不是很好、很实用、很强大!

 

 

简单来介绍一下fail2ban的功能和特性

1、支持大量服务。如sshd,apache,qmail,proftpd,sasl等等

2、支持多种动作。如iptables,tcp-wrapper,shorewall(iptables第三方工具),mail notifications(邮件通知)等等。

3、在logpath选项中支持通配符

4、需要Gamin支持(注:Gamin是用于监视文件和目录是否更改的服务工具)

5、需要安装python,iptables,tcp-wrapper,shorewall,Gamin。如果想要发邮件,那必需安装postfix/sendmail

 

安装使用

我现在使用的是RHEL6.1X86_64的系统,所以本实验内容在在RHEL6.1上完成,并成功应用于Debian系统上。本文是用rpm包安装的,关于源码安装请参考这里

在RHEL和Debian系统上都有相应的编译好的软件包,Debian系统上,用apt-get install fail2ban就能安装。但在RHEL6上,目前稍为有点复杂。下面看我的安装过程

a、先下载并安装shorewall

此软件的相关平台及下载地址

 

http:///linux/rpm2html/search.php?query=shorewall&submit=Search+...&system=&arch=请根据自己的平台下载

 

 

 

[root@yufei ~]# wget ftp:///linux/epel/testing/6/x86_64/shorewall-4.4.17-2.el6.noarch.rpm

[root@yufei ~]# rpm -ivh shorewall-4.4.17-2.el6.noarch.rpmb、安装依赖包

 

 

 

[root@yufei ~]# yum install gamin-python tcp_wrappersc、安装fail2ban

 

此软件的相关平台及下载地址

 

 

 

http:///linux/rpm2html/search.php?query=fail2ban&submit=Search+...请根据自己的平台下载

 

 

 

[root@yufei ~]# wget ftp:///linux/epel/6/x86_64/fail2ban-0.8.4-24.el6.noarch.rpm

[root@yufei ~]# rpm -vih fail2ban-0.8.4-24.el6.noarch.rpmd、让服务开启

 

 

 

[root@yufei ~]# chkconfig fail2ban on默认情况下

 

安装好后会在/etc/logrotate.d/中是否创建fail2ban这个日志循环

 

安装了很多过滤策略,都在/etc/fail2ban/filter.d/目录下

 

安装了很多默认动作,都在/etc/fail2ban/action.d/目录下

 

这里面的过滤策略和默认动作都可以直接用了,感谢此程序有作者啊!因为要自己写过滤策略的话,需要分析日志,会正则,然后就是写动作。如果有兴趣的话,各位朋友可以自己来参考已经存在的,然后写自己的。

 

下面介绍一下主要的配置文件

/etc/fail2ban/fail2ban.conf

 

此文件定义了fai2ban日志级别、日志位置及sock文件位置。

 

 

 

loglevel = 3

logtarget = SYSLOG(需要把此值修改成日志文件如/var/log/fail2ban.log,用来记录日志信息,我用系统默认的SYSLOGR看不到fail2ban的日志,所以我修改了。重新启动fail2ban后就创建了此文件了。)

socket = /var/run/fail2ban/fail2ban.sock每一个设置,在此文件中都会有详细的说明。

 

/etc/fail2ban/jail.conf

 

此是fail2ban主要的配置文件,可以把jail理解成监狱(哈哈,自己理解吧)。下面就来介绍一下这个文件的主要设置方法

 

 

 

[DEFAULT]    #全局设置

ignoreip = 127.0.0.1      #忽略IP,在这个清单里的IP不会被屏蔽

bantime  = 600                   #屏蔽时间,以秒为单位

findtime  = 600            #监测时间。在此期间内重试超过规定次数,会激活fail2ban采取相应的动作。(也可以理解成在这个时间段内超过规定次数会被ban掉。)

maxretry = 3                 #最大尝试次数(经测试,好像有延迟)

backend = auto                    #日志修改检测机制(gamin、polling和auto这三种)下面都是一些子段的设置,但这里面的优先级会高于全局里面的设置,也已经说,当里面设置和全局设置有冲突的时候,会以此段设置为准。如果没有的话就会调用全局设置。

 

[ssh-iptables] #相当于标签说明

enabled  = true      #是否激活此项(true/false)

filter   = sshd       #过滤规则filter的名字,对应filter.d目录下的sshd.conf

action   = iptables[name=SSH, port=ssh, protocol=tcp]

                     动作的相关参数。如果不是默认端口的话,记得也要相应的把服务改成端口

           sendmail-whois[name=SSH, dest=root, sender=fail2ban@mail.com]

                     发送邮件dest是目标,sender是发送者(记得要有SMTP服务啊)

注意:此动作也和filter类似,都是调用相应的配置文件(动作的配置文件action.d下的ptables.conf和sendmail-whois.conf)

logpath  = /var/log/secure    日志记录的位置

maxretry = 5   最大尝试次数,此项会覆盖全局中maxretry设置(次数会有延迟)此设置的大概意思就是

 

fail2ban 会按照你的过滤规则(filter   = sshd    也就是filter.d/sshd.conf)去查看相应的日志文件(logpath=/var/log/secure),然后在findtime = 600 “10分钟” (此时间以全局的为准)之内符合条件

 

的记录下来,如果到达了maxretry = 3 “3次符合条件” 就对这个采取相应的动作action(ptables.conf和sendmail-whois.conf),并且限制的时间为bantime = 600 “10分钟”。

 

关于其他的子段设置是类似的,所以大家参考来修改就OK了。

 

fail2ban的相关命令

启动/关闭fail2ban

 

 

 

service fail2ban start/stop状态查看

 

 

 

service fail2ban status日志文件

 

 

 

/var/log/fail2ban.logiptables内容查看

 

 

 

iptables -L -n下面给出我的效果图

 

注意:如果重新启动fail2ban,iptables中的规则就会全部被清空。

 

仔细看了一下过滤规则与动作内容,发现要玩好fail2ban的话,关键是要你会分析日志,然后根据日志来写过滤规则,然后就是写iptables动作。这些要以后慢慢修炼了。

 

哈哈,恭喜一下自己,又学习到一个新知识,感谢给我创造机会的某些人。最后我深刻领会到了那句话的含义:“宁可得罪君子,不要得罪小人!”。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多