Linux 服务器的基本安全策略

撰写本文是在2022年8月13日决定的。本人Q群内群友经常有极其不规范的运维操作,令本人很是无语,为此写本文以避免诸位站长踩坑。

服务器选择

非网站运营者可跳过这部分,本段落不考虑服务无法使用CDN等反向代理服务的情况。

在如今的市场上,存在各式各样的云服务商。大有阿里云、腾讯云、AWS、Azure、GCP等上市公司运营的云服务商,小有一个人对接机房或其它云服务商就可以运营的IDC服务(俗称 One Man IDC)。

多样的云服务商也造就了当前业界服务质量的参差不齐。作为数个服务的提供者和维护者,我个人趋向于寻求性价比与SLA的平衡点,即在保证不具有过高的成本、过低的性价比和过低的性能的同时保证具有较高的可靠性。

大型公有云

在这部分,我们将“大型公有云”定义为“上市公司运营的公有云服务”。

排名依照市占率,市占率数据为2021年下半年数据

我们常见的公有云服务有很多,包括境内和境外:

我个人较为推荐使用大型公有云运行生产环境服务,因为大型公有云通常具有较好的稳定性、较高的技术能力、较快的客户服务效率和较多的福利。

大多数国内的大型公有云都有新用户优惠,可以以较低的价格购买较高配置的云服务器。大多数国外的大型公有云都提供免费额度,例如AWS的12个月试用期、Azure的200美元额度和DigitalOcean的100美元额度。

公有云通常提供多样的服务,除去基本的弹性计算,还包括但不限于对象存储、CDN、SaaS[4]、Kubernetes、容器镜像、容器仓库等,因此对于后续架构升级、架构扩展具有较高的优势。

需要注意的是,由于公有云通常选用较高质量的硬件,还对SLA有较高的要求,因此其售价也会较高。

私有云

部分集团企业和政府企业会使用私有云[5]服务,即专为最终用户而创建且通常位于用户的防火墙内的云环境。

通常,大型公有云会提供多种私有云解决方案。

小型 IDC 服务商

由于云计算资源日益丰富,近些年的市场逐渐扩张,出现了不少小微企业、工作室或个人运营的IDC服务。

此类服务通常具有较少的维护人数和云资源,部分IDC服务商通过对接大型公有云或地方机房获取云计算资源,并进行销售。

小型IDC服务商的云计算资源通常不如大型公有云广泛,很多只提供虚拟专用服务器(VPS)服务,不具备较高的技术实力[6]

相对大型公有云,小型IDC具有更高的可能放弃服务(俗称跑路),通常我使用以下两种方式甄别中国大陆云服务商的可信度。

  1. 中国大陆注册公司要求登记注册资金,部分公司登记资金破百万但实缴为0,即公司本身没有价值,公司开设无成本。
  2. 中国大陆对于增值电信服务商要求增值电信业务许可证,对于销售虚拟专用服务器则需要“互联网接入服务业务”和“互联网数据中心业务”的业务种类。可前往 电信业务市场综合管理信息系统 通过公司名查询其持有的许可证。
  3. 中国大陆对于开设在中国境内的网站要求进行ICP备案,可前往 ICP/IP地址/域名信息备案管理系统 通过域名查询备案信息。

若一小型IDC服务商销售中国大陆地区的云服务器,但不持有任何中国大陆企业主体或许可证,建议自行斟酌其可信度。

个人不建议使用小型IDC服务商的云计算资源作为生产环境的承载。

服务器安全

服务器的安全和权限是站点安全的基础,而Shell安全则是服务器安全的基石。

通常我们通过SSH协议连接Linux Terminal,并执行命令。其中,SSH的安全是极其必要的。

登录方式

我建议不要在任何公网服务器的SSH服务端使用密码登录,请尽可能使用SSH密钥对而不是密码。

生成密钥对

我们在 Linux 服务器上通过 ssh-keygen 命令生成秘钥。

由于 ECDSA 加密具有更高的可靠性和更小的性能损耗,在本次教程中我们以此为演示。部分服务商不支持导入 ECDSA 秘钥,可依据思路替换为 RSA。

其中,我们可以通过 -t 参数指定加密方法,通过 -b 参数指定加密位数。

个人习惯在 RSA 秘钥使用4096 bits,在 ECDSA 秘钥使用 521 bits。

ssh-keygen -t ecdsa -b 521 # 生成SSH,路径使用默认即可

此时,~/.ssh/id_ecdsa 为私钥, ~/.ssh/id_ecdsa.pub 为公钥

配置密钥

请先将 ~/.ssh/id_ecdsa 路径的私钥复制到本地。

cp ~/.ssh/id_ecdsa.pub ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

配置 SSH 服务

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup # 备份
vi /etc/ssh/sshd_config

i 进入编辑模式并替换内容:

# 去除注释
LogLevel INFO
MaxAuthTries 3
MaxSessions 5
PubkeyAuthentication yes
PasswordAuthentication no
ClientAliveInterval 600
ClientAliveCountMax 3
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2

# 添加新行
Protocol 2

esc 退出编辑模式,并输入 :wq 保存内容。

在重启之前,请务必确保有一个现有的SSH连接正在运行,以防彻底无法连接到服务器!

而后我们需要重启 SSH 服务:

# RHEL / CentOS
systemctl restart sshd
# Debian / Ubuntu
service sshd restart

配置连接

此处使用 XShell 举例:

在 工具-用户密钥管理者 中导入上文要求复制到本地的私钥

导入私钥
XShell Session

针对服务器的Session进行修改即可。

随后,不要关闭保留的连接,重新双击 Session 文件进行连接,如果能够成功连接则为无误。

关于端口

