Last Updated on 2025-07-15 by Lee
上个月我搭建了自己的博客网站“NoteFAQ”。我是怎么给自己的网站做安全加固的呢?
由于不是专业的IT人员,即使是用web面板,wordpress等友好话的程序建站,也是让我来来回回折腾了一个月。
在网站基本部署好后,我又推翻了重建。在重建之前我先做了安全加固。
目的是万一在建网站时被网络上的黑客扫到并入侵。
网站加固方案分为三个部分。
第一部分主要是接入方面的安全,包括修改ssh登录端口,禁用密码登录,启用密钥认证登录。然后开启防火墙阻止一切访问本机,再按需要开启必要的端口。
第二部分是申请Ubuntu18的延保。因为Ubuntu18在23年就过期了,我申请了ubuntu pro,延保服务到28年。
第三部分是使用杀毒软件,一个是开源的可以实时监控的clamav,一个是离线的卡巴斯基kvrt。
做了上面的这些操作,我觉得尽力了。如果做了这些还是入侵,我也没什么损失,毕竟就是谢谢博客,又不是商业网站。 剩下的精力就写写自己喜欢东西好了,自己感到快乐就好。
下面开始说安全加固的步骤。
修改默认的远程登录端口
一般Linux系统安装完成后,默认ssh端口都是22,如果不更改端口,暴露在公网上会被无数个黑客用工具扫描。如果扫描到了,会利用字典爆破等方式攻击服务器。
为了避免轻易被扫描到,使用vi命令修改sshd_config文件更改ssh的22端口。
vi /etc/ssh/sshd_config

端口修改成43987后还需要重启下sshd服务。
systemctl restart sshd
这样,ssh远程登录服务就只能通过43987端口接入了。
网络上大部分观点认为密钥认证登录比密码登录更安全。
我的密码在开始的时候设置成“Eo%3q%O%k8n^up@y(2_&^8D)a~IH”,我觉得要破解这个密码怎么也的几年吧....
但是我也随大流,禁用密码登录,设置密钥认证方式登录。
禁用密码,启用密钥认证方式登录
使用命令ssh-keygen生成密钥对。
root@lee:~# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
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:
SHA256:xTd8U+8m3DOCAbxhItfxpEU6BJeKYQaAQRBPydZN+xc root@lee
The key's randomart image is:
+---[RSA 2048]----+
|B*o+.o..+=++ .|
|.o+ .=.+oBB. ..|
| .. o * ++Eo+ o .|
| . o o.oo+ + |
| S .. .oo+|
| . .oo|
| |
| |
| |
+----[SHA256]-----+
root@lee:~#
ssh-keygen命令执行后会在/root/.ssh/路径下生成id_rsa私钥和id_rsa.pub公钥两个文件。
使用“cat id_rsa.pub >> authorized_keys”命令把公钥写入authorized_keys文件里。
root@lee:~# ll
total 36
drwx------ 5 root root 4096 Jul 7 03:37 ./
drwxr-xr-x 24 root root 4096 Jun 15 14:06 ../
-rw-r--r-- 1 root root 3106 Apr 9 2018 .bashrc
drwx------ 2 root root 4096 Jun 15 14:12 .cache/
drwx------ 3 root root 4096 Jun 15 14:12 .gnupg/
-rw-r--r-- 1 root root 148 Aug 17 2015 .profile
drwx------ 2 root root 4096 Jul 7 03:37 .ssh/
-rw------- 1 root root 1792 Jul 7 03:37 .viminfo
-rw------- 1 root root 98 Jul 7 03:17 .Xauthority
root@lee:~# cd .ssh/
root@lee:~/.ssh# ll
total 16
drwx------ 2 root root 4096 Jul 7 03:37 ./
drwx------ 5 root root 4096 Jul 7 03:37 ../
-rw------- 1 root root 0 Jun 15 14:09 authorized_keys
-rw------- 1 root root 1679 Jul 7 03:37 id_rsa
-rw-r--r-- 1 root root 390 Jul 7 03:37 id_rsa.pub
root@lee:~/.ssh# cat id_rsa.pub >> authorized_keys
可以把这个比喻成设置指纹锁,把指纹录入到系统里。
现在把私钥id_rsa文件下载到本地。

私钥,相当于你的指纹。登录的时候指纹和系统里录入的吻合,才有权限登录服务器。
然后再修改sshd_config文件,禁用密码和开启密钥登录。
vi /etc/ssh/sshd_config

PermitRootLogin yes # 允许root远程登录
PubkeyAuthentication yes # 启用密钥认证方式登录
PasswordAuthentication no # 禁用密码登录
按照上面图示和命令,保存退出,然后再重启下sshd服务。
systemctl restart sshd
重启后,再登录系统的时候就提示要密钥文件了,密码那行是灰色的不可用,如下图。
但是Ubuntu22这样设置不行,我另一篇文章写了解决方法。

红色框里点旁边的浏览,找到下载的私钥id_rsa,就能登录了。
为了方便,可以在xshell“用户密钥管理者”里导入私钥,这样每次登录就不用现找私钥了。
配置防火墙并启用
虽然我装的应用不多,但是把在跑的应该端口都暴露在公网上也不是好事。
而且我发现ubuntu的防火墙命令比friewall和iptables简单一些,下面是配置命令。
ufw status # 查看防火墙状态
ufw default deny # 拒绝所有外部访问本机,本机可以访问外部
ufw allow 43987 # 允许外部通过43987端口连接本机SSH
ufw allow 80 # 允许外部通过80端口本机的网页
ufw allow 443 # 允许外部通过443端口访问加密的网页
ufw allow 8888 # 允许外部通过8888端口访问本地web面板
ufw enable #启用防火墙
按照上面命令的配置,先关闭外界所有对本服务器的访问,按照需要开放43987端口用于ssh服务。
开放80和443端口用于外部访问我的博客网站。开放8888端口用于访问FastPanel面板。
然后开启防火墙,其他端口对外都不可用。这样可以最大化保护服务器的安全。
如果不开启防火墙,比如linux上还跑这MySQL,那3306端口就对外暴露着,黑客们扫到我服务器上有这个端口的话,一定会用各种已知的漏洞方法来攻击我。
Ubuntu18 申请延保
申请延保其实挺简单的,就是登录Ubuntu Pro官网,然后申请Pro服务。
pro服务适用于多个版本的ubuntu,包括Ubuntu16,Ubuntu18,Ubuntu20,Ubuntu22。
未来Ubuntu24过了正常的生命周期后,也可以使用Pro服务。
申请Ubuntu Pro服务的官方地址是 https://ubuntu.com/pro

上图我的在Ubuntu Pro申请到的Token序列号。使用方法就是使用sudo pro命令。
sudo pro attach C14QDoW3grL3kaHWyY23hjM8CmAAL
执行完上面的命令后,再使用apt update和apt upgrade命令给自己系统打上最新补丁。
apt update
apt upgrade
这样做以后,Ubuntu18获得了官方提供的5年延续服务。
杀毒软件 ClamAV和卡巴斯基KVRT
我用了两种杀毒软件。一种是可以实时防护ClamAV,一种是离线使用的卡巴斯基KVRT。
ClamAV就不详细介绍了,大概就是一款开源的杀毒软件,好像是思科开源的。
安装ClamAV也挺简单的,使用以下命令安装。安装前最最好atp update和upgrade下。
sudo apt-get install clamav
安装完成后,使用下面命令进行病毒库升级。
root@lee:~# sudo freshclam
ERROR: /var/log/clamav/freshclam.log is locked by another process
ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log).
ERROR: initialize: libfreshclam init failed.
ERROR: Initialization error!
root@lee:~# sudo freshclam
但是使用freshclam命令是报错的,提示日志被其他进程锁定。
我以为是ClamAV自己在自动升级病毒库,但我等了5分钟还是不行。
可以使用下面命令停止ClamAV自动升级,然后手动升级。
systemctl stop clamav-freshclam
再次使用升级病毒库命令。
root@lee:~# sudo freshclam
Mon Jul 7 07:30:58 2025 -> ClamAV update process started at Mon Jul 7 07:30:58 2025
Mon Jul 7 07:30:58 2025 -> ^Your ClamAV installation is OUTDATED!
Mon Jul 7 07:30:58 2025 -> ^Local version: 0.103.8 Recommended version: 1.0.9
Mon Jul 7 07:30:58 2025 -> DON'T PANIC! Read https://docs.clamav.net/manual/Installing.html
Mon Jul 7 07:30:58 2025 -> daily.cvd database is up-to-date (version: 27691, sigs: 2075811, f-level: 90, builder: raynman)
Mon Jul 7 07:30:58 2025 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
Mon Jul 7 07:30:58 2025 -> bytecode.cvd database is up-to-date (version: 336, sigs: 83, f-level: 90, builder: nrandolp)
升级完成后,再把ClamAV自动升级打开。
systemctl start clamav-freshclam
ClamAV扫描的命令是clamscan,用法也比较简单。只要在clamscan后面跟上文件或目录就行。
root@lee:~# clamscan /etc
/etc/hosts: OK
/etc/subuid: OK
/etc/magic: OK
.
.
.
/etc/resolv.conf: Symbolic link
/etc/gshadow-: OK
/etc/sysctl.conf: OK
----------- SCAN SUMMARY -----------
Known viruses: 8707304
Engine version: 0.103.8
Scanned directories: 1
Scanned files: 80
Infected files: 0
Data scanned: 0.23 MB
Data read: 0.12 MB (ratio 1.97:1)
Time: 12.747 sec (0 m 12 s)
Start Date: 2025:07:07 07:34:09
End Date: 2025:07:07 07:34:22
上面是我使用 clamscan 命令扫描 /etc 目录截取的过程,中间省略了。扫描完成给出SCAN SUMMARY汇总。
只要看Infected files这块就行,显示为0,意思是感染文件为0。
再说另外一款离线的杀毒软件,卡巴斯基病毒清除工具-KVRT。
这个工具只是一个文件,把它下载到服务器里用命令执行就行。
但是这个软件是图形化的,如果是远程终端执行,需要xmanager等软件配合。如果有桌面环境,直接执行就可以。
下载地址是 https://www.kaspersky.com.cn/downloads/free-virus-removal-tool

在上面网页里点击下载kvrt.run。然后传到服务器里。然后执行以下命令。
root@lee:~# chmod +x kvrt.run
root@lee:~# ./kvrt.run
因为我使用的是非桌面环境,在终端下执行的,所以调用了我PC的xmanager启动kvrt。如果下图。
然后勾选下面三个复选框,点击接受。后面就是扫描页面,点击扫描,扫描完成后给出汇总结果。
上图是卡巴斯基KVRT的界面,点击扫描。
由于我使用xmanger,用kvrt也挺方便的。如果我笔记本装了桌面版的Linux,我一定会选择KVRT来用。
卡巴斯基是定期更新病毒库的,所以可以每个一周就重新下载一下KVRT到自己的服务器里进行扫描。
上面关于两款杀毒软件就写这些吧,都不是很难,一个使用命令符,一个是图形界面,看条件自行选择。