CentOS6.3下安装fail2ban防暴力破解工具

简介:
 fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽),如:当有人在试探你的SSH、SMTP、FTP密码,只要达到你预设的次数,fail2ban就会调用防火墙屏蔽这个IP,而且可以发送e-mail通知系统管理员,是一款很实用、很强大的软件!
功能和特性:
  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
核心原理:
其实fail2ban就是用来监控,具体是调用iptables来实现动作!
好了,那下面来说说具体怎么安装、部署吧。
一、首先是服务安装
首先配置yum源,这里采用的是yum直接装(也可源码安装)
vim /etc/yum.repos.d/CentOS-Base.repo
在最后新增:
[atrpms] 
name=Red Hat Enterprise Linux $releasever - $basearch - ATrpms 
baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/stable 
gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms 
gpgcheck=1 
enabled=1 
然后直接就yum装:yum -y install fail2ban
安装完成后,服务配置目录为:/etc/fail2ban
/etc/fail2ban/action.d #动作文件夹,内含默认文件。iptables以及mail等动作配置
/etc/fail2ban/fail2ban.conf #定义了fai2ban日志级别、日志位置及sock文件位置
/etc/fail2ban/filter.d #条件文件夹,内含默认文件。过滤日志关键内容设置
/etc/fail2ban/jail.conf #主要配置文件,模块化。主要设置启用ban动作的服务及动作阀值
/etc/rc.d/init.d/fail2ban #启动脚本文件
二、安装后配置
首先来看看日志文件的默认定义:
cat /etc/fail2ban/fail2ban.conf |grep -v ^#
[Definition] 
loglevel = 3 
logtarget = SYSLOG                  #我们需要做的就是把这行改成/var/log/fail2ban.log,方便用来记录日志信息 
socket = /var/run/fail2ban/fail2ban.sock 
再来看看主配置默认生效的配置:
cat /etc/fail2ban/jail.conf |grep -v ^# |less
[DEFAULT]                                 #全局设置 
ignoreip = 127.0.0.1                      #忽略的IP列表,不受设置限制(白名单) 
bantime  = 600                            #屏蔽时间,单位:秒 
findtime  = 600                           #这个时间段内超过规定次数会被ban掉 
maxretry = 3                              #最大尝试次数 
backend = auto                            #日志修改检测机制(gamin、polling和auto这三种) 
 
[ssh-iptables]                            #针对各服务的检查配置,如设置bantime、findtime、maxretry和全局冲突,服务优先级大于全局设置 
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@example.com]   #触发报警的收件人 
logpath  = /var/log/secure                #检测的系统的登陆日志文件 
maxretry = 5                              #最大尝试次数 
PS:logpath(Centos5和Rhel5中)要写成/var/log/secure,这个是系统登陆日志,不能随意设置
service fail2ban start #启动服务即可(就用默认的主配置文件里定义的)
service iptables start #fail2ban依赖预iptables #之前改过日志路径,不行的话就再重启fail2ban
三、测试功能
测试机:192.168.30.251
fail2ban:192.168.29.253
在测试机上ssh 192.168.29.253,并且连续输入超过5次密码不对(经测试有延迟,多试几次),就会出现下图,连接不上
 

 
 
 
fail2ban上会产生日志记录:阻挡了此ip的续连
 
 

 
四、扩展说明
其实fail2ban的功能还是很丰富的,刚刚只是测试了它默认开启的防ssh暴力破解功能。
这里介绍防止vsftpd被暴力破解功能.
 
1.YUM安装vsftpd(yum配置略)
 
#yum install vsftpd -y
 
2.配置vsftpd,开启访问日志和传输日志支持
 
#vi /etc/vsftpd/conf/vsftpd.conf
 
添加:
xferlog_enable=YES
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
 
3.配置fail2ban的jail.conf文件,添加如下内容
 
#vi /etc/fail2ban/jail.conf
 
添加:
[vsftpd-iptables]
enabled  = true
filter   = vsftpd
action   = iptables[name=VSFTPD, port=21, protocol=tcp]
           sendmail-whois[name=VSFTPD, dest=you@example.com]
logpath  = /var/log/secure
maxretry = 5
bantime  = 68400
 
4.重启iptables和fail2ban服务.
 
service iptables restart
 
service fail2ban restart
 
 
------------------补 充----------------------
 
一 安装 Fail2ban 服务
 
