何为fail2ban
fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽),如:当有人在试探你的SSH、SMTP、FTP密码,只要达到你预设的次数,fail2ban就会调用防火墙屏蔽这个IP,而且可以发送e-mail通知系统管理员,是一款很实用、很强大的软件!
安装前的准备工作
必须的
python>2.4(官网推荐使用2.5版本以上,2.4版本有bug)
可选的
iptables、shorewall、tcp-wrapper,当发生暴力破解现象时,使用其中一种方式来屏蔽ip
gmain,文件更改监视器
sendmail、postfix,可以及时发邮件报告情况
安装fail2ban
安装也很简单!
下载fail2ban:https://github.com/fail2ban/fail2ban
cd /opt/fail2ban/ setup.py install
安装的默认路径:/usr/share/fail2ban
执行脚本路径:/usr/bin
配置文件路径:/etc/fail2ban
安装截图:
启动脚本与logrotate配置
1.配置/etc/init.d脚本
首先,我们要创建一个服务脚本,便于管理fail2ban的启动与关闭,包括它的开机启动。
fail2ban安装内自带了几个系统的模板文件,centos的文件为:files/redhat-initd。
#将redhat-initd文件复制到/etc/init.d目录下 cp redhat-initd /etc/init.d/fail2ban #更改权限 chmod 755 /etc/init.d/fail2ban #加入开机服务项 chkconfig --add fail2ban #开机启动 chkconfig fail2ban on
2.配置fail2ban的logrotate
创建这个文件:/etc/logrotate.d/fail2ban
#内容为: /var/log/fail2ban.log { weekly rotate 7 missingok compress postrotate /usr/bin/fail2ban-client reload 1>/dev/null || true endscript }
其中fail2ban-client的路径值得注意,可以使用这个命令查询:
which fail2ban-client #或者 whereis fail2ban-client
Fail2Ban结构说明
首先来简述下fail2ban是如何工作的,涉及到哪些东西。
fail2ban包含下面5个要素,理解这5个要素之间的关系,对于如何配置如何使用fail2ban是很有帮助的。
- filter(过滤器):用于在日志文件中找出需要屏蔽信息的正则表达式
- action(操作指令):发现需要屏蔽时所做的具体操作
- jail(组合,一个filter或者多个action):filter和action的整合
- fail2ban-client:客户端(/usr/bin/fail2ban-client)
- fail2ban-server:服务端(/usr/bin/fail2ban-server)
前三个都是配置文件,在/etc/fail2ban目录下;最后两个是fail2ban的可执行文件。
Server
fail2ban有两部分组成:fail2ban-client和fail2ban-server。server是多线程的并用来监听unix socket的命令。server本身不加载任何配置。
因此,在启动时,server处于没有jail定义的默认状态!需要client给予具体的配置。
fail2ban-server的启动参数如下:
------------ -b start in background(后台启动) -f start in foreground(前台启动) -s socket path(套接字路径) -x force execution of the server(强制执行server) -h, --help display this help message(显示帮助信息) -V, --version print the version(打印版本) -----------
Client
fail2ban-client是fail2ban-server的前端程序,它连接server的socket并发送命令给server以配置和操作server。
client以命令行或交互模式(使用-i选项)读取配置文件或仅仅发送一个单独的命令给server。fail2ban-client也可以启动server。
fail2ban-client的启动参数:
-c configuration directory(配置目录) -s socket path(socket路径) -d dump configuration. For debugging(打印出配置,用于调试) -i interactive mode(交互模式) -v increase verbosity(增加详细描述) -q decrease verbosity(减少详细描述) -x force execution of the server(强制执行server) -h, --help display this help message(显示帮助) -V, --version print the version(打印版本)
配置目录
目录结构如下图:
每个.conf文件都会被名为 .local的文件覆盖。.conf首先被读取,其次是.local。新的配置会覆盖早先的。因此,.local 文件不必包含每个相应于.conf中的选项,只是填写你想要覆盖的设置。
开始体验fail2ban
/etc/fail2ban下已经自带了一些常用服务的filter,action脚本了。所以只要简单的配置下即可使用。
jail.conf文件里可以配置多个需要检测的服务,比如sshd,vsftpd等。每一段都可以指定如何过滤(filter),如何屏蔽(action)。
通常只需修改jail.conf文件,修改filter扫描的日志路径,修改action等。
而自带的filter和action,一般都可以用了。但如果自定义filter,需要了解正则表达式相关的知识。
vim /etc/fail2ban/jail.conf #SSH的配置: [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, dest=lijialong1314@foxmail.com, sender=root] logpath = /var/log/secure maxretry = 5 #Vsftpd的配置 [vsftpd-iptables] enabled = true filter = vsftpd action = iptables[name=VSFTPD, port=ftp, protocol=tcp] sendmail-whois[name=VSFTPD, dest=lijialong1314@foxmail.com] logpath = /var/log/message maxretry = 5 bantime = 1800
启动/关闭/重启fail2ban:service fail2ban {start|stop|status|restart}