我的运维笔记

第 1 讲 服务器安全加固

核心目标

将裸奔的 Rocky Linux9 服务器加固,实现密钥登录、两层防火墙防护、fail2ban自动封禁暴力破解,掌握VNC自救手段。

两条登录通道

SSH密钥认证原理

密钥分为私钥(存本地电脑,绝不外传)、公钥(上传服务器,可以公开)。服务器使用公钥出题,只有私钥可以解密完成登录。

关键操作命令

# 查看ssh登录失败爆破日志
sudo journalctl -u sshd | grep -i "failed" | tail -30

# 新建普通用户并加入wheel管理员组
sudo adduser study
sudo passwd study
sudo usermod -aG wheel study

# 本地电脑生成ed25519密钥对
ssh-keygen -t ed25519 -C "名字-服务器加固"

# 服务器创建密钥目录,设置权限(权限过松ssh拒绝密钥登录)
mkdir -p ~/.ssh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

# 测试sshd配置语法,重载配置
sudo sshd -t
sudo systemctl reload sshd

# firewalld放行ssh服务
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

# 安装epel源与fail2ban
sudo dnf install -y epel-release
sudo dnf install -y fail2ban

# 启动fail2ban开机自启,查看sshd防护状态
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

sshd_config重要配置项

三个运维习惯

  1. 私钥永不外传;
  2. 改配置先留后路(VNC);
  3. 先验证,再收口;密钥登录测试成功之后再关闭密码登录。

故障自救

SSH锁门外:阿里云VNC登录服务器,修改sshd_config,执行语法校验后重载sshd服务。密钥登录输密码,大概率是.ssh目录与authorized_keys权限不对。

第 2 讲 网站上线:域名解析与Nginx个人主页

核心目标

配置DNS域名解析,安装Nginx,发布带ICP备案号的静态个人主页;理解安全组+firewalld两层防火墙;排查403、404、访问超时。

DNS域名解析

DNS相当于互联网通讯录,将域名转换服务器公网IP。使用A记录指向IPv4。

网页访问三环节

  1. DNS解析,域名指向服务器公网IP
  2. 安全组+firewalld放行TCP 80(HTTP)端口
  3. Nginx Web服务接收请求返回网页文件

关键命令

# 测试域名解析
nslookup 你的域名
nslookup www.你的域名

# firewalld放行http 80端口
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
sudo firewall-cmd --list-services

# 安装启动Nginx
sudo dnf install -y nginx
sudo systemctl enable --now nginx
systemctl status nginx
nginx -v

# 创建网站目录,修改属主权限
sudo mkdir -p /var/www/mysite
sudo chown -R study:study /var/www/mysite
sudo chmod 755 /var/www/mysite

# nginx配置语法检查,重载配置
sudo nginx -t
sudo systemctl reload nginx

# scp本地网页上传服务器
scp index.html study@服务器IP:/var/www/mysite/

# 实时查看网站访问日志
sudo tail -f /var/log/nginx/mysite_access.log

Nginx虚拟主机server_name原理

Nginx读取HTTP请求头Host字段,匹配server_name;IP访问没有域名Host,匹配不到自定义站点,返回系统默认Nginx页面。

403 Forbidden常见原因

Nginx工作进程以nginx用户运行;网页文件权限至少644,网站目录权限至少755;优先查看nginx错误日志排查Permission denied。

合规要求

网站首页底部必须放置ICP备案号,跳转工信部备案查询官网。

第 3 讲 HTTPS与证书自动续期

核心目标

理解HTTP明文风险,部署Let's Encrypt免费HTTPS证书;配置Nginx的80跳转HTTPS;配置证书自动续期。证书有效期仅90天。

HTTP与HTTPS区别

Let's Encrypt证书验证方式 HTTP‑01

CA机构在公网访问服务器上特定路径/.well‑known/acme‑challenge/验证文件,确认域名控制权,才颁发证书。

⚠️80端口不能关闭:①用户http访问跳转https;②证书续期依旧需要80端口验证域名所有权。

证书文件说明

关键命令

# 抓包观察80明文流量
sudo dnf install -y tcpdump
sudo tcpdump -i any -A -nn 'tcp port 80' | grep -a -E "GET |Host:|User-Agent|"

# firewalld放行https 443端口
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-services

# 安装certbot证书工具
sudo dnf install -y certbot
certbot --version

# certbot演练申请证书(测试环境,不消耗次数)
sudo certbot certonly --webroot -w /var/www/mysite \
-d example.com -d www.example.com \
-m 邮箱 --agree-tos --no-eff-email --dry-run

# 正式申请证书(去掉--dry-run)
sudo certbot certonly --webroot -w /var/www/mysite \
-d example.com -d www.example.com \
-m 邮箱 --agree-tos --no-eff-email

# 查看本机证书列表
sudo certbot certificates

# 启用certbot自动续期定时器
sudo systemctl enable --now certbot-renew.timer
systemctl list-timers 'certbot*'

# 模拟证书续期演练
sudo certbot renew --dry-run

Nginx配置要点

证书续期钩子

证书更新只是修改磁盘文件,Nginx不会自动加载;部署deploy钩子脚本,证书续期成功后自动执行 systemctl reload nginx。脚本必须赋予执行权限。