免责说明
- 本文所包含的所有信息和建议仅供参考和介绍性目的。我们不对这些信息的准确性、完整性或实用性作任何明示或暗示的保证。
- 客户采取本文中提供的任何建议或指南的行动完全是基于其自己的决定和风险。我们不对您因依赖本文中提供的信息而导致的任何直接或间接损失或损害承担责任。
- 本文可能提及或推荐使用第三方脚本、工具或服务。我们不对这些第三方内容的功能性、安全性或合法性作任何声明或保证,并且不对您因使用这些内容而导致的任何问题承担责任。
- 客户需对其系统安全负有责任,并且应该根据其需求、技能和环境来决定采取哪些安全措施。本文提供的建议仅供参考,不应视为最终的、全面的安全解决方案。
- 本文所介绍的操作基于Debian和Ubuntu Linux发行版。我们无法保证这些操作适用于所有Linux发行版,因为不同的发行版可能具有不同的配置和软件包管理方式。在执行本文中提到的操作之前,请确保您理解并确认这些操作适用于您正在使用的Linux发行版。
VPS:优化、安全及最佳实践指南
常用工具安装
更新和升级Debian系统的软件包列表
sudo apt update && sudo apt upgrade
编辑器
Vim
sudo apt install vim
Nano
sudo apt install nano
网络工具
Curl
sudo apt install curl
Wget
sudo apt install wget
Net-tools
sudo apt install net-tools
系统管理工具
Htop
sudo apt install htop
Glances
sudo apt install glances
Tree
sudo apt install tree
安全工具
Fail2ban
sudo apt install fail2ban
UFW
sudo apt install ufw
版本控制工具
sudo apt install git
Web服务器
Apache2
sudo apt install apache2
Nginx
sudo apt install nginx
SSH
修改SSH默认端口
更改SSH端口是一种常见的安全措施,可以减少来自恶意用户的自动扫描攻击,默认的SSH端口22。使用nano/vim编辑ssh的配置文件:
sudo nano /etc/ssh/sshd_config
找到#Port 22
然后取消前面注释,并把22修改为任意端口。
重启ssh服务:
sudo service ssh restart
使用ssh密钥对登录
使用SSH密钥对替代传统的基于密码的SSH登录可以提供更高的安全性。密钥对由公钥和私钥组成,私钥储存在本地计算机上,而公钥则储存在服务器上。这种方式比密码更难以被破解。
您可以使用VirtFusion控制面板生成密钥对,具体操作教程可以参考:Faconhost VPS购买/使用指南 中关于VirtFusion面板使用的部分。
您同样可以自行生成密钥对并上传到您的VM来使用密钥对登录:
前置条件:您需要准备另外一台Unix/Linux设备
- 在另外一台Unix/Linux设备上生成ECDSA密钥对:
ssh-keygen -t ecdsa -b 256
将公钥复制到您的VM:
ssh-copy-id -i ~/.ssh/id_ecdsa.pub your_username@your_host
- 将
your_username
替换为您VM的用户名,若您使用的Faconhost提供的镜像,用户名为root
,your_host
为您VM的ip地址。 - 输入您的VM的用户的密码,以完成密钥的复制。
测试密钥登录
ssh -i ~/.ssh/id_ecdsa your_username@your_host
若可以成功不使用密码登录您的实例,即设置成功。
下载私钥
私钥一般会存在您另外一台Unix/Linux设备上~/.ssh/id_ecdsa
内,文件名为:id_ecdsa
,下载并妥善保存。
设置只允许密钥对登录
编辑SSH服务器的配置文件:
sudo nano /etc/ssh/sshd_config
找到行PasswordAuthentication
和PubkeyAuthentication
,修改为:
PasswordAuthentication no
PubkeyAuthentication yes
重启SSH服务
sudo service ssh restart
开启BBR
BBR(Bottleneck Bandwidth and Round-trip propagation time)是Google开发的一种网络拥塞控制算法。BBR算法基于对网络的实时测量和分析,动态地调整TCP连接的拥塞窗口大小和发送速率,以便使网络利用率达到最佳状态,并且尽量避免拥塞和排队延迟。在5.15版本之后Linux内核已内置BBR,但是默认关闭,开启方法:
编辑/etc/sysctl.conf
文件
sudo nano /etc/sysctl.conf
在文件末尾添加:
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
保存后运行以下命令使更改生效:
sysctl -p
如何开启和关闭IPv6
Faconhost均为用户提供ipv6,若客户对ipv6没需求,可以通过以下命令关闭ipv6:
编辑/etc/sysctl.conf
文件,在末尾添加:
sudo nano /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
保存后运行以下命令使更改生效:
sysctl -p
测试ipv6是否关闭:
ping6 google.com
若返回:ping6: connect: Cannot assign requested address
,表示ipv6已关闭。
若想再次开启ipv6,将上述设置更改为0,并再次运行sysctl -p
即可。
添加/扩容Swap空间
Swap空间可以作为物理内存的扩展,在系统内存不足时提供额外的内存空间。
若您的实例没有Swap虚拟内存,可以直接从第4步开始操作。
- 查看当前的swap信息
sudo swapon --show
- 关闭swap分区
sudo swapoff -v /dev/{your_swap_partition}
- 删除现有的swap分区
假设原swap分区为/dev/sdb3:
使用fdisk
删除swap分区
sudo fdisk /dev/sdb
然后输入 d
(删除),选择 3
(分区号),最后输入 w
(保存并退出)。
- 创建新的swap文件
创建1024MB Swap
sudo fallocate -l 1G /swapfile
- 设置权限和格式化swap文件
sudo chmod 600 /swapfile
sudo mkswap /swapfile
- 启用新的swap文件
sudo swapon /swapfile
验证
free -h
- 设置swap开机启动
为了确保系统在重启后仍然使用新的swap文件,需要将其添加到 /etc/fstab
文件中。
sudo nano /etc/fstab
在文件的末尾添加以下行:
/swapfile none swap sw 0 0
安装和使用fail2ban
Fail2Ban是一款防止暴力破解攻击的工具,它监视系统日志文件并根据预设的规则禁止恶意IP地址的访问。
- 安装fail2ban
sudo apt install fail2ban
- 启动和开机自动运行fail2ban
systemctl start fail2ban
systemctl enable fail2ban
- 检查fai2ban运行状态
systemctl status fail2ban
您同时可以自定义fail2ban配置,比如:三次登录失败后会自动封禁IP地址。
sudo nano /etc/fail2ban/jail.local
末尾添加
[sshd]
enabled = true
maxretry = 3
重启fail2ban服务
sudo systemctl restart fail2ban
常用工具及脚本
MTR
MTR是一款跨平台的网络诊断工具,可用于追踪数据包在网络中的路径,并测量到达每个节点的延迟和丢包率,MTR会显示每个节点的延迟(或RTT,Round-Trip Time)和丢包率。若您在使用Faconhost VPS过程中遇到任何网络问题,请务必向我们NOC提供双程MTR(去+回)。
- 安装MTR
sudo apt-get install mtr
如果您本地是Windows可以安装WinMTR,官方网站:https://winmtr.net/
- 使用MTR
在shell中输入mtr
命令,后跟您想要追踪的目标主机的域名或IP地址。
mtr demo.faconhost.com
MTR会开始向目标主机发送数据包,并显示每一跳的延迟和丢包率。您可以使用Ctrl+C
停止MTR的运行。同时,您可以使用mtr -c <count>
命令设置运行次数,mtr -r
命令显示实时的路由跟踪信息,以及mtr -n
命令禁用DNS解析。
查看CPU、内存、磁盘、进程、网络运行状况指令
top
top
是一个常用的Linux/Unix系统命令,用于显示系统中当前运行的进程的动态信息,类似于Windows任务管理器。
top
Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie
- Tasks: 表示当前系统中总共存在的进程数量。
- total: 表示所有进程的总数。
- running: 表示正在运行(即正在使用CPU资源)的进程数量。
- sleeping: 表示休眠状态(即等待IO或其他事件)的进程数量。
- stopped: 表示被暂停的进程数量,通常由于接收到了信号而被挂起。
- zombie: 表示僵尸进程的数量,即已经终止但父进程尚未清理的进程。僵尸进程占用了系统资源,但不再执行任何操作。
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
- %Cpu(s): 表示CPU的利用率。
- us: 表示用户空间程序使用CPU的时间百分比。也就是用户程序所消耗的CPU时间占总CPU时间的百分比。
- sy: 表示系统空间程序使用CPU的时间百分比。也就是系统内核所消耗的CPU时间占总CPU时间的百分比。
- ni: 表示调整过优先级的进程(nice值)使用CPU的时间百分比。这些进程的优先级被降低,但仍能够占用CPU。
- id: 表示CPU空闲时间百分比。也就是CPU处于空闲状态的时间占总CPU时间的百分比。
- wa: 表示CPU等待I/O完成的时间百分比。当CPU等待IO操作完成时,会增加这个百分比。
- hi: 表示硬中断的时间百分比。硬中断是由硬件设备引起的,需要CPU来处理。
- si: 表示软中断的时间百分比。软中断是由内核软件引起的,不需要CPU来处理。
- st: 表示被虚拟机偷取的CPU时间百分比。当虚拟机宿主机负载较高时,虚拟机可能会被暂停以释放CPU资源,这会导致这个百分比增加。
MiB Mem : 437.5 total, 95.9 free, 151.9 used, 189.7 buff/cache
MiB Swap: 1024.0 total, 1023.0 free, 1.0 used. 273.9 avail Mem
- MiB Mem: 表示物理内存(RAM)的使用情况。
- total: 表示系统总共的物理内存大小,单位为MiB(兆字节)。
- free: 表示系统当前可用的物理内存大小,单位为MiB。
- used: 表示系统当前已经被使用的物理内存大小,单位为MiB。
- buff/cache: 表示被用作缓存和缓冲区的内存大小,单位为MiB。缓存是被系统用来加速对数据的访问,而缓冲区是被系统用来缓冲I/O操作的结果。
- MiB Swap: 表示交换空间(Swap)的使用情况。
- total: 表示系统总共的交换空间大小,单位为MiB。
- free: 表示系统当前可用的交换空间大小,单位为MiB。
- used: 表示系统当前已经被使用的交换空间大小,单位为MiB。
- avail Mem: 表示系统当前可用的内存大小,单位为MiB。这个值是根据物理内存和交换空间计算得出的,表示系统当前可以使用的内存总量。
df -h
df -h
是一个常用的命令,用于显示文件系统的磁盘空间使用情况。这个命令会列出已挂载的文件系统的相关信息,包括文件系统的挂载点、总容量、已使用空间、剩余空间和使用率等。
df -h
- Filesystem:文件系统的设备或卷名。
- Size:文件系统的总容量。
- Used:文件系统已经使用的空间。
- Avail:文件系统的剩余可用空间。
- Use%:文件系统的使用率。
- Mounted on:文件系统的挂载点。
您还可以使用 fdisk
或 parted
查看磁盘分区信息。
free -m
free -m
是一个常用的命令,用于显示系统的内存使用情况。这个命令会列出系统当前的内存和交换空间(swap)的相关信息,包括总内存、已使用内存、剩余内存和内存缓存等。
- total:物理内存总量。
- used:已使用的物理内存量。
- free:剩余的物理内存量。
- shared:共享内存的量。
- buff/cache:用作缓存的内存量。
- available:估计可用的内存量。该值计算为 free + buff/cache,并且考虑了系统调度进程所需的内存量。
netstat
netstat
是一个用于显示系统网络状态的命令行工具。它可以显示有关网络连接、路由表、接口统计信息等内容。
-
显示所有活动的网络连接:
运行以下命令将显示系统上所有活动的网络连接及其状态。netstat -ant
-a
表示显示所有连接,-n
表示以数字形式显示IP地址和端口号,-t
表示显示TCP连接,-u
表示显示UDP连接。 -
显示监听的端口:
运行以下命令将显示系统上正在监听的所有端口及其状态。netstat -lnt
-l
表示显示监听的端口,-n
表示以数字形式显示IP地址和端口号,-t
表示显示TCP连接。 -
显示路由表:
运行以下命令将显示系统的路由表。netstat -rn
-r
表示显示路由表,-n
表示以数字形式显示IP地址。 -
显示网络接口信息:
运行以下命令将显示系统的网络接口及其状态。netstat -i
-i
表示显示网络接口信息。
uptime
uptime
是一个用于显示系统的运行时间以及平均负载(load average)的命令。执行 uptime
命令将会输出系统当前的运行时间以及平均负载情况。
日志
日志文件会随着时间的推移逐渐增长,占用磁盘空间,同时会影响性能,当日志文件增长过大时,处理和检索日志数据的效率可能会降低,所以定期清理日志是有必要的。
- 删除目前所有的系统日志
sudo rm -rf /var/log/journal/*
- 清理 systemd 日志并限制日志保留的时间为一周。
sudo journalctl --vacuum-time=1w
- 限制日志保存的最大容量为256M
sudo journalctl --vacuum-size=256M
系统信息与性能测试
查看 cpu和环境等信息
- 查看系统信息
cat /etc/os-release
- 查看linux 内核
uname -a
- 查看CPU信息
cat /proc/cpuinfo
- 查看所有环境变量
env
性能
GitHub项目地址:https://github.com/kdlucas/byte-unixbench
安装步骤:
依赖:
sudo apt install -y git
sudo apt install make
sudo apt install build-essential
克隆项目:
git clone https://github.com/kdlucas/byte-unixbench.git
进入下载的目录:
cd /byte-unixbench/UnixBench/
执行 make
命令来编译 UnixBench,并生成可执行文件 Run
。
make
使用 UnixBench:
./Run
测试完成后,UnixBench 会生成一个结果文件,文件名为 results
。你可以查看这个文件来获取测试结果。
GitHub项目地址:该脚本自动执行业界最好的基准测试工具。其中包括检查服务器关键区域性能的多项测试:使用fio 的磁盘性能、使用iperf3的网络性能以及使用Geekbench的 CPU/内存性能。
运行:
curl -sL yabs.sh | bash
或者
wget -qO- yabs.sh | bash
您还可以选择跳过某项测试,或者选择Geekbench 4/5/6 等,比如该项目iperf 测试并不适合国内用户,推荐跳过:
curl -sL yabs.sh | bash -s -- -i
标志 | 描述 |
---|---|
-b | 强制使用存储库中的预编译二进制文件,而不是使用本地包 |
-f/-d | 禁用fio(磁盘性能)测试 |
-i | 禁用iperf(网络性能)测试 |
-g | 禁用Geekbench(系统性能)测试 |
-n | 跳过网络信息查询并打印结果 |
-h | 打印帮助消息,包括用法、检测到的标志和本地包(fio/iperf)状态 |
-r | 减少iperf位置的数量(Scaleway/Clouvider LON+NYC)以减少带宽使用 |
-4 | 运行Geekbench 4测试并禁用Geekbench 6测试 |
-5 | 运行Geekbench 5测试并禁用Geekbench 6测试 |
-9 | 运行Geekbench 4和5测试,而不是Geekbench 6测试 |
-6 | 如果使用了以下任何一个标志:-4、-5或-9,则重新启用Geekbench 6测试(-6标志必须放在最后,以免被覆盖) |
-j | 在屏幕上打印结果的JSON表示形式 |
-w \<filename> | 将JSON结果写入文件,使用提供的文件名 |
-s \<url> | 将结果的JSON表示发送到指定的URL |
结果:
Basic System Information:
---------------------------------
Uptime : 0 days, 0 hours, 3 minutes
Processor : AMD Ryzen 9 7900X 12-Core Processor
CPU cores : 2 @ 4691.164 MHz
AES-NI : ✔ Enabled
VM-x/AMD-V : ✔ Enabled
RAM : 1.9 GiB
Swap : 0.0 KiB
Disk : 29.9 GiB
Distro : Debian GNU/Linux 12 (bookworm)
Kernel : 6.1.0-9-amd64
VM Type : KVM
IPv4/IPv6 : ✔ Online / ❌ Offline
fio Disk Speed Tests (Mixed R/W 50/50) (Partition /dev/sdb3):
---------------------------------
Block Size | 4k (IOPS) | 64k (IOPS)
------ | --- ---- | ---- ----
Read | 605.31 MB/s (151.3k) | 4.47 GB/s (69.9k)
Write | 606.91 MB/s (151.7k) | 4.50 GB/s (70.3k)
Total | 1.21 GB/s (303.0k) | 8.98 GB/s (140.3k)
| |
Block Size | 512k (IOPS) | 1m (IOPS)
------ | --- ---- | ---- ----
Read | 5.39 GB/s (10.5k) | 5.09 GB/s (4.9k)
Write | 5.67 GB/s (11.0k) | 5.43 GB/s (5.3k)
Total | 11.06 GB/s (21.6k) | 10.53 GB/s (10.2k)
Geekbench 6 Benchmark Test:
---------------------------------
Test | Value
|
Single Core | 2928
Multi Core | 5157
Full Test | https://browser.geekbench.com/v6/cpu/4443852
结尾
本文旨在为已购买和即将购买Faconhost服务的客户提供一些小小的使用帮助,以更好地保护和优化您的VPS,提高其性能和安全性,从而确保您的业务能够顺利运行。我们欢迎您随时指正文章中可能存在的错误,并且若您有任何更好的建议,也欢迎与我们分享!
我们期待着为您提供优质的Faconhost服务,并助您取得更好的在线体验!
原创文章,作者:Faconhost,如若转载,请注明出处:https://blog.faconhost.com/faconhost-vps-advanced-optimization-tutorial-and-common-linux-scripts/
评论列表(3条)
推荐btop,感觉可以作为htop/glances的平替
@btop:感谢您的留言,小编会做测试后添加哒。
[…] Faconhost–VPS进阶优化教程和常用的Linux脚本 […]