文章目录[隐藏]
前面讲了,使用重装系统的脚本来重新安装纯净的 debian 系统。
现在重启后进入系统,接下来需要做的事是增加安全性以及调整优化系统。
修改 ls -lh
我喜欢把 ls -lh
命令改成 ll
来使用,也建议大家这么做,很方便:
nano .bashrc #修改 /root/.bashrc
找到
# alias ll='ls $LS_OPTIONS -l'
删掉 # 号和后面的空格,改成下面的样子:
alias ll='ls $LS_OPTIONS -lhF'
Ctrl + x ,输入 y , 回车。
安装必备软件
首先安装一些必备软件,如果在上一篇网络重装 VPS 系统脚本里没有在脚本里使用
--install 'wget curl screen ufw git lrzsz net-tools'
来安装一些软件的话,在这里需要先安装(如果上一步已经做过了,便可以省却下面这两个步骤):
apt update
apt install wget curl screen ufw git lrzsz net-tools -y
使用密钥登录 ssh
安装好如上软件包之后,接下来生成公钥和私钥,让 ssh 以密钥的方式登录,禁止使用密码登录以增强安全性。
生成密钥:
ssh-keygen <== 建立密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <== 按 Enter
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <== 输入密钥锁码,或直接按 Enter 留空,建议留空,否则有些不支持 passphrase 的客户端使用起来会有问题,比如 webssh 。
Enter same passphrase again: <== 再输入一遍密钥锁码,再次留空
Your identification has been saved in /root/.ssh/id_rsa. <== 私钥
Your public key has been saved in /root/.ssh/id_rsa.pub. <== 公钥
The key fingerprint is:
0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08
进入 .ssh 查看公钥私钥,并安装备份公钥:
cd ~/.ssh
ll
-rx-r--r-- 1 root root 747 Nov 18 22:06 id_rsa.pub # 公钥
-rx-r--r-- 1 root root 3.2K Nov 18 22:06 id_rsa # 私钥
mv id_rsa.pub authorized_keys
tar zcvf ssh_key.tgz *
mv ssh_key.tgz ~
rm id_rsa
ll
-rx-r--r-- 1 root root 747 Nov 18 22:06 authorized_keys # 目录下只剩一个 authorized_keys 文件了。
cd
chmod -R 400 ./.ssh # 只有 root 用户才有权限访问和使用密钥。
现在使用类似于 winscp 这样的软件将 /root 目录下的 ssh_key.tgz 下载到 PC 中解压,保存好里面的 authorized_keys 和 id_rsa ,其中 id_rsa 是登录 VPS 的重要凭据,如果遗失,只能重装系统了,而 authorized_keys 可以直接用在别的 VPS 中,如果你不止一台 VPS 的话。
接着来修改 VPS 的登陆方式,对比并修改为下面的样子::
nano /etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
PasswordAuthentication no
Ctrl + x,y,回车 # 保存退出。
systemctl restart sshd # 执行这一步之后,在当前 ssh 窗口未关闭的情况下,在 PC 系统里使用密钥重新登录这台 VPS ,只有当使用密钥可以顺利登陆后才能关闭当前窗口,否则你将失去 VPS 的管理权!!
开启防火墙
ufw default deny incoming
ufw default allow outgoing
ufw allow 34567/tcp # 注意,在上一篇文章里我将 VPS 的 SSH 端口改为了 34567,而不是默认的 22 ,如果你没有改 SSH 的端口,那么这一步的命令应该是 ufw allow 22/tcp 。
ufw allow 80/tcp
ufw allow 443/tcp
systemctl enable ufw
ufw enable ufw # 这一步会有个提示,如果确认以上每一步都正确,输入 y 回车确认即可,否则就不要确认,不然也会失去 VPS 的管理权。
使用 Function Club 的 Fail2ban 并进一步增强安全性
Github 上 Function Club 有一个很好用的一键脚本 Fail2ban ,使用这个脚本可以很方便地增强 SSH 的安全性,推荐使用,用法如下:
wget https://raw.githubusercontent.com/FunctionClub/Fail2ban/master/fail2ban.sh && bash fail2ban.sh 2>&1 | tee fail2ban.log
说明如下:
- 第一步选择是否修改 SSH 端口。
- 第二步输入最多尝试输入 SSH 连接密码的次数
- 第三步输入每个恶意 IP 的封禁时间(单位:小时)
- 关于第一步,如果 sshd_config 和 ufw 的规则里端口都是一致的,这里可以直接回车不做更改。
- 关于第二步,我填写的 2 ,即两次输错密码即封禁 IP 。
- 关于第三步,我填写 480 ,即 20 天。
过一段时间,你可以使用下面的命令查看来捣蛋的 ip :
fail2ban-client status sshd
增加 swap 文件【可选】
free -m # 如果内存小于 1GB,建议增加 swap 来增强性能
dd if=/dev/zero of=/swapfile bs=1M count=1024
mkswap /swapfile
swapon /swapfile
free -m # 对比上一次的区别,如果 Swap: 后有数值,表示 swap 增加成功,可以将 swap 设置为开机自动挂载。
echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
echo "vm.swappiness=10" >> /etc/sysctl.conf
echo "vm.vfs_cache_pressure=50" >> /etc/sysctl.conf
sysctl -p
撤销安全补丁和内核模块加载【可选】
nano /etc/default/grub
注意是修改 GRUB_CMDLINE_LINUX_DEFAULT= 后面部分内容。
内核5.2或以上修改下面内容:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash mitigations=off"
内核5.2以下修改成下面内容:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash noibrs noibpb nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier mds=off tsx=on tsx_async_abort=off mitigations=off"
update-grub
去掉一些没必要内核模块加载 (xfs 等):
chmod -x /etc/grub.d/30_os-prober
开启 bbr
nano /etc/sysctl.conf
# 将下面的内容粘贴到底部:
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
fs.file-max = 1000000
fs.inotify.max_user_instances = 8192
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 32768
net.core.netdev_max_backlog = 32768
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_max_orphans = 32768
net.ipv4.ip_forward = 1
sysctl -p
Ctrl + x , y , 回车
update 后删除多余的 kernel
uname -a # 查看当前使用的 kernel,如果显示不止一个 kernel 的话,要注意是否近期进行了 apt upgrade,如果有过更新,先重启一下系统,让新 kernel 生效,随后再进行下面的操作。
Linux myvps 5.10.0-22-amd64 #1 SMP Debian 5.10.178-3 (2023-04-22) x86_64 GNU/Linux
dpkg --get-selections | grep linux-
binutils-x86-64-linux-gnu install
firmware-linux-free install
linux-base install
linux-image-5.10.0-18-amd64 install # 旧 kernel,可删除
linux-image-5.10.0-20-amd64 install # 旧 kernel,可删除
linux-image-5.10.0-22-amd64 install # 当前使用中的 kernel
linux-image-amd64 install
linux-libc-dev:amd64 install
util-linux-locales install
apt purge linux-image-5.10.0-18-amd64 linux-image-5.10.0-20-amd64 # 删除不再使用的 kernel,释放 VPS 空间。
update-grub
reboot
到了这里,基本上优化的工作结束,可以重启 VPS 看看资源占用情况了。