在麒麟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 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
龙亘川1 天前
一网统管AI平台民生业务实践:基于城市数字底座赋能公积金业务服务升级
大数据·安全·智慧城市·开源软件·数据可视化·政务
kybs19911 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
-梅1 天前
linux(8) 软硬链接
linux·运维·服务器
Wang's Blog1 天前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发
琥珀色糖1 天前
SimlpeHttp
linux·服务器
LorryJovens1 天前
【LAAP科研】双系统具身AGI范式研究——基于LAAP认知架构与Jev概率决策模型的系统性技术调研与范式验证
人工智能·gpt·安全·架构
其实防守也摸鱼1 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
第十人i1 天前
Linux 日志管理系统:journald 配置与优化
linux·服务器