实战阿里云-实战Fail2Ban之v0.9.3

简介:

1、理论部分

1.1、环境概述

笔者实战阿里云发现,阿里云提供的centos 6.5版本的镜像是经过阿里云修改的。

默认会禁用以下两个:

1)iptables管理工具

2)SELinux

笔者参阅了一下文献(见本人页最后),发现fail2ban由于版本的变化,原文的设置方法已经发生变化,故而参阅原文的基础上重写关于fail2ban的设置文档。

1.2、fai2ban的介绍

fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽),如:当有人在试探你的SSH、SMTP、FTP密码,只要达到你预设的次数,fail2ban就会调用防火墙屏蔽这个IP,而且可以发送e-mail通知系统管理员,是一款很实用、很强大的软件!

1.3、管理文件结构介绍

1)/etc/fail2ban/action.d

动作文件夹,内含默认文件。iptables以及mail等动作配置

2)/etc/fail2ban/fail2ban.conf

定义fail2ban日志级别,日志位置及sock文件位置

3)/etc/fail2ban/filter.d

条件文件夹,内含默认文件。过滤日志关键内容设置

4)/etc/fail2ban/jail.conf

主配置文件、模块化。主要设置启用ban动作的服务以及动作阀值。

5)/etc/rc.d/init.d/fail2ban

fail2ban服务的启动脚本

1.4、fai2ban的工作原理

1)读取/etc/fail2ban/jail.conf中开启的服务,如sshd,vsftpd等

2)根据开启的服务,在/etc/fail2ban/filter.d选择对应的日志过滤规则监控日志

3)根据开启的服务和日志过滤规则查找违反/etc/fail2ban/jail.conf所定义的findtime(查找时间段)与maxretry(最大尝试次数)的服务日志。

4)如果发现有违反日志则根据/etc/fail2ban/action.d定义的动作执行(如iptables生成拒绝某个IP访问服务器的规则)。

注:以上原理是本人根据使用经验分析的结果,有不当之处欢迎指正。

2、实验部分

2.1、基yum源安装

1
yum  install  -y iptables fail2ban.noarch

2.2、iptables设置

1)vim编辑/etc/sysconfig/iptables

增加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

2)重启iptables服务

1
/etc/init .d /iptables  restart

2.3、fail2ban设置

1)vim编辑/etc/fail2ban/fail2ban.conf

1
2
3
4
5
6
7
8
[Definition]
loglevel = INFO
logtarget = SYSLOG
syslogsocket = auto
socket =  /var/run/fail2ban/fail2ban .sock
pidfile =  /var/run/fail2ban/fail2ban .pid
dbfile =  /var/lib/fail2ban/fail2ban .sqlite3
dbpurgeage = 86400

注:以上不做任何修改

2)vim编辑/etc/fail2ban/jail.conf

请参阅注解部分,详细如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
[INCLUDES]
before = paths-fedora.conf
[DEFAULT]
ignoreip = 127.0.0.1 /8
ignorecommand =
bantime  = 600
findtime  = 60  #修改搜索日志的时间段为一分钟
maxretry = 5  #修改上面时间段内最大尝试为5次
backend = auto
usedns = warn
logencoding = auto
enabled =  false
filter = %(__name__)s
 
destemail = will@cmdschool.org
sender = root@localhost
mta = sendmail
protocol = tcp
chain = INPUT
port = 0:65535
banaction = iptables-multiport
 
action_ = %(banaction)s[name=%(__name__)s, bantime= "%(bantime)s" , port= "%(port)s" , protocol= "%(protocol)s" , chain= "%(chain)s" ]
action_mw = %(banaction)s[name=%(__name__)s, bantime= "%(bantime)s" , port= "%(port)s" , protocol= "%(protocol)s" , chain= "%(chain)s" ]
             %(mta)s-whois[name=%(__name__)s, dest= "%(destemail)s" , protocol= "%(protocol)s" , chain= "%(chain)s" ]
action_mwl = %(banaction)s[name=%(__name__)s, bantime= "%(bantime)s" , port= "%(port)s" , protocol= "%(protocol)s" , chain= "%(chain)s" ]
              %(mta)s-whois-lines[name=%(__name__)s, dest= "%(destemail)s" , logpath=%(logpath)s, chain= "%(chain)s" ]
action_xarf = %(banaction)s[name=%(__name__)s, bantime= "%(bantime)s" , port= "%(port)s" , protocol= "%(protocol)s" , chain= "%(chain)s" ]
              xarf-login-attack[service=%(__name__)s, sender= "%(sender)s" , logpath=%(logpath)s, port= "%(port)s" ]
action_cf_mwl = cloudflare[cfuser= "%(cfemail)s" , cftoken= "%(cfapikey)s" ]
                 %(mta)s-whois-lines[name=%(__name__)s, dest= "%(destemail)s" , logpath=%(logpath)s, chain= "%(chain)s" ]
action_blocklist_de  = blocklist_de[email= "%(sender)s" , service=%(filter)s, apikey= "%(blocklist_de_apikey)s" ]
action_badips = badips.py[category= "%(name)s" , banaction= "%(banaction)s" ]
action = %(action_)s
 
[sshd]
enabled =  true  #开启sshd的防护功能
port    =  ssh
logpath = %(sshd_log)s
 
[sshd-ddos]
port    =  ssh
logpath = %(sshd_log)s
 
[dropbear]
port     =  ssh
logpath  = %(dropbear_log)s
 
[selinux- ssh ]
port     =  ssh
logpath  = %(auditd_log)s
maxretry = 5
 
[vsftpd]
port     =  ftp , ftp -data,ftps,ftps-data
logpath  = %(vsftpd_log)s
 
[mysqld-auth]
port     = 3306
logpath  = %(mysql_log)s
maxretry = 5

以上是服务开启范例,请参阅者根据实际情况设置。

注:开启服务在某个服务,如“[sshd]”下一行加入“enabled = true”即可。

2.4、服务重启

重启iptables与fail2ban服务:

1
2
/etc/init .d /iptables  restart
/etc/init .d /fail2ban  restart

注:fail2ban一定后于iptables启动,即重启iptables一定要重启fail2ban,相反重启fail2ban不用重新启iptables。

2.4、fail2ban检查与测试

1)键入如下命令查看防护墙变化:

1
iptables -L -n

可见如下内容:

1
2
3
Chain f2b-sshd (1 references)
target     prot opt  source                destination
RETURN     all  --  0.0.0.0 /0             0.0.0.0 /0

2)测试:

1
ssh  root@115.5.8.X

尝试找一个客户端去ssh登录你的服务器并故意输入错误的密码5次以上(模拟暴力破解过程)。

在被暴力破解的服务器输入如下命令检查测试结果:

1
iptables -L -n

可见有IP被拒绝:

1
2
3
4
Chain f2b-sshd (1 references)
target     prot opt  source                destination
REJECT     all  --  14.222.106.0         0.0.0.0 /0            reject-with icmp-port-unreachable
RETURN     all  --  0.0.0.0 /0             0.0.0.0 /0

2.5、fail2ban的解除

输入如下命令解除封锁:

1
iptables -D f2b-sshd 1

2.6、fail2ban状态监控脚本

因为重启iptables需要重启fai2ban服务,故而我们需要增加此监控脚本防止管理员疏忽。

1)增加脚本文件夹

1
mkdir  ~ /script

2)vim编辑~/script/f2bAutoRestart.sh加入如下内容

1
2
3
4
5
6
7
#!/bin/bash
fl=$(iptables -L - v  -n |  grep  'Chain f'  wc  -l)
#echo $fl
if  [ $fl - eq  0 ];  then
   echo  'restart fai2band'
   /etc/init .d /fail2ban  restart
fi

3)添加计划任务

1
crontab  -e

添加如下内容:

1
* /5  * * * * sh ~ /script/f2bAutoRestart .sh








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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4月前
|
Java
dockerfile打包阿里云镜像 springboot实战项目(阿里云镜像仓失败 处理)
dockerfile打包阿里云镜像 springboot实战项目(阿里云镜像仓失败 处理)
|
4月前
电子好书发您分享《阿里云认证的解析与实战-数据仓库ACP认证》
电子好书发您分享《阿里云认证的解析与实战-数据仓库ACP认证》
94 1
|
4月前
|
云计算
电子好书发您分享《阿里云认证的解析与实战-云计算ACP认证》
电子好书发您分享《阿里云认证的解析与实战-云计算ACP认证》
61 1
|
4月前
|
关系型数据库 MySQL BI
用友畅捷通基于阿里云 EMR StarRocks 搭建实时湖仓实战分享
本文从用友畅捷通公司介绍及业务背景;数据仓库技术选型、实际案例及未来规划等方面,分享了用友畅捷通基于阿里云 EMR StarRocks 搭建实时湖仓的实战经验。
584 0
用友畅捷通基于阿里云 EMR StarRocks 搭建实时湖仓实战分享
|
7月前
|
canal
阿里云DTS同步binlog实战
阿里云DTS同步binlog实战
|
8月前
|
人工智能 Cloud Native 安全
|
10天前
|
存储 缓存 Java
阿里云OSS实战从入门到大神
说起阿里云OSS,那作用和功能都是非常强大的,它可以存放图片,音频,视频等资源文件,这些资源文件,你不必存放到服务器的硬盘里,这样既可以节省服务器硬盘空间,又可以降低服务器的读写压力,非常适合大并发的架构。
51 0
|
9月前
|
运维 Cloud Native 关系型数据库
活动回顾|阿里云 Serverless 技术实战与创新成都站回放&PPT下载
7月29日“阿里云 Serverless 技术实战与创新”成都站圆满落幕。可免费下载成都站|阿里云 Serverless 沙龙演讲 PPT。
|
4月前
|
云计算
电子好书发您分享《阿里云认证的解析与实战-云计算ACP认证》
电子好书发您分享《阿里云认证的解析与实战-云计算ACP认证》
131 1
|
4月前
电子好书发您分享《阿里云认证的解析与实战-数据仓库ACP认证》
电子好书发您分享《阿里云认证的解析与实战-数据仓库ACP认证》
117 2

热门文章

最新文章