在 Linux 上保护 SSH 服务器连接的15种措施

server/2024/10/25 15:19:01/

在 Linux 上保护 SSH 服务器连接的15种措施

SSH(Secure Shell)是一种广泛使用的协议,用于安全地访问 Linux 服务器。尽管 SSH 提供了一定的安全性,但不安全的默认配置可能会导致各种安全风险,特别是在开放的环境中。为了保护 SSH 服务器,以下是几种有效的安全措施。

1. 禁用 Root 用户登录

禁用 root 用户的 SSH 访问是增强安全性的基本步骤。攻击者通常会首先尝试破解 root 密码,因此创建一个具有管理权限的新用户是明智之举。

操作步骤:

  1. 创建一个新用户并赋予其 sudo 权限:

    sudo useradd -m exampleroot
    sudo passwd exampleroot
    sudo usermod -aG sudo exampleroot
    
  2. 修改 SSH 配置文件 /etc/ssh/sshd_config,添加以下内容:

    PermitRootLogin no
    AllowUsers exampleroot
    
  3. 重启 SSH 服务:

    sudo systemctl restart sshd
    

2. 更改默认端口

默认的 SSH 连接端口是 22,攻击者常常会针对这个端口进行扫描。通过更改 SSH 的端口号,可以降低受到攻击的风险。

操作步骤:

  1. 打开 /etc/ssh/sshd_config 文件,找到并更改端口号:

    Port 22099
    
  2. 重启 SSH 服务以应用更改:

    sudo systemctl restart sshd
    
  3. 确保防火墙允许新的端口号通过。

3. 禁止空密码用户访问

空密码的用户账户可能会被攻击者利用。为了防止这种情况,可以在配置文件中禁止空密码登录。

操作步骤:

  1. /etc/ssh/sshd_config 中添加以下行:

    PermitEmptyPasswords no
    

4. 限制登录尝试次数

默认情况下,SSH 允许多次输入密码。如果攻击者尝试暴力破解,限制登录尝试次数将有效防止这种攻击。

操作步骤:

  1. 修改 /etc/ssh/sshd_config 文件,添加以下行:

    MaxAuthTries 3
    

5. 使用 SSH 版本 2

SSH 的第二个版本比第一个版本更安全。确保服务器只接受 SSH 版本 2 的连接。

操作步骤:

  1. /etc/ssh/sshd_config 文件中添加以下行:

    Protocol 2
    

6. 关闭 TCP 端口转发和 X11 转发

关闭 TCP 端口转发和 X11 转发可以防止攻击者利用 SSH 连接访问其他系统。

操作步骤:

  1. /etc/ssh/sshd_config 文件中添加以下行:

    AllowTcpForwarding no
    X11Forwarding no
    

7. 使用 SSH 密钥连接

使用 SSH 密钥而不是密码连接是提高安全性的有效方式。SSH 密钥包括公钥和私钥,公钥存储在服务器上,私钥存储在客户端。

操作步骤:

  1. 生成 SSH 密钥:

    ssh-keygen
    
  2. 将公钥上传到服务器

    ssh-copy-id exampleroot@your_server_ip
    
  3. /etc/ssh/sshd_config 文件中禁用密码认证:

    PasswordAuthentication no
    

8. 限制 SSH 连接的 IP 地址

通过限制特定 IP 地址的访问,可以进一步提高安全性。可以在 /etc/hosts.allow 文件中配置允许和拒绝的 IP 地址。

操作步骤:

  1. 编辑 /etc/hosts.allow 文件,添加允许的 IP 地址:

    sshd: 192.168.1.0/255.255.255.0
    
  2. 编辑 /etc/hosts.deny 文件,拒绝所有其他 IP 地址:

    sshd: ALL
    

9. 使用防火墙

使用防火墙(如 iptablesufw)可以帮助限制对 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 地址。

操作步骤:

  1. 安装 fail2ban

    sudo apt-get install fail2ban
    
  2. 配置 /etc/fail2ban/jail.local,启用 SSH 监控:

    [sshd]
    enabled = true
    maxretry = 3
    bantime = 600
    

11. 使用多因素认证 (MFA)

启用多因素认证增加了一层安全性,即使密码被泄露,也难以通过 SSH 登录。

操作步骤:

  1. 安装 libpam-google-authenticator

    sudo apt-get install libpam-google-authenticator
    
  2. 在用户目录中运行 google-authenticator 命令,根据提示进行设置。

  3. 修改 /etc/pam.d/sshd 文件,添加以下行:

    auth required pam_google_authenticator.so
    
  4. /etc/ssh/sshd_config 中确保 ChallengeResponseAuthentication 设置为 yes

    ChallengeResponseAuthentication yes
    

