• 使用 Fail2ban 防止 ssh 暴力破解攻击


    介绍

    Fail2ban 通过扫描错误日志来禁止某些 IP 访问服务,它会直接修改防火墙规则来阻止来自这些 IP的请求。

    起因

    我在使用 journalctl -xe --full 查日志时,发现大量的类似下面的日志:

    sshd[13352]: pam_unix(sshd:auth): check pass; user unknown
    sshd[13352]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=182.61.161.121
    sshd[13352]: Failed password for invalid user chase from 182.61.161.121 port 58172 ssh2
    sshd[13352]: Received disconnect from 182.61.161.121 port 58172:11: Bye Bye [preauth]
    sshd[13352]: Disconnected from 182.61.161.121 port 58172 [preauth]
    sshd[13354]: reverse mapping checking getaddrinfo for dynamic-ip-1868417225.cable.net.co [186.84.172.25] failed - POSSIBLE BREAK-IN ATTEM
    sshd[13354]: Invalid user survey from 186.84.172.25 port 38058
    sshd[13354]: input_userauth_request: invalid user survey [preauth]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    可以发现是有陌生 IP 的用户在尝试破解 SSH 登录。

    通过这条命令可以看到的确有大量失败登录的记录:

    
    grep -o "Failed password" /var/log/secure|uniq -c
    
    73426 Failed password
    
    • 1
    • 2
    • 3
    • 4

    因此我采取了一些措施,首先修改了 ssh 的默认端口:

    vim /etc/ssh/sshd_config
    改完后需要重启 sshd:
    
    systemctl restart sshd
    然后就是安装了 Fail2ban。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    安装与配置

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
    
    • 1
    • 2
    • 3

    在我的 CentOS 服务器上用 yum 安装:

    yum -y install fail2ban
    然后进行配置:

    vim /etc/fail2ban/jail.d/jail.local
    
    ignoreip = 127.0.0.1/8 ::1
    bantime = 300
    findtime = 300
    maxretry = 8
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    参数解释

    #ignoreip:本部分允许我们列出 IP 白名单地址列表,Fail2Ban 不会禁止与列表中的地址匹配的主机

    #bantime:主机被禁止的秒数

    #findtime:如果在最近 findtime 秒期间已经发生了 maxretry 次重试,则主机会被禁止

    #maxretry:是主机被禁止之前的失败次数

    Fail2Ban 带有一组预定义的过滤器,用于各种服务,如 ssh、apache、nginx、squid、named、mysql、nagios 等。

    不需要对配置文件进行任何更改,只需在服务区域中添加 enabled = true 这一行就可以启用任何服务。

    禁用服务时则将 true 改为 false 即可

    修改配置文件中sshd段如下两处

    其中 22 要改为实际的 ssh 端口:

    [sshd]
    enabled = true
    filter = sshd
    action = iptables[name=ssh,port=22,protocol=tcp]
    logpath = /var/log/secure
    bantime = 600
    maxretry = 3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    保存后重启服务

    systemctl restart fail2ban
    查看状态

    fail2ban-client status sshd 或 fail2ban-client get sshd banip

    删除规则

    fail2ban-client set ssh unbanip 104.218.13.80

  • 相关阅读:
    万应案例精选|抓紧抓实抓细,万应为安全生产全域监管护航
    TypeScript中的泛型使用详解
    JS语法杂记
    短信视频提取批量工具,免COOKIE,博主视频下载抓取,爬虫
    成功解决eNSP模拟器中路由器启动失败,错误码40
    医保卡里的钱不用会被清零吗
    No.1-------MySQL:数据库系统概述、MySQL简介、库操作
    Mysql里常见的问题
    java实现world文档转pdf
    下载Windows 10操作系统和在VMware虚拟机中配置完成
  • 原文地址:https://blog.csdn.net/qq_26489043/article/details/126947429