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指令。sudo systemctl restart ssh。2. 使用TCP Wrappers(/etc/hosts.allow与/etc/hosts.deny)
通过hosts.allow和hosts.deny文件可实现基于IP的访问控制:
/etc/hosts.deny文件,添加sshd:ALL(拒绝所有IP访问SSH);/etc/hosts.allow文件,添加允许规则,例如:
sshd:192.168.1.100;sshd:192.168.1.(允许192.168.1.0~192.168.1.255所有IP);sshd:192.168.1.100,192.168.1.200。3. 配置防火墙限制IP访问
使用ufw(Uncomplicated Firewall)或iptables限制可访问SSH的IP地址:
sudo ufw enable;sudo ufw allow from 192.168.1.100 to any port 22;sudo ufw delete allow ssh。sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT;sudo iptables -A INPUT -p tcp --dport 22 -j DROP;sudo netfilter-persistent save。4. 禁用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地址:
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则封禁)
sudo systemctl restart fail2ban。