博客 / Others/ 如何防止云主机 SSH 被暴力破解:DenyHosts 与 Fail2ban 配置指南

如何防止云主机 SSH 被暴力破解:DenyHosts 与 Fail2ban 配置指南

如何防止云主机 SSH 被暴力破解:DenyHosts 与 Fail2ban 配置指南

防止云主机 SSH 暴力破解与端口扫描

在当前的互联网环境中,针对 SSH 端口的自动化扫描和暴力破解攻击非常普遍。攻击者会利用扫描工具寻找开放 SSH 端口的主机,并尝试通过字典或穷举方式破解登录凭证。因此,加强云主机或 VPS 的 SSH 安全至关重要。

基础安全建议

  • 使用强密码或密钥:为 SSH 账户设置高强度、复杂的密码,或更推荐使用 SSH 密钥对进行免密登录,并禁用密码登录。
  • 修改默认端口:将 SSH 默认的 22 端口修改为其他非标准端口,可减少自动化扫描的暴露风险。
  • 启用防火墙:利用云平台防火墙或系统防火墙(如 iptables、firewalld)限制 SSH 端口的访问来源 IP。
  • 禁用 Root 登录:在 SSH 配置中(/etc/ssh/sshd_config)设置 PermitRootLogin no,禁止直接使用 root 账户登录。

国内主流云服务商通常提供基础的安全组/防火墙功能,但用户仍需根据自身情况加固系统。

使用 DenyHosts 自动屏蔽攻击 IP

DenyHosts 是一个用 Python 编写的安全工具,它会监控系统认证日志(如 /var/log/secure),自动将进行多次失败 SSH 登录尝试的 IP 地址加入 /etc/hosts.deny 文件,从而实现自动屏蔽。

安装方法

方法一:通过 LNMP 一键安装包(若已安装)

LNMP 安装包的 tools 目录下提供了便捷脚本:

cd /root/lnmp1.x/tools  # 请将 x 替换为实际版本号
./denyhosts.sh

该脚本会自动完成安装和配置,无需手动干预。同一目录下也提供了 ./fail2ban.sh 用于安装 Fail2ban 工具。

方法二:手动安装

1. 下载源码包(项目已迁移,旧官网可能无法访问,建议从 GitHub 等可信源获取):

wget https://github.com/denyhosts/denyhosts/archive/refs/tags/v3.1.tar.gz
tar -zxvf v3.1.tar.gz
cd denyhosts-3.1

2. 安装前可清空旧日志并重启日志服务(可选):

echo "" > /var/log/secure && systemctl restart rsyslog

3. 执行安装(确保系统已安装 Python):

python setup.py install

默认安装目录为 /usr/share/denyhosts/

配置与启动

1. 进入安装目录并复制配置文件:

cd /usr/share/denyhosts/
cp denyhosts.cfg-dist denyhosts.cfg
cp daemon-control-dist daemon-control

2. 启动 DenyHosts:

chown root daemon-control
chmod 700 daemon-control
./daemon-control start

3. 设置开机自启(Systemd 系统推荐):

# 创建 systemd 服务文件(以 CentOS 7+/Ubuntu 16.04+ 为例)
echo -e '[Unit]nDescription=DenyHosts SSH Security MonitornAfter=network.targetnn[Service]nType=forkingnExecStart=/usr/share/denyhosts/daemon-control startnExecStop=/usr/share/denyhosts/daemon-control stopnRestart=on-failurenn[Install]nWantedBy=multi-user.target' > /etc/systemd/system/denyhosts.service
systemctl daemon-reload
systemctl enable denyhosts
systemctl start denyhosts

对于使用 SysVinit 的旧系统,可将启动命令加入 /etc/rc.local

echo "/usr/share/denyhosts/daemon-control start" >> /etc/rc.local
chmod +x /etc/rc.local

关键配置说明

配置文件 /usr/share/denyhosts/denyhosts.cfg 中部分重要参数:

SECURE_LOG = /var/log/secure          # SSH 认证日志路径,不同系统可能不同
HOSTS_DENY = /etc/hosts.deny          # 屏蔽 IP 写入的文件
PURGE_DENY = 5m                       # 屏蔽 IP 的保留时间(如 5分钟、5小时、5天)
BLOCK_SERVICE = sshd                  # 屏蔽的服务,可设为 ALL
DENY_THRESHOLD_INVALID = 5            # 无效用户登录失败次数阈值
DENY_THRESHOLD_VALID = 10             # 有效用户(非root)登录失败次数阈值
DENY_THRESHOLD_ROOT = 5               # root 用户登录失败次数阈值
HOSTNAME_LOOKUP = NO                  # 是否进行反向域名解析,建议设为 NO 以减少延迟
DAEMON_LOG = /var/log/denyhosts       # DenyHosts 自身日志路径

管理白名单与解封 IP

  • 添加白名单:将可信 IP 加入白名单文件,防止被误封。
    echo "your_trusted_ip" >> /usr/share/denyhosts/allowed-hosts
    systemctl restart denyhosts  # 或 /etc/init.d/denyhosts restart
  • 解封 IP:如果 IP 已被屏蔽,需手动从 /etc/hosts.deny 和 DenyHosts 的工作目录中删除该 IP 记录,或使用社区提供的解封脚本(注意脚本来源安全)。

替代方案:Fail2ban

Fail2ban 是一款功能更强大的入侵防护框架,不仅支持 SSH,还可防护 HTTP、FTP 等多种服务。其原理类似,通过监控日志匹配失败模式,并调用防火墙规则(如 iptables)进行屏蔽。配置更为灵活,是当前更主流的推荐工具。

总结

安全是一个持续的过程。除了部署 DenyHosts 或 Fail2ban 外,请务必:

  1. 设置高强度密码或使用 SSH 密钥。
  2. 定期更新系统和软件包。
  3. 限制 SSH 访问来源(通过防火墙)。
  4. 定期检查日志(/var/log/secure/var/log/denyhosts)和屏蔽列表。
  5. 建立定期数据备份机制。

没有任何单一措施能提供绝对安全,采用多层防御策略才能有效提升云主机的安全性。

发表评论

您的邮箱不会公开。必填项已用 * 标注。