我的运维笔记

第01讲 服务器安全加固

学习目标

重要运维习惯

  1. 私钥永不外传
  2. 改配置先留后路(VNC作为兜底)
  3. 先验证,再收口(新功能验证可用再关闭旧方式)

两条登录通道

查看SSH暴力破解日志

sudo journalctl -u sshd | grep -i "failed" | tail -30

创建普通用户study

sudo adduser study
sudo passwd study
sudo usermod -aG wheel study

本地电脑生成ed25519密钥对

ssh-keygen -t ed25519 -C "你的名字-服务器加固"

Windows查看公钥:type $env:USERPROFILE\.ssh\id_ed25519.pub

Mac/Linux查看公钥:cat ~/.ssh/id_ed25519.pub

服务器配置公钥权限(关键,权限过松SSH拒绝登录)

mkdir -p ~/.ssh
chmod 700 ~/.ssh
vi ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
ls -l ~/.ssh

测试密钥登录

ssh study@服务器公网IP

创建teacher巡检账号,配置免密sudo

sudo adduser teacher
sudo mkdir -p /home/teacher/.ssh
sudo vi /home/teacher/.ssh/authorized_keys
sudo chmod 700 /home/teacher/.ssh
sudo chmod 600 /home/teacher/.ssh/authorized_keys
sudo chown -R teacher:teacher /home/teacher/.ssh
echo "teacher ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/teacher
sudo chmod 440 /etc/sudoers.d/teacher
sudo visudo -c
sudo -u teacher sudo -n true && echo "teacher 免密 sudo 可用"

修改sshd配置 /etc/ssh/sshd_config

修改/新增配置项:

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

fail2ban 安装与配置

sudo dnf install -y epel-release
sudo dnf install -y fail2ban

编辑 /etc/fail2ban/jail.d/sshd.local

[sshd]
enabled = true
backend = systemd
maxretry = 3
findtime = 600
bantime = 3600
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

知识点小结

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

学习目标

DNS解析记录要点

nslookup 你的域名
nslookup www.你的域名

防火墙放行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
ls -ld /var/www/mysite

Nginx站点配置文件 /etc/nginx/conf.d/mysite.conf

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/mysite;
    index index.html;
    access_log /var/log/nginx/mysite_access.log;
    error_log /var/log/nginx/mysite_error.log;
    location / {
        try_files $uri $uri/ =404;
    }
}
sudo nginx -t
sudo systemctl reload nginx

上传网页文件 scp

scp index.html study@你的服务器公网IP:/var/www/mysite/

curl模拟Host请求头,理解server_name匹配机制

curl -H "Host: 你的域名" http://127.0.0.1
curl http://127.0.0.1 | head -5

403故障排查实验

网页文件权限最低 644;网站目录权限最低 755。Nginx工作进程以nginx用户运行。查看错误日志定位Permission denied。

sudo tail -3 /var/log/nginx/mysite_error.log

实时看网站访问日志

sudo tail -f /var/log/nginx/mysite_access.log

重要知识点

第03讲 HTTPS与证书自动续期

学习目标

http明文抓包,查看明文流量

sudo dnf install -y tcpdump
sudo tcpdump -i any -A -nn 'tcp port 80' | grep -a -E "GET |Host:|User-Agent|<title>"

开放443 HTTPS端口(80端口不可关闭)

sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-services

安装certbot证书工具

sudo dnf install -y certbot
certbot --version

演练申请证书(--dry-run,不消耗正式次数)

sudo certbot certonly --webroot -w /var/www/mysite \
-d example.com -d www.example.com \
-m 你的邮箱 --agree-tos --no-eff-email --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
sudo ls -l /etc/letsencrypt/live/example.com/
sudo openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -noout -issuer -dates -ext subjectAltName

备份旧Nginx配置

sudo cp /etc/nginx/conf.d/mysite.conf /etc/nginx/conf.d/mysite.conf.bak

完整HTTPS Nginx配置

# 80端口,ACME验证 + 301跳转https
server {
    listen 80;
    server_name example.com www.example.com;
    location /.well-known/acme-challenge/ {
        root /var/www/mysite;
    }
    location / {
        return 301 https://$host$request_uri;
    }
}

# 443 https站点
server {
    listen 443 ssl;
    server_name example.com www.example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    root /var/www/mysite;
    index index.html;
    access_log /var/log/nginx/mysite_access.log;
    error_log /var/log/nginx/mysite_error.log;
    location / {
        try_files $uri $uri/ =404;
    }
}
sudo nginx -t
sudo systemctl reload nginx

启用certbot自动续期定时器

sudo systemctl enable --now certbot-renew.timer
systemctl list-timers 'certbot*'

deploy钩子脚本:续期成功自动重载nginx

编辑 /etc/letsencrypt/renewal‑hooks/deploy/reload‑nginx.sh

#!/bin/bash
systemctl reload nginx
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
sudo /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

模拟续期演练

sudo certbot renew --dry-run

HTTPS抓包实验(443端口密文)

sudo tcpdump -i any -A -nn -c 40 'tcp port 443'

核心笔记