前言
搭建自己的云服务器是每个开发者都会经历的过程。从购买服务器到正式上线,中间涉及众多配置步骤。本文将系统性地梳理Linux云服务器的常用设置,帮助你从零开始搭建一个安全、高效的服务器环境。
更改默认Shell
Ubuntu系统默认使用dash作为shell,但bash在交互使用和脚本编写中更为常见。建议将默认shell更改为bash。
# 执行以下命令更改shell
dpkg-reconfigure dash
选择 <No> 后,使用以下命令验证更改:
# 查看当前shell类型
ls -l /bin/sh
用户权限管理
为了提高服务器安全性,应该创建普通用户来替代root执行日常操作,避免直接使用root账户带来的安全风险。
创建新用户
# 创建用户(Ubuntu系统需要添加-m参数以创建home目录)
useradd test -m
# 设置用户密码
passwd test
赋予管理员权限
将用户添加到sudo组,即可在执行命令前使用sudo获取root权限:
# 将test用户添加到sudo组
gpasswd -a test sudo
# 切换到test用户
su test
SSH免密登录
SSH密钥认证比密码登录更安全,且无需每次输入密码,特别适合自动化脚本和CI/CD流程。
生成SSH密钥
在本地机器上执行以下命令生成密钥对:
# 生成SSH密钥对(直接回车使用默认值)
ssh-keygen
生成的文件中:
id_rsa— 私钥,必须严格保密id_rsa.pub— 公钥,需要上传到服务器
上传公钥到服务器
# 一键上传公钥到服务器
ssh-copy-id test@1.2.3.4
完成后,即可实现免密登录:
# 测试免密登录
ssh test@1.2.3.4
配置Git
服务器通常需要从GitHub等平台获取最新代码,因此配置Git是必不可少的步骤。
安装Git
# 更新软件包列表
apt-get update
# 安装Git
apt-get install git
常用apt-get命令
apt-get update # 更新软件包列表
apt-get install packagename # 安装软件包
apt-get remove packagename # 卸载软件包(保留配置)
apt-get remove --purge packagename # 卸载软件包(删除配置)
apt-get autoremove packagename # 删除包及其依赖
配置GitHub SSH访问
# 测试GitHub连接
ssh -T git@github.com
看到成功认证信息后,即可克隆代码:
# 克隆项目
git clone git@git.xxx/xxx.git
# 拉取最新代码
cd project
git pull
修改SSH端口
默认的SSH端口22是攻击者重点扫描的目标。修改为其他端口可以有效降低被扫描和暴力破解的概率。
注意: 此操作需要在root用户下进行,否则可能出现权限问题。
修改配置文件
编辑 /etc/ssh/sshd_config 文件,将端口改为1024以上的任意端口,例如2000。
重启SSH服务
# 重启SSH服务使配置生效
sudo service ssh restart
更新云服务商安全组
在阿里云、腾讯云等云服务商控制台的安全规则中,添加新的端口(如2000)。
配置防火墙
防火墙是服务器安全的第一道防线。通过配置iptables规则,可以精确控制进出服务器的流量。
创建防火墙规则文件
在 /etc 目录下创建 iptables.up.rules 文件:
*filter
# 允许已建立的连接
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许出站流量
-A OUTPUT -j ACCEPT
# 允许HTTP/HTTPS
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
# 允许SSH端口登录
-A INPUT -p tcp -m state --state NEW --dport 2000 -j ACCEPT
# 允许ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# 记录被拒绝的连接
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied:" --log-level 7
# 限制单IP连接数(防止CC攻击)
-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 150 -j DROP
# 拒绝所有其他入站连接
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
应用防火墙规则
# 使防火墙规则生效
iptables-restore < /etc/iptables.up.rules
# 查看防火墙状态
ufw status
# 开启防火墙
ufw enable
设置开机自动启动
在 /etc/network/if-up.d 目录下创建iptables脚本:
#!/bin/sh
iptables-restore /etc/iptables.up.rules
赋予执行权限:
chmod +x /etc/network/if-up.d/iptables
配置Nginx反向代理
当服务器需要运行多个应用时,Nginx可以实现端口代理、负载均衡和静态资源服务。
卸载旧版本Nginx
sudo apt-get remove nginx nginx-common
sudo apt-get purge nginx nginx-common
sudo apt-get autoremove
安装Nginx
# 更新包列表
sudo apt-get update
# 安装Nginx
sudo apt-get install nginx
配置反向代理
在 /etc/nginx/conf.d 下创建配置文件,例如 test-8081.conf:
upstream backend {
server 127.0.0.1:8081;
}
server {
listen 80;
server_name 1.2.3.4;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
proxy_pass http://backend;
proxy_redirect off;
}
}
验证与重启
# 测试配置文件语法
sudo nginx -t
# 重启Nginx
sudo nginx -s reload
隐藏服务器信息
在主配置文件中关闭版本暴露:
# 在http块中添加
server_tokens off;
域名解析配置
使用DNSPod等DNS服务商进行域名解析,在域名注册商处设置DNS服务器。
设置DNS服务器
f1g1ns1.dnspod.net
f1g1ns2.dnspod.net
在DNSPod控制台添加域名解析记录即可。
配置SSL证书
HTTPS是现代网站的标配,可以保护用户数据传输安全,同时提升搜索引擎排名。
申请SSL证书
可以在七牛云、阿里云等平台申请免费SSL证书,建议选择文件验证方式。
创建验证目录
# 在服务器根目录创建验证目录
mkdir -p /.well-known/pki-validation
Node.js服务配置验证接口
app.get('/.well-known/pki-validation/fileauth.txt', (req, res) => {
res.send('验证文件内容');
});
Nginx配置静态验证
location /.well-known/pki-validation {
alias /var/www/html/.well-known/pki-validation;
}
配置HTTPS
上传证书文件后,修改Nginx配置:
server {
listen 80;
server_name example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443;
server_name example.com;
ssl on;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://backend;
}
}
PM2自动化部署
PM2是Node.js生产环境的进程管理器,支持应用守护、日志管理和自动化部署。
安装PM2
# 全局安装PM2(必须全局安装)
cnpm install pm2 -g
PM2常用命令
pm2 start app.js # 启动应用
pm2 start app.js --watch # 文件变化自动重启
pm2 list # 查看所有应用
pm2 monit # 监控CPU和内存
pm2 logs # 查看日志
pm2 stop all # 停止所有应用
pm2 restart all # 重启所有应用
pm2 delete all # 删除所有应用
pm2 startup # 设置开机自启
配置自动部署
在项目目录下创建 ecosystem.json:
{
"apps": [{
"name": "myapp",
"script": "./bin/www",
"env": {
"NODE_ENV": "production"
}
}],
"deploy": {
"production": {
"user": "deploy",
"host": ["1.2.3.4"],
"port": "22",
"ref": "origin/master",
"repo": "git@git.xxx/xxx.git",
"path": "/home/deploy/www/myapp",
"post-deploy": "npm install && pm2 startOrRestart ecosystem.json --env production"
}
}
}
执行部署
# 初始化部署目录
pm2 deploy ecosystem.json production setup
# 部署应用
pm2 deploy ecosystem.json production
MongoDB安全配置
数据库安全是服务器安全的重要组成部分,需要从端口、用户权限和备份等方面进行配置。
修改MongoDB端口
编辑 /etc/mongod.conf 文件,修改默认端口27017为其他端口(如20000):
net:
port: 20000
bindIp: 0.0.0.0 # 注释此行允许远程访问
重启MongoDB服务:
sudo service mongod restart
创建管理员用户
// 切换到admin数据库
use admin
// 创建管理员
db.createUser({
user: "admin",
pwd: "your_password",
roles: [{ role: "root", db: "admin" }]
})
// 验证管理员权限
db.auth("admin", "your_password")
创建应用数据库用户
// 进入应用数据库
use myapp
// 创建数据库用户
db.createUser({
user: "myapp",
pwd: "your_password",
roles: [{ role: "dbOwner", db: "myapp" }]
})
启用认证
在 mongod.conf 中启用认证:
security:
authorization: 'enabled'
重启服务后,使用用户名密码登录:
mongo 127.0.0.1:20000/myapp -u myapp -p your_password
数据备份脚本
创建 backup.sh 脚本:
#!/bin/sh
backFolder=/home/deploy/backup
date_now=$(date +%Y_%m_%d_%H%M)
backFileName=myapp_$date_now
cd $backFolder
mkdir -p $backFileName
# 备份数据库
mongodump -h 127.0.0.1:20000 -d myapp -u myapp -p your_password -o $backFileName
# 压缩备份文件
tar zcvf $backFileName.tar.gz $backFileName
# 删除临时目录
rm -rf $backFileName
设置定时备份
使用crontab设置定时任务:
# 编辑定时任务
sudo crontab -e
# 添加定时任务(每天凌晨2点执行备份)
0 2 * * * sh /home/deploy/backup/backup.sh
总结
Linux云服务器的配置涉及多个方面,从基础的shell设置到生产环境的自动化部署,每个环节都关系到服务器的稳定性和安全性。建议按照本文的步骤逐一配置,并定期进行安全审计和性能优化。
重点关注以下几点:
- 使用普通用户替代root操作
- 启用SSH密钥认证
- 配置完善的防火墙规则
- 使用Nginx进行反向代理和负载均衡
- 启用HTTPS加密传输
- 实现自动化的备份和部署
通过以上配置,你可以搭建一个安全、高效、易于维护的云服务器环境。