在Ubuntu上设置安全的远程SSH访问,首先更新系统和软件包。接着,修改SSH配置文件(/etc/ssh/sshd_config),禁用根登录、修改默认端口、并启用公钥认证。生成SSH密钥对并将公钥添加到目标主机的~/.ssh/authorized_keys中。最后,使用防火墙(如UFW)限制SSH访问,只允许特定IP,确保安全性。
SSH(Secure Shell)成为了系统管理员和开发者在远程管理 Linux 系统时的首选工具,由于 SSH 服务的普遍存在,攻击者也越来越多地针对这一接口进行尝试,因此确保 SSH 访问的安全性就显得尤为重要。弱密码将介绍如何在 Ubuntu 上设置安全的远程 SSH 访问,从基础配置到进阶安全措施,帮助你保护系统免受未授权访问的威胁。
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
替换username
和server_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 安全策略的有效手段。在当前线上安全形势严峻的环境中,采取这些措施将帮助你更加有效地保护你的系统,减少遭受攻击的风险。始终保持警惕,未雨绸缪,确保远程管理的安全性,是每个系统管理员的重要职责。