因为最近在重构博客,然后就测试和弄了一些主机。稍微记录下拿到手后一般都要进行的操作。
我一般选择 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
参考资料