温馨提示×

Ubuntu SSH如何限制登录

小樊
55
2025-10-26 17:48:37
栏目: 智能运维

1. 修改SSH配置文件(核心限制方式)
通过编辑/etc/ssh/sshd_config文件,可使用以下指令精准限制登录:

  • 限制特定用户登录:添加AllowUsers指令,指定允许登录的用户名(多个用户用空格分隔),例如AllowUsers user1 user2;若需限制用户仅能从特定IP登录,可写为AllowUsers user1@192.168.1.100(仅user1可从192.168.1.100访问)。
  • 禁止特定用户登录:添加DenyUsers指令,指定禁止登录的用户名,例如DenyUsers user3 user4(即使AllowUsers包含该用户,DenyUsers优先级更高)。
  • 限制用户组登录:添加AllowGroups指令,指定允许登录的用户组(需提前创建组并将用户加入),例如AllowGroups sshusers(仅sshusers组成员可登录);若需禁止用户组,可添加DenyGroups指令。
    修改完成后,需重启SSH服务使配置生效:sudo systemctl restart ssh

2. 使用TCP Wrappers(/etc/hosts.allow与/etc/hosts.deny)
通过hosts.allowhosts.deny文件可实现基于IP的访问控制:

  • 编辑/etc/hosts.deny文件,添加sshd:ALL(拒绝所有IP访问SSH);
  • 编辑/etc/hosts.allow文件,添加允许规则,例如:
    • 仅允许单个IP:sshd:192.168.1.100
    • 允许IP段:sshd:192.168.1.(允许192.168.1.0~192.168.1.255所有IP);
    • 允许多个IP:sshd:192.168.1.100,192.168.1.200
      此方法无需重启SSH服务,修改后立即生效。

3. 配置防火墙限制IP访问
使用ufw(Uncomplicated Firewall)或iptables限制可访问SSH的IP地址:

  • UFW配置
    启用UFW:sudo ufw enable
    允许特定IP访问SSH(假设SSH端口为22):sudo ufw allow from 192.168.1.100 to any port 22
    删除默认允许SSH的规则(若有):sudo ufw delete allow ssh
  • Iptables配置
    允许特定IP访问SSH:sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT
    拒绝其他所有IP访问SSH:sudo iptables -A INPUT -p tcp --dport 22 -j DROP
    保存规则(避免重启失效):sudo netfilter-persistent save
    防火墙规则可有效阻断非法IP的连接请求,提升系统安全性。

4. 禁用Root登录与密码认证(增强安全性)

  • 禁用Root登录:编辑/etc/ssh/sshd_config文件,将PermitRootLogin设置为no(禁止root用户通过SSH登录),强制用户使用普通账户登录后通过sudo提权,减少root账户被暴力破解的风险。
  • 禁用密码认证:编辑/etc/ssh/sshd_config文件,将PasswordAuthentication设置为no(禁用密码登录),同时启用公钥认证(PubkeyAuthentication yes)。需提前将客户端的公钥复制到服务器的~/.ssh/authorized_keys文件中(权限需设为600),实现无密码登录。此方法可有效防止暴力破解密码。

5. 使用Fail2Ban自动封禁恶意IP
Fail2Ban可监控SSH日志(/var/log/auth.log),自动封禁多次认证失败的IP地址:

  • 安装Fail2Ban:sudo apt install fail2ban
  • 创建自定义配置文件(避免修改默认配置):sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  • 编辑jail.local文件,找到[sshd]部分,修改以下参数:
    enabled = true      # 启用SSH防护
    port = ssh          # 监控SSH端口(默认22)
    filter = sshd       # 使用sshd过滤规则
    logpath = /var/log/auth.log  # 日志路径
    maxretry = 3        # 允许的最大失败次数(3次失败后封禁)
    bantime = 600        # 封禁时间(600秒=10分钟)
    findtime = 600       # 检测时间窗口(600秒内达到maxretry则封禁)
    
  • 重启Fail2Ban服务:sudo systemctl restart fail2ban
    Fail2Ban可自动识别并封禁恶意IP,减少暴力破解攻击。

0