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

只要你的服务器拥有公网 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。

TAB分类
💡 点击标签可切换下方对比内容
视图分类:

配置规则 (jail.local)

[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. 结业练习

任务 1 SSL 实验室 安装 certbot 并尝试获取一个免费证书。使用 SSL Labs 测试你的 Nginx,目标是拿到 A+ 评分。
练习 2 SSH 脚本化 编写一个简单的 Bash 脚本,自动提取 journalctl 中尝试暴力破解 SSH 的 IP 地址,并统计出现次数。
练习 3 防火墙策略 使用 ufw 配置策略,仅允许你办公室内网的 IP 访问 SSH 端口,其他 IP 一律拒绝。
💡 Tip

安全是一场持久战。建议开启 SSH 二步验证 (2FA/OTP) 或使用 Tailscale/WireGuard 构建内网私服环境,彻底将 SSH 服务隐藏在公网之后。

Navigation