跳转至

fail2ban

关于fail2ban

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

  • Fail2ban 由 python 语言开发,基于 logwatch、gamin、iptables、tcp-wrapper、shorewall 等。发送邮件需要安装 postfix 或 sendmail。

  • Fail2Ban具有开箱即用的特性,标准配置附带了Apache、Lighttpd、sshd、vsftpd、qmail、Postfix和Courier邮件服务器的过滤器。过滤器是由Python正则表达式定义的,熟悉正则表达式的开发人员可以方便地对其进行定制。一个过滤器和一个动作的组合被称为“jail”(监狱),是用来阻止恶意访问者对特定网络服务的访问。以及随软件分发的示例,可能会为创建访问日志文件的任何面向网络的过程创建一个“监狱”。考虑到现实的场景中,可能已为本机的防火墙配置了规则。Fail2Ban仅添加和删除其自己的规则-常规的iptables 的规则将保持不变。

  • 代码库: https://github.com/fail2ban/fail2ban

下面以centos7为例,安装配置fail2ban,以防止服务器ssh服务被暴力攻击。

安装

  • yum安装
    yum install fail2ban
    
  • 使用rpm包安装
    wegt https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/f/fail2ban-0.11.2-3.el7.noarch.rpm
    wegt https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/f/fail2ban-firewalld-0.11.2-3.el7.noarch.rpm
    wegt https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/f/fail2ban-sendmail-0.11.2-3.el7.noarch.rpm
    wegt https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/f/fail2ban-server-0.11.2-3.el7.noarch.rpm
    rpm -ivh fail2ban-0.11.2-3.el7.noarch.rpm fail2ban-firewalld-0.11.2-3.el7.noarch.rpm fail2ban-sendmail-0.11.2-3.el7.noarch.rpm fail2ban-server-0.11.2-3.el7.noarch.rpm
    
  • 下载源码包安装
    # https://github.com/fail2ban
    tar xvfj fail2ban-1.0.1.tar.bz2
    cd fail2ban-1.0.1
    sudo python setup.py install
    

配置

Fail2Ban安装包中含有一个名为jail.conf的默认配置文件。 升级Fail2Ban时,该文件将被覆盖。

这里推荐的方法是将jail.conf文件复制到一个名为jail.local的文件中。 我们将定制的的配置更改存入jail.local中。这个文件在升级过程中将保持不变。 Fail2Ban启动时会自动读取这jail.conf与jail.local这两个配置文件。

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
修改配置文件 280行附近,vim /etc/fail2ban/jail.local
[sshd]
enabled = true
port    = ssh,33322
logpath = %(sshd_log)s
backend = %(sshd_backend)s
bantime = 10m
maxretry = 10
ignoreip = 127.0.0.1 192.168.11.0/255.255.255.0 
配置说明
  • port 服务,如果不是标注端口,需要加上端口号
  • ignoreip 指定不禁止的 IP 地址或主机名列表。
  • bantime 指定禁止主机的秒数(即有效禁止持续时间)。
  • maxretry 指定禁止主机之前的故障数。
  • backend 指定用于修改日志文件的后端。

更多解释见 man jail.conf

启动服务

$ systemctl enable fail2ban
$ systemctl start fail2ban
$ systemctl status fail2ban.service
 fail2ban.service - Fail2Ban Service
   Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2022-11-28 11:01:23 CST; 7s ago
     Docs: man:fail2ban(1)
  Process: 24790 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
 Main PID: 24793 (fail2ban-server)
    Tasks: 5
   CGroup: /system.slice/fail2ban.service
           └─24793 /usr/bin/python2 -s /usr/bin/fail2ban-server -xf start

Nov 28 11:01:23 login02 systemd[1]: Starting Fail2Ban Service...
Nov 28 11:01:23 login02 systemd[1]: Started Fail2Ban Service.
Nov 28 11:01:23 login02 fail2ban-server[24793]: Server ready

常用命令及日志

  • fail2ban-client restart 重启发fail2ban服务
  • fail2ban-client reload 修改配置文件后reload
  • fail2ban-client start sshd 开启jail,如sshd
  • fail2ban-client stop sshd 停用jail,如sshd
  • fail2ban-client status 查看fail2ban运行状态及相关jail,可以看到这里有个jail sshd
    $ fail2ban-client status
    Status
    |- Number of jail:  1
    `- Jail list:   sshd
    
  • fail2ban-client status sshd 查看具体jail的状态,如sshd
    $ fail2ban-client status sshd 
    Status for the jail: sshd
    |- Filter
    |  |- Currently failed: 0
    |  |- Total failed: 0
    |  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
    `- Actions
       |- Currently banned: 0
       |- Total banned: 0
       `- Banned IP list:
    
  • fail2ban-client get sshd banip 查看被封禁的IP
  • fail2ban-client set sshd unbanip 192.168.1.8 手动解禁IP
  • fail2ban-client set sshd banip 192.168.1.8 192.168.1.9 手动封禁IP
  • fail2ban-client unban --all 解禁所有IP
  • 使用iptables命令查看被封禁的IP

    $ iptables -L -n
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    f2b-sshd   tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 22,33322
    .
    .
    .
    Chain f2b-sshd (1 references)
    target     prot opt source               destination
    REJECT     all  --  192.168.1.8       0.0.0.0/0            reject-with icmp-port-unreachable
    RETURN     all  --  0.0.0.0/0            0.0.0.0/0
    
  • fail2ban日志中可以查看登录异常的IP /var/log/fail2ban.log

    $ tail /var/log/fail2ban.log
    2022-11-28 11:39:28,276 fail2ban.filter         [3439]: INFO    [sshd] Found 192.168.1.8 - 2022-11-28 11:39:28
    2022-11-28 11:39:33,627 fail2ban.filter         [3439]: INFO    [sshd] Found 192.168.1.8 - 2022-11-28 11:39:33
    2022-11-28 11:39:39,463 fail2ban.filter         [3439]: INFO    [sshd] Found 192.168.1.8 - 2022-11-28 11:39:39
    2022-11-28 11:39:47,015 fail2ban.filter         [3439]: INFO    [sshd] Found 192.168.1.8 - 2022-11-28 11:39:47
    2022-11-28 11:39:52,011 fail2ban.filter         [3439]: INFO    [sshd] Found 192.168.1.8 - 2022-11-28 11:39:52
    2022-11-28 11:39:52,285 fail2ban.actions        [3439]: NOTICE  [sshd] Ban 192.168.1.8
    

man fail2ban-client 可查看更多用法

本文阅读量  次
本站总访问量  次