LinuxSSH远程登录安全配置_密钥与端口加固方案【教程】

12次阅读

ssh安全加固需依次完成五项操作:一、禁用密码登录并启用密钥认证;二、修改默认端口并更新防火墙及SElinux策略;三、配置fail2ban与TCP Wrappers实现登录失败限制和IP白名单;四、禁用root直接登录;五、设置空闲超时自动断开。

LinuxSSH远程登录安全配置_密钥与端口加固方案【教程】

如果您正在使用Linux系统并通过SSH进行远程登录,但未对默认配置进行安全加固,则可能面临暴力破解、未授权访问等风险。以下是针对SSH服务的密钥认证启用与端口变更两类核心加固操作步骤:

一、禁用密码登录并启用RSA/ECDSA密钥认证

该方法通过移除密码验证通道,强制使用非对称加密密钥对完成身份核验,可彻底规避弱口令与暴力破解攻击。需预先在客户端生成密钥对,并将公钥部署至服务器授权列表。

1、在本地终端执行命令生成4096位RSA密钥对:ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_strong

2、将生成的公钥文件内容复制到目标服务器的~/.ssh/authorized_keys中,确保目录权限为700、文件权限为600。

3、编辑服务器SSH主配置文件sudo nano /etc/ssh/sshd_config,定位到PasswordAuthentication行,将其值修改为no

4、在同一配置文件中确认PubkeyAuthentication设置为yes,并确保AuthorizedKeysFile指向.ssh/authorized_keys

5、重启SSH服务使配置生效:sudo systemctl restart sshd

二、修改默认SSH端口号

将SSH监听端口从22更改为高位非常规端口(如2222、3344),可减少自动化扫描工具的命中率,属于基础但有效的网络层隐藏手段。此操作需同步调整防火墙规则与SELinux策略(如启用)。

1、编辑SSH配置文件:sudo nano /etc/ssh/sshd_config,取消Port行注释,将其值修改为选定的新端口号,例如Port 2222

2、若系统启用了firewalld,执行命令开放新端口:sudo firewall-cmd –permanent –add-port=2222/tcp,随后重载规则:sudo firewall-cmd –reload

3、若SELinux处于enforcing模式,需添加端口类型映射:sudo semanage port -a -t ssh_port_t -p tcp 2222(如未安装semanage,先运行sudo yum install policycoreutils-python-utils)。

4、重启SSH服务:sudo systemctl restart sshd,并在新终端窗口使用ssh -p 2222 user@server_ip测试连接。

三、配置SSH登录失败限制与白名单机制

通过fail2ban服务监控sshd日志,对连续失败登录的IP实施临时封禁;同时结合TCP Wrappers限定仅允许特定IP段建立SSH连接,形成双重访问控制。

1、安装fail2ban:sudo apt install fail2bandebian/ubuntu)或sudo yum install fail2ban(RHEL/centos)。

2、创建本地jail配置文件:sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local,编辑jail.local,在[sshd]节下设置maxretry = 3bantime = 3600

3、启用TCP Wrappers,在/etc/hosts.allow中添加允许规则:sshd: 192.168.1.0/24, 203.0.113.45;在/etc/hosts.deny中写入sshd: ALL

4、重启fail2ban服务:sudo systemctl restart fail2ban

四、禁用root用户直接远程登录

阻止root账户通过SSH直接登录,可降低高权限账户暴露面。管理员应以普通用户身份登录后,再通过sudo或su切换权限,增强操作审计与责任追溯能力。

1、编辑SSH配置文件:sudo nano /etc/ssh/sshd_config,找到PermitRootLogin配置项,将其值设为no

2、确认服务器已存在具备sudo权限的普通用户账户,且该账户已配置密钥登录。

3、保存配置并重启SSH服务:sudo systemctl restart sshd

五、启用SSH连接空闲超时自动断开

防止因用户遗忘退出导致会话长期挂起,从而降低会话劫持与未授权延续操作的风险。通过设置客户端与服务端双向心跳检测,实现无交互连接的主动终止。

1、在/etc/ssh/sshd_config中添加两行配置:ClientAliveInterval 300ClientAliveCountMax 2

2、上述配置表示服务器每300秒发送一次心跳包,若连续2次未收到客户端响应即关闭连接,理论最长空闲时间为10分钟。

3、重启SSH服务以应用更改:sudo systemctl restart sshd

text=ZqhQzanResources