在 Linux 上保护 SSH 服务器连接的15种措施
SSH(Secure Shell)是一种广泛使用的协议,用于安全地访问 Linux 服务器。尽管 SSH 提供了一定的安全性,但不安全的默认配置可能会导致各种安全风险,特别是在开放的环境中。为了保护 SSH 服务器,以下是几种有效的安全措施。
1. 禁用 Root 用户登录
禁用 root 用户的 SSH 访问是增强安全性的基本步骤。攻击者通常会首先尝试破解 root 密码,因此创建一个具有管理权限的新用户是明智之举。
操作步骤:
-
创建一个新用户并赋予其 sudo 权限:
sudo useradd -m exampleroot sudo passwd exampleroot sudo usermod -aG sudo exampleroot
-
修改 SSH 配置文件
/etc/ssh/sshd_config
,添加以下内容:PermitRootLogin no AllowUsers exampleroot
-
重启 SSH 服务:
sudo systemctl restart sshd
2. 更改默认端口
默认的 SSH 连接端口是 22,攻击者常常会针对这个端口进行扫描。通过更改 SSH 的端口号,可以降低受到攻击的风险。
操作步骤:
-
打开
/etc/ssh/sshd_config
文件,找到并更改端口号:Port 22099
-
重启 SSH 服务以应用更改:
sudo systemctl restart sshd
-
确保防火墙允许新的端口号通过。
3. 禁止空密码用户访问
空密码的用户账户可能会被攻击者利用。为了防止这种情况,可以在配置文件中禁止空密码登录。
操作步骤:
-
在
/etc/ssh/sshd_config
中添加以下行:PermitEmptyPasswords no
4. 限制登录尝试次数
默认情况下,SSH 允许多次输入密码。如果攻击者尝试暴力破解,限制登录尝试次数将有效防止这种攻击。
操作步骤:
-
修改
/etc/ssh/sshd_config
文件,添加以下行:MaxAuthTries 3
5. 使用 SSH 版本 2
SSH 的第二个版本比第一个版本更安全。确保服务器只接受 SSH 版本 2 的连接。
操作步骤:
-
在
/etc/ssh/sshd_config
文件中添加以下行:Protocol 2
6. 关闭 TCP 端口转发和 X11 转发
关闭 TCP 端口转发和 X11 转发可以防止攻击者利用 SSH 连接访问其他系统。
操作步骤:
-
在
/etc/ssh/sshd_config
文件中添加以下行:AllowTcpForwarding no X11Forwarding no
7. 使用 SSH 密钥连接
使用 SSH 密钥而不是密码连接是提高安全性的有效方式。SSH 密钥包括公钥和私钥,公钥存储在服务器上,私钥存储在客户端。
操作步骤:
-
生成 SSH 密钥:
ssh-keygen
-
将公钥上传到服务器:
ssh-copy-id exampleroot@your_server_ip
-
在
/etc/ssh/sshd_config
文件中禁用密码认证:PasswordAuthentication no
8. 限制 SSH 连接的 IP 地址
通过限制特定 IP 地址的访问,可以进一步提高安全性。可以在 /etc/hosts.allow
文件中配置允许和拒绝的 IP 地址。
操作步骤:
-
编辑
/etc/hosts.allow
文件,添加允许的 IP 地址:sshd: 192.168.1.0/255.255.255.0
-
编辑
/etc/hosts.deny
文件,拒绝所有其他 IP 地址:sshd: ALL
9. 使用防火墙
使用防火墙(如 iptables
或 ufw
)可以帮助限制对 SSH 的访问。可以设置规则,仅允许特定 IP 地址或 IP 范围访问 SSH 服务。
操作步骤:
-
使用
ufw
(简单易用的防火墙):sudo ufw allow from 192.168.1.0/24 to any port 22099 sudo ufw enable
-
使用
iptables
:sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22099 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 22099 -j DROP
10. 监控登录尝试
使用工具(如 fail2ban
)监控 SSH 登录尝试,可以在检测到多次失败尝试后自动阻止该 IP 地址。
操作步骤:
-
安装
fail2ban
:sudo apt-get install fail2ban
-
配置
/etc/fail2ban/jail.local
,启用 SSH 监控:[sshd] enabled = true maxretry = 3 bantime = 600
11. 使用多因素认证 (MFA)
启用多因素认证增加了一层安全性,即使密码被泄露,也难以通过 SSH 登录。
操作步骤:
-
安装
libpam-google-authenticator
:sudo apt-get install libpam-google-authenticator
-
在用户目录中运行
google-authenticator
命令,根据提示进行设置。 -
修改
/etc/pam.d/sshd
文件,添加以下行:auth required pam_google_authenticator.so
-
在
/etc/ssh/sshd_config
中确保ChallengeResponseAuthentication
设置为yes
:ChallengeResponseAuthentication yes
12. 定期审计和更新
定期检查 SSH 配置文件,审计用户账户和权限,确保没有未使用的账户或过期的密钥。同时,定期更新系统和 SSH 软件,以修复已知的安全漏洞。
操作步骤:
-
使用以下命令更新系统:
sudo apt-get update sudo apt-get upgrade
13. 禁用 IPv6(如果不需要)
如果不使用 IPv6,可以考虑禁用它,以减少潜在的攻击面。
操作步骤:
-
编辑
/etc/sysctl.conf
文件,添加以下行:net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
-
应用更改:
sudo sysctl -p
14. 使用 SSH 代理
SSH 代理可以存储你的密钥并在需要时自动使用,提高安全性和便利性。
操作步骤:
-
启动 SSH 代理:
eval "$(ssh-agent -s)"
-
添加私钥:
ssh-add ~/.ssh/id_rsa
15. 设置登录通知
使用邮件或其他通知系统,当有新的 SSH 登录时接收通知,以便及时发现可疑活动。
操作步骤:
- 在
/etc/ssh/sshd_config
文件中启用PermitRootLogin no
和其他配置。 - 使用
auditd
或syslog
监控登录事件。
结论
保护 SSH 服务器连接的安全性是每个系统管理员的基本职责。通过实施上述措施,可以显著降低服务器被攻击的风险,确保数据的安全性。定期审查和更新这些配置将有助于维护安全环境。
通过结合上述多种措施,可以显著提高 SSH 服务器的安全性,降低遭受攻击的风险。始终保持警惕,并定期检查和更新安全策略,以确保系统的安全性。