云计算百科
云计算领域专业知识百科平台

[指南] 新购 Linux 服务器后必做的 10+ 项安全设置(保姆级指南)

更多服务器知识请访问:hostol.com

恭喜你!拥有了一台全新的 Linux 服务器,无论是云服务器 ECS/CVM、VPS 还是独立服务器,这都意味着一片充满可能性的新大陆等待你去探索。在你迫不及待地想要部署网站、应用、数据库或者开始各种技术实验之前,请务必停下来,花一点时间完成一些至关重要的初始安全设置。这就像给你的新家换上更坚固的门锁,安装好警报系统一样,能大大降低未来被“不速之客”光顾的风险。

想象一下,一台刚刚初始化的 Linux 服务器,就像一个刚出厂、默认配置的设备,很多设置是为了方便初次使用,而非最优安全状态。网络上的自动化扫描工具每时每刻都在寻找这些“软柿子”。因此,在新服务器上线提供任何服务之前,完成以下这些基础安全加固步骤,是每一位负责任的管理员都应该养成的习惯。

别担心,这篇指南会像“保姆”一样,一步步带你操作,解释清楚每一步的意义。我们假设你使用的是常见的 Linux 发行版,如 Ubuntu 或 CentOS。

1. 立即修改 Root 密码 (如果适用)

为什么重要? 很多服务商在初始化服务器时,会提供一个默认的、或者随机生成的 root 密码。这个密码可能是临时的,或者强度不够。Root 用户拥有系统的最高权限,一旦其密码被猜解或泄露,后果不堪设想。虽然我们强烈推荐禁用 root 直接登录并使用密钥,但设置一个极其复杂的 root 密码仍然是一个好的基础习惯。

