在麒麟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。

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


相关推荐
枷锁—sha7 分钟前
【CTFshow-pwn系列】03_栈溢出【pwn 073】详解:静态编译下的自动化 ROP 链构建
网络·汇编·笔记·安全·网络安全·自动化
李日灐18 分钟前
< 7 > Linux 开发工具:git 版本控制器 和 cgdb/gdb 调试器
linux·运维·服务器·开发语言·git·调试器·gdb/cgdb
VBsemi-专注于MOSFET研发定制21 分钟前
面向高可靠与能效需求的安全存储系统功率器件选型策略与适配手册
安全
xixixi7777728 分钟前
AI安全周记:AI驱动攻击占比50%、PQC国标落地、ShinyHunters连环袭击——面对1:25的攻防成本鸿沟,防守方还能撑多久?
人工智能·安全·ai·大模型·aigc·量子计算·供应链
青木96030 分钟前
前后端开发调试运行技巧
linux·服务器·前端·后端·npm·uv
智擎软件测评小祺31 分钟前
什么是非功能检测?筑牢软件性能与安全的基石
功能测试·安全·检测·cma·第三方检测·cnas·非功能检测
jinanwuhuaguo43 分钟前
OpenClaw执行奇点——因果链折叠与责任悬置的时间哲学(第十九篇)
前端·人工智能·安全·重构·openclaw
cui_ruicheng1 小时前
Linux进程间通信(一):管道与IPC基础
linux·运维·服务器
Dola_Zou1 小时前
高端医疗设备软件的数字安全与授权演进
安全·健康医疗·软件加密
treesforest1 小时前
IP查询接口调用完全指南:从入门到企业级实战
大数据·网络·安全·网络安全·ip