linux-fail2ban
介绍
fail2ban是一款实用软件,可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作。
知识要点: 1. 整体架构
2. 怎么轮训日志文件
3. 可否自己写日志的分析程序
fail2ban 是用python编写。
安装
1.使用yum进行安装
yum install fail2ban
如果提示找不到fail2ban,请先安装yum 源,参考 http://www.cnblogs.com/iamlehaha/articles/6788979.html
2. 使用源代码进行安装
git clone https://github.com/fail2ban/fail2ban cd fail2ban python setup.py install
安装过程分析:
fail2ban-0.10\fail2ban 被安装在python的site-packages包中。
安装后,fail2ban安装在
/usr/bin/fail2ban-server
/usr/bin/fail2ban-client
分析fail2ban-server,一个python源代码,该文件非常简单,1. 接收用户参数,2.传送给 from fail2ban.client.fail2banserver import exec_command_line

此文件在 fail2ban-0.10\bin 目录下。
fail2ban\client\fail2banserver.py 继承fail2ban\client\Fail2banCmdLine 解析用户输入的命令行参数,主要是配置 调用fail2ban\client\configurator.py -> JailsReader 类读取jails配置文件 , 调用fail2ban\client\configreader.py 读取最终配置文件
Options:
-c <DIR> configuration directory
-s <FILE> socket path
-p <FILE> pidfile path
--loglevel <LEVEL> logging level
--logtarget <FILE>|STDOUT|STDERR|SYSLOG
--syslogsocket auto|<FILE>
-d dump configuration. For debugging
-t, --test test configuration (can be also specified with start parameters)
-i interactive mode
-v increase verbosity #默认logging级别是1,即warning , 调用一次-v 表示增加一个级别
-q decrease verbosity 将少一个级别
-x force execution of the server (remove socket file)
-b start server in background (default)
-f start server in foreground
--async start server in async mode (for internal usage only, don't read configuration)
--timeout timeout to wait for the server (for internal usage only, don't read configuration)
-h, --help display this help message
-V, --version print the version
,然后启动
fail2ban\server\server.py 调用start 开始运行服务, 里面调用fail2ban\server\asyncserver.py 建立与客户端之间的通信 (参考:http://blog.csdn.net/kongxx/article/details/51158775)。
\fail2ban\server\transmitter.py 在中解析客户端的输入命令
发现整个的操作都可以使用fail2ban-client实现。
1. 启动服务
fail2ban-client start
/usr/bin/fail2ban-server
-t 测试配置文件是否正确
-x 强制执行,关闭原来的socket文件
使用教程
1. 为SSH服务器配置Fail2ban
现在你已经准备好了通过配置 fail2ban 来加强你的SSH服务器。你需要编辑其配置文件 /etc/fail2ban/jail.conf。 在配置文件的“[DEFAULT]”区,你可以在此定义所有受监控的服务的默认参数,另外在特定服务的配置部分,你可以为每个服务(例如SSH,Apache等)设置特定的配置来覆盖默认的参数配置。
在针对服务的监狱区(在[DEFAULT]区后面的地方),你需要定义一个[ssh-iptables]区,这里用来定义SSH相关的监狱配置。真正的禁止IP地址的操作是通过iptables完成的。
下面是一个包含“ssh-iptables”监狱配置的/etc/fail2ban/jail.conf的文件样例。当然根据你的需要,你也可以指定其他的应用监狱。
1) 备份原始的jail.conf文件
mv /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.bk #创建新的/etc/fail2ban/jail.conf [DEFAULT] # 以空格分隔的列表,可以是 IP 地址、CIDR 前缀或者 DNS 主机名 # 用于指定哪些地址可以忽略 fail2ban 防御 ignoreip = 127.0.0.1 172.31.0.0/24 10.10.0.0/24 192.168.0.0/24 # 客户端主机被禁止的时长(秒) bantime = 86400 # 客户端主机被禁止前允许失败的次数 maxretry = 5 # 查找失败次数的时长(秒) findtime = 600 mta = sendmail backend = auto [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, dest=test@a.com, sender=fail2ban@email.com] # Debian 系的发行版 logpath = /var/log/auth.log # Red Hat 系的发行版 logpath = /var/log/secure # ssh 服务的最大尝试次数 maxretry = 3
运行 /usr/bin/fail2ban-server 开启进程
使用fail2ban-client ping 测试server是否正常运行
2) 测试远程连接
远程登录ssh服务,超过三次将会被拒绝,查看fail2ban日志 tail -f /var/log/fail2ban.log

查看iptables 封禁列表

为了检验fail2ban状态(会显示出当前活动的监狱列表):
fail2ban-client status
[root@localhost Desktop]# fail2ban-client status Status |- Number of jail: 1 `- Jail list: ssh-iptables
查看详细状态:

解除锁定
fail2ban-client set ssh-iptables unbanip 192.168.109.1 #发现只是该命令无法解锁
iptables -D f2b-SSH -s 192.168.109.1 -j REJECT
添加一个ban ip:
fail2ban-client set ssh-iptables banip 192.168.109.1
修改规则后,让server重新加载规则
fail2ban-client reload
FAQ:
1. "iptables v1.4.7: option `-w' requires an argument\nTry `iptables -h' or 'iptables --help' for more information.\niptables v1.4.7: option `-w' requires
修改: /etc/fail2ban/action.d/iptables-common.conf
1) lockingopt =-w 修改为 #lockingopt =-w
2)iptables = iptables <lockingopt> 修改为 iptables = iptables
https://linux.cn/article-5067-1.html
参考文献:
1. Fail2Ban源代码
https://github.com/fail2ban/fail2ban
2. 官方网站
http://www.fail2ban.org
3. 百度百科介绍
http://baike.baidu.com/link?url=wPw7Gp7LOfYRFsUFiT4v4fvIs1JY7IMipdUJVEv2ce_RohgLaP7hVb61V-gH7qMCeYsCgLcq1e3mbW8fCa6SpvoEE1DTexDTEcx_kq4cm8m

浙公网安备 33010602011771号