12. 定期审计和更新

定期检查 SSH 配置文件,审计用户账户和权限,确保没有未使用的账户或过期的密钥。同时,定期更新系统和 SSH 软件,以修复已知的安全漏洞。

操作步骤:

  • 使用以下命令更新系统:

    sudo apt-get update
    sudo apt-get upgrade
    

13. 禁用 IPv6(如果不需要)

如果不使用 IPv6,可以考虑禁用它,以减少潜在的攻击面。

操作步骤:

  1. 编辑 /etc/sysctl.conf 文件,添加以下行:

    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    
  2. 应用更改:

    sudo sysctl -p
    

14. 使用 SSH 代理

SSH 代理可以存储你的密钥并在需要时自动使用,提高安全性和便利性。

操作步骤:

  1. 启动 SSH 代理:

    eval "$(ssh-agent -s)"
    
  2. 添加私钥:

    ssh-add ~/.ssh/id_rsa
    

15. 设置登录通知

使用邮件或其他通知系统,当有新的 SSH 登录时接收通知,以便及时发现可疑活动。

操作步骤:

  1. /etc/ssh/sshd_config 文件中启用 PermitRootLogin no 和其他配置。
  2. 使用 auditdsyslog 监控登录事件。

结论

保护 SSH 服务器连接的安全性是每个系统管理员的基本职责。通过实施上述措施,可以显著降低服务器被攻击的风险,确保数据的安全性。定期审查和更新这些配置将有助于维护安全环境。

通过结合上述多种措施,可以显著提高 SSH 服务器的安全性,降低遭受攻击的风险。始终保持警惕,并定期检查和更新安全策略,以确保系统的安全性。


http://www.ppmy.cn/server/134754.html

相关文章

[实时计算flink]基于Paimon的数据库实时入湖快速入门

Apache Paimon是一种流批统一的湖存储格式,支持高吞吐的写入和低延迟的查询。本文通过Paimon Catalog和MySQL连接器,将云数据库RDS中的订单数据和表结构变更导入Paimon表中,并使用Flink对Paimon表进行简单分析。 背景信息 Apache Paimon是一…

轻松拿下offer,一次真实的面试回答记录

前言 最近一个vip学员去面试,被问到一些问题,回答完后轻松拿到offer。今天完整地记录这次面试中问到的问题与回答(该学员面试的公司,项目使用Lua为主)。 对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交…

前端优化:从Vue/React/Svelte的数组更新->渲染策略剖析数组大列表数据展示优化策略

在现代前端框架中,数组的渲染是一个重要的功能。不同的框架在处理数组的操作(如新增、删除和更新)时有不同的实现方式和优化手段。本文将对比 Vue、React 和 Svelte 在数组渲染方面的特点,并讨论其优缺点,特别是与直接…

【Qt6聊天室项目】 主界面功能实现

1. 获取当前用户的个人信息 1.1 前后端逻辑分析(主界面功能) 主界面上所有的前后端交互逻辑相同,分析到加载会话列表后其余功能仅实现。 核心逻辑总结 异步请求-响应模型 客户端发起请求,向服务器发送包含会话ID的请求服务端处…

用大模型或者预训练模型对图片进行OCR

背景:使用大模型或者预训练模型(比如来自huggingface上的模型)对图片进行OCR,并将识别结果标记在图片原文的下方。 愿我们终有重逢之时,而你还记得我们曾经讨论的话题。 QQ group 868373192 QQ second group 277356808 要使用预训练模型对图片进行OCR(光学字符识别)…

hivesql学习大纲

引言 - 简述Hive的用途和特点 - 为什么学习HiveSQL 第一部分:Hive基础 1.1 Hive简介 - 定义和架构 - Hive与传统数据库的区别 - Hive的应用场景 1.2 Hive环境搭建 - 所需环境和依赖 - 安装和配置Hive - 启动和停止Hive服务 1.3 Hive数据模型 - 数据库&#xff0…

Django配置路由后,为什么输入http://127.0.0.1:8000/ 网址后报错了?

问题探讨:为什么输入http://127.0.0.1:8000/ 网址后报错了? 翻译一下: 屏蔽一下新加的路由 发现界面正常了 现在翻译一下: 是不是比较理解了,admin 属于默认配置的URL,所以urlpatterns为空列表或仅配置admin路由时&…

Java while语句练习 C语言的函数递归

1. /* public static void main(String[] args) {int[] arr {25, 24, 12, 98, 36, 45};int max arr[0];//不能写0for (int i 1; i < arr.length; i) {if (arr[i] > max) {max arr[i];}}System.out.println(max);}*//*public static void main(String[] args) {doubl…