更改 SSH 端口并无必要,能够成功破解 ECDSA 和 RSA 算法几乎没有可能性。

使用习惯

私钥安全

请不要将私钥上传到任何公开的网络平台,例如GitHub、QQ群文件、云盘等,这都是极其不安全的!

私钥是唯一的,丢失私钥意味着你无法打开服务器(可VNC重置),泄露私钥意味着你的服务器将承受极大的安全风险。

用户

请尽可能不要使用Root登录SSH。

你可以在 /etc/ssh/sshd_config 中设置 PermitRootLogin no 以避免直接通过Root登录。

为非 Root 用户设置私钥的方法与上述大致相同。

网络环境

对于较大的企业,更好的选择应当是在内网设立鉴权服务器和 SSH 跳板机[7]

Zero Trust 思想同样适用于系统层。

端口

建议关闭所有不需要使用的端口。

可参考文章:

关于面板程序

观点仅适用于生产环境,非生产环境请随意选择。

选择面板程序请遵循以下原则

  1. 如果你能够熟练地使用Linux系统,精通服务器运维,请不要使用面板程序。
  2. 如果你了解Nginx的基本配置文件写法,且单服务器对应单个站点,请不要使用面板程序。
  3. 如果你不需要运行Web程序,请不要使用面板程序。
  4. 如果你的业务主要为互联网相关,请不要使用面板程序。
  5. 如果你实在要用面板,请一定选择宝塔面板或CPanel。

面板程序具有优点,同时也具有缺点。

  • 优点:
    • 简单快捷(开发环境可以使用,但我更推荐JetBrains IDE的内置部署流程)。
    • 多站点维护方便。
    • 图形化操作(适合新手)。
  • 缺点:
    • 具有一定的资源占用,小机器不推荐。
    • 宝塔面板等国内的面板程序会向其服务器上传你的服务器相关信息,且强制实名。
    • 具有出现重大0day漏洞的可能性(参考宝塔pma删库事件)。
    • 多少有点Bug。

最主要的问题在于,一旦一个面板程序出现Bug,那几乎所有使用者都会受到极大的影响。

且国内面板必定会上传你的服务器相关信息和站点信息,公安找上门不是不可能的事。

鸣谢

没有以下两位人才,本文必将不会被创作。

  • @Bruce 宝塔的忠诚追随者,看了我站全部文章但啥都没学到
  • @HenryJiu 密码登录SSH的坚定拥护者

纯属整活,以上两位都是群友兼博主的好朋友~

感谢群友的提议,让我更好地完善本文内容。

Reference

  1. ^需要注意,接入备案指在服务器所在云服务商进行单独的接入备案,并非无需ICP备案。
  2. ^不支持中国身份信息和手机号码
  3. ^使用邀请链接注册可获得100美元的信用额度:https://m.do.co/c/6ced4b414c41
  4. ^例如腾讯云云函数、AWS Lambda、阿里云函数计算等
  5. ^私有云(Private cloud)是将云基础设施与软硬件资源建立在防火墙内,以供机构或企业内各部门共享数据中心内的资源。私有云完全为特定组织而运作的云端基础设施,管理者可能是组织本身,也可能是第三方;位置可能在组织内部,也可能在组织外部。
  6. ^中国大陆很多小型IDC服务商使用非自主构建的销售系统进行云服务售卖
  7. ^即通过一台暴露给外网的服务器的 SSH 客户端连接内网服务器的 SSH 服务端
Linux 服务器的基本安全策略 的发布基于协议 AHdark Blog License。如欲对此文章内容此文章转载、修改或行使任何超出预览和分享性质的行为,请参考此协议。

评论

  1. ferry
    Macintosh Chrome
    1年前
    2022-8-23 4:42:07

    想购买一台美国IP以及一台东南亚IP的服务器。主要用于电商中固定IP登录,对性能要求不高,大致同阿里云轻量服务器配置即可。AHDark有了解这块,可以推荐的型号吗?Thanks~

    • 博主
      ferry
      iPad Chrome
      1年前
      2022-8-23 22:09:41

      这个比较推荐挂梯子。服务器的话,美国的可以参考我司 https://cloud.ungine.cn 。东南亚推荐还是阿里腾讯的新加坡轻量,或者digital ocean的新加坡区域

      • York
        AH Dark
        Macintosh Safari
        1年前
        2022-10-02 17:06:40

        腾讯云❌,阿里云❌,只要不加国际都要被审查,进出口流量完全一致直接封号。
        DigitalOcean✅

        • 博主
          York
          Windows Chrome
          1年前
          2022-10-02 20:43:15

          您可能错误地理解了我的意思,我的意思是:建议挂梯子,如果不挂梯子就用阿里腾讯东南亚的服务器。通过 RDP 是可以正常使用的。

        • York
          AH Dark
          Macintosh Safari
          1年前
          2022-10-02 20:45:52

          明白👌

  2. Android Chrome
    1年前
    2022-8-19 12:51:50

    我还停留在密码登录,这边的经验是只要把22端口号调高,就能阻挡大部分的扫端口,然后配合fail2ban没遇到啥问题😂。
    群晖也是这样,默认扫5000的特多,调高之后一次也没有被扫过了

    • 博主
      南梦宫
      iPad Chrome
      1年前
      2022-8-19 13:05:55

      就我目前的架构方案来说,改端口比用密钥费劲的多,所以没怎么考虑这个方法。

  3. Macintosh Chrome
    已编辑
    1年前
    2022-8-18 23:49:56

    华为云第三,天翼云第四这是有什么依据吗~ 没想到它们俩这么牛啊……(ノ°ο°)ノ

    • 博主
      公子
      Windows Chrome
      1年前
      2022-8-19 0:07:30

      主要参考 IDC 和 Gartner 的公开数据

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