美文网首页
1.2、如何在 Linux 上使用 Fail2Ban 保护服务器

1.2、如何在 Linux 上使用 Fail2Ban 保护服务器

作者: EricJonse | 来源:发表于2019-07-15 21:55 被阅读0次

    Linux 管理员的一个重要任务是保护服务器免受非法攻击或访问。 默认情况下,Linux 系统带有配置良好的防火墙,比如iptables、Uncomplicated Firewall(UFW),ConfigServer Security Firewall(CSF)等,可以防止多种攻击。

    任何连接到互联网的机器都是恶意攻击的潜在目标。 有一个名为 Fail2Ban 的工具可用来缓解服务器上的非法访问。

    1、什么是 Fail2Ban ?

    Fail2Ban 是一款入侵防御软件,可以保护服务器免受暴力攻击。 它是用 Python 编程语言编写的。 Fail2Ban 基于auth 日志文件工作,默认情况下它会扫描所有 auth 日志文件,如 /var/log/auth.log、/var/log/apache/access.log 等,并禁止带有恶意标志的IP,比如密码失败太多,寻找漏洞等等标志。

    通常,Fail2Ban 用于更新防火墙规则,用于在触发安全策略条件的情况下与在指定的时间内拒绝 IP 地址。 它也会发送邮件通知。 Fail2Ban 为各种服务提供了许多过滤器,如 ssh、apache、nginx、squid、named、mysql、nagios 等。

    Fail2Ban 能够降低错误认证尝试的速度,但是它不能消除弱认证带来的风险。 这只是服务器防止暴力攻击的安全手段之一。

    2、如何在 Linux 上安装 Fail2Ban

    Fail2Ban 已经与大部分 Linux 发行版打包在一起了,所以只需使用你的发行包版的包管理器来安装它。

    对于 Debian / Ubuntu,使用 APT-GET 命令或 APT 命令安装。

    sudo apt install fail2ban
    

    对于 Fedora,使用 DNF 命令安装。

    sudo dnf install fail2ban
    

    对于 CentOS/RHEL,启用 EPEL 库RPMForge 库,使用 YUM 命令安装。
    对于 Arch Linux,使用 Pacman 命令安装。

    sudo pacman -S fail2ban
    

    对于 openSUSE , 使用 Zypper命令安装。

    sudo zypper in fail2ban
    

    3、如何配置 Fail2Ban ?

    默认情况下,Fail2Ban 将所有配置文件保存在 /etc/fail2ban/ 目录中。 主配置文件是 jail.conf,它包含一组预定义的过滤器。 所以,不要编辑该文件,这是不可取的,因为只要有新的更新,配置就会重置为默认值。

    只需在同一目录下创建一个名为 jail.local 的新配置文件,并根据您的意愿进行修改。

    cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    

    此时在使用 CenotOS 7.x 操作时出现一些错误,比如当你启动后你会看到加载不到 httpd 服务的 error 日志等错误。你可以将 jail.local 中没有必要的配置给删除,因为文件中配置了一些我们不需要的服务。现在我们只以 sshd 服务举例所以只需要保留 [DEFAUL]部分和 sshd 服务部分。再次重启还会发现在 /var/log/message 日志文件中出现 Jul 14 10:32:37 root84 systemd: start request repeated too quickly for fail2ban.service 错误。可以使用以下命令进行排查问题,在启动 fail2ban 时打印出详细日志信息:

    [root@root84 fail2ban]# /usr/bin/fail2ban-client -v -v start
    

    从输出的信息中你可以看到他依然在加载 /etc/fail2ban/jail.conf 配置文件中的内容并使用配置项,最后所发生的 ERROR 依然是表示加载不到 httpd 服务的 error 日志文件。所以我们将 /etc/fail2ban/jail.conf 备份并删除,只使用 /etc/fail2ban/jail.local 中的配置。注意:这里所描述的错误是因为我在 /etc/fail2ban/jail.local 文件中将 [DEFAUL] 部分中的 enable 设置为 true 状态,开启了所有服务的 jail,在配置文件中的此配置项附近有描述信息:

    [DEFAUL]
    ...
    # "enabled" enables the jails.
    #  By default all jails are disabled, and it should stay this way.
    #  Enable only relevant to your setup jails in your .local or jail.d/*.conf
    #
    # true:  jail will be enabled and log files will get monitored for changes
    # false: jail is not enabled
    enabled = false
    ...
    

    默认情况下,大多数选项都已经配置的很完美了,如果要启用对任何特定 IP 的访问,则可以将 IP 地址添加到 ignoreip 区域,对于多个 IP 的情况,用空格隔开 IP 地址。

    配置文件中的 DEFAULT 部分包含 Fail2Ban 遵循的基本规则集,您可以根据自己的意愿调整任何参数。

    # nano /etc/fail2ban/jail.local
    [DEFAULT]
    ignoreip = 127.0.0.1/8 192.168.1.100/24
    bantime = 600
    findtime = 600
    maxretry = 3
    destemail = 2daygeek@gmail.com
    
    • ignoreip:本部分允许我们列出 IP 地址列表,Fail2Ban 不会禁止与列表中的地址匹配的主机
    • bantime:主机被禁止的秒数
    • findtime:如果在最近 findtime 秒期间已经发生了 maxretry 次重试,则主机会被禁止
    • maxretry:是主机被禁止之前的失败次数

    4、如何配置服务?

    Fail2Ban 带有一组预定义的过滤器,用于各种服务,如 ssh、apache、nginx、squid、named、mysql、nagios 等。 我们不希望对配置文件进行任何更改,只需在服务区域中添加 enabled = true 这一行就可以启用任何服务。 禁用服务时将 true 改为 false 即可。

    # SSH servers
    [sshd]
    enabled = true
    port = ssh
    logpath = %(sshd_log)s
    backend = %(sshd_backend)s
    
    • enabled: 确定服务是打开还是关闭。
    • port:指明特定的服务。 如果使用默认端口,则服务名称可以放在这里。 如果使用非传统端口,则应该是端口号。
    • logpath:提供服务日志的位置
    • backend:指定用于获取文件修改的后端。

    5、重启 Fail2Ban

    [For SysVinit Systems]
    # service fail2ban restart
    [For systemd Systems]
    # systemctl restart fail2ban.service
    

    6、验证 Fail2Ban iptables 规则

    你可以使用下面的命令来确认是否在防火墙中成功添加了Fail2Ban iptables 规则。

    # iptables -L
    Chain INPUT (policy ACCEPT)
    target prot opt source destination
    f2b-apache-auth tcp -- anywhere anywhere multiport dports http,https
    f2b-sshd tcp -- anywhere anywhere multiport dports 1234
    ACCEPT tcp -- anywhere anywhere tcp dpt:1234
    Chain FORWARD (policy ACCEPT)
    target prot opt source destination
    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination
    Chain f2b-apache-auth (1 references)
    target prot opt source destination
    RETURN all -- anywhere anywhere
    Chain f2b-sshd (1 references)
    target prot opt source destination
    RETURN all -- anywhere anywhere
    

    CentOS 7.X

    [root@root84 fail2ban]# iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    f2b-sshd-ddos  tcp  --  anywhere             anywhere             multiport dports ssh
    f2b-sshd   tcp  --  anywhere             anywhere             multiport dports ssh
    ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
    ACCEPT     all  --  anywhere             anywhere            
    INPUT_direct  all  --  anywhere             anywhere            
    INPUT_ZONES_SOURCE  all  --  anywhere             anywhere            
    INPUT_ZONES  all  --  anywhere             anywhere            
    DROP       all  --  anywhere             anywhere             ctstate INVALID
    REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited
    

    7、如何测试 Fail2Ban ?

    使用 sshd 为例:使用一台服务器(表示为A)链接设置好并开启 Fail2Ban 的服务器(表示为B),在多次链接失败之后 B服务器 的 Fail2Ban 将动态更改防火墙规则禁止 A服务器 访问。

    Last login: Sun Jul 14 22:17:16 on ttys001
    jinxiaozhang@YDdeMacBook-Pro:~$ ssh root@192.168.0.84
    root@192.168.0.84's password: 
    Permission denied, please try again.
    root@192.168.0.84's password: 
    asdfPermission denied, please try again.
    root@192.168.0.84's password: 
    root@192.168.0.84: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
    jinxiaozhang@YDdeMacBook-Pro:~$ ssh root@192.168.0.84
    root@192.168.0.84's password: 
    Permission denied, please try again.
    root@192.168.0.84's password: 
    
    
    asdf
    ^C
    jinxiaozhang@YDdeMacBook-Pro:~$ 
    jinxiaozhang@YDdeMacBook-Pro:~$ telnet 192.168.0.84 22
    Trying 192.168.0.84...
    telnet: connect to address 192.168.0.84: Connection refused
    telnet: Unable to connect to remote host
    jinxiaozhang@YDdeMacBook-Pro:~$
    

    查看 Fail2Ban 的日志

    2019-07-14 10:55:12,096 fail2ban.filter         [3835]: INFO    [sshd] Found 192.168.0.212
    2019-07-14 10:55:13,998 fail2ban.filter         [3835]: INFO    [sshd] Found 192.168.0.212
    2019-07-14 10:55:17,802 fail2ban.filter         [3835]: INFO    [sshd] Found 192.168.0.212
    2019-07-14 10:55:22,652 fail2ban.filter         [3835]: INFO    [sshd] Found 192.168.0.212
    2019-07-14 10:55:24,926 fail2ban.filter         [3835]: INFO    [sshd] Found 192.168.0.212
    2019-07-14 10:55:25,150 fail2ban.actions        [3835]: NOTICE  [sshd] Ban 192.168.0.212
    

    当经过我们设置的 bantime 配置项的秒数之后将开启 B服务器对 A服务器 ssh 的访问。

    8、Fail2Ban 的一些使用操作

    查看启用的监狱列表,请运行以下命令。

    fail2ban-client status
    

    通过运行以下命令来获取禁止的 IP 地址。

    fail2ban-client status ssh
    

    要从 Fail2Ban 中删除禁止的 IP 地址,请运行以下命令。

    fail2ban-client set ssh unbanip 192.168.0.254
    

    摘抄于 linux.cn 并使用 CentOS 7.X 通过实际测试,添加其他内容。

    相关文章

      网友评论

          本文标题:1.2、如何在 Linux 上使用 Fail2Ban 保护服务器

          本文链接:https://www.haomeiwen.com/subject/fszokctx.html