将服务器的登录方式从密码改为更安全的 SSH 密钥登录,并禁用了密码和 root 直连。同时配置了防火墙“两道门”,并安装了 fail2ban 自动反击暴力破解。
# 1. 在本地电脑生成 ed25519 密钥对,私钥留本地,公钥上传服务器
ssh-keygen -t ed25519 -C "study-服务器加固"
# 2. 在服务器上设置严格的权限,防止 SSH 拒绝登录
chmod 700 ~/.ssh # 仅本人可进入读写
chmod 600 ~/.ssh/authorized_keys # 仅本人可读写文件
# 3. 修改 sshd 配置后,先测试语法再重载生效
sudo sshd -t # 验证 sshd 配置文件是否有错误
sudo systemctl reload sshd # 平滑重载,不会断开当前连接
# 4. 防火墙永久放行 SSH 服务
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload # 重新加载使永久规则生效
.ssh 目录必须是 700,authorized_keys 文件必须是 600,否则 SSH 为了安全会直接忽略公钥。配置了域名解析,开放了 80 端口,安装了 Nginx。亲手建立网站目录并上传了带有备案号的个人主页,理解了 server_name 如何匹配域名。
# 1. 开放 80 端口,让外部可以访问网页
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
# 2. 创建网站目录,并把归属权交给普通用户 study
sudo mkdir -p /var/www/mysite
sudo chown -R study:study /var/www/mysite
sudo chmod 755 /var/www/mysite # 权限 755:属主可读写执行,其他人可读可执行
# 3. 修改 Nginx 配置后,测试并重载
sudo nginx -t # 检查 Nginx 配置文件语法
sudo systemctl reload nginx # 重载 Nginx 让配置生效
nginx 用户运行的,而不是 study 用户。要把网页文件权限改为 644,目录权限改为 755,这样 Nginx 才有权限读取文件。理解 HTTP 明文传输的风险,使用 Let's Encrypt 申请了免费 HTTPS 证书。将网站的 80 端口改为跳转,由 443 端口提供加密内容,并配置了自动续期定时器。
# 1. 开放 443 端口(HTTPS)
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
# 2. 使用 certbot 申请证书(先演练后正式)
# --webroot 表示通过网站目录验证;-w 指定网站根目录;-d 指定域名
sudo certbot certonly --webroot -w /var/www/mysite -d 你的域名 -d www.你的域名 -m 邮箱 --agree-tos --no-eff-email --dry-run
# 3. 开启自动续期定时器(Let's Encrypt 证书仅 90 天有效期)
sudo systemctl enable --now certbot-renew.timer
理解了 Nginx 的虚拟主机概念,通过添加 notes 子域名的解析,在服务器上部署了第二个独立站点,并做到了一站一文件、一站一日志。
# 1. 查看 Nginx 实际加载的所有配置中的 server_name(方便盘点站点)
sudo nginx -T 2>/dev/null | grep -E "server_name"
# 2. 实时查看子站点(notes)的访问日志
# -f 参数表示持续跟踪文件末尾的新增内容
sudo tail -f /var/log/nginx/notes_access.log