一、核心原理:为什么你的服务总是“裸奔”在公网上?
💡 推荐阅读:还在被502折磨?Nginx反向代理配置从入门到生产级调优,这篇讲透了
很多站长在购买云服务器后,第一件事就是急不可耐地部署 Nginx、MySQL 或者业务代码。但笔者在帮朋友排查故障时发现,超过 80% 的新购服务器存在一个致命通病:防火墙规则形同虚设,SSH 端口暴露在公网且允许密码登录。
Linux 的安全管理并非简单的“装个杀毒软件”,而是一个基于最小权限原则与纵深防御策略的体系。服务管理的本质是进程生命周期控制(systemd),而安全管理的本质是攻击面收敛。只有理解了“服务即端口,端口即风险”这一核心逻辑,你才能明白后续每一步加固操作的意义所在。
二、生产环境架构规范:从初始化到服务部署的黄金准则
💡 延伸阅读:别再只会 docker run 了:生产级容器部署的架构规范与性能调优实战
2.1 系统初始化三板斧
拿到一台全新的 CentOS 7.9 或 Ubuntu 22.04 服务器,不要急着跑 `apt update`,先执行以下操作:
# 1. 更新系统补丁(务必先做)
yum update -y # 或 apt update && apt upgrade -y
# 2. 创建普通运维用户,禁止 root 直连
useradd deploy
echo 'Your_Strong_Password' | passwd --stdin deploy
usermod -aG wheel deploy # CentOS 使用 wheel 组,Ubuntu 使用 sudo 组
# 3. 配置 SSH 密钥登录
mkdir -p /home/deploy/.ssh
echo 'ssh-rsa AAAA...your-public-key...' >> /home/deploy/.ssh/authorized_keys
chown -R deploy:deploy /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
chmod 600 /home/deploy/.ssh/authorized_keys
注意:生产环境严禁直接修改 `sshd_config` 后不测试就重启。务必使用 `sshd -t` 校验语法,再执行 `systemctl reload sshd`。一旦你断开了当前连接,而新配置有误,你将面临“进不去服务器”的尴尬局面。
2.2 服务部署规范:非 root 运行与目录隔离
很多教程让你直接用 `root` 跑 Nginx 或 Java Jar 包,这在生产环境是大忌。笔者建议使用 systemd 的 DynamicUser 特性或单独创建服务账号:
# 创建一个无法登录的系统用户
useradd -r -s /sbin/nologin webapp
# 授权目录
chown -R webapp:webapp /data/www
# 编辑服务单元文件
cat > /etc/systemd/system/myapp.service <<'EOF'
[Unit]
Description=My Custom Web Application
After=network.target
[Service]
User=webapp
Group=webapp
WorkingDirectory=/data/www
ExecStart=/usr/bin/java -jar /data/www/app.jar
Restart=always
RestartSec=3
NoNewPrivileges=true
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now myapp
上述配置中的 NoNewPrivileges=true 能有效防止提权攻击,PrivateTmp=true 则隔离了临时目录,这些都是容易被忽略但极其重要的安全参数。
三、性能与安全加固调优清单(强烈建议截图保存)
💡 深度技术指南:Nginx 反向代理多端口实战:从裸奔到高可用架构的平滑演进之路
3.1 内核参数与连接优化
高并发下,默认的 TCP 配置会导致大量 TIME_WAIT 连接堆积。在 `/etc/sysctl.conf` 中添加以下参数:
# 减少 TIME_WAIT 消耗
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
# 提升文件句柄限制
fs.file-max = 6553560
# 开启 SYN Flood 保护
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_syn_retries = 2
# 端口范围扩大
net.ipv4.ip_local_port_range = 1024 65535
执行 sysctl -p 生效。这里要特别提醒:不要盲目照搬网上的 `tcp_tw_recycle` 参数,NAT 环境下开启会导致连接异常,这是无数站长踩过的坑。
3.2 防火墙与 Fail2ban 联动
防火墙推荐使用 firewalld(CentOS)或 UFW(Ubuntu),但核心思路一致:
# 仅放行业务端口,其余全 DROP
firewall-cmd --permanent --zone=public --remove-service=ssh
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="你的办公IP/32" port port="22" protocol="tcp" accept'
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --reload
同时,安装 Fail2ban 来保护 SSH 和 Web 服务,防止暴力破解:
yum install fail2ban -y
cat > /etc/fail2ban/jail.local <<'EOF'
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
[sshd]
enabled = true
[nginx-http-auth]
enabled = true
EOF
systemctl enable --now fail2ban
3.3 服务性能关键参数调优
以最常见的 Nginx 为例,合理的配置能让你用 1G 内存扛住日均几万 PV:
worker_processes auto;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 10240;
}
http {
# 开启 gzip 压缩
gzip on;
gzip_min_length 1k;
gzip_types text/plain text/css application/json application/javascript;
# 隐藏版本号,防止针对性攻击
server_tokens off;
# 连接超时设置
keepalive_timeout 30;
client_body_timeout 10;
client_header_timeout 10;
send_timeout 10;
# 上传大小限制(防止恶意大包)
client_max_body_size 10m;
}
对于 MySQL 数据库,笔者建议你优先调整 innodb_buffer_pool_size 为物理内存的 60%-70%,并开启慢查询日志:
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
四、验证测试与 SOP 总结
4.1 安全验证清单
加固完成后,别急着宣布大功告成。请按照以下步骤自测:
| 测试项目 | 命令/工具 | 预期结果 |
|---|---|---|
| 端口监听状态 | ss -tlnp |
仅看到 80、443、3306(绑定内网)等必要端口 |
| SSH 暴力破解模拟 | 使用 hydra 测试 5 次错误密码 | IP 被 Fail2ban 封禁(fail2ban-client status sshd 查看) |
| 内核参数生效 | sysctl -a | grep tcp_tw_reuse |
输出为 net.ipv4.tcp_tw_reuse = 1 |
| Web 服务性能压测 | ab -n 10000 -c 500 http://你的域名/ |
Failed requests 为 0,Requests per second 优于基线 |
4.2 日常运维 SOP 速查
- 每日巡检:使用
journalctl -p err -b查看内核错误日志,检查磁盘空间df -h使用率是否超过 80%。 - 每周任务:执行
yum update --security仅更新安全补丁,避免影响业务兼容性。 - 备份策略:对 `/etc` 目录和数据库执行异地备份,推荐使用 `rsync + crontab` 推送到对象存储。
最后,笔者想多说一句。安全加固不是一锤子买卖,而是持续对抗的过程。即便你做好了上述所有的配置,如果底层云服务商本身不靠谱,数据丢失也只是一瞬间的事。这也是为什么笔者一直强调,选择带有免费快照和自动隔离机制的云厂商比纠结某个参数更重要。如果你还没有一台合适的服务器用于练手,不妨考虑选择一家大厂的标准型云服务器,新用户通常能以极低的价格获得包含云盾基础防护的实例。毕竟,在真实的生产环境里摔过跤,远比在虚拟机上敲命令记得更牢。
相关技术专题与延伸阅读
- 还在被502折磨?Nginx反向代理配置从入门到生产级调优,这篇讲透了
- 别再只会 docker run 了:生产级容器部署的架构规范与性能调优实战
- Nginx 反向代理多端口实战:从裸奔到高可用架构的平滑演进之路
- 云服务器测评与性能调优的区别到底在哪?别再傻傻分不清了,看完这篇你就懂了
📦 【资源免费领】本文全套实操配置文件与避坑手册下载
本文涉及的全套 Docker Compose 配置文件、服务器运维避坑清单及 AI 提效指令库已完整打包,可免费极速转存:
💡 提示:推荐使用手机【夸克网盘 App】打开保存,新用户首月免费赠送 1TB 超大空间与免流量极速下载特权。