服务器安全设置
服务器安全设置
VPS安全是网站运营的基础。本教程将详细介绍如何全面加固搬瓦工VPS的安全性,包括防火墙配置、SSH安全、防暴力破解、定期备份等措施,保护你的服务器免受攻击。
为什么服务器安全很重要
- 数据保护:防止数据泄露和丢失
- 业务连续性:避免服务中断
- 防止资源滥用:避免被用于挖矿、发送垃圾邮件等
- 法律合规:保护用户隐私数据
- 声誉保护:避免网站被挂马或篡改
安全检查清单
在开始优化前,先检查当前安全状态:
# 检查最近的登录记录
last -a | head -20
# 检查失败的登录尝试
lastb | head -20
# 查看当前登录用户
w
# 检查正在运行的进程
ps aux | grep -v root | head -10
# 查看开放的端口
netstat -tuln | grep LISTEN
一、SSH安全加固
SSH是服务器最重要的入口,必须严格保护。
1. 使用SSH密钥登录(强烈推荐)
在本地生成密钥对:
# macOS/Linux/Windows 10+
ssh-keygen -t ed25519 -C "your_email@example.com"
# 或使用RSA 4096位
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
按提示操作:
- 保存路径:直接回车(默认
~/.ssh/id_ed25519) - 密码:可留空或设置密码(更安全)
上传公钥到服务器:
# 方法一:使用ssh-copy-id(推荐)
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@YOUR_SERVER_IP -p SSH_PORT
# 方法二:手动上传
cat ~/.ssh/id_ed25519.pub
然后登录服务器:
ssh root@YOUR_SERVER_IP -p SSH_PORT
# 创建.ssh目录
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 添加公钥
nano ~/.ssh/authorized_keys
# 粘贴公钥内容,保存退出
# 设置权限
chmod 600 ~/.ssh/authorized_keys
测试密钥登录:
退出服务器,重新连接:
ssh root@YOUR_SERVER_IP -p SSH_PORT
如果无需密码即可登录,说明配置成功!
需要安全稳定的VPS?立即选购搬瓦工
2. 禁用密码登录
确认密钥登录正常后,禁用密码登录:
nano /etc/ssh/sshd_config
修改以下配置:
# 禁用密码认证
PasswordAuthentication no
# 禁用质询响应认证
ChallengeResponseAuthentication no
# 启用公钥认证
PubkeyAuthentication yes
# 禁用空密码
PermitEmptyPasswords no
# 禁用Root密码登录(保留密钥登录)
PermitRootLogin prohibit-password
重启SSH服务:
systemctl restart sshd
⚠️ 重要:重启前先测试新连接,确保密钥登录正常,避免锁死自己!
3. 修改SSH端口
搬瓦工默认已使用非22端口,如需再次修改:
nano /etc/ssh/sshd_config
修改端口:
Port 29999 # 使用1024-65535之间的端口
在防火墙开放新端口:
# UFW
ufw allow 29999/tcp
# firewalld
firewall-cmd --permanent --add-port=29999/tcp
firewall-cmd --reload
# iptables
iptables -A INPUT -p tcp --dport 29999 -j ACCEPT
iptables-save > /etc/iptables/rules.v4
重启SSH:
systemctl restart sshd
测试新端口可以登录后,关闭旧端口。
SSH配置完成!多台服务器?购买更多搬瓦工VPS
4. 限制登录尝试次数
编辑SSH配置:
nano /etc/ssh/sshd_config
添加:
# 最多3次认证尝试
MaxAuthTries 3
# 最多2个未认证的连接
MaxStartups 2:30:10
# 登录超时时间(秒)
LoginGraceTime 30
5. 禁用Root登录(推荐)
创建普通用户后禁用root登录更安全:
# 创建新用户
adduser adminuser
# 添加sudo权限
usermod -aG sudo adminuser # Ubuntu/Debian
usermod -aG wheel adminuser # CentOS/RHEL
# 为新用户配置SSH密钥
su - adminuser
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
# 粘贴公钥,保存
chmod 600 ~/.ssh/authorized_keys
exit
测试新用户可以登录并使用sudo后,禁用root登录:
nano /etc/ssh/sshd_config
修改:
PermitRootLogin no
重启SSH:
systemctl restart sshd
6. 使用SSH配置文件简化登录
在本地电脑编辑 ~/.ssh/config:
Host bwg
HostName YOUR_SERVER_IP
Port 29999
User adminuser
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
ServerAliveCountMax 3
之后可以简单地使用:
ssh bwg
二、防火墙配置
防火墙是抵御外部攻击的第一道防线。
使用UFW(Ubuntu/Debian推荐)
UFW(Uncomplicated Firewall)简单易用:
# 安装UFW
apt update
apt install -y ufw
# 设置默认策略
ufw default deny incoming # 拒绝所有入站
ufw default allow outgoing # 允许所有出站
# 允许SSH(使用你的端口)
ufw allow 29999/tcp
# 允许HTTP/HTTPS
ufw allow 80/tcp
ufw allow 443/tcp
# 启用UFW
ufw enable
# 查看状态
ufw status verbose
常用UFW命令:
ufw status numbered # 查看规则编号
ufw delete 2 # 删除第2条规则
ufw allow from 1.2.3.4 # 允许特定IP
ufw deny 3306/tcp # 禁止MySQL外部访问
ufw reload # 重载规则
防火墙配置完成!保护更多服务器?选购搬瓦工VPS
使用firewalld(CentOS/RHEL推荐)
# 安装firewalld
yum install -y firewalld
# 启动服务
systemctl start firewalld
systemctl enable firewalld
# 查看状态
firewall-cmd --state
# 添加服务
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
# 添加端口
firewall-cmd --permanent --add-port=29999/tcp
# 重载配置
firewall-cmd --reload
# 查看规则
firewall-cmd --list-all
使用iptables(传统方式)
# 清空现有规则
iptables -F
# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许SSH
iptables -A INPUT -p tcp --dport 29999 -j ACCEPT
# 允许HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 防止SYN洪水攻击
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
# 保存规则
iptables-save > /etc/iptables/rules.v4
三、防止暴力破解
1. 安装Fail2Ban
Fail2Ban会自动封禁多次登录失败的IP地址。
# Ubuntu/Debian
apt update
apt install -y fail2ban
# CentOS/RHEL
yum install -y epel-release
yum install -y fail2ban
# 启动服务
systemctl start fail2ban
systemctl enable fail2ban
2. 配置Fail2Ban
创建本地配置文件:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
nano /etc/fail2ban/jail.local
修改默认配置:
[DEFAULT]
# 封禁时间(秒)
bantime = 3600
# 检测时间窗口(秒)
findtime = 600
# 最大失败次数
maxretry = 3
# 忽略IP(白名单)
ignoreip = 127.0.0.1/8 YOUR_HOME_IP
[sshd]
enabled = true
port = 29999 # 你的SSH端口
logpath = /var/log/auth.log # Ubuntu/Debian
# logpath = /var/log/secure # CentOS/RHEL
添加Nginx保护(可选):
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
[nginx-noscript]
enabled = true
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 6
重启Fail2Ban:
systemctl restart fail2ban
3. 管理Fail2Ban
# 查看状态
fail2ban-client status
# 查看SSH监狱状态
fail2ban-client status sshd
# 解封IP
fail2ban-client set sshd unbanip 1.2.3.4
# 封禁IP
fail2ban-client set sshd banip 1.2.3.4
# 查看日志
tail -f /var/log/fail2ban.log
Fail2Ban保护就绪!需要更安全的环境?购买独立VPS
四、系统安全加固
1. 定期更新系统
# Ubuntu/Debian
apt update && apt upgrade -y
# CentOS/RHEL
yum update -y
# 自动安全更新(Ubuntu)
apt install -y unattended-upgrades
dpkg-reconfigure --priority=low unattended-upgrades
2. 禁用不必要的服务
# 查看所有服务
systemctl list-unit-files --type=service --state=enabled
# 禁用不需要的服务
systemctl disable postfix # 邮件服务(如不需要)
systemctl disable cups # 打印服务
systemctl disable bluetooth # 蓝牙
3. 设置系统限制
编辑 /etc/security/limits.conf:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
4. 禁用IPv6(如不使用)
编辑 /etc/sysctl.conf:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
应用配置:
sysctl -p
5. 配置SELinux/AppArmor
CentOS - SELinux:
# 查看状态
getenforce
# 临时设置为Enforcing模式
setenforce 1
# 永久启用
nano /etc/selinux/config
# SELINUX=enforcing
Ubuntu - AppArmor:
# 查看状态
aa-status
# 启用配置
aa-enforce /etc/apparmor.d/*
五、网站安全
1. 配置安全HTTP头
在Nginx配置中添加:
server {
# 防止点击劫持
add_header X-Frame-Options "SAMEORIGIN" always;
# 启用XSS保护
add_header X-XSS-Protection "1; mode=block" always;
# 防止MIME类型嗅探
add_header X-Content-Type-Options "nosniff" always;
# 引用策略
add_header Referrer-Policy "no-referrer-when-downgrade" always;
# 内容安全策略
add_header Content-Security-Policy "default-src 'self' https: data: 'unsafe-inline' 'unsafe-eval';" always;
# HSTS(强制HTTPS)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
2. 隐藏服务器信息
Nginx:
http {
server_tokens off;
}
Apache:
ServerTokens Prod
ServerSignature Off
PHP:
expose_php = Off
3. 限制请求大小和速率
Nginx限流:
http {
# 限制请求速率
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
# 限制连接数
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location / {
limit_req zone=one burst=5;
limit_conn addr 10;
}
}
}
4. 防止目录遍历
location / {
autoindex off;
}
5. 保护敏感文件
# 禁止访问隐藏文件
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
# 禁止访问备份文件
location ~* \.(bak|config|sql|fla|psd|ini|log|sh|inc|swp|dist)$ {
deny all;
}
六、数据库安全
1. MySQL安全加固
# 运行安全配置向导
mysql_secure_installation
按提示操作:
- 设置root密码
- 删除匿名用户
- 禁止root远程登录
- 删除test数据库
- 重载权限表
2. 创建独立数据库用户
mysql -u root -p
-- 创建数据库
CREATE DATABASE mywebsite;
-- 创建用户(仅本地访问)
CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'strong_password_here';
-- 授予权限
GRANT ALL PRIVILEGES ON mywebsite.* TO 'webuser'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;
EXIT;
3. 禁止MySQL外部访问
编辑 /etc/mysql/mysql.conf.d/mysqld.cnf:
[mysqld]
bind-address = 127.0.0.1
重启MySQL:
systemctl restart mysql
4. 定期备份数据库
# 手动备份
mysqldump -u root -p --all-databases > /backup/all-databases-$(date +%F).sql
# 自动备份脚本
nano /root/backup-mysql.sh
添加内容:
#!/bin/bash
BACKUP_DIR="/backup/mysql"
DATE=$(date +%F)
mkdir -p $BACKUP_DIR
mysqldump -u root -pYOUR_PASSWORD --all-databases | gzip > $BACKUP_DIR/all-databases-$DATE.sql.gz
# 保留最近7天备份
find $BACKUP_DIR -type f -mtime +7 -delete
设置权限和定时任务:
chmod +x /root/backup-mysql.sh
crontab -e
# 每天凌晨2点备份
0 2 * * * /root/backup-mysql.sh
七、日志监控
1. 配置日志轮转
编辑 /etc/logrotate.d/nginx:
/var/log/nginx/*.log {
daily
rotate 14
missingok
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
2. 监控重要日志
# SSH登录日志
tail -f /var/log/auth.log # Ubuntu/Debian
tail -f /var/log/secure # CentOS/RHEL
# Nginx访问日志
tail -f /var/log/nginx/access.log
# Nginx错误日志
tail -f /var/log/nginx/error.log
# MySQL日志
tail -f /var/log/mysql/error.log
3. 设置日志告警
安装logwatch:
apt install -y logwatch # Ubuntu/Debian
yum install -y logwatch # CentOS/RHEL
# 配置每日发送报告
nano /etc/cron.daily/00logwatch
添加:
#!/bin/bash
/usr/sbin/logwatch --output mail --mailto your@email.com --detail high
八、文件权限管理
1. 设置正确的文件权限
# Web目录权限
chown -R www-data:www-data /var/www/html # Ubuntu/Debian
chown -R nginx:nginx /var/www/html # CentOS/RHEL
# 目录755,文件644
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
# 配置文件400(仅owner可读)
chmod 400 /path/to/config.php
2. WordPress特定权限
# WordPress目录
chown -R www-data:www-data /var/www/wordpress
# wp-config.php权限
chmod 400 /var/www/wordpress/wp-config.php
# uploads目录
chmod 755 /var/www/wordpress/wp-content/uploads
九、备份策略
1. 文件备份
# 创建备份脚本
nano /root/backup-files.sh
内容:
#!/bin/bash
BACKUP_DIR="/backup/files"
DATE=$(date +%F)
SOURCE="/var/www /etc/nginx /etc/php"
mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/backup-$DATE.tar.gz $SOURCE
# 保留最近7天
find $BACKUP_DIR -type f -mtime +7 -delete
2. 自动备份到远程
使用rsync同步到远程服务器:
rsync -avz --delete /backup/ user@remote:/remote-backup/
3. 使用宝塔面板备份(推荐)
如果使用宝塔面板:
- 登录面板
- "计划任务" > "添加任务"
- 选择备份类型(网站/数据库)
- 设置备份周期
- 选择保留天数
- 可设置上传到云存储(阿里云OSS、七牛等)
十、入侵检测
1. 安装RKHunter
检测rootkit和后门:
apt install -y rkhunter # Ubuntu/Debian
yum install -y rkhunter # CentOS/RHEL
# 更新数据库
rkhunter --update
# 运行检查
rkhunter --check --sk
2. 安装ClamAV
开源杀毒软件:
apt install -y clamav clamav-daemon # Ubuntu/Debian
yum install -y clamav clamav-update # CentOS/RHEL
# 更新病毒库
freshclam
# 扫描目录
clamscan -r /var/www
3. 文件完整性监控(AIDE)
apt install -y aide
# 初始化数据库
aideinit
# 检查变化
aide --check
安全检查清单
定期执行以下检查:
- [ ] 检查SSH登录日志,发现异常IP
- [ ] 查看Fail2Ban封禁记录
- [ ] 更新系统和软件包
- [ ] 检查防火墙规则
- [ ] 验证备份完整性
- [ ] 扫描病毒和rootkit
- [ ] 检查磁盘使用率
- [ ] 查看资源占用(CPU/内存)
- [ ] 测试备份恢复流程
- [ ] 审查用户账号和权限
紧急响应
如果服务器被入侵:
- 立即断网:
ifconfig eth0 down - 备份证据:复制日志文件
- 分析入侵:查看日志,找出入侵途径
- 清除后门:删除可疑文件和账号
- 重装系统:如果无法确定后门位置
- 恢复数据:从备份恢复
- 加固安全:修补漏洞,加强防护
- 监控观察:恢复后密切监控
常见问题
1. SSH连接很慢
可能是DNS反向解析导致,编辑 /etc/ssh/sshd_config:
UseDNS no
2. Fail2Ban没有生效
检查日志路径是否正确,确认服务运行:
systemctl status fail2ban
tail -f /var/log/fail2ban.log
3. 防火墙规则配置错误导致无法连接
使用搬瓦工KiwiVM控制面板的Web Shell紧急登录,修复规则。
下一步
安全加固完成后:
- 定期检查安全状态
- 关注安全公告,及时更新
- 进行渗透测试
- 购买SSL证书(或使用Let's Encrypt)
- 考虑使用CDN(如Cloudflare)
安全是持续的过程,不是一次性任务。定期检查和更新是保持VPS安全的关键。
立即购买安全稳定的VPS:访问搬瓦工官网