运维救援:网络服务与安全加固

只要你的服务器拥有公网 IP,它每秒都在遭受全球范围的自动化扫描。本章节将教你如何配置生产级的网络服务,并建立多层防御体系。


1. 反向代理进阶:Nginx 生产级配置

1.1 SSL/TLS 现代加密

不再只是 80 端口。你需要 Let’s Encrypt 配合 Certbot 自动签发证书。

Nginx SSL 安全头最佳实践

编辑 /etc/nginx/conf.d/site.conf:

server {
    listen 443 ssl http2; # 启用 HTTP/2
    server_name myblog.com;
 
    ssl_certificate /etc/letsencrypt/live/myblog.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/myblog.com/privkey.pem;
 
    # 强力加固
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
}

2. SSH 加固:不仅是改端口

2.1 修改配置文件 /etc/ssh/sshd_config

  1. 禁止密码登录: PasswordAuthentication no (仅允许 Ed25519/RSA 密钥)。
  2. 限制登录用户: AllowUsers susu dev_admin (黑名单模式不如白名单模式)。
  3. 禁用空密码: PermitEmptyPasswords no

2.2 客户端优化 ~/.ssh/config

别再记 IP 了!在本地配置别名:

Host my-server
    HostName 1.2.3.4
    Port 2222
    User susu
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60  # 防止连接闲置超时断开

现在只需输入 ssh my-server 即可一键登录。


3. 动态防御:Fail2Ban

Fail2Ban 是服务器的“门禁”。它实时监控 /var/log/auth.log,发现暴力破解行为即自动拉黑其 IP。

[sshd]
enabled = true
port = 2222
filter = sshd
# 10 分钟内失败 3 次
maxretry = 3
# 封禁 1 天
bantime = 86400
# 查看 SSH 监狱状态
sudo fail2ban-client status sshd
 
# 手动解封某个 IP
sudo fail2ban-client set sshd unbanip <IP>

4. 深度诊断:网络排障命令

命令场景说明
ss -ntlp谁在听?查看当前哪些进程正在监听端口(iproute2 代替 netstat)
mtr -rw google.com哪断了?链路追踪,实时显示每一跳路由的延迟与丢包率
lsof -i :80谁占了 80?查找占用特定端口的进程及其文件句柄
curl -vI https://url证书对吗?查看 HTTP 握手细节及 SSL 证书有效期

5. 结业练习

Navigation