搬瓦工中文网

服务器安全设置

服务器安全设置

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. 使用宝塔面板备份(推荐)

如果使用宝塔面板:

  1. 登录面板
  2. "计划任务" > "添加任务"
  3. 选择备份类型(网站/数据库)
  4. 设置备份周期
  5. 选择保留天数
  6. 可设置上传到云存储(阿里云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/内存)
  • [ ] 测试备份恢复流程
  • [ ] 审查用户账号和权限

紧急响应

如果服务器被入侵:

  1. 立即断网ifconfig eth0 down
  2. 备份证据:复制日志文件
  3. 分析入侵:查看日志,找出入侵途径
  4. 清除后门:删除可疑文件和账号
  5. 重装系统:如果无法确定后门位置
  6. 恢复数据:从备份恢复
  7. 加固安全:修补漏洞,加强防护
  8. 监控观察:恢复后密切监控

常见问题

1. SSH连接很慢

可能是DNS反向解析导致,编辑 /etc/ssh/sshd_config

UseDNS no

2. Fail2Ban没有生效

检查日志路径是否正确,确认服务运行:

systemctl status fail2ban
tail -f /var/log/fail2ban.log

3. 防火墙规则配置错误导致无法连接

使用搬瓦工KiwiVM控制面板的Web Shell紧急登录,修复规则。

下一步

安全加固完成后:

  1. 定期检查安全状态
  2. 关注安全公告,及时更新
  3. 进行渗透测试
  4. 购买SSL证书(或使用Let's Encrypt)
  5. 考虑使用CDN(如Cloudflare)

安全是持续的过程,不是一次性任务。定期检查和更新是保持VPS安全的关键。

立即购买安全稳定的VPS:访问搬瓦工官网

准备好开始了吗?

立即购买搬瓦工VPS,体验高速稳定的服务器

高速稳定
即开即用
安全可靠

探索更多教程

查看完整的搬瓦工VPS使用指南

查看所有教程