在麒麟V10服务器安全加固,sshd防暴力破解加固,实现“密码错误3次封IP”的需求

新年好,开年发现服务器被境外IP异常攻击,新买的服务器加固不够,所以多加一层严格防护。具体操作如下:

方案一:使用 PAM 模块(无需安装额外软件,推荐)

麒麟V10默认使用 pam_faillock 模块,我们可以直接配置它来实现登录失败锁定。

  1. 编辑 PAM 配置文件

    bash 复制代码
    vi /etc/pam.d/sshd

    在文件顶部添加以下两行:

    ini 复制代码
    auth    required    pam_faillock.so preauth silent audit deny=3 unlock_time=86400 fail_interval=3600
    account    required    pam_faillock.so
    • deny=3:密码错误3次后锁定
    • unlock_time=86400:锁定时间为1天(秒)
    • fail_interval=3600:在1小时内统计失败次数
  2. 编辑系统认证文件

    bash 复制代码
    vi /etc/pam.d/system-auth

    auth 段找到 pam_env.so 行,在其下方添加:

    ini 复制代码
    auth    required    pam_faillock.so preauth silent audit deny=3 unlock_time=86400 fail_interval=3600

    account 段找到 pam_unix.so 行,在其下方添加:

    ini 复制代码
    account    required    pam_faillock.so
  3. 重启 SSH 服务

    bash 复制代码
    systemctl restart sshd
  4. 查看/解锁锁定用户

    bash 复制代码
    # 查看用户登录失败次数
    faillock --user root
    
    # 解锁用户
    faillock --user root --reset

方案二:通过源码安装 fail2ban(功能更强大)

如果需要更灵活的防护(如自动封禁IP、多服务防护),可以从源码安装 fail2ban

  1. 安装依赖

    bash 复制代码
    yum install -y python3 python3-pip git
  2. 克隆源码并安装

    bash 复制代码
    git clone https://github.com/fail2ban/fail2ban.git
    cd fail2ban
    python3 setup.py install
  3. 配置 systemd 服务

    bash 复制代码
    cp build/fail2ban.service /usr/lib/systemd/system/
    systemctl daemon-reload
  4. 配置 SSH 防护

    创建或编辑 SSH 专用配置文件:

    bash 复制代码
    vi /etc/fail2ban/jail.d/sshd.local

    写入以下内容:

    ini 复制代码
    [sshd]
    enabled = true
    port    = ssh
    logpath = /var/log/secure
    backend = systemd
    maxretry = 3    # 最大失败次数
    bantime  = 86400 # 封禁时间(秒),这里是1天
    findtime = 3600  # 在1小时内统计失败次数
  5. 启动并设置开机自启

    bash 复制代码
    systemctl enable --now fail2ban
    systemctl status fail2ban

额外安全建议

  1. 禁用密码登录,改用密钥认证 :这是最有效的防暴力破解手段。

    bash 复制代码
    vi /etc/ssh/sshd_config
    PasswordAuthentication no
    systemctl restart sshd
  2. 修改 SSH 默认端口:避免大量针对22端口的扫描。

  3. 限制可登录用户 :在 sshd_config 中设置 AllowUsers user1 user2,只允许指定用户登录。


查看暴力破解失败的IP地址:

在麒麟V10(或CentOS/RHEL系)系统上,我们可以通过以下几种方式从日志中查询远程登录失败的IP地址:


1. 直接查看系统安全日志(最常用)

SSH 登录失败的日志默认记录在 /var/log/secure 文件中。

查看所有失败登录记录:

bash 复制代码
grep "Failed password" /var/log/secure

提取并统计所有失败登录的IP地址:

bash 复制代码
grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
  • $11:提取日志中第11列的IP地址(不同系统日志格式可能略有差异,可根据实际情况调整列号)
  • uniq -c:统计每个IP的失败次数
  • sort -nr:按失败次数从高到低排序

2. 使用 lastb 命令(专门查看失败登录)

lastb 命令可以直接读取 /var/log/btmp 文件,显示所有失败的登录尝试:

bash 复制代码
lastb

最实用只显示IP地址并统计:**

bash 复制代码
lastb | awk '{print $3}' | sort | uniq -c | sort -nr

3. 结合 journalctl 查看 systemd 日志

如果你的系统使用 systemd,也可以通过 journalctl 查看 SSH 服务的日志:

bash 复制代码
journalctl _SYSTEMD_UNIT=sshd.service | grep "Failed password"

提取并统计IP地址:

bash 复制代码
journalctl _SYSTEMD_UNIT=sshd.service | grep "Failed password" | awk '{print $11}' | sort | uniq -c | sort -nr

4. 查看 fail2ban 日志(如果已安装)

如果你已经安装并配置了 fail2ban,可以查看它的日志来了解被封禁的IP:

bash 复制代码
grep "Ban" /var/log/fail2ban.log

补充说明

  • 日志文件 /var/log/secure/var/log/btmp 可能会被日志轮转工具(如 logrotate)压缩归档,你可以使用 zcatzgrep 查看历史日志,例如:

    bash 复制代码
    zgrep "Failed password" /var/log/secure-*.gz
  • 如果你发现大量来自同一IP的失败登录,可以使用 fail2ban-client set sshd banip <IP地址>iptables 命令手动封禁该IP。

  • 当然,也可以通过物理防火墙来永久封禁。


相关推荐
云栖梦泽1 小时前
AI安全合规与治理:行业发展趋势与职业展望
大数据·人工智能·安全
小陈工1 小时前
2026年4月2日技术资讯洞察:数据库融合革命、端侧AI突破与脑机接口产业化
开发语言·前端·数据库·人工智能·python·安全
Arvin6271 小时前
Nginx 添加账号密码访问验证
运维·服务器·nginx
小黄人软件2 小时前
【研究让AI做擅长的事】有哪些强大的研究方法 ,让研究自动发生
人工智能·安全
内心的一片海2 小时前
服务器内存异常占用
运维·服务器
Xudde.3 小时前
班级作业笔记报告0x10
笔记·学习·安全·web安全·php
liulilittle3 小时前
C++ 无锁编程:单停多发送场景高性能方案
服务器·开发语言·c++·高性能·无锁·原子
m0_738120723 小时前
渗透基础知识ctfshow——Web应用安全与防护(第一章)
服务器·前端·javascript·安全·web安全·网络安全
亚空间仓鼠4 小时前
OpenEuler系统常用服务(四)
linux·运维·服务器·网络
郝学胜-神的一滴4 小时前
Socket实战:从单端聊天到多用户连接的实现秘籍
服务器·开发语言·python·网络协议·pycharm