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

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


相关推荐
unfeeling_1 小时前
Keepalived实验
linux·服务器·网络
山峰哥2 小时前
吃透 SQL 优化:告别慢查询,解锁数据库高性能
服务器·数据库·sql·oracle·性能优化·编辑器
上海云盾商务经理杨杨2 小时前
2025年重大网络安全事件回顾与趋势分析
网络·安全·web安全
Web极客码2 小时前
解决WordPress后台“外观”菜单消失
linux·服务器·wordpress
白太岁2 小时前
通信:(5) 电路交换、报文交换与分组交换
运维·服务器·网络·网络协议
T_Fire_of_Square2 小时前
工控安全-2024振兴杯-被攻击的电机wp
安全
feng68_3 小时前
Nginx高性能Web服务器
linux·运维·服务器·nginx
PM老周3 小时前
2026年软硬件一体化项目管理软件怎么选?多款工具对比测评
java·安全·硬件工程·团队开发·个人开发
️️(^~^)3 小时前
LVS实验
linux·服务器·lvs