购买VPS主机到手后的一些操作


因为最近在重构博客,然后就测试和弄了一些主机。稍微记录下拿到手后一般都要进行的操作。
我一般选择 Debian 12 或者 11 系统。


SSH 登录端口相关

修改SSH的连接方式,这个需要根据你的主机运营方来决定。
端口:一般是 22 ,但有的运营商默认是禁用 22 端口的。这样的话你就要现在 VNC 上面进行操作了,一般都是在你的主机管理页面上。或者发工单给运营商请求开启 22 端口。
登录方式:有的运营商会默认禁用密码登录,给你 SSH 密钥。具体也需要根据不同情况来决定。
默认你已经成功登录进了系统。
先备份下 SSH 登录配置

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

编辑sshd_config,如果没有 nano 用 vim

nano /etc/ssh/sshd_config

里面会有一行注释

#Port 22

删除#用来取消注释,并将22换成你喜欢的端口号,1024-65535之间,最好选高于10000,的比如23333

重启sshd服务

systemctl restart ssh

不要关闭当前窗口会话,新建一个会话,填你的IP,新端口,测试连接
万一不行的话还能用旧的窗口来救,去官方网页控制台(VNC)也能救。否则真有可能会寄(乐)


SSH 密钥登录相关

一般来说为了安全,我们选择使用密钥登录而不是密码登录,防止被暴力破解。
这一般分为两部分,

  • 私钥:极其重要,不要公开给任何人,这是用来连接到你服务器时需要的,如果其他人持有可直接进入你的主机
  • 公钥:存放在你服务器里面的部分。

首先先生成公钥和私钥,你可以在你的电脑上安装 git bash 来进行,在你的主机上操作也可以,但你得想办法把私钥弄下来(FTP)。

ssh-keygen -t ed25519 -f ~/.ssh/server1 -C "[email protected]"

如果没有也可以使用一些软件来生成,比如Bitwarden。但请注意软件或者网页的来源。
在你的电脑上生成密钥后,你需要将公钥写入到你的主机里面。一般来说 .pub 的文件是公钥 另一个就是私钥了。

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

设置正确的权限

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

设置 SSH ,打开密钥登录功能

nano /etc/ssh/sshd_config

找到下面的内容修改成yes

PubkeyAuthentication yes

重启 SSH 服务

systemctl restart ssh

私钥的设置根据你自己使用的客户端来自行导入即可。之后尝试使用密钥的方式登录测试。

关闭密码登录。
在确保 SSH 能通过密钥登录后再操作!
一样的编辑上面的 sshd_conf 文件

PasswordAuthentication no

重启 SSH 服务


系统基本设置

更新软件库

apt update -y && apt upgrade -y

更新安装必备软件

apt install sudo curl wget nano vim -y

sudo更新的时候,如果你不知道你在做什么的话,最好选择 N ,不要让他覆盖。

更改时区(可选)

sudo timedatectl set-timezone Asia/Shanghai

查看当前时区

timedatectl

如果看到NTP service: active则代表时间同步已经启动了,若没启动则需要手动开启

# 启用自动时间同步 
timedatectl set-ntp true

安装 docker

懒人脚本版一键脚本

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

国内访问不了的话增加--mirror Aliyun参数

具体可以参考这里:https://github.com/docker/docker-install/

官方安装流程

官方文档:https://docs.docker.com/engine/
Debian的安装流程:https://docs.docker.com/engine/install/debian/

加入公钥和 apt 源

# Add Docker's official GPG key:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

这里不介绍设置镜像了,懒.jpg
开始安装 docker

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

安装完后查看下版本

docker -v

安装 ufw 和 ufw docker

安装 ufw

apt install -y ufw

重要!添加你的 SSH 端口号添加到规则中!否则后面 SSH 无法连接!

ufw allow 23333/tcp

开启 ufw

ufw enable #这里会在启动时询问关于SSH连接会被中断,输入y
ufw status #这里看到 23333/tcp ALLOW 就是配置成功了

安装 ufw docker

因为 ufw 不兼容 docker,所以需要额外处理,否则 ufw 无法阻拦公网访问 docker 容器的端口。
教程地址,点击跳转

目前新的解决方案只需要修改一个 UFW 配置文件即可,Docker 的所有配置和选项都保持默认。

修改 UFW 的配置文件 /etc/ufw/after.rules,在最后添加上如下规则:

# BEGIN UFW AND DOCKER
*filter
:ufw-user-forward - [0:0]
:ufw-docker-logging-deny - [0:0]
:DOCKER-USER - [0:0]
-A DOCKER-USER -j ufw-user-forward

-A DOCKER-USER -m conntrack --ctstate RELATED,ESTABLISHED -j RETURN
-A DOCKER-USER -m conntrack --ctstate INVALID -j DROP
-A DOCKER-USER -i docker0 -o docker0 -j ACCEPT

-A DOCKER-USER -j RETURN -s 10.0.0.0/8
-A DOCKER-USER -j RETURN -s 172.16.0.0/12
-A DOCKER-USER -j RETURN -s 192.168.0.0/16

-A DOCKER-USER -j ufw-docker-logging-deny -m conntrack --ctstate NEW -d 10.0.0.0/8
-A DOCKER-USER -j ufw-docker-logging-deny -m conntrack --ctstate NEW -d 172.16.0.0/12
-A DOCKER-USER -j ufw-docker-logging-deny -m conntrack --ctstate NEW -d 192.168.0.0/16

-A DOCKER-USER -j RETURN

-A ufw-docker-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW DOCKER BLOCK] "
-A ufw-docker-logging-deny -j DROP

COMMIT
# END UFW AND DOCKER

旧版留档:

# BEGIN UFW AND DOCKER
*filter
:ufw-user-forward - [0:0]
:ufw-docker-logging-deny - [0:0]
:DOCKER-USER - [0:0]
-A DOCKER-USER -j ufw-user-forward

-A DOCKER-USER -j RETURN -s 10.0.0.0/8
-A DOCKER-USER -j RETURN -s 172.16.0.0/12
-A DOCKER-USER -j RETURN -s 192.168.0.0/16

-A DOCKER-USER -p udp -m udp --sport 53 --dport 1024:65535 -j RETURN

-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 192.168.0.0/16
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 10.0.0.0/8
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 172.16.0.0/12

-A DOCKER-USER -j RETURN

-A ufw-docker-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW DOCKER BLOCK] "
-A ufw-docker-logging-deny -j DROP

COMMIT
# END UFW AND DOCKER

然后重启 UFW,sudo systemctl restart ufw。现在外部就已经无法访问 Docker 发布出来的任何端口了,但是容器内部以及私有网络地址上可以正常互相访问,而且容器也可以正常访问外部的网络。可能由于某些未知原因,重启 UFW 之后规则也无法生效,请重启服务器。

如果希望允许外部网络访问 Docker 容器提供的服务,比如有一个容器的服务端口是 80。那就可以用以下命令来允许外部网络访问这个服务:

ufw route allow proto tcp from any to any port 80

这个命令会允许外部网络访问所有用 Docker 发布出来的并且内部服务端口为 80 的所有服务。

请注意,这个端口80是容器的端口,而非使用-p 0.0.0.0:8080:80选项发布在服务器上的8080端口。

如果有多个容器的服务端口为80,但只希望外部网络访问某个特定的容器。比如该容器的私有地址为172.17.0.2,就用类似下面的命令:

ufw route allow proto tcp from any to 172.17.0.2 port 80

如果一个容器的服务是 UDP 协议,假如是 DNS 服务,可以用下面的命令来允许外部网络访问所有发布出来的 DNS 服务:

ufw route allow proto udp from any to any port 53

同样的,如果只针对一个特定的容器,比如 IP 地址为172.17.0.2

ufw route allow proto udp from any to 172.17.0.2 port 53

一些测试(可选)

融合怪 shell 版

可以跑个融合怪,但请注意,融合怪测试会消耗不少的流量,有些厂商在流量使用了5%-10%的话就不提供退款服务了。

curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh

网络质量测试

bash <(curl -Ls Net.Check.Place) -4

ip 质量测试

bash <(curl -Ls IP.Check.Place)

融合怪 go 版

融合怪的 shell 版本已经进入归档阶段,仅保证维护不再更新任何功能了,现在新版是 go 的版本,泛化性更好。
一键命令将默认不安装依赖,默认不更新包管理器,默认非互动模式

  • 国际用户无加速:
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 && export CN=true && curl -L https://cnb.cool/oneclickvirt/ecs/-/git/raw/main/goecs.sh -o goecs.sh && chmod +x goecs.sh && ./goecs.sh install && goecs
  • 短链接:
export noninteractive=true && curl -L https://bash.spiritlhl.net/goecs -o goecs.sh && chmod +x goecs.sh && ./goecs.sh install && goecs

export noninteractive=true && curl -L https://ba.sh/JrVa -o goecs.sh && chmod +x goecs.sh && ./goecs.sh install && goecs

如果需要测试更准确,请按照下面的详细说明进行安装,添加非必需的依赖
以下命令可控制是否安装依赖是否更新包管理器互动模式和非交互模式

1、下载脚本
国际用户无加速:

curl -L https://raw.githubusercontent.com/oneclickvirt/ecs/master/goecs.sh -o goecs.sh && chmod +x goecs.sh

国际/国内使用 CDN 加速:

curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/ecs/master/goecs.sh -o goecs.sh && chmod +x goecs.sh

国内用户使用 CNB 加速:

export CN=true && curl -L https://cnb.cool/oneclickvirt/ecs/-/git/raw/main/goecs.sh -o goecs.sh && chmod +x goecs.sh

2、更新包管理器(可选择)并安装环境

./goecs.sh env

非互动模式:

export noninteractive=true && ./goecs.sh env

3、 安装 goecs 本体(仅下载二进制文件无依赖安装)

./goecs.sh install

4、 升级 goecs 本体

./goecs.sh upgrade

5、 卸载 goecs 本体

./goecs.sh uninstall

6、 帮助命令

./goecs.sh -h

7、唤起菜单

goecs

添加swap

懒人版一键脚本(已失效):

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

手动版:以 Debian 系统为例
先查看下运营商有没有默认给创建 swap ,查看 swap 那一行,为零就是没有。

free -h

创建Swap文件
通常Swap大小设置为物理内存的1-2倍,这里建议创建4GB的Swap文件:

sudo fallocate -l 4G /swapfile

如果fallocate命令不可用,可以使用dd命令:

sudo dd if=/dev/zero of=/swapfile bs=1G count=4

设置正确的权限

sudo chmod 600 /swapfile

格式化为Swap文件

sudo mkswap /swapfile

启用Swap

sudo swapon /swapfile

永久配置
一键命令:

echo '/swapfile none swap sw 0 0' >> /etc/fstab

手动版:
编辑/etc/fstab文件:

sudo nano /etc/fstab

在文件末尾添加:

/swapfile none swap sw 0 0

验证Swap是否启用

free -h

设置 swappiness ,用于平衡系统将物理内存数据换出到硬盘(Swap)与清理文件缓存(Page Cache)的积极性。默认是 60 ,根据你的自己性能来决定,性能高的机器可以将这个数值调低。

cat >/etc/sysctl.d/99-local.conf <<'EOF'
vm.swappiness=10
EOF

sysctl --system

参考资料

订阅评论
提醒
用户头像

0 评论
最旧
最新 最多投票