# 【配置优化】我拿到VPS服务器必做的那些事

**URL:** <https://idcflare.com/t/topic/12604>\
**Category:** 教程\
**Tags:** 原创\
**Created:** [2025 年10 月 23 日 16:00 UTC](https://idcflare.com/t/topic/12604 "2025-10-23T16:00:00Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Yuju](https://idcflare.com/user_avatar/idcflare.com/yuju/32/28368_2.png) [@Yuju](https://idcflare.com/u/Yuju)\
**Post date:** [2025 年10 月 23 日 16:00 UTC](https://idcflare.com/t/topic/12604/1 "2025-10-23T16:00:00Z")

</div>

该教程仅针对于Debian系统。
# 一、系统基本设置

## 1. 更新软件库

```auto
apt update -y && apt upgrade -y

```

## 2. 更新、安装必备软件

```auto
apt install sudo curl wget nano vim -y

```

## 3. 校正系统时间

将时区改为改成上海

```auto
sudo timedatectl set-timezone Asia/Shanghai

```

- 查看当前时区：

```auto
timedatectl

```

- 列出所有时区：

```auto
timedatectl list-timezones

```

- 时间同步

```auto
# 检查时间同步状态
timedatectl status
# 启用自动时间同步
timedatectl set-ntp true
# 手动触发时间同步
systemctl restart systemd-timesyncd

```

如果需要更 **精确** 的时间同步，可以安装和使用NTP：

```auto
# 安装NTPsec
apt install ntpsec
# 启动并启用NTP服务
systemctl start ntpsec
# 设置开机自启
systemctl enable ntpsec
# 查看服务状态（确认是否正常运行）
sudo systemctl status ntpsec
# 验证时间同步是否生效（需先安装ntpstat）
apt install ntpstat
ntpstat

```

# 二、TCP参数调优

通过调整各种系统和网络参数来优化服务器的性能。

**实现方法** ：

- **拥塞控制算法** ：通过慢启动、拥塞避免、快重传和快恢复等算法避免网络拥塞。不同的拥塞控制算法（如Cubic、BBR、Reno）适用于不同的网络环境。调优这些算法的参数可以在避免拥塞的同时最大化吞吐量。

- **缓冲区管理** ：TCP的发送和接收缓冲区直接影响性能。缓冲区过小会限制吞吐量，过大则可能导致内存浪费和延迟增加。合理设置socket缓冲区大小需要考虑带宽延迟积和应用特性。

- **超时和重传机制** ：RTO（重传超时）算法根据RTT动态调整超时时间。调优相关参数可以在网络条件变化时快速适应，减少不必要的重传，提高传输效率。

- **连接管理优化** ：通过调整TIME\_WAIT状态的管理、SYN队列大小、keepalive等参数提升服务器的并发处理能力和资源利用率。

## 手动开启BBR+FQ的步骤

- 确认内核版本支持 BBR（需要 4.9+）：

```auto
uname -r

```

- 创建专门的配置文件（ 避免直接修改 `/etc/sysctl.conf`）：

```auto
sudo nano /etc/sysctl.d/yuju-bbr.conf

```

- 在文件末尾添加以下内容：

```auto
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

```

- 使配置生效

```auto
sudo sysctl -p /etc/sysctl.d/yuju-bbr.conf

```

**附汇总命令一行执行版：**

```auto
sudo sh -c 'cat > /etc/sysctl.d/yuju-bbr.conf << EOF
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF' && sudo sysctl -p /etc/sysctl.d/yuju-bbr.conf

```

## 查看TCP拥塞控制算法和队列调度器

```auto
# 查看当前使用的拥塞控制算法
sysctl net.ipv4.tcp_congestion_control
# 查看系统支持的所有拥塞控制算法
sysctl net.ipv4.tcp_available_congestion_control
# 查看默认的队列调度器
sysctl net.core.default_qdisc
# 检查BBR模块是否加载
lsmod | grep bbr

```

# **三、添加 SWAP**

在 Linux 系统中，`SWAP`（交换空间）是指一块磁盘空间，用于在物理内存（RAM）不足时，作为临时的扩展内存来使用。当系统的物理内存使用量接近饱和，Linux 内核会将一些不常使用的内存页交换到 `SWAP` 分区中，从而为当前运行的程序腾出更多的物理内存。当这些被交换出去的内存页再次被需要时，它们会被重新换回到物理内存中。`SWAP` 分区的存在可以在一定程度上避免由于物理内存不足导致系统性能严重下降或进程被强制终止的情况。

因此，`SWAP` 对于内存小的 VPS 非常有必要，可以提高我们的运行效率。

**这里我们同样用脚本来添加。**

```auto
wget -O swap.sh https://raw.githubusercontent.com/yuju520/Script/main/swap.sh && chmod +x swap.sh && clear && ./swap.sh

```

**查看当前内存**

```auto
free -m

```

# **四、安装 Docker、Docker-compose** 以及修改配置

## 1. Docker

### 1.1 Docker 安装

#### 1.1.1 非大陆服务器

```auto
wget -qO- get.docker.com | bash

```

或

```auto
curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh

```

#### 1.1.2 第三方 Docker 安装命令（中国大陆可用）

```auto
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)

```

### 1.2 Docker相关命令

```auto
# 查看 Docker 版本
docker -v

# 开机自动启动
sudo systemctl enable docker

# 卸载 Docker
sudo apt-get purge docker-ce docker-ce-cli containerd.io
sudo apt-get remove docker docker-engine
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

```

## 2. Docker-compose

Docker 从 18.06.0-ce 版本就开始自带 Docker Compose 工具，因此，我们只需要检验 Docker Compose 的版本。

### 查看 Docker Compose 版本

```auto
docker compose version

```

## 五、修改 SSH 端口

修改 SSH 端口通常有以下几个主要原因：

1. **增强安全性** ：SSH 服务默认使用的 22 端口是攻击者经常扫描和尝试攻击的目标。通过将端口修改为一个不常见的数值，可以减少自动攻击和暴力破解的风险，因为攻击者通常会首先针对常见的默认端口进行攻击。

例如，如果攻击者使用自动化工具扫描大量服务器，这些工具可能主要集中在 22 端口。而修改了端口后，就降低了被这类工具轻易发现和攻击的可能性。

1. **减少误连接和非法访问尝试** ：一些网络环境中可能存在大量的随机连接请求或非法访问尝试，针对默认的 22 端口。更改端口可以减少这类无意义的连接请求。

假设您的服务器处于一个公共网络环境中，经常会收到大量的随机连接尝试，其中很多是针对常见端口的。修改 SSH 端口可以减少这类不必要的干扰。

方法：修改/etc/ssh/sshd\_config中Port的参数为`Port 55520`  
**用命令行将默认的 22 端口修改为 55520**

```auto
sudo sed -i 's/^#\?Port 22.*/Port 55520/g' /etc/ssh/sshd_config

```

**重启 sshd 服务**

```auto
sudo systemctl restart sshd

```

# 六、密钥登录

在生成密钥之前，先解释一下公钥和私钥的使用。

- **私钥** ：只需要存放在 **客户端** （发起连接的机器）
- **公钥** ：需要存放在 **服务器端** （被连接的机器）

在大多数人的使用场景下，应该是使用Windows系统作为发起连接的一方。  
因此，我们生成密钥后，需要将私钥存放在Windows机器上（或SSH客户端中），并将公钥存放至被连接的机器上（也就是VPS）。

## 1. 生成密钥（非特殊需要一路回车即可）

```auto
ssh-keygen -t ed25519 -f ~/.ssh/server1 -C "user@example.com"

```

参数说明：

| 参数 | 可选值 | 说明 |
| --- | --- | --- |
| -t | ed25519【推荐】、rsa、ecdsa、dsa、ecdsa-sk | 指定密钥类型 |
| -f | | 指定输出文件名 |
| -C | | 添加注释（通常是邮箱地址） |
| -b | RSA建议2048或4096位 | 指定密钥长度 |

Tips：Windows端操作需要下载并安装Git Bash（在Git Bash内执行）

> **[Redirecting…](https://git-scm.com/downloads/win)**

## 2. 查看密钥

```auto
# 查看server1公钥内容
cat ~/.ssh/server1.pub
# 查看server1私钥内容
cat ~/.ssh/server1

```

> [!success]  
> 此时你已经成功生成公钥和私钥！

接下来我们需要在VPS端配置公钥。

## 3. 在VPS写入公钥

```auto
echo "你的公钥内容" >> ~/.ssh/authorized_keys

```

## 4. 设置正确权限

```auto
# 设置密钥相关的权限
chmod 700 ~/.ssh
# 授权密钥权限
chmod 600 ~/.ssh/authorized_keys

```

## 5. 设置 SSH，打开密钥登录功能

编辑 /etc/ssh/sshd\_config 文件，调整相关选项：

```auto
RSAAuthentication yes
PubkeyAuthentication yes

```

或直接使用命令

```auto
sudo sed -i 's/^#\?RSAAuthentication.*/RSAAuthentication yes/g' /etc/ssh/sshd_config
sudo sed -i 's/^#\?PubkeyAuthentication.*/PubkeyAuthentication yes/g' /etc/ssh/sshd_config

```

调整后重启SSH服务

```auto
service sshd restart

```

> [!success]  
> 此时你已经成功在VPS上配置公钥！

接下来我们需要在Windows端（或SSH客户端）配置私钥。

## 6. 在主控端配置私钥

### 6.1 Windows端配置

#### 6.1.1 下载并安装Git Bash

> **[Redirecting…](https://git-scm.com/downloads/win)**

### 6.1.2 手动在`C:\Users\你的用户名\.ssh\`下创建config文件（手动和命令行均可）

```auto
nano ~/.ssh/config

```

在其中添加配置内容：

```auto
Host server1
    HostName 123.123.123.123
    User root
    Port 55520
    IdentityFile C:\Users\Administrator\.ssh\id_rsa

```

备注：

| 参数名 | 备注 |
| --- | --- |
| myserver | 可自定义的别名 |
| HostName | VPS的公网IP |
| User | 登录的用户名 |
| Port | SSH端口 |
| IdentityFile | 私钥的文件地址 |

### 6.1.3 检测是否成功配置

在Git Bash中进行SSH连接

```auto
ssh server1

```

> [!success]  
> 此时应该不需要输入密码就可以直接连接！

### 6.2 SSH客户端

将私钥填入或将私钥文件拖入即可。

## 7. 限制密码登录（在确保SSH能通过密钥登录后使用！）

编辑 /etc/ssh/sshd\_config 文件，调整相关选项：

```auto
PasswordAuthentication no

```

或直接使用命令

```auto
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/g' /etc/ssh/sshd_config

```

调整后重启SSH服务

```auto
service sshd restart

```

# 七、安装 fail2ban

## 1. 安装 fail2ban

```auto
apt install fail2ban

```

## 2. 配置 fail2ban

fail2ban 的配置文件通常位于 `/etc/fail2ban/` 目录下，fail2ban 的.conf 配置文件都是可以被.local 覆盖，所以配置方式建议是添加.local 文件，不修改原来的配置文件。

```auto
nano /etc/fail2ban/jail.local

```

配置文件如下：

```auto
[DEFAULT]
#忽略的IP列表,不受设置限制（白名单）
ignoreip = 127.0.0.1

#允许ipv6
allowipv6 = auto

#日志修改检测机制（gamin、polling和auto这三种）
backend = systemd

#针对各服务的检查配置，如设置bantime、findtime、maxretry和全局冲突，服务优先级大于全局设置

[sshd]

#是否激活此项（true/false）
enabled = true

#过滤规则filter的名字，对应filter.d目录下的sshd.conf
filter = sshd

#ssh端口
port = ssh

#动作的相关参数
action = iptables[name=SSH, port=ssh, protocol=tcp]

#检测的系统的登陆日志文件
logpath = /var/log/secure

#屏蔽时间，单位：秒
bantime = 86400

#这个时间段内超过规定次数会被ban掉
findtime = 86400

#最大尝试次数
maxretry = 3

```

Ctrl+S 保存并退出

**设置开机自动启动 fail2ban**

```auto
sudo systemctl enable fail2ban

```

**重新启动 fail2ban**

```auto
sudo systemctl restart fail2ban

```

**查看 fail2ban 的状态**

```auto
sudo systemctl status fail2ban

```

**查看所有可用 jail 的状态**

```auto
fail2ban-client status

```

* * *

**感谢你的观看和点赞，你的每一个小心心都会激励我写出更多文章**

---

<div class="post-metadata">

**Author:** ![awz707](https://idcflare.com/user_avatar/idcflare.com/awz707/32/2505_2.png) [@awz707](https://idcflare.com/u/awz707)\
**Post date:** [2025 年10 月 23 日 16:01 UTC](https://idcflare.com/t/topic/12604/2 "2025-10-23T16:01:41Z")

</div>

感谢佬友分享

---

<div class="post-metadata">

**Author:** ![kip](https://idcflare.com/user_avatar/idcflare.com/kip/32/1015_2.png) [@kip](https://idcflare.com/u/kip)\
**Post date:** [2025 年10 月 23 日 16:03 UTC](https://idcflare.com/t/topic/12604/3 "2025-10-23T16:03:03Z")

</div>

感谢分享

---

<div class="post-metadata">

**Author:** ![rain](https://idcflare.com/user_avatar/idcflare.com/rain/32/5063_2.png) [@rain](https://idcflare.com/u/rain)\
**Post date:** [2025 年10 月 23 日 16:03 UTC](https://idcflare.com/t/topic/12604/4 "2025-10-23T16:03:21Z")

</div>

好贴 一年前还是萌新的我在ld看到这贴受益匪浅 :tieba_013:

---

<div class="post-metadata">

**Author:** ![Mortis](https://idcflare.com/user_avatar/idcflare.com/mortis/32/1600_2.png) [@Mortis](https://idcflare.com/u/Mortis)\
**Post date:** [2025 年10 月 23 日 16:03 UTC](https://idcflare.com/t/topic/12604/5 "2025-10-23T16:03:34Z")

</div>

感谢分享

---

<div class="post-metadata">

**Author:** ![yqyan](https://idcflare.com/user_avatar/idcflare.com/yqyan/32/3375_2.png) [@yqyan](https://idcflare.com/u/yqyan)\
**Post date:** [2025 年10 月 23 日 16:03 UTC](https://idcflare.com/t/topic/12604/6 "2025-10-23T16:03:37Z")

</div>

感谢分享 🙏

---

<div class="post-metadata">

**Author:** ![namei](https://idcflare.com/user_avatar/idcflare.com/namei/32/1740_2.png) [@namei](https://idcflare.com/u/namei)\
**Post date:** [2025 年10 月 23 日 16:04 UTC](https://idcflare.com/t/topic/12604/7 "2025-10-23T16:04:21Z")

</div>

感谢分享

---

<div class="post-metadata">

**Author:** ![Yuju](https://idcflare.com/user_avatar/idcflare.com/yuju/32/28368_2.png) [@Yuju](https://idcflare.com/u/Yuju)\
**Post date:** [2025 年10 月 23 日 16:05 UTC](https://idcflare.com/t/topic/12604/8 "2025-10-23T16:05:37Z")

</div>

TCP部分放弃了之前的bbrx，还是改用官方的，并且按照机器配置进行动态调整

---

<div class="post-metadata">

**Author:** ![GCC](https://idcflare.com/user_avatar/idcflare.com/gcc/32/4725_2.png) [@GCC](https://idcflare.com/u/GCC)\
**Post date:** [2025 年10 月 23 日 16:09 UTC](https://idcflare.com/t/topic/12604/9 "2025-10-23T16:09:49Z")

</div>

tcp调优的话，如果没遇到瓶颈最好的优化就是不调，开个bbr就差不多了，bbr也不太需要大缓冲

ssh的话，要安全其实直接把密码登录关掉就好了，这样其他的安全措施也就不太需要做

---

<div class="post-metadata">

**Author:** ![Yuju](https://idcflare.com/user_avatar/idcflare.com/yuju/32/28368_2.png) [@Yuju](https://idcflare.com/u/Yuju)\
**Post date:** [2025 年10 月 23 日 16:11 UTC](https://idcflare.com/t/topic/12604/10 "2025-10-23T16:11:28Z")

</div>

我选用的是比较温和的调试策略，需要的可以调，不需要的可以自行只开启bbr和fq。

---

<div class="post-metadata">

**Author:** ![lil](https://idcflare.com/user_avatar/idcflare.com/lil/32/12497_2.png) [@lil](https://idcflare.com/u/lil)\
**Post date:** [2025 年10 月 23 日 16:26 UTC](https://idcflare.com/t/topic/12604/11 "2025-10-23T16:26:30Z")

</div>

感谢大佬

---

<div class="post-metadata">

**Author:** ![Kimi](https://idcflare.com/user_avatar/idcflare.com/kimi/32/3042_2.png) [@Kimi](https://idcflare.com/u/Kimi)\
**Post date:** [2025 年10 月 23 日 16:29 UTC](https://idcflare.com/t/topic/12604/12 "2025-10-23T16:29:11Z")

</div>

我記得你在那邊發過，還把它做成了一個腳本。

---

<div class="post-metadata">

**Author:** ![MatsuzakaSato](https://idcflare.com/user_avatar/idcflare.com/matsuzakasato/32/19828_2.png) [@MatsuzakaSato](https://idcflare.com/u/MatsuzakaSato)\
**Post date:** [2025 年10 月 23 日 16:29 UTC](https://idcflare.com/t/topic/12604/13 "2025-10-23T16:29:36Z")

</div>

> [@Yuju](#):
>
> **一键生成你的密钥并限制密码登录**
> 
> ```auto
> wget -O key.sh https://raw.githubusercontent.com/yuju520/Script/main/key.sh && chmod +x key.sh && clear && ./key.sh
> 
> ```
> 
> **！！！注意：请牢记你生成的密钥，否则会有无法连接 SSH 的后果。！！！**

？？？？？？牢记密钥？最强大脑？

正确做法：

- 在自己的电脑上运行 ssh-keygen
- 找到`~/.ssh/ed25519.pub`
- 复制该文件的文本内容
- 追加到服务器的`~/.ssh/authorized_keys`

---

<div class="post-metadata">

**Author:** ![Yuju](https://idcflare.com/user_avatar/idcflare.com/yuju/32/28368_2.png) [@Yuju](https://idcflare.com/u/Yuju)\
**Post date:** [2025 年10 月 23 日 16:30 UTC](https://idcflare.com/t/topic/12604/14 "2025-10-23T16:30:06Z")

</div>

脚本后续会优化一下再发到这边来，还有些需要修改

---

<div class="post-metadata">

**Author:** ![nobiyou](https://idcflare.com/user_avatar/idcflare.com/nobiyou/32/1339_2.png) [@nobiyou](https://idcflare.com/u/nobiyou)\
**Post date:** [2025 年10 月 23 日 16:30 UTC](https://idcflare.com/t/topic/12604/15 "2025-10-23T16:30:13Z")

</div>

> [@Yuju](#):
>
> fail2ban

分享的很好，给佬学习

---

<div class="post-metadata">

**Author:** ![Yuju](https://idcflare.com/user_avatar/idcflare.com/yuju/32/28368_2.png) [@Yuju](https://idcflare.com/u/Yuju)\
**Post date:** [2025 年10 月 23 日 16:30 UTC](https://idcflare.com/t/topic/12604/16 "2025-10-23T16:30:30Z")

</div>

可以在终端复制呀 😂 我修改一下说明吧

---

<div class="post-metadata">

**Author:** ![Jobs](https://idcflare.com/user_avatar/idcflare.com/jobs/32/1880_2.png) [@Jobs](https://idcflare.com/u/Jobs)\
**Post date:** [2025 年10 月 23 日 16:31 UTC](https://idcflare.com/t/topic/12604/17 "2025-10-23T16:31:39Z")

</div>

mark 收藏一手

---

<div class="post-metadata">

**Author:** ![xiaoxinya](https://idcflare.com/letter_avatar/xiaoxinya/32/6_22734026db12803ebb3e059622ac3534.png) [@xiaoxinya](https://idcflare.com/u/xiaoxinya)\
**Post date:** [2025 年10 月 23 日 16:32 UTC](https://idcflare.com/t/topic/12604/18 "2025-10-23T16:32:43Z")

</div>

感谢佬友分享

---

<div class="post-metadata">

**Author:** ![aoe](https://idcflare.com/letter_avatar/aoe/32/6_22734026db12803ebb3e059622ac3534.png) [@aoe](https://idcflare.com/u/aoe)\
**Post date:** [2025 年10 月 23 日 16:33 UTC](https://idcflare.com/t/topic/12604/19 "2025-10-23T16:33:40Z")

</div>

佬，甲骨文也按这个操作吗？

---

<div class="post-metadata">

**Author:** ![MatsuzakaSato](https://idcflare.com/user_avatar/idcflare.com/matsuzakasato/32/19828_2.png) [@MatsuzakaSato](https://idcflare.com/u/MatsuzakaSato)\
**Post date:** [2025 年10 月 23 日 16:34 UTC](https://idcflare.com/t/topic/12604/20 "2025-10-23T16:34:33Z")

</div>

私钥永远不要离开设备。公钥才能到处分发。

[下一页](https://idcflare.com/t/topic/12604.md?page=2)