如何操作:

  • 使用服务商提供的初始密码,以 root 用户身份首次登录服务器。
  • 立刻执行修改密码命令: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] passwd
  • 根据提示,先输入当前密码(如果是首次修改且之前没有密码,可能直接提示输入新密码),然后输入两次你的新密码。
  • 请务必设置一个超强密码: 包含大小写字母、数字、特殊符号,长度至少 12 位以上,且与你的其他任何密码都不同。
  • 注意: 很多云服务器默认可能不允许 root 密码登录,而是强制使用 SSH 密钥。如果你的情况是这样,可以跳过此步,但请确保你的 root 账户本身是安全的(例如,没有被意外启用密码登录)。

    2. 创建一个新的个人用户并赋予 Sudo 权限

    为什么重要? 直接使用 root 用户进行日常操作是一个非常危险的习惯!就像你不会用银行金库的万能钥匙去开你家的信箱一样。任何误操作都可能对系统造成毁灭性打击,而且 root 账户也是黑客最主要的攻击目标。我们需要创建一个普通的个人用户,只在必要时通过 `sudo` 临时获取管理员权限。

    如何操作:

  • 仍然以 root 用户身份登录。
  • 创建一个新用户(将 your_username 替换为你想要的名字): [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] adduser your_username 根据提示为新用户设置一个强密码,并填写(或直接回车跳过)其他信息。
  • 将新用户添加到 `sudo` (或 `wheel`) 用户组,使其能够执行 `sudo` 命令获取管理员权限: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] # 对于 Debian/Ubuntu 系统 (使用 sudo 组) usermod -aG sudo your_username # 对于 CentOS/RHEL 系统 (使用 wheel 组) usermod -aG wheel your_username
  • 现在,你可以退出 root 登录,尝试用你的新用户名和密码通过 SSH 登录。登录后,尝试执行一个需要管理员权限的命令,比如 sudo apt update 或 sudo yum update,看是否能成功提示输入密码并执行。
  • 从现在开始,除非万不得已,**请始终使用这个新创建的个人用户登录服务器进行操作**。

    3. 配置 SSH 密钥认证并禁用密码认证(强烈推荐)

    为什么重要? 相比容易被暴力破解的密码,SSH 密钥对提供了远超其上的安全性。它使用一对密钥(公钥和私钥):私钥由你妥善保管在本地电脑上,公钥则上传到服务器上。只有持有匹配私钥的客户端才能通过验证。禁用密码认证可以彻底杜绝针对 SSH 的密码暴力破解攻击。

    如何操作:

  • 在你的本地电脑上生成 SSH 密钥对(如果还没有的话): 打开你本地电脑的终端或 Git Bash 等工具,执行: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] ssh-keygen -t rsa -b 4096 # 或者使用更现代的 ed25519: ssh-keygen -t ed25519 一路回车(可以选择设置一个密码短语 passphrase 进一步保护私钥)。默认会在你的用户主目录下的 .ssh/ 文件夹(如 ~/.ssh/)生成两个文件:id_rsa (私钥,绝不能泄露!) 和 id_rsa.pub (公钥)。
  • 将公钥上传到服务器:
    • 方法一(推荐,如果你的本地有 `ssh-copy-id` 命令): [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] ssh-copy-id your_username@YOUR_SERVER_IP # 将替换为你的新用户名和服务器IP 根据提示输入你的新用户的密码,命令会自动将你的公钥追加到服务器上该用户家目录的 ~/.ssh/authorized_keys 文件中,并设置好正确的权限。
    • 方法二(手动复制):
    • 在本地电脑上,查看并复制你的公钥文件内容: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] cat ~/.ssh/id_rsa.pub # 或者 id_ed25519.pub 选中并复制输出的所有内容(通常以 `ssh-rsa` 或 `ssh-ed25519` 开头)。
    • 使用你的新用户名和密码 SSH 登录到服务器。
    • 在服务器上,创建 .ssh 目录并设置权限(如果不存在): [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] mkdir -p ~/.ssh chmod 700 ~/.ssh
    • 将你本地复制的公钥内容追加到 authorized_keys 文件中,并设置权限: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] echo '粘贴你复制的公钥内容 GONE HERE' >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys (注意:是 `>>` 追加,不是 `>` 覆盖!确保权限是 600 和 700)
  • 测试密钥登录: 退出服务器,然后尝试**不输入密码**进行 SSH 登录: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] ssh your_username@YOUR_SERVER_IP # 如果私钥不是默认路径,用 -i 指定 如果能直接登录成功(或者提示输入你为私钥设置的密码短语 passphrase),说明密钥配置成功!
  • 禁用密码认证(确认密钥登录可用后再操作!):
    • SSH 登录服务器。
    • 编辑 SSH 配置文件: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] sudo nano /etc/ssh/sshd_config
    • 找到 PasswordAuthentication 这一行,取消注释(删掉行首的 #),并将其值改为 no。确保 PubkeyAuthentication 是 yes。 PubkeyAuthentication yes PasswordAuthentication no # 可能还需要将 ChallengeResponseAuthentication 设为 no ChallengeResponseAuthentication no
    • 保存文件。
    • 验证配置并重启 SSH 服务: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] sudo sshd -t sudo systemctl restart sshd
    • 重要: 重启后,保持当前 SSH 连接**不要断开**,另外打开一个新的终端窗口,尝试再次用密钥登录。如果新连接也能成功,说明配置没问题。如果新连接失败了,赶紧回到之前的连接窗口把配置改回去,否则你可能就把自己锁在外面了!
  • 强制使用密钥登录是提升 SSH 安全性的关键一步。

    4. 禁止 Root 用户直接 SSH 登录

    为什么重要? root 账户是所有攻击者首先尝试的目标。禁止它直接通过 SSH 登录,可以大大减少被暴力破解的可能性。你需要先通过普通用户登录,然后再用 `sudo` 获取权限。

    如何操作:

  • 编辑 SSH 配置文件: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] sudo nano /etc/ssh/sshd_config
  • 找到 PermitRootLogin 这一行。
  • 取消注释,并将其值修改为 no (完全禁止) 或者 prohibit-password (禁止密码登录,但仍允许密钥登录 – 如果你确实需要 root 密钥登录的话,但不推荐)。最安全的设置是 no。 PermitRootLogin no
  • 保存文件,验证配置并重启 SSH 服务: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] sudo sshd -t sudo systemctl restart sshd
  • 之后,你就不能再直接用 root 用户名通过 SSH 登录了。

    5. 修改默认的 SSH 端口 (可选,但有一定好处)

    为什么考虑修改? SSH 默认监听 22 端口,这是全世界都知道的。网络上充斥着大量自动化的扫描工具,它们会不停地扫描公网 IP 的 22 端口,尝试进行暴力破解。将 SSH 端口修改为一个非标准的、高位端口(例如 10000-65535 之间),虽然不能阻止有针对性的攻击,但可以有效地“躲开”绝大多数自动化扫描流量,让你的 SSH 日志清净很多,也减少了被初级攻击尝试的概率。这是一种“安全靠隐蔽 (Security through obscurity)”的策略,本身不是终极安全,但作为辅助手段有用。

    如何操作:

  • 选择一个未被使用的高位端口,例如 2222 或 10022 (请确保这个端口没被其他服务占用)。
  • 编辑 SSH 配置文件: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] sudo nano /etc/ssh/sshd_config
  • 找到 #Port 22 这一行。
  • 取消注释,并将 22 修改为你选择的新端口号,例如 Port 10022。 Port 10022
  • 保存文件。
  • 重要:在重启 SSH 服务之前,必须先在防火墙中允许新的端口! 否则你会立刻把自己锁在外面。 [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] # UFW 示例 sudo ufw allow 10022/tcp # FirewallD 示例 sudo firewall-cmd –permanent –add-port=10022/tcp sudo firewall-cmd –reload
  • 确认防火墙规则生效后,验证配置并重启 SSH 服务: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] sudo sshd -t sudo systemctl restart sshd
  • 测试新端口连接: 保持当前连接,另外打开一个终端,使用 -p 参数指定新端口进行连接: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] ssh your_username@YOUR_SERVER_IP -p 10022 如果能成功连接,说明修改成功!
  • (可选)确认新端口稳定可用后,可以考虑在防火墙中关闭旧的 22 端口。
  • 6. 配置基础防火墙规则 (UFW / FirewallD)

    为什么重要? 防火墙是服务器的第一道网络防线。它能控制哪些端口允许外部访问,哪些不允许。默认情况下,新服务器可能没有任何防火墙规则,或者规则很宽松。我们需要配置它,遵循“最小权限”原则,只开放那些我们确实需要对外提供服务的端口(比如你刚设置的 SSH 端口、Web 服务的 80/443 端口等)。

    如何操作(以 UFW 为例,适用于 Ubuntu/Debian):

  • 检查 UFW 状态(通常默认是 inactive): [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] sudo ufw status
  • 设置默认规则:通常建议默认拒绝所有入站连接,允许所有出站连接。 [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] sudo ufw default deny incoming sudo ufw default allow outgoing
  • 允许必要的入站连接(**务必先允许你的 SSH 端口!**): [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] # 允许你配置的 SSH 端口 (替换 10022 为你的实际端口) sudo ufw allow 10022/tcp # 如果需要运行 Web 服务,允许 HTTP 和 HTTPS sudo ufw allow 80/tcp comment 'HTTP' sudo ufw allow 443/tcp comment 'HTTPS' # 如果需要其他服务,比如 OpenVPN 默认端口 # sudo ufw allow 1194/udp # 你还可以限制只允许特定 IP 访问某个端口 # sudo ufw allow from 你的信任IP to any port 10022 proto tcp
  • 启用 UFW 防火墙: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] sudo ufw enable 它会提示操作可能中断现有连接,输入 y 确认。
  • 再次检查状态,确保规则已生效: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] sudo ufw status verbose
  • 对于 CentOS/RHEL 用户: 通常使用 `firewalld`。基本思路类似:`sudo systemctl start firewalld`, `sudo systemctl enable firewalld`, 使用 `sudo firewall-cmd –permanent –add-service=ssh` (如果使用默认端口) 或 `–add-port=10022/tcp` 添加规则,最后 `sudo firewall-cmd –reload`。请查阅 `firewalld` 的文档获取详细用法。

    7. 及时更新系统软件包

    为什么重要? 你拿到的“新”服务器,其操作系统和预装软件的版本可能已经不是最新的了。旧版本的软件往往包含已知的安全漏洞,这些漏洞是攻击者最喜欢利用的入口。在新服务器上做的第一件事,就应该是打上所有最新的安全补丁。

    如何操作:

    [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]

    # 对于 Debian/Ubuntu 系统
    sudo apt update # 更新软件包列表
    sudo apt upgrade -y # 升级所有已安装的软件包

    # 对于 CentOS/RHEL 系统
    sudo yum update -y # 检查并更新所有软件包

    这个过程可能需要一些时间,取决于需要更新的包有多少。建议定期执行此操作。

    8. 移除不必要的服务和软件包

    为什么重要? 系统中运行的服务和安装的软件包越多,潜在的攻击面就越大。服务商预装的系统镜像里,可能包含一些你根本用不到的服务(比如邮件服务器 postfix, 文件共享 samba, 甚至图形界面相关组件)。检查并移除这些不必要的组件,可以减少系统的复杂度,降低被漏洞影响的风险。

    如何操作:

  • 检查当前正在运行的服务: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] sudo systemctl list-units –type=service –state=running # 或者查看监听端口的服务 sudo ss -tulnp 看看列表里有没有你不认识或者确定不需要的服务?
  • 卸载不需要的软件包:如果你确认某个服务(比如 `postfix` 邮件服务)你用不到,可以卸载它及其相关的包。 [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] # Debian/Ubuntu 示例 sudo systemctl stop postfix sudo systemctl disable postfix # 禁止开机自启 sudo apt purge postfix -y # 彻底卸载并删除配置文件 sudo apt autoremove -y # 移除不再需要的依赖 # CentOS/RHEL 示例 sudo systemctl stop postfix sudo systemctl disable postfix sudo yum remove postfix -y sudo yum autoremove -y
  • 卸载前请务必确认该服务确实是您不需要的,并且没有其他重要服务依赖它。如果不确定,可以先尝试禁用 (`sudo systemctl disable service_name`) 而不是直接卸载。

    </li>

    一个更“干净”的系统意味着更少的潜在入口点。

    9. 配置自动安全更新 (可选,但推荐)

    为什么重要? 手动执行 `apt upgrade` 或 `yum update` 很好,但你能保证每天都记得做吗?很多关键的安全补丁需要尽快应用。配置系统自动安装安全更新,可以确保你的服务器始终处于最新的安全状态,大大减少因未及时打补丁而被攻击的风险。

    如何操作 (以 Ubuntu/Debian 的 `unattended-upgrades` 为例):

  • 安装必要的包: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] sudo apt update sudo apt install unattended-upgrades update-notifier-common -y
  • 启用自动更新: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] sudo dpkg-reconfigure –priority=low unattended-upgrades 在弹出的交互界面中选择“是 (Yes)”。
  • (可选)微调配置:可以编辑 /etc/apt/apt.conf.d/50unattended-upgrades 文件来控制更新的类型(比如只安装安全更新)、是否自动重启等。默认配置通常只安装安全更新,比较稳妥。
  • 对于 CentOS/RHEL 用户: 可以使用 `yum-cron` 包来实现类似的功能,配置 /etc/yum/yum-cron.conf 文件来定义更新类型和通知方式。

    自动化安全更新能让你省心不少,但也要注意,极少数情况下自动更新可能导致服务兼容性问题,需要权衡风险。

    10. 安装并配置 Fail2ban

    为什么重要? 正如我们之前讨论 SSH 安全时提到的,网络上充满了尝试暴力破解 SSH 密码或 Web 应用登录后台的自动化机器人。Fail2ban 是一个非常流行的入侵防御工具,它能监控系统日志(如 SSH 登录失败日志、Web 服务器错误日志等),当发现某个 IP 地址在短时间内有多次失败尝试时,就自动调用防火墙(如 iptables, firewalld, ufw)将该 IP 临时(或永久)封禁。这能极大地降低被暴力破解成功的风险。

    如何操作:

  • 安装 Fail2ban: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] # Debian/Ubuntu sudo apt update && sudo apt install fail2ban -y # CentOS/RHEL (需要 EPEL 源) sudo yum install epel-release -y sudo yum install fail2ban -y
  • 启用并启动服务: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] sudo systemctl enable fail2ban sudo systemctl start fail2ban
  • 配置 Fail2ban(关键步骤):
    • Fail2ban 的主配置文件是 /etc/fail2ban/jail.conf,但**不要直接修改它**,因为软件更新时会被覆盖。
    • 你应该在 /etc/fail2ban/ 目录下创建自定义配置文件,通常是 jail.local。复制一份默认配置作为起点: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    • 编辑 jail.local 文件 (sudo nano /etc/fail2ban/jail.local),找到 [DEFAULT] 段落和各个服务(如 [sshd])的段落进行配置。主要关注:
      • bantime: 封禁时长(例如 10m 表示10分钟,1h 表示1小时,-1 表示永久)。
      • findtime: 查找失败尝试的时间窗口。
      • maxretry: 在 findtime 时间内允许的最大失败次数。
      • [sshd] 段落下的 enabled = true: 确保 SSH 防护是开启的。如果修改了 SSH 端口,需要同时修改这里的 port = ssh 为 port = 你的新端口。
      • 你还可以根据需要启用对 Nginx, Apache, Postfix 等其他服务的防护(找到对应段落,设置 enabled = true,并确保日志路径等配置正确)。
    • 修改配置后,重启 Fail2ban 服务使配置生效: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] sudo systemctl restart fail2ban
  • 检查 Fail2ban 状态和封禁列表: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] sudo fail2ban-client status # 查看已启用的 jail sudo fail2ban-client status sshd # 查看 sshd jail 的状态和已封禁 IP
  • (关于 Fail2ban 的更详细配置和使用,我们后续会有专门的文章介绍)

    11. 检查服务器监听的端口

    为什么重要? 了解你的服务器到底在网络上“打开”了哪些“门”(监听端口),是评估安全风险的基础。每个监听的端口都对应着一个正在运行的服务,也意味着一个潜在的被攻击入口。你应该只保留那些确实需要对外提供服务的端口。

    如何操作:

    使用 ss 命令(比旧的 `netstat` 更推荐)查看当前正在监听的 TCP 和 UDP 端口及其对应的服务:

    [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]

    sudo ss -tulnp

    • -t: 显示 TCP sockets
    • -u: 显示 UDP sockets
    • -l: 只显示监听状态的 sockets
    • -n: 不解析服务名,直接显示端口号
    • -p: 显示监听端口的进程信息

    仔细检查列表中的每一行:这个端口是什么服务(看 `Process` 列)在监听?这个服务是你确实需要运行并且需要对外(或对特定网络)暴露的吗?如果发现有未知或不需要的服务在监听端口,应该回到第 8 步将其禁用或卸载。

    12. 熟悉并定期查看关键日志文件

    为什么重要? 日志文件是服务器运行状况的“黑匣子”,记录了系统事件、用户登录、服务启停、错误信息等。养成定期查看关键日志的习惯,有助于你及时发现异常情况、排查故障,甚至发现潜在的安全入侵迹象。

    需要关注的关键日志(路径可能因发行版略有不同):

    • /var/log/auth.log (Debian/Ubuntu) 或 /var/log/secure (CentOS/RHEL): 记录所有用户登录、认证尝试(包括 SSH 成功和失败)、sudo 使用等安全相关的事件。必须经常关注!
    • /var/log/syslog (Debian/Ubuntu) 或 /var/log/messages (CentOS/RHEL): 记录系统全局的大部分事件,包括内核消息、服务启停、系统错误等。
    • /var/log/nginx/, /var/log/apache2/, /var/log/httpd/: Web 服务器的访问日志和错误日志。
    • /var/log/mysql/, /var/log/mariadb/, /var/log/postgresql/: 数据库的错误日志。
    • /var/log/fail2ban.log: Fail2ban 的运行和封禁日志。
    • dmesg 命令: 显示内核环形缓冲区的内容,对于排查硬件问题或启动过程中的问题很有用。
    • journalctl 命令 (systemd 系统): 强大的日志查询工具,可以按服务、时间、级别等过滤日志。例如 journalctl -u sshd -n 50 查看 sshd 服务最近 50 条日志。

    如何查看: 可以使用 cat, less, more, tail -n 100, tail -f (实时监控), grep (搜索关键词) 等命令来查看和分析日志。

    熟悉这些日志的位置和内容,是成为一个合格服务器管理员的基础。

    13. 设置正确的时区并启用 NTP 时间同步

    为什么重要? 服务器时间不准确,会导致日志记录的时间戳混乱,难以排查按时间顺序发生的问题;计划任务 (Cron Job) 可能在错误的时间执行;SSL 证书验证可能出错;在集群环境中可能导致协作问题。使用 NTP (Network Time Protocol) 自动同步时间可以确保服务器时钟的精确性。

    如何操作:

  • 检查当前时区: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] timedatectl
  • 如果时区不正确,列出可用时区 (timedatectl list-timezones) 并设置: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] # 示例:设置为亚洲/上海时区 sudo timedatectl set-timezone Asia/Shanghai
  • 确认 NTP 服务已启用:timedatectl 输出中的 NTP service: 应该是 active。如果不是,可能需要安装 NTP 客户端 (如 chrony 或 ntp) 并启用它。 [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中] # 示例:安装并启用 chrony (推荐) sudo apt update && sudo apt install chrony -y # Debian/Ubuntu # sudo yum install chrony -y # CentOS/RHEL sudo systemctl enable –now chronyd 然后再次用 timedatectl 确认 NTP 服务状态。还可以用 chronyc sources -v 查看同步状态。
  • 14. (可选/进阶) 基础内核参数调整 (Kernel Hardening)

    为什么考虑? Linux 内核提供了一些参数(可以通过 sysctl 命令调整)可以增强系统的安全性和网络性能。对于新服务器,可以考虑调整几个基础且风险较低的参数。

    示例 (编辑 /etc/sysctl.conf 或 /etc/sysctl.d/ 下的文件):

    [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]

    # 启用 SYN Cookies 防护 (通常默认开启)
    net.ipv4.tcp_syncookies = 1

    # 禁用 IP 源路由 (防止路由欺骗)
    net.ipv4.conf.all.accept_source_route = 0
    net.ipv4.conf.default.accept_source_route = 0

    # 禁用 ICMP 重定向接受 (防止路由欺骗)
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.default.accept_redirects = 0
    net.ipv4.conf.all.secure_redirects = 0
    net.ipv4.conf.default.secure_redirects = 0
    # 对于 IPv6 也类似设置
    net.ipv6.conf.all.accept_redirects = 0
    net.ipv6.conf.default.accept_redirects = 0

    # 开启反向路径过滤 (帮助防止 IP 欺骗)
    net.ipv4.conf.all.rp_filter = 1
    net.ipv4.conf.default.rp_filter = 1

    # 忽略所有 ICMP Echo 请求 (禁 Ping,可选,有利有弊)
    # net.ipv4.icmp_echo_ignore_all = 1

    修改后执行 sudo sysctl -p 使其生效。注意: 内核参数调整需要理解其含义,不当的修改可能导致网络问题,请谨慎操作。

    15. 别忘了备份!备份!备份!

    为什么压轴但极其重要? 以上所有的安全设置都是为了“防患于未然”,但没有任何系统是绝对安全的。硬件可能故障,软件可能有未知漏洞,管理员也可能误操作。**数据备份是你的最后一道防线,是灾难发生后你能恢复业务的唯一希望!**

    你需要做什么:

    • 制定备份策略: 明确需要备份哪些数据(网站文件?数据库?配置文件?),备份频率(每天?每周?),备份保留周期。
    • 选择备份方式: 可以是简单的脚本打包压缩 + rsync/scp 到另一台服务器/对象存储,也可以使用专业的备份软件(如 Bacula, Amanda)或云服务商提供的备份服务。
    • 实施并自动化: 将备份过程自动化执行。
    • 验证备份有效性: 定期尝试从备份中恢复数据到测试环境,确保备份文件没有损坏且恢复流程可行。
    • 异地存储: 关键备份最好存储在与主服务器物理隔离的地方(不同的机房、不同的云区域、甚至离线存储)。

    备份策略的制定和实施可能比较复杂,值得专门写一篇文章讨论。但在这里,我必须强调:**在新服务器开始承载任何重要数据之前,请务必规划并实施你的数据备份方案!**

    总结

    给新服务器做好初始安全设置,就像给刚出生的婴儿打好预防针一样重要。虽然看起来步骤有点多,但完成以上这些基础设置(特别是用户管理、SSH 加固、防火墙配置、系统更新和备份),能为你后续的服务器运维打下一个坚实、安全的基础,让你在未来的数字世界里航行得更安心。

    记住,安全是一个持续的过程,不是一劳永逸的。完成了这些初始设置后,还需要保持警惕,定期维护、监控日志、关注安全动态。但至少,你已经为你的新伙伴穿上了第一件“盔甲”!

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » [指南] 新购 Linux 服务器后必做的 10+ 项安全设置(保姆级指南)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!