使用fail2ban+iptables防止sshd被暴力破解
Centos6或Centos7 使用fail2ban防止sshd被暴力破解
fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送e-mail通知系统管理员,很好、很实用、很强大!
工作的原理是通过分析一定时间内的相关服务日志,将满足动作的相关IP利用iptables加入到dorp列表一定时间。
注:重启iptables服务的话,所有DORP将重置。
一、下载安装软件包:
官方地址:http://www.fail2ban.org
下载地址:http://www.fail2ban.org/wiki/index.php/Downloads
请下载 fail2ban-0.8.14 版本配合CentOS6中的iptables防火墙进行防护
查看解压压缩包中README.md配置说明文件:
环境要求:fail2ban-0.8.14 Python >= 2.4
查看当前python版本命令:python -V 。默认是安装的,yum命令就依赖于Python
解压与安装
tar xvfj fail2ban-0.8.14.tar.bz2
cd fail2ban-0.8.14
python setup.py install
相关主要文件说明:
/etc/fail2ban/action.d #动作文件夹,内含默认文件。iptables以及mail等动作配置
/etc/fail2ban/fail2ban.conf #定义了fai2ban日志级别、日志位置及sock文件位置
/etc/fail2ban/filter.d #条件文件夹,内含默认文件。过滤日志关键内容设置
/etc/fail2ban/jail.conf #主要配置文件,模块化。主要设置启用ban动作的服务及动作阀值
二、启动服务设置开机启动
生成服务启动脚本:
[root@xuegod63 fail2ban-0.8.14]# pwd
/root/fail2ban-0.8.14
[root@CentOS7-63 fail2ban-0.8.14]# cp ./files/redhat-initd /etc/rc.d/init.d/fail2ban
[root@CentOS7-63 fail2ban-0.8.14]# chkconfig --add fail2ban #开机自动启动,或者使用 /sbin/chkconfig fail2ban on 也可
互动: 你怎么知道要复制这个文件? 一个新的软件包,后期怎么可以知道哪个文件是启动脚本文件?
这就要找服务器启动脚本文件中有什么特点,然后过滤出来对应的文件名。
[root@xuegod63 fail2ban-0.8.14]# grep chkconfig ./* -R --color
./files/redhat-initd:# chkconfig: - 92 08
启动脚本里都包含chkconfig 字段
三、配置参数详解(fail2ban+iptables组合 )
通过一个应用实例来了解用法:应用实例
设置条件:ssh远程登录5分钟内3次密码验证失败,禁止用户IP访问主机1小时,1小时该限制自动解除,用户可重新登录。
因为动作文件(action.d/iptables.conf)以及日志匹配条件文件(filter.d/sshd.conf )安装后是默认存在的。基本不用做任何修改。所有主要需要设置的就只有jail.conf文件。启用sshd服务的日志分析,指定动作阀值即可。
主配置文件设定:vi /etc/fail2ban/fail2ban.conf
[Definition]
loglevel =3
logtarget = SYSLOG #我们需要做的就是把这行改成/var/log/fail2ban.log,方便用来记录日志信息
socket =/var/run/fail2ban/fail2ban.sock
规则文件/etc/fail2ban/jail.conf修改及说明如下:
[DEFAULT] #全局设置
ignoreip = 127.0.0.1/8 #忽略的IP列表,不受设置限制
bantime = 3600 #屏蔽时间,单位:秒
findtime = 600 #这个时间段内超过规定次数会被ban掉
maxretry = 3 #最大尝试次数
backend = auto #日志修改检测机制(gamin、polling和auto这三种)
[ssh-iptables] #单个服务检查设置,如设置bantime、findtime、maxretry和全局冲突,服务优先级大于全局设置。
enabled = true #是否激活此项(true/false)修改成 true
filter = sshd #过滤规则filter的名字,对应filter.d目录下的sshd.conf
action = iptables[name=SSH, port=ssh, protocol=tcp] #动作的相关参数,对应action.d/iptables.conf文件
sendmail-whois[name=SSH, [email protected], [email protected]
om, sendername="Fail2Ban"]#触发报警的收件人
logpath = /var/log/secure #检测的系统的登陆日志文件。这里要写sshd服务日志文件。
#5分钟内3次密码验证失败,禁止用户IP访问主机1小时。 配置如下
bantime = 3600 #单位:秒 禁止用户IP访问主机1小时
findtime = 300 #单位:秒 在5分钟内内出现规定次数就开始工作
maxretry = 3 #3次密码验证失败
修改完成后如图所示:
启动服务:无报错说明配置正常,但需要确定状态是否启用
[root@xuegod63 fail2ban-0.8.14]#service fail2ban start
[root@xuegod63 fail2ban-0.8.14]#service fail2ban status
查看被限制的IP
[root@CentOS7-63 fail2ban-0.8.14]# fail2ban-client status #配置好之后我们检测下fail2ban是否工作。
[root@CentOS7-63 fail2ban-0.8.14]# fail2ban-client status ssh-iptables
解除fail2ban绑定的IP
方法一:删除iptables对应规则
[root@CentOS7-63 fail2ban-0.8.14]# iptables -L --line-numbers
在根据序号解除对应限制
[root@CentOS7-63 fail2ban-0.8.14]# iptables -D fail2ban-SSH 1
方法二:清除日志进行解除IP封锁
[root@CentOS7-63 fail2ban-0.8.14]# > /var/log/secure #清日志。 从现在开始
[root@xuegod63 fail2ban]#service fail2ban restart
Stopping fail2ban: [ OK ]
Starting fail2ban: [ OK ]
[root@xuegod63 fail2ban]# iptables -L -n
补充说明:
如果修改ssh默认端口22为222后 ,配置fail2ban来监控sshd服务如何修改?
需要修改两个地方:
1、/etc/fail2ban/jail.conf的 [ssh-iptables]部分
2、/etc/fail2ban/action.d/iptables.conf 定义的ssh监听的端口号
修改完成后,重启fail2ban服务即可。
共有 0 条评论