VPS 的默认配置(常用)

手里的 vps 越来越多了,常用的配置的越来越复杂,专门开一篇,记录下每次重装系统时,几乎都会用到的命令。

修改 root 密码(对于很多人来说可能不需要设置 root 密码,据说 root 用户没有密码更安全呢)

sudo passwd root

切换到 root 权限以及环境。

su -

更新库,安装常用软件

apt update && apt full-upgrade -y && apt autoremove && apt autoclean

apt install sudo htop git wget curl screen emacs-nox net-tools -y

开启 BBR,root 账户执行

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf

echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

sysctl -p

检查 bbr 状态

sysctl net.ipv4.tcp_congestion_control | grep bbr

下面的命令不需要 root 权限了,如果你也进入了 root 环境,记得退出来。

exit

设置 git 账户信息,指定 git 的编辑器。

git config --global user.name "acytoo" # 你的用户名

git config --global user.email [email protected] # 你的邮箱

git config --global core.editor emacs

安装 zsh,oh-my-zsh 框架

sudo apt install zsh

sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

安装两个小玩具

sudo apt install toilet lolcat

设置 bullet-train 主题

wget https://raw.githubusercontent.com/caiogondim/bullet-train.zsh/master/bullet-train.zsh-theme -O $ZSH/themes/bullet-train.zsh-theme

emacs ~/.zshrc

将下列配置写入到 ~/.zshrc

export PATH=$HOME/bin:/usr/local/bin:$PATH
export ZSH="$HOME/.oh-my-zsh"

ZSH_THEME="bullet-train"
BULLETTRAIN_PROMPT_ORDER=(
    time
    status
    custom
    context
    dir
    virtualenv
    git
    cmd_exec_time
)

DISABLE_AUTO_UPDATE="true"

plugins=(git)

export EDITOR='emacs'

alias lg="ls | grep"
alias rt="move_to_trash"

move_to_trash () {
    mv "[email protected]" $HOME/.trash
}

ZSH_CACHE_DIR=$HOME/.cache/oh-my-zsh
if [[ ! -d $ZSH_CACHE_DIR ]]; then
  mkdir $ZSH_CACHE_DIR
fi

source $ZSH/oh-my-zsh.sh
echo "Hi, Acytoo" | toilet | lolcat

应用 zsh 配置

source ~/.zshrc

修改默认 ssh 端口

sudo nano /etc/ssh/sshd_config

别急着删除默认的端口号,在默认端口号下面添加一个新的端口号,试试能不能连接,能正常连接,再删除默认端口号。

Port 22
Port 23456 # 设置一个端口号

然后重启 sshd 进程,应用修改

sudo systemctl restart sshd

通过新端口号连接,本地执行

ssh [email protected] -p 23456

每次修改 ssh 端口号,都要先能通过新端口号连接,再删除旧端口号,避免端口占用导致奇奇怪怪的问题。

安装 ufw 管理防火墙

sudo apt install ufw

防火墙允许 ssh

sudo ufw allow 23456 # 你的 ssh 连接端口

开启防火墙

sudo ufw enable

开启防火墙后,记得有新的服务要开放相对应的端口。

添加 swap 前,用 free -h 查看你是否有 swap。swap 不是必备的分区,尤其是现在的机器内存都比较大了,很少真正需要到 swap。

添加 swap 。这个是针对小内存又默认没有 swap 分区小机器准备的。但是要注意,swap 分区频繁写入删除的话,算 Disk IO,有的 VPS 提供商可能会因此停止服务。

添加一个1024M的 swap 文件,修改其权限,把这个文件变成 swap,并激活 swap

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 status=progress

sudo chmod 600 /swapfile

sudo mkswap /swapfile

sudo swapon /swapfile

上面的命令执行完毕,检查 swap,会发现 1024M 大小的 swap:free -h

如果一切正常,将配置写入分区表,每次开机自动配置。

sudo nano /etc/fstab

粘贴下面一行到文件末尾

/swapfile none swap defaults 0 0

系统中有一个配置,是使用 swap 的意愿程度,这个数值越大,系统越愿意使用 swap。 使用cat /proc/sys/vm/swappiness查看当前的意愿程度,默认是 60.

我会调低这个数值,免得被主机提供商以长期高 IO 为由停止服务。

sudo sysctl vm.swappiness=30

内存低于 512M 的机器,其网络性能可能受限于默认的低 buffer size,修改/etc/sysctl.conf[1]

sudo nano /etc/sysctl.conf

在文件末尾添加下面四行。

net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216

然后应用新配置。

sudo sysctl -p 

有些机器会自动添加 ipv6 地址,不通的ipv6地址,除了设置为 static 以外,还可以设置取消自动 ipv6: 修改/etc/sysctl.conf,添加

net.ipv6.conf.eth0.autoconf=0
net.ipv6.conf.eth0.accept_ra=0

然后应用配置sudo sysctl -p

上面的两行第一行取消了 eth0 的自动配置公网 ipv6,第二行取消了 eth0 的自动配置本地 ipv6 (fe80..)

如果想取消所有 interface 的自动配置,可以用[2]

sudo sysctl -w net.ipv6.conf.all.autoconf=0
sudo sysctl -w net.ipv6.conf.all.accept_ra=0

此外,Debian 设置静态 ip 的一个例子:

sudo nano /etc/network/interfaces
auto lo
 iface lo inet loopback

auto eth0
 iface eth0 inet static
  address 111.222.123.123
  gateway 111.222.123.193
  netmask 255.255.255.0
  dns-nameservers 8.8.8.8 1.1.1.1
 iface eth0 inet6 static
  address 2601:6400:30:cc1b::1234
  gateway 2601:6400:30::1
  netmask 48
  dns-nameservers 2001:4860:4860::8888

本文配置来自 Debian 文档, Arch Wiki,网络博客等。针对特殊任务优化,可以搜索 Linux tuning。