在麒麟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)压缩归档,你可以使用 zcat 或 zgrep 查看历史日志,例如:

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

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


相关推荐
QXWZ_IA几秒前
低空经济下电力无人机巡检定位的能力演进与应用趋势
人工智能·安全
无言听风雨丶7 分钟前
Linux 容器本质探秘:Cgroup 与 Namespace 深度解析与实战
linux·运维·服务器·kubernetes
数字新视界23 分钟前
机房动环监控系统在提升数据中心能效与安全中的应用探索
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
默|笙1 小时前
【Linux网络】传输层协议TCP(3)滑动窗口、流量控制
linux·网络·tcp/ip
亚远景aspice1 小时前
亚远景 - 无方向盘 L4 车辆批量认证,ASPICE 过程证据成制造商安全举证底座
安全·自动驾驶·aspice·研发管理·亚远景科技·过程能力评估·aspice评估
可涵不会debug2 小时前
PHP2Shell 爆发一周后:CVE-2026-109618/109619 自查、修复与防护实录
安全·php·云安全·waf·phpshell
ManageEngineITSM2 小时前
工单分类怎么设计?类别、子类别与自动分派的实用方法
大数据·服务器·数据库·人工智能·分类·数据挖掘
CANI_PLUS2 小时前
电脑文件共享
运维·服务器
福大大架构师每日一题2 小时前
excelize v2.11.1发布:Go 1.26.0起步,16项安全修复与嵌入对象能力全面升级
开发语言·安全·golang
Linux界最忧郁之人2 小时前
华为云ECS&IMS&AS实战|弹性云服务器、私有镜像、弹性伸缩完整实验
linux·运维·服务器·centos·华为云·openstack