怎么做网站安全加固

网站怎么做安全加固

Last Updated on 2025-07-15 by Lee

https://youtu.be/vNl65upo-ps

上个月我搭建了自己的博客网站“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。如果下图。

xshell调用xmanager启用kvrt

然后勾选下面三个复选框,点击接受。后面就是扫描页面,点击扫描,扫描完成后给出汇总结果。

这是卡巴斯基kvrt的软件界面,点击start scan可以扫描

上图是卡巴斯基KVRT的界面,点击扫描。

扫描完成后给出结果

由于我使用xmanger,用kvrt也挺方便的。如果我笔记本装了桌面版的Linux,我一定会选择KVRT来用。

卡巴斯基是定期更新病毒库的,所以可以每个一周就重新下载一下KVRT到自己的服务器里进行扫描。

 

上面关于两款杀毒软件就写这些吧,都不是很难,一个使用命令符,一个是图形界面,看条件自行选择。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注