如何在Ubuntu上设置安全的远程SSH访问

弱密码弱密码 in 问答 2024-09-15 1:25:50

在Ubuntu上设置安全的远程SSH访问,首先更新系统和软件包。接着,修改SSH配置文件(/etc/ssh/sshd_config),禁用根登录、修改默认端口、并启用公钥认证。生成SSH密钥对并将公钥添加到目标主机的~/.ssh/authorized_keys中。最后,使用防火墙(如UFW)限制SSH访问,只允许特定IP,确保安全性。

SSH(Secure Shell)成为了系统管理员和开发者在远程管理 Linux 系统时的首选工具,由于 SSH 服务的普遍存在,攻击者也越来越多地针对这一接口进行尝试,因此确保 SSH 访问的安全性就显得尤为重要。弱密码将介绍如何在 Ubuntu 上设置安全的远程 SSH 访问,从基础配置到进阶安全措施,帮助你保护系统免受未授权访问的威胁。

Ubuntu

1. 安装 SSH 服务

Ubuntu 默认情况下不启用 SSH 服务,因此首先需要安装 OpenSSH 服务器。在终端中,你可以运行以下命令:

sudo apt update

sudo apt install openssh-server

安装完成后,可以使用以下命令检查 SSH 服务的状态:

sudo systemctl status ssh

确保服务正在运行。如果输出内容显示服务未启动,可以使用以下命令启动:

sudo systemctl start ssh

为了确保 SSH 服务在系统重启后自动启动,可以设置如下:

sudo systemctl enable ssh

2. 配置 SSH 服务

默认的 SSH 配置文件位于/etc/ssh/sshd_config,可以使用任意文本编辑器(如 vim 或 nano)打开该文件进行编辑:

sudo nano /etc/ssh/sshd_config

2.1. 更改默认 SSH 端口

使用默认的 22 端口会使系统易受攻击。通过更改 SSH 端口,可以减少暴力破解攻击的机会。在配置文件中找到以下行:

#Port 22

将其更改为其他不常用的端口(如 2222):

Port 2222

2.2. 禁用根用户登录

为了避免黑客通过根用户直接登录系统,你可以禁用根用户的 SSH 登录。在文件中找到以下行:

PermitRootLogin yes

将其更改为:

PermitRootLogin no

2.3. 使用公钥认证

与基于密码的认证相比,公钥认证提供更强的安全性。首先在客户端生成一对密钥:

ssh-keygen -t rsa -b 4096

按照提示输入文件保存路径和密码。如果不指定路径,密钥将被保存在~/.ssh/目录中。完成后,会生成公钥(id_rsa.pub)和私钥(id_rsa)。

将公钥复制到服务器上,使用以下命令:

ssh-copy-id -p 2222 username@server_ip

替换usernameserver_ip为相应的用户名和 IP 地址。这样公钥就被添加到了服务器的~/.ssh/authorized_keys文件中。

2.4. 禁用密码认证

为了进一步提高安全性,可以选择禁用密码认证。在sshd_config文件中找到以下行:

PasswordAuthentication yes

将其更改为:

PasswordAuthentication no

3. 防火墙设置

为了保护 SSH 服务,建议使用防火墙限制访问。Ubuntu 通常使用ufw(Uncomplicated Firewall)作为简单易用的防火墙工具。确保防火墙已启用:

sudo ufw enable

然后允许通过新的 SSH 端口进行连接。例如如果你将 SSH 端口更改为 2222,可以使用以下命令:

sudo ufw allow 2222/tcp

确保保存规则并查看状态:

sudo ufw status

4. 更新和监控

保持系统和 SSH 服务的最新状态至关重要。定期检查可用更新并及时进行安装:

sudo apt update

sudo apt upgrade

监控 SSH 登录尝试也是确保安全的好方法。可以使用fail2ban工具监控和阻止可疑的登录尝试。安装fail2ban

sudo apt install fail2ban

安装后,创建本地配置文件:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

/etc/fail2ban/jail.local文件中,可以编辑 SSH 部分,以限制登录尝试次数:

[sshd]

enabled = true

port = 2222

filter = sshd

logpath = /var/log/auth.log

maxretry = 5

bantime = 3600

该配置将在 5 次失败的登录尝试后,将 IP 地址禁止 1 小时。

5. 使用 Fail2Ban 异地访问

可以通过 Fail2Ban 进行 IP 白名单和黑名单管理,以便允许或禁止某些 IP 地址的 SSH 访问。可以在/etc/fail2ban/jail.local中定义ignoreip,如下所示:

ignoreip = 127.0.0.1/8 YOUR.IP.ADDRESS.HERE

通过这种方式,可以指定哪些 IP 地址不会被禁止,进一步增加安全性。

6. 使用二次验证(2FA)

为了增强安全性,可以实现两步验证。最常用的方法是使用 Google Authenticator。安装libpam-google-authenticator包:

sudo apt install libpam-google-authenticator

然后为每个用户生成认证密钥:

google-authenticator

系统会生成一个 QR 码,你可以在手机安装的 Google Authenticator 应用中扫描它。完成后,修改 PAM 配置文件,添加以下行:

sudo nano /etc/pam.d/sshd

在文件的末尾添加:

auth required pam_google_authenticator.so

然后在sshd_config中启用挑战响应认证:

ChallengeResponseAuthentication yes

7. 定期审计和日志管理

进行定期审计是确保 SSH 服务安全的重要环节。查看 SSH 连接日志可以帮助你确定是否存在未授权访问。可以使用以下命令查看 SSH 日志:

sudo less /var/log/auth.log

定期审查这些日志可以帮助你发现异常活动。

8. 结论

通过遵循上述措施,可以显著提高 Ubuntu 上 SSH 服务的安全性。无论是更改默认端口、禁用密码认证、使用公钥、设置防火墙、引入 Fail2Ban、设置二次验证,还是进行定期审计、更新都是强固 SSH 安全策略的有效手段。在当前线上安全形势严峻的环境中,采取这些措施将帮助你更加有效地保护你的系统,减少遭受攻击的风险。始终保持警惕,未雨绸缪,确保远程管理的安全性,是每个系统管理员的重要职责。

-- End --

相关推荐