运维救援:网络服务与安全加固
只要你的服务器拥有公网 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
- 禁止密码登录:
PasswordAuthentication no(仅允许 Ed25519/RSA 密钥)。 - 限制登录用户:
AllowUsers susu dev_admin(黑名单模式不如白名单模式)。 - 禁用空密码:
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 证书有效期 |