Decentralization? We're still early!
返回課程

主权个人的WordPress入门课

0%完成
0/0 Steps
  1. 第一部分 WordPress基础知识入门

    WordPress:内容创作者的知识输出及展示利器
  2. WordPress的开源生态:开源软件运动、GPL协议与AI赋能
  3. WordPress的软件版本、路线图与社区文化
  4. 值得关注的WordPress信息源与常用工具
  5. 五分钟安装指南、主题插件与备份还原方法
  6. 第二部分 WordPress与本地知识管理
    如何在本地电脑/服务器快速部署WordPress站点
  7. 最强CMS:WordPress的文件结构、前端与后端
  8. 学习使用Gutenberg编辑器进行内容创作和排版
  9. 学习使用全站编辑主题(FSE)进行站点设计
  10. 自定义文章类型:WordPress的基础功能及其拓展
  11. 第三部分 如何在云端部署WordPress
    云端部署WordPress的方法:选购虚拟主机或VPS
  12. 如何实现WordPress站点的自动化部署
  13. 如何优化Linux服务器设置实现安全加固
  14. 如何压缩WordPress站点图片并设置CDN
  15. 第四部分 WordPress的维护优化与安全加固
    WordPress数据管理:学习导入导出数据、清理冗余数据
  16. 动态数据调取优化:为WordPress站点添加配置Redis缓存
  17. 页面速度优化:为WordPress站点添加配置fastcgi缓存
  18. 优化WordPress的安全设置,实现站点的安全加固
  19. 第五部分 WordPress主题及插件进阶研究
    WordPress主题的选择与站点设计基础知识
  20. 善用WordPress插件:优秀插件推荐及其使用
  21. 学习使用Kadence Blocks优化页面设计
  22. 学习使用Jetengine为WordPress创建管理动态内容
  23. 学习使用LearnDash创建 WordPress 学习管理系统
  24. 学习使用Woocommerce创建网上商店
  25. 第六部分 内容创作者的WordPress:迈向Web3
    如何通过WordPress打造个人品牌:一个简易指南
  26. AI时代的内容创作:文章配图与音视频版本生成
  27. 如何使用JPG Store铸造基于Cardano链的NFT
  28. 为WordPress添加比特币收款和比特币支付网关
  29. 为WordPress添加Cardano支付网关和Cardano钱包登录
  30. 为WordPress添加以太坊支付网关和以太坊钱包登录
  31. WordPress用户管理与会员管理、内容门控
  32. 第七部分 WordPress汉化与设计优化
    WordPress主题、插件的汉化:Poedit 使用教程
  33. 为WordPress站点添加自定义字体、繁简体转换、多语言
  34. 如何通过调整CSS美化WordPress站点细节
  35. 如何开发自定义插件完善WordPress功能
  36. WordPress的功能扩展:FSE与Interactivity API
  37. 第八部分 AI时代的WordPress实践
    AI赋能WordPress开发:技术实践与未来展望
  38. Trilium RSS Digest 插件使用教程
  39. Cardano NFT Minter 插件使用教程
  40. Trilium AI Design 插件使用教程
課 14 的 40
In Progress

如何压缩WordPress站点图片并设置CDN

Brave 2024-01-22

在当今网络环境中,服务器安全是每一位WordPress网站管理员必须重视的核心技能。无论您是运营个人博客还是企业级电商网站,一台未经安全加固的Linux服务器就如同一扇敞开的大门,随时可能遭受恶意攻击。本章将系统性地指导您完成服务器安全加固的全过程,从基础的用户权限管理到高级的双因素认证,层层递进,构建起坚固的安全防线。

🎯 学习目标:

  • 理解Linux服务器安全加固的核心原则
  • 掌握SSH安全配置的最佳实践
  • 学会配置防火墙和入侵防御系统
  • 实现双因素认证提升登录安全性
  • 掌握服务器日常运维中的安全命令

🏗️ 第一部分:用户账户安全管理

1.1 为什么不能使用Root用户直接登录?

Root用户是Linux系统中权限最高的超级管理员账户,拥有对系统的完全控制权。直接使用Root登录存在以下严重风险:

风险类型具体说明
暴力破解目标攻击者知道Root用户名是固定的,只需猜测密码
误操作风险Root权限下的任何错误命令都可能导致系统崩溃
审计困难无法区分是谁执行了特定的管理操作
权限滥用所有操作都以最高权限执行,违反最小权限原则

1.2 创建新的管理用户

💡 最佳实践:创建一个具有sudo权限的普通用户来执行日常管理任务,仅在必要时通过sudo提升权限。

第一步:创建新用户

sudo adduser example

其中 example 是您的新用户名。系统会提示您设置密码和填写用户信息。

⚠️ 密码安全要求(重要):

  • 长度至少16个字符以上
  • 混合使用大小写字母、数字和特殊符号
  • 避免使用字典单词、生日、电话号码等可预测信息
  • 建议使用密码管理器(如Bitwarden、1Password)生成和存储强密码

第二步:将新用户加入sudo组

sudo adduser example sudo

📝 技术说明:sudo组是Debian/Ubuntu系统中预定义的管理员组。加入该组的用户可以使用sudo命令临时获取Root权限执行管理任务。这种设计既保证了必要的管理能力,又通过密码验证增加了一层安全保护。

第三步:测试新用户

sudo su - example

验证要点:

  • 确认可以成功切换到新用户
  • 执行 sudo whoami 确认返回 root,验证sudo权限正常
  • 执行 exit 返回原用户

🔒 第二部分:SSH安全配置

2.1 SSH安全概述

SSH(Secure Shell)是远程管理Linux服务器的标准协议。默认配置虽然可用,但存在多个安全隐患需要加固:

默认配置安全风险加固措施
端口22众所周知的默认端口,是自动化攻击的首要目标更改为非标准端口
允许Root登录攻击者只需猜测一个密码禁止Root远程登录
仅密码认证可被暴力破解启用双因素认证/密钥认证

2.2 配置防火墙(UFW)

🚨 关键警告:在修改SSH端口之前,必须先配置防火墙规则!否则您可能会将自己锁在服务器外面!

UFW(Uncomplicated Firewall)是Ubuntu/Debian系统中简化iptables管理的工具,非常适合初学者使用。

第一步:检查防火墙状态

sudo ufw status

第二步:允许当前SSH端口(默认22)

sudo ufw allow proto tcp from any to any port 22

📝 命令解析:

  • proto tcp:指定TCP协议
  • from any:允许来自任何IP地址的连接
  • to any:到达任何本地地址
  • port 22:目标端口22

第三步:启用防火墙

sudo ufw enable

系统会提示此操作可能中断现有SSH连接,确认后输入 y 继续。

第四步:验证防火墙状态

sudo ufw status verbose

您应该看到类似以下输出:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere

2.3 更改SSH默认端口

更改SSH默认端口是一种"安全隐蔽"(Security through Obscurity)策略。虽然不能从根本上阻止针对性攻击,但可以有效过滤绝大多数自动化扫描和暴力破解尝试。据统计,使用非标准端口可以减少约95%的恶意登录尝试。

第一步:编辑SSH配置文件

sudo nano /etc/ssh/sshd_config

第二步:找到并修改端口配置

找到以下行:

#Port 22

删除开头的 # 号(取消注释)并将22改为您选择的端口:

Port 2222

🎯 端口选择建议:

  • 使用1024-65535之间的端口(非特权端口)
  • 避免使用常见服务端口(如3306、8080、443等)
  • 建议使用10000以上的高位端口,如:22222、33333、12580等
  • 记录好您选择的端口号!

第三步:禁止Root用户SSH登录

在同一配置文件中,找到:

PermitRootLogin yes

修改为:

PermitRootLogin no

💡 扩展配置(可选但推荐):

# 限制密码尝试次数
MaxAuthTries 3

# 限制同时连接数
MaxSessions 2

# 设置登录超时时间(秒)
LoginGraceTime 60

# 禁用空密码登录
PermitEmptyPasswords no

# 指定允许登录的用户(更严格的控制)
AllowUsers example

第四步:保存文件

Ctrl+X,然后按 Y,最后按 Enter 确认保存。

第五步:为新端口添加防火墙规则

sudo ufw allow proto tcp from any to any port 2222

(请将2222替换为您实际选择的端口号)

第六步:重启SSH服务

sudo systemctl restart ssh
sudo systemctl status ssh

验证输出中显示 listening on 0.0.0.0 port 2222(您的新端口)

2.4 测试新配置

🚨 重要提醒:不要关闭当前的终端连接!先用新窗口测试!

打开一个新的终端窗口,使用以下命令测试连接:

# 使用新端口和新用户连接
ssh -p 2222 example@your_server_ip

# 测试Root登录是否被禁止(应该失败)
ssh -p 2222 root@your_server_ip

✅ 预期结果:

  • 使用新用户和新端口可以成功连接
  • 使用Root用户会收到 Permission denied 错误
  • 使用旧端口22会连接超时或被拒绝

确认新配置正常工作后,可以删除旧的22端口防火墙规则:

sudo ufw delete allow 22/tcp
sudo ufw status

🛡️ 第三部分:双因素认证(2FA)

3.1 什么是双因素认证?

双因素认证(Two-Factor Authentication,简称2FA)是一种增强的身份验证机制。它要求用户提供两种不同类型的认证因素才能完成登录:

认证因素类型示例
第一因素你知道的东西密码、PIN码
第二因素你拥有的东西手机、硬件令牌
第三因素你本身的特征指纹、面部识别

即使攻击者获取了您的密码,没有第二因素(如您的手机)也无法登录,大大提高了账户安全性。

3.2 安装配置Google Authenticator

第一步:在手机上安装验证器App

在继续之前,请在您的手机上安装以下任一验证器应用:

  • Google Authenticator(iOS/Android)
  • Microsoft Authenticator(iOS/Android)
  • Authy(iOS/Android,支持云端备份)
  • 1Password(如果您已使用该密码管理器)

第二步:在服务器上安装PAM模块

sudo apt update
sudo apt install libpam-google-authenticator

📝 技术说明:PAM(Pluggable Authentication Modules)是Linux系统的可插拔认证模块框架,允许系统管理员灵活配置不同的认证方式。Google Authenticator PAM模块将基于时间的一次性密码(TOTP)认证集成到系统中。

第三步:为当前用户配置Google Authenticator

google-authenticator

系统将显示一个二维码和一系列问题。您需要:

  1. 用手机上的验证器App扫描二维码
  2. 🚨 务必备份显示的紧急恢复代码! 这5个一次性代码是您唯一的后备方案
  3. 按以下方式回答问题:
问题推荐答案说明
Do you want authentication tokens to be time-based?y使用基于时间的令牌
Do you want me to update your "~/.google_authenticator" file?y保存配置
Do you want to disallow multiple uses of the same token?y防止重放攻击
Do you want to increase the time skew window?n保持默认30秒窗口
Do you want to enable rate-limiting?y限制登录尝试频率

⚠️ 备份提醒:

  • 将紧急恢复代码保存在安全的地方(密码管理器、加密文档、物理保险箱)
  • 不要只保存在同一台服务器上!
  • 考虑使用Authy等支持云端备份的验证器App

第四步:配置SSH启用双因素认证

编辑SSH配置文件:

sudo nano /etc/ssh/sshd_config

找到以下行并修改:

# 将 ChallengeResponseAuthentication 改为 yes
# 注意:在较新的系统中,该选项可能叫 KbdInteractiveAuthentication
ChallengeResponseAuthentication yes

# 或者(Ubuntu 22.04及更新版本)
KbdInteractiveAuthentication yes

保存并退出(Ctrl+XYEnter

第五步:配置PAM

编辑PAM配置文件:

sudo nano /etc/pam.d/sshd

在文件末尾添加以下行:

# One-time authentication via Google Authenticator
auth required pam_google_authenticator.so

💡 高级配置选项:

# 如果您希望在没有配置2FA的用户也能登录(不推荐用于生产环境)
auth required pam_google_authenticator.so nullok

# 如果您使用SSH密钥认证并且希望同时要求2FA
auth required pam_google_authenticator.so

第六步:重启SSH服务

sudo systemctl restart ssh

第七步:测试双因素认证

打开新的终端窗口测试连接:

ssh -p 2222 example@your_server_ip

您应该看到以下登录流程:

  1. 输入密码
  2. 系统提示 Verification code:
  3. 打开手机验证器App,输入当前显示的6位数字
  4. 成功登录

🚫 第四部分:入侵防御与攻击防护

4.1 安装配置Fail2ban

Fail2ban是一个日志分析和入侵防御工具。它监控系统日志,检测可疑的登录失败模式,并自动将攻击者的IP地址添加到防火墙黑名单中。

第一步:安装Fail2ban

sudo apt update
sudo apt install fail2ban

第二步:检查服务状态

sudo systemctl status fail2ban

应该显示 active (running) 状态。

第三步:创建自定义配置文件

📝 重要说明:不要直接修改 /etc/fail2ban/jail.conf,因为系统升级时会被覆盖。应该创建 /etc/fail2ban/jail.local 文件存放自定义配置。

sudo nano /etc/fail2ban/jail.local

添加以下配置:

[DEFAULT]
# 封禁时间(秒),这里设置为1小时
bantime = 3600

# 检测时间窗口(秒),这里设置为10分钟
findtime = 600

# 在findtime内允许的最大失败次数
maxretry = 5

# 封禁动作
banaction = ufw

# 邮件通知(可选,需要配置邮件服务)
# destemail = your@email.com
# sendername = Fail2Ban
# action = %(action_mwl)s

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3

⚠️ 注意:将 port = 2222 改为您实际使用的SSH端口。

第四步:重启Fail2ban

sudo systemctl restart fail2ban

第五步:查看当前状态和被封禁的IP

# 查看Fail2ban状态
sudo fail2ban-client status

# 查看SSH jail的详细状态
sudo fail2ban-client status sshd

# 手动解封某个IP(如果误封)
sudo fail2ban-client set sshd unbanip 192.168.1.100

4.2 禁用ICMP响应(防止Ping探测)

ICMP(Internet Control Message Protocol)主要用于网络诊断,其中ping命令使用的echo请求/响应是最常见的应用。禁用ICMP响应可以:

  • 降低服务器被发现的概率
  • 防止ICMP洪水攻击
  • 减少网络侦察信息泄露

配置方法:

sudo nano /etc/ufw/before.rules

在文件中找到 # ok icmp codes for INPUT 部分,在其之前添加:

# Block ICMP echo requests (ping)
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP

保存并重新加载防火墙:

sudo ufw reload

验证配置:

  • 从另一台机器ping您的服务器,应该没有响应
  • 这不会影响您从服务器向外ping其他主机

⚠️ 注意事项:禁用ICMP可能会影响某些网络诊断功能和CDN服务的健康检查。在生产环境中使用前请评估影响。


🔑 第五部分:SSH密钥认证(进阶安全)

5.1 为什么使用SSH密钥?

SSH密钥认证比密码认证更安全,原因如下:

对比项密码认证密钥认证
暴力破解可能被穷举破解几乎不可能(2048位密钥有2^2048种可能)
中间人攻击密码可能被截获私钥从不在网络上传输
便利性每次需要输入密码可以免密码登录
管理性多服务器需记住多个密码一个密钥可用于多个服务器

5.2 生成和配置SSH密钥

第一步:在本地计算机生成密钥对

# 在您的本地电脑(不是服务器)执行
ssh-keygen -t ed25519 -C "your_email@example.com"

📝 技术说明:

  • -t ed25519:使用Ed25519算法,比RSA更安全、更快速
  • -C:添加注释,通常使用邮箱便于识别
  • 系统会提示设置密钥密码(passphrase),强烈建议设置!

如果您的系统不支持Ed25519,可以使用RSA:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

第二步:将公钥上传到服务器

# 方法一:使用ssh-copy-id(推荐)
ssh-copy-id -p 2222 example@your_server_ip

# 方法二:手动复制
cat ~/.ssh/id_ed25519.pub | ssh -p 2222 example@your_server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

第三步:测试密钥登录

ssh -p 2222 example@your_server_ip

如果设置了密钥密码,系统会提示输入密钥密码(非服务器密码)。

第四步(可选但推荐):禁用密码登录

⚠️ 警告:确保密钥登录正常工作后再执行此步骤!否则可能无法登录服务器!

编辑SSH配置:

sudo nano /etc/ssh/sshd_config

修改以下配置:

PasswordAuthentication no
PubkeyAuthentication yes

重启SSH:

sudo systemctl restart ssh

📁 第六部分:服务器文件管理基础命令

6.1 使用SCP命令进行文件传输

SCP(Secure Copy)是基于SSH协议的安全文件传输工具,可以在本地和远程服务器之间安全地传输文件。

📥 从服务器下载文件到本地:

scp -P <端口号> <用户名>@<服务器IP>:<远程文件路径> <本地目标路径>

示例:

# 下载单个文件
scp -P 2222 example@192.168.1.100:/var/log/auth.log ~/Downloads/

# 下载整个目录(使用 -r 参数)
scp -P 2222 -r example@192.168.1.100:/var/www/html ~/Backup/

📤 从本地上传文件到服务器:

scp -P <端口号> <本地文件路径> <用户名>@<服务器IP>:<远程目标路径>

示例:

# 上传单个文件
scp -P 2222 ~/Documents/config.php example@192.168.1.100:/var/www/html/

# 上传整个目录
scp -P 2222 -r ~/Project/ example@192.168.1.100:/home/example/

💡 常用参数:

参数说明
-P指定SSH端口(注意是大写P)
-r递归复制目录
-v显示详细传输过程
-C启用压缩传输
-p保留文件原始属性(时间戳、权限等)

6.2 删除目录和文件

🚨 危险命令警告:rm -rf 是Linux中最危险的命令之一,删除操作不可逆!

删除目录及其所有内容:

rm -rf <目录路径>

参数说明:

  • -r(recursive):递归删除目录及其内容
  • -f(force):强制删除,不提示确认

安全使用建议:

# 1. 首先确认要删除的内容
ls -la /path/to/directory

# 2. 使用交互模式(会逐个确认)
rm -ri /path/to/directory

# 3. 如果确定要删除,才使用 -rf
rm -rf /path/to/directory

⚠️ 绝对禁止的危险命令:

# 永远不要执行以下命令!!!
rm -rf /           # 删除整个系统
rm -rf /*          # 同上
rm -rf ~           # 删除当前用户所有文件

📋 第七部分:安全检查清单

完成本章学习后,请确认您已完成以下安全配置:

序号检查项状态
1✅ 创建了非Root的管理员用户
2✅ 新用户已加入sudo组
3✅ SSH端口已从22更改为其他端口
4✅ 已禁止Root用户SSH登录
5✅ UFW防火墙已启用并正确配置
6✅ Google Authenticator双因素认证已配置
7✅ 紧急恢复代码已安全备份
8✅ Fail2ban已安装并运行
9✅ ICMP响应已禁用(可选)
10✅ SSH密钥认证已配置(推荐)

🎓 本章总结

通过本章的学习,您已经掌握了Linux服务器安全加固的核心技能。让我们回顾一下安全加固的层次架构:

                    🏰 服务器安全防护体系
    ┌─────────────────────────────────────────────┐
    │  第一层:访问控制                              │
    │  └── 非Root用户 + 强密码 + sudo权限管理        │
    ├─────────────────────────────────────────────┤
    │  第二层:网络防护                              │
    │  └── 防火墙(UFW) + 非标准SSH端口 + ICMP过滤   │
    ├─────────────────────────────────────────────┤
    │  第三层:身份认证                              │
    │  └── 双因素认证(2FA) + SSH密钥认证            │
    ├─────────────────────────────────────────────┤
    │  第四层:入侵防御                              │
    │  └── Fail2ban自动封禁 + 日志监控              │
    └─────────────────────────────────────────────┘

📚 参考资源

回复