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

posted @ 2017-04-30 09:53  woxiaohaha  阅读(835)  评论(0)    收藏  举报