新开机一台服务器之后应该做什么
本文绝大部分内容参考自 新开机一台 Linux 服务器之后应该做的 N 件事和保护好你的小鸡!保姆级服务器安全教程! 并结合本人的实践对一些内容进行增改。
Step 一. ip及服务器测评
功能
- 系统基础信息查询,IP基础信息并发查询:basics、gostun
- CPU 测试:cputest,支持 sysbench(lua/golang版本)、geekbench、winsat
- 内存测试:memorytest,支持 sysbench、dd、winsat、mbw、stream
- 硬盘测试:disktest,支持 dd、fio、winsat
- 流媒体平台解锁测试并发查询:UnlockTests,逻辑借鉴 RegionRestrictionCheck 等
- IP 质量/安全信息并发查询:二进制文件编译至 securityCheck
- 邮件端口测试:portchecker
- 上游及回程路由线路检测:借鉴 zhanghanyun/backtrace,二次开发至 oneclickvirt/backtrace
- 三网路由测试:基于 NTrace-core,二次开发至 nt3
- 网速测试:基于 speedtest.net 和 speedtest.cn 数据,开发至 oneclickvirt/speedtest
- 三网 Ping 值测试:借鉴 ecsspeed,二次开发至 pingtest
- 支持root或admin环境下测试,支持非root或非admin环境下测试,支持离线环境下进行测试,暂未支持无DNS的在线环境下进行测试
一键命令(!一键命令将默认不安装依赖,默认不更新包管理器,默认非互动模式)
国际用户无加速:
export noninteractive=true && curl -L https://raw.githubusercontent.com/oneclickvirt/ecs/master/goecs.sh -o goecs.sh && chmod +x goecs.sh && ./goecs.sh install && goecs
国际/国内使用 CDN 加速:
export noninteractive=true && curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/ecs/master/goecs.sh -o goecs.sh && chmod +x goecs.sh && ./goecs.sh install && goecs
国内用户使用 CNB 加速
export noninteractive=true && curl -L https://cnb.cool/oneclickvirt/ecs/-/git/raw/main/goecs.sh -o goecs.sh && chmod +x goecs.sh && ./goecs.sh install && goecs
Step 二. 添加服务器到哪吒探针
*可选,如果有多台服务器强烈推荐
哪吒探针是一款开源、轻量、易用的服务器监控工具,支持多服务器状态监控、网页/端口/SSL 证书检测,并提供历史延迟图表和故障告警,可通过 Telegram、邮件、微信等方式通知。
Step 三~ Step N. 开始折腾
安全相关
正如我们所知,任何人只需要知道【IP 地址】+【端口】+【用户名】+【密码】这四个要素,就能登录你的 VPS 服务器。那很显然,这四要素的安全就是我们要防护的底线。我们来逐一分析:
【IP 地址】:恶意脚本会随机尝试和扫描 IP 段,可以简单认为是公开信息、无法隐藏 【端口】:如果使用默认端口,那么【端口 = 22】 【用户名】:如果使用默认用户,那么【用户名 = root】 【密码】:密码不存在默认值,一定是由 VPS 后台随机生成或由你自行设置的。也就是说,如果你的服务器都是默认设置,则四要素中的三个已经是已知的,那么你整个服务器的安全,就全部寄托在一串小小的密码上了。
DD 纯净系统(可选)
大厂公有云一般都会在服务器系统镜像中添加监控进程,不仅会记录用户行为,还会导致额外的内存和性能占用(例如腾讯云会在实例上安装主机安全客户端和自动化助手)。此外,厂商提供的标准系统镜像,不一定有我们需要的。
DD 系统涉及的操作十分复杂,所以我这里推荐使用一键脚本
- NodeSeek 上的一键重装脚本
- Debian 网络重装脚本(仅支持Debian)
- 科技lion一键脚本
更新安装包的索引和软件
任何涉及到安装的操作之前,先更新一下我们安装包的索引,可以的话,顺便更新一下软件。这本身也是安全的一部分,新的软件意味着更少的漏洞。
apt update # 更新软件包索引
apt upgrade # 升级已安装的软件
修改默认 22 端口
nano编辑器的基本用法
nano 文件名:编辑文件
Ctrl+O + 回车:保存
Ctrl+X:退出
Ctrl+K / Ctrl+U:剪切 / 粘贴行
Ctrl+W:搜索
1.使用nano编辑器修改 /etc/ssh/sshd_config 文件
nano /etc/ssh/sshd_config2.找到文件中的 Port 22(注意千万不要先删除或注释掉该代码)
3.在下面添加 Port 要修改的端口号,保存文件
4.确认防火墙或控制面板安全组放行端口
5.使用systemctl restart sshd命令重启 sshd 服务,或者使用 reboot 命令直接重启服务器systemctl restart sshd 或 reboot6.如果使用新端口登录成功,则此时可以删除或注释掉原来的端口
注意:为了保证你不会失联,请不要关闭当前的ssh登录窗口!而是另外开一个窗口来测试!
使用复杂的密码
如果你想给当前的用户设置重新设置一个密码,那么可以到1password,生成一个复杂的密码,当作你服务器的密码。
passwd
新建普通用户
新增一个用户并设定登录密码
adduser username
将 username 替换为你想要的用户名(例如 alice)。
执行命令后,根据提示操作即可。请务必设置一个用户密码(别忘记设置密码时你时看不到 ****** 的)。之后系统会询问你一些用户的附加信息,这些就可以无视,一路回车即可。
安装sudo功能
apt update && apt install sudo #更新包索引并安装 sudo
把username用户加入sudo名单里,让他有资格借用root的神力
visudo
在 User Privilege Specification 下加入一行 username ALL=(ALL) NOPASSWD: ALL 即可
注:NOPASSWD这个设置,它的意思是vpsadmin用户临时使用root权限时,不用额外输入密码。
如果你希望遵守传统习惯、每次使用sudo时需要输入密码,那么这一行改成 username ALL=(ALL:ALL) ALL 即可。
禁止root登陆
注:如果你想使用腾讯云或阿里云控制台提供的远程连接功能,并允许 root 登录,务必至少采取以下安全措施之一:
使用高强度的复杂密码,并定期更换;
推荐使用 SSH 密钥登录;
在不需要通过 SSH 连接服务器时,通过防火墙临时禁用 SSH 端口(默认 22 端口),以减少暴露风险。
1.使用nano编辑器修改/etc/ssh/sshd_config 文件
nano /etc/ssh/sshd_config
2.找到PermitRootLogin Yes这一项,然后把它后面的设定值改为no即可。
注:
| 配置值 | 含义 |
|---|---|
| yes | 允许 root 使用任何方式登录(包括密码) |
| no | 完全禁止 root 登录 |
| prohibit-password / without-password | 允许 root 登录,但仅限密钥等非密码方式 |
3.重启 ssh 服务,让变更生效。
sudo service sshd restart
注意:为了保证你不会失联,请不要关闭当前的ssh登录窗口!而是另外开一个窗口来测试
4.下次通过远程登录,root用户已无法连接。
ssh 用户名@你的服务器IP -p 端口
使用密钥登录
本文以 RSA 密钥举例,是因为 RSA 密钥在各种设备、各种 SSH 客户端中有广泛悠久的支持历史,且目前依然能提供够用的安全性。但它绝非唯一选择。
其他的常见密钥还有:
**·**DSA - 已经从数学层面被证明不安全,所以永远不要用它
**·**ECDSA - 密钥小安全性高,但其算法被指留有 NSA 的后门,如果你的 VPS 上有值得 NSA 关注的东西就不要用它
**·**Ed25519 - 这是一个与 ECDSA 十分类似的算法,故具有相似的性能优势。同时其文档全部公开,所以普遍认为无后门
所以,如果你的设备和软件都支持的话,我建议优先选择 Ed25519 密钥。
1.打开本地终端(Windows 可用 PowerShell 或 WSL):
# ssh-keygen -t rsa -b 4096 -C "<CLIENT-NAME>"
ssh-keygen -t rsa -b 4096 -C "myvps"
注:
①.-t rsa -b 4096:密钥算法(若系统支持,推荐用 -t ed25519)
②.-C:添加注释(可选,通常写邮箱或用途)
③.运行命令后生成
id_rsa:生成的私钥,保留在电脑即可。id_rsa.pub:生成的公钥,打开后,复制内容,后文部署到服务器上。
④.ssh 是隐藏目录,在文件管理器中可能需要开启“显示隐藏文件”才能看到,默认 .ssh 路径 C:\Users\<用户名>\.ssh
2.在服务器上先在家目录下,创建一个.ssh的文件夹
mkdir -p ~/.ssh
3.之后,进入.ssh文件夹内,并使用nano创建并编辑authorized_keys文件:
cd ~/.ssh # 进入当前用户的 .ssh 目录
nano authorized_keys # 使用 nano 创建并编辑 authorized_keys 文件
4.粘贴公钥(id_rsa.pub)即可并保存并退出
5.修改 authorized_keys 文件权限为 600 (仅所有者可读可写)
chmod 600 ~/.ssh/authorized_keys
6.编辑ssh配置文件
sudo nano /etc/ssh/sshd_config #搜索PasswordAuthentication,把yes改成no
安装UFW防火墙
如果你用大厂的服务器,在控制面板里的防火墙设计及可
1.设置ufw使用默认值
sudo ufw default deny incoming
sudo ufw default allow outgoing
2.允许SSH连接
sudo ufw allow 端口/tcp comment 'SSH'
3.允许http连接
sudo ufw allow http
4.允许https连接
sudo ufw allow https
5.启动ufw防火墙
sudo ufw enable
6.查看ufw防火墙状态
sudo ufw status
7.如何删除一条规则
①用于查看UFW防火墙当前规则列表,并为每条规则显示编号。
sudo ufw status numbered
②删除一条规则
sudo ufw delete 对端口的编号
8.重载配置
sudo ufw reload
禁止Ping
sudo nano /etc/ufw/before.rules
搜索:echo-request,把ACCEPT改成DROP

禁止暴力破解
1.安装Fail2ban
sudo apt update && sudo apt install fail2ban
2.复制一份配置文件
cd /etc/fail2ban # 进入fail2ban目录
sudo cp fail2ban.conf fail2ban.local # 复制一份配置文件
3.打开刚才复制配置文件
cd /etc/fail2ban # 进入fail2ban目录(如果还没进入fail2ban目录)
sudo nano fail2ban.local # 打开fail2ban.local
4.加入一个配置
[sshd]
enable = true
port = 9753 # 注意改成自己对应的端口
filter =sshd
logpath = /var/log/auth.log
maxretry = 3 # 失败登录超过 3 次,就会被封禁
bantime = -1 # 封禁时间(单位:秒)-1 表示 永久封禁 600 → 封 10 分钟 86400 → 封 1 天

系统优化相关
创建 Swap 分区
输入命令即可执行一键脚本
wget https://www.superbin.cc/Shell/swap.sh && bash swap.sh
或参考这编文章 Swap分区
如果机器硬盘经常用不满,可以这样设置RAM ≤ 2GB,Swap 设置 4GB,RAM > 2GB,Swap 设置 8GB。
或参考Red Hat 官方给出的配置建议
修改 TCP 拥塞控制算法为 BBR
网上有不少「一键开启 BBR」的脚本,但是有些脚本可能会涉及到修改内核。这里提供一种无需修改内核开启 BBR 的方法 (要求 KVM 虚拟化且 Linux 内核高于 4.9)。
#内核版本高于 4.9 就行。
uname -r
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
#执行下面命令,如果结果中带有bbr,则证明你的内核已开启bbr。
sysctl net.ipv4.tcp_available_congestion_control