下载rpmforge , 里面有大量最新的rpm包.
 
wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
 
rpm -ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
 
开始yum吧~~!
 
yum install fail2ban
 
fail2ban noarch 0.8.2-3.el5.rf rpmforge 125 k
Installing for dependencies:
gamin
gamin-python
 
安装是十分简单的拉.
 
fail2ban 原理
 
fail2ban 调用 iptables 实时阻挡外界的攻击,按照你的要求在一段时间内找出符合条件的日志,然后动作。
 
二 设定fail2ban服务
 
fail2ban 的设定档在这里
 
/etc/fail2ban
 
fail2ban.conf              日志设定文档
jail.conf                       阻挡设定文档
 
/etc/fail2ban/filter.d 具体阻挡内容设定目录
 
三 为何需要安装fail2ban呢?
 
Extmail 本身是没有邮件系统被攻击的解决方案,黑客是会不断user unknow地试探pop3 smtp 认证得到密码或电邮地址,大家可能问得到邮地址有何作用呢?电邮地址是可以贩卖的哦!而且十分值钱的,如果垃圾邮件者购买了这些地址,你的邮件服务器就有排忙了。
 
你话需不需要安装个fail2ban保护呢?
 
四 实施保护
 
1. 保护 SSH 拦截
 
先看看fail2ban是如何拦截的?
 
cat /etc/fail2ban/filter.d/sshd.conf
 
failregex = ^%(__prefix_line)s(?:error: PAM: )?Authentication failure for .* from <HOST>\s*$
            ^%(__prefix_line)sFailed [-/\w]+ for .* from <HOST>(?: port \d*)?(?: ssh\d*)?$
            ^%(__prefix_line)sROOT LOGIN REFUSED.* FROM <HOST>\s*$
            ^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>\s*$
            ^%(__prefix_line)sUser \S+ from <HOST> not allowed because not listed in AllowUsers$
            ^%(__prefix_line)sauthentication failure; logname=\S* uid=\S* euid=\S* tty=\S* ruser=\S* rhost=<HOST>(?:\s+user=.*)?\s*$
            ^%(__prefix_line)srefused connect from \S+ \(<HOST>\)\s*$
            ^%(__prefix_line)sAddress <HOST> .* POSSIBLE BREAK-IN ATTEMPT\s*$
 
fail2ban 使用了正则表达式找出:
 
Authentication failure/authentication failure
 
ROOT LOGIN REFUSED
 
refused connect from
 
POSSIBLE BREAK-IN ATTEMPT
 
not allowed because not listed in AllowUsers
 
以上的状况,可以根据你实际要求删减. 其中<HOST> 为建立连接的IP 
 
开启 SSH 拦截
 
vi /etc/fail2ban/jail.conf
 
[ssh-iptables]
 
enabled = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
           sendmail-whois[name=SSH, dest=收件者电邮地址, sender=寄件者电邮地址]
logpath = /var/log/secure
maxretry = 3
findtime = 300
bantime = 86400
 
fail2ban 会按照你的要求去查看/var/log/secure日志文件,然后在findtime = 300 "5分钟" 之内符合条件
的记录下来,如果到达了maxretry = 3 "3次符合条件" 就阻挡这个IP连接22端口 bantime = 86400 "一天的时间".
 
2. POP3 保护拦截
 
cat /etc/fail2ban/filter.d/courierlogin.conf
 
failregex = LOGIN FAILED, .*, ip=\[<HOST>\]$
 
这里表示错误地输入用户名/密码的pop3连接.
 
开启 pop3 保护
 
vi /etc/fail2ban/jail.conf
 
[POP3]
 
enabled = true
filter   = courierlogin
action   = iptables[name=pop3, port=110, protocol=tcp]
logpath = /var/log/maillog
bantime = 1800
findtime = 300
maxretry = 15
 
大家应该懂得如何看了吧? 我不写拉!好累。参数可以按照你实际要求修改噢~!
 
3. POP3-SSL 保护拦截
 
cat /etc/fail2ban/filter.d/courierlogin-ssl.conf
 
failregex = LOGIN FAILED, .*, ip=\[<HOST>\]$
 
这里表示错误地输入用户名/密码的pop3-ssl连接.
 
vi /etc/fail2ban/jail.conf
 
[POP3-SSL]
 
enabled = true
filter   = courierlogin-ssl
action   = iptables[name=pop3-ssl, port=995, protocol=tcp]
logpath = /var/log/maillog
bantime = 1800
findtime = 300
maxretry = 15
 
4 SMTP 保护拦截
 
cat /etc/fail2ban/filter.d/couriersmtp.conf
 
failregex = postfix/smtpd.* warning: unknown\[<HOST>\]: SASL LOGIN authentication failed: authentication failure
 
这里表示错误地输入用户名/密码的smtp连接.
 
vi /etc/fail2ban/jail.conf
 
[SMTP]
 
enabled = true
filter   = couriersmtp
action   = iptables[name=smtp, port=25:366, protocol=tcp]
logpath = /var/log/maillog
bantime = 1800
findtime = 300
maxretry = 15
 
参数可以按照你实际要求修改.
 
5. Extmail 登录保护
 
由于Extmail 的web mail 登入没有做到保护,现在加固吧!
 
vi /etc/fail2ban/filter.d/extmail.conf
 
failregex = extmail.*: user=.*, client=<HOST>, module=login, status=badlogin
 
这里表示错误地输入用户名/密码的web mail 登入.
 
vi /etc/fail2ban/jail.conf
 
[extmail]
 
enabled = true
filter   = extmail
action   = iptables[name=httpd, port=http, protocol=tcp]
logpath = /var/log/maillog
bantime = 300
findtime = 300
maxretry = 6
 
6. POSTFIX 保护User unknow 的试探.
 
不知道这个动作的意思先看看这篇文章。
 
http://hi.baidu.com/enjoyunix/blog/item/e8506058fd3c3189810a183a.html
 
vi /etc/fail2ban/filter.d/postfix.conf
 
failregex = reject: RCPT from (.*)\[<HOST>\]: 450
 
vi /etc/fail2ban/jail.conf
 
[POSTFIX]
enabled = true
filter   = postfix
action   = iptables[name=postfix, port=25, protocol=tcp]
logpath = /var/log/maillog
bantime = 43200
findtime = 1200
maxretry = 5
 
这里保护了User unknow 的试探以及垃圾邮件跳信攻击。
 
五 看看iptables
 
iptables -L -nv
 
pkts bytes target     prot opt in     out     source               destination         
    0     0 fail2ban-pop3-ssl tcp -- *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:995 
773 83329 fail2ban-postfix tcp -- *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25 
299 12660 fail2ban-pop3 tcp -- *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:110 
301 12740 fail2ban-ftp tcp -- *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:21 
3354 253K fail2ban-SSH tcp -- *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22 
438 33979 fail2ban-httpd tcp -- *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80 
 
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         
 
Chain OUTPUT (policy ACCEPT 5703 packets, 829K bytes)
pkts bytes target     prot opt in     out     source               destination         
 
Chain fail2ban-SSH (1 references)
pkts bytes target     prot opt in     out     source               destination         
3354 253K RETURN     all -- *      *       0.0.0.0/0            0.0.0.0/0           
 
Chain fail2ban-ftp (1 references)
pkts bytes target     prot opt in     out     source               destination         
301 12740 RETURN     all -- *      *       0.0.0.0/0            0.0.0.0/0           
 
Chain fail2ban-httpd (1 references)
pkts bytes target     prot opt in     out     source               destination         
438 33979 RETURN     all -- *      *       0.0.0.0/0            0.0.0.0/0           
 
Chain fail2ban-pop3 (1 references)
pkts bytes target     prot opt in     out     source               destination         
299 12660 RETURN     all -- *      *       0.0.0.0/0            0.0.0.0/0           
 
Chain fail2ban-pop3-ssl (1 references)
pkts bytes target     prot opt in     out     source               destination         
    0     0 RETURN     all -- *      *       0.0.0.0/0            0.0.0.0/0           
 
Chain fail2ban-postfix (1 references)
pkts bytes target     prot opt in     out     source               destination         
773 83329 RETURN     all -- *      *       0.0.0.0/0            0.0.0.0/0           
 
Chain fail2ban-smtp (0 references)
pkts bytes target     prot opt in     out     source               destination         
    0     0 RETURN     all -- *      *       0.0.0.0/0            0.0.0.0/0           
 
如何监察呢?
 
#watch -n 1 fail2ban-client status POSTFIX
 
Status for the jail: POSTFIX
|- filter
| |- File list:    /var/log/maillog 
| |- Currently failed:    2
| `- Total failed:    22
`- action
   |- Currently banned:    0
   | `- IP list:    
   `- Total banned:    0
 
看看那些垃圾邮件者真是好无聊!不断地试探我的邮件服务器呢。
 
六 看看fail2ban的日志
 
# cat fail2ban.log | grep '] Ban '
 
2009-04-07 20:22:44,575 fail2ban.actions: WARNING [POSTFIX] Ban ip地址
 
就以看到过去有那些IP拦截了,以及是那个服务。
 
# cat fail2ban.log | grep '] Unban '
 
可以查看什么时候解的。

 



     本文转自 showerlee 51CTO博客,原文链接:http://blog.51cto.com/showerlee/1169792,如需转载请自行联系原作者




相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
5月前
|
存储 Ubuntu Linux
VMware-安装CentOS系统教程及安装包
虚拟机相当于是一个独立于你电脑的环境,在这个环境上面,你可以安装Linux、Windows、Ubuntu等各个类型各个版本的系统,在这个系统里面你不用担心有病读等,不用担心文件误删导致系统崩溃。 虚拟机也和正常的电脑系统是一样的,也可以开关机,不用的时候,你关机就可以了,也不会占用你的系统资源,使用起来还是比较方便 这里也有已经做好的CentOS 7系统,下载下来解压后直接用VMware打开就可以使用
968 69
|
4月前
|
存储 分布式计算 Linux
安装篇--CentOS 7 虚拟机安装
VMware 装 CentOS 7 不知道从哪下手?这篇超详细图文教程手把手教你在 VMware Workstation 中完成 CentOS 7 桌面系统的完整安装流程。从 ISO 镜像下载、虚拟机配置,到安装图形界面、设置用户密码,每一步都有截图讲解,适合零基础新手快速上手。装好之后无论你是要搭 Hadoop 集群,还是练 Linux ,这个环境都够你折腾一整天!
1539 2
|
5月前
|
Ubuntu Linux 索引
Centos 7、Debian及Ubuntu系统中安装和验证tree命令的指南。
通过上述步骤,我们可以在CentOS 7、Debian和Ubuntu系统中安装并验证 `tree`命令。在命令行界面中执行安装命令,然后通过版本检查确认安装成功。这保证了在多个平台上 `tree`命令的一致性和可用性,使得用户无论在哪种Linux发行版上都能使用此工具浏览目录结构。
437 78
|
4月前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
716 16
|
5月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
424 10
|
5月前
|
运维 网络协议 Linux
CentOS下Bind服务的安装与故障排查
通过以上的步骤,您应该能够在CentOS系统上安装并配置BIND DNS服务,并进行基本的故障排查。
456 0
|
5月前
|
存储 Ubuntu Linux
安卓手机免root安装各种Linux系统:Ubuntu, Centos,Kali等
此外还可以安装Slackware、Archstrike等系统,还可以通过github查找方法安装更多有趣的东西。 昨日小编就是通过Termux安装的Kali Linux工具包。
|
6月前
|
Linux 网络安全 Apache
针对在Centos/Linux安装Apache过程中出现的常见问题集锦
以上每个问题的解决方案应深入分析错误日志、系统消息和各种配置文件,以找到根本原因并加以解决。务必保持系统和Apache软件包更新到最新版本,以修复已知的bugs和安全漏洞。安装和管理Web服务器是一项需要细致关注和不断学习的任务。随着技术的发展,推荐定期查看官方文档和社区论坛,以保持知识的更新。
266 80
|
6月前
|
人工智能 数据挖掘 Linux
Centos安装Python3.7(亲测可用)
本指南详细介绍了在基于Linux(以CentOS系统为例,使用yum包管理器)的系统上安装Python 3.7版本的完整流程。Python是一种广泛使用的高级编程语言,在各种领域如软件开发、数据分析、人工智能和区块链开发等都有着重要的应用。
572 2
|
7月前
|
机器人 Linux
CentOS 7系统中安装特定版本CMake 3.21.2的方法。
到这里,过程已经全部完成。如果你跟随上面的步骤来,那么你现在已经拥有了一个全新的CMake版本在你的CentOS 7系统上了。这个过程就像是你通过一系列仪式,唤醒了一个沉睡已久的古老机器人,它现在完全按照你的意愿来帮你构建和编译软件了。
557 18