跳转至

第11章 服务器环境配置

购买VPS后,需要进行基础环境配置。本章将介绍Linux基础操作和服务器安全加固。

11.1 Linux基础操作

11.1.1 SSH连接服务器

Windows连接方式:

# 方法1:使用PowerShell(Windows 10+)
ssh root@your-vps-ip

# 方法2:使用PuTTY
# 下载:https://www.putty.org/
# 填写:
# Host Name: your-vps-ip
# Port: 22
# Connection Type: SSH
# 点击Open

# 方法3:使用Xshell(推荐)
# 下载:https://www.xshell.com/zh/free-for-home-school/
# 新建会话 → 输入IP → 连接

macOS/Linux连接:

# 终端直接连接
ssh root@your-vps-ip

# 首次连接会提示:
The authenticity of host 'xxx' can't be established.
Are you sure you want to continue connecting (yes/no)?
# 输入 yes

# 输入密码(VPS提供的root密码)

SSH密钥登录(推荐):

# 本地生成密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

# 按回车使用默认路径 ~/.ssh/id_rsa
# 设置密码短语(可选,建议设置)

# 将公钥复制到服务器
ssh-copy-id root@your-vps-ip

# 或手动复制
cat ~/.ssh/id_rsa.pub
# 复制输出内容

# 在服务器上:
mkdir -p ~/.ssh
echo "粘贴的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

# 之后连接无需密码
ssh root@your-vps-ip

11.1.2 系统信息查看

查看系统版本:

# 查看发行版
cat /etc/os-release

# 查看内核版本
uname -r

# 查看系统架构
uname -m
# x86_64 = 64位
# aarch64 = ARM 64位

# 查看主机名
hostname

# 查看系统时间
date
timedatectl

查看硬件信息:

# CPU信息
cat /proc/cpuinfo | grep "model name" | head -1
lscpu

# 内存信息
free -h
cat /proc/meminfo | grep MemTotal

# 硬盘信息
df -h
lsblk

# 网络接口
ip addr
ifconfig

# 查看进程
ps aux
top    # 实时查看
htop   # 更友好的界面(需安装)

11.1.3 包管理器使用

Debian/Ubuntu(apt):

# 更新软件包列表
apt update

# 升级所有软件包
apt upgrade -y

# 安装软件
apt install wget curl git vim -y

# 搜索软件
apt search nginx

# 卸载软件
apt remove nginx
apt purge nginx    # 删除配置文件
apt autoremove     # 删除不需要的依赖

# 查看已安装软件
apt list --installed
dpkg -l

CentOS/RHEL(yum/dnf):

# 更新
yum update -y

# CentOS 8+使用dnf
dnf update -y

# 安装软件
yum install wget curl git vim -y

# 搜索
yum search nginx

# 卸载
yum remove nginx

# 清理缓存
yum clean all

11.1.4 文件操作

基础命令:

# 列出文件
ls          # 基本列表
ls -l       # 详细信息
ls -lh      # 人性化大小显示
ls -a       # 显示隐藏文件
ll          # ls -l的别名

# 切换目录
cd /path/to/dir
cd ~        # 回到home目录
cd ..       # 上一级目录
cd -        # 回到之前的目录

# 查看当前路径
pwd

# 创建目录
mkdir dirname
mkdir -p /path/to/nested/dir    # 创建多级目录

# 创建文件
touch filename
echo "content" > filename        # 覆盖写入
echo "content" >> filename       # 追加写入

# 复制
cp source dest
cp -r dir1 dir2                  # 递归复制目录

# 移动/重命名
mv old new
mv file /path/to/dest/

# 删除
rm file
rm -r dir                        # 递归删除目录
rm -rf dir                       # 强制递归删除(危险!)

# 查看文件内容
cat file                         # 全部内容
less file                        # 分页查看
head file                        # 前10行
tail file                        # 后10行
tail -f file                     # 实时查看(日志)

文件权限:

# 查看权限
ls -l filename
# -rw-r--r-- 1 root root 1234 Dec 15 10:00 filename
#  ↑↑↑ ↑↑↑ ↑↑↑
#  所有者 组 其他

# 权限说明:
# r = 读(4)
# w = 写(2)
# x = 执行(1)

# 修改权限
chmod 755 filename     # rwxr-xr-x
chmod 644 filename     # rw-r--r--
chmod +x script.sh     # 添加执行权限

# 修改所有者
chown user:group filename
chown -R user:group directory

查找文件:

# 按名称查找
find /path -name "filename"
find . -name "*.log"

# 按类型查找
find /path -type f    # 文件
find /path -type d    # 目录

# 按大小查找
find /path -size +100M    # 大于100MB

# 查找并删除
find /path -name "*.tmp" -delete

# 快速查找(需先建立索引)
locate filename
updatedb    # 更新索引数据库

11.1.5 系统服务管理

systemd服务管理:

# 启动服务
systemctl start servicename

# 停止服务
systemctl stop servicename

# 重启服务
systemctl restart servicename

# 重新加载配置
systemctl reload servicename

# 查看状态
systemctl status servicename

# 开机自启
systemctl enable servicename

# 禁用自启
systemctl disable servicename

# 查看所有服务
systemctl list-units --type=service

# 查看日志
journalctl -u servicename
journalctl -u servicename -f    # 实时查看

11.2 SSH安全配置

11.2.1 修改SSH端口

为什么要修改端口?

默认端口22:
- 被大量扫描
- 暴力破解尝试频繁
- 日志充满攻击记录

修改到其他端口:
- 减少扫描攻击
- 降低日志噪音
- 提高安全性

修改步骤:

# 1. 编辑SSH配置
vi /etc/ssh/sshd_config

# 2. 找到并修改(或添加)
Port 22
# 改为:
Port 2222    # 或其他端口(1024-65535)

# 3. 重启SSH服务
systemctl restart sshd

# 4. 测试新端口(不要关闭当前连接!)
# 新开终端测试
ssh -p 2222 root@your-vps-ip

# 5. 确认可以连接后,关闭旧连接

注意事项:

⚠️ 修改前备份配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

⚠️ 防火墙放行新端口
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload

# 或ufw
ufw allow 2222/tcp
ufw reload

⚠️ 保持一个SSH连接
修改后用新端口测试,成功后再关闭旧连接

11.2.2 禁用root登录

创建普通用户:

# 创建新用户
adduser username

# 设置密码
passwd username

# 添加到sudo组(Debian/Ubuntu)
usermod -aG sudo username

# CentOS/RHEL
usermod -aG wheel username

# 切换到新用户测试
su - username
sudo ls /root    # 测试sudo权限

禁用root登录:

# 编辑SSH配置
vi /etc/ssh/sshd_config

# 修改
PermitRootLogin yes
# 改为
PermitRootLogin no

# 重启SSH
systemctl restart sshd

# 之后只能用普通用户登录
ssh username@your-vps-ip
# 需要root权限时使用sudo

11.2.3 密钥认证

禁用密码登录:

# 前提:已配置SSH密钥登录并测试成功

# 编辑SSH配置
vi /etc/ssh/sshd_config

# 修改以下选项
PasswordAuthentication yes
# 改为
PasswordAuthentication no

# 同时确保密钥认证已启用
PubkeyAuthentication yes

# 重启SSH
systemctl restart sshd

SSH配置最佳实践:

# /etc/ssh/sshd_config 推荐配置

# 端口设置
Port 2222

# 协议版本
Protocol 2

# 禁用root登录
PermitRootLogin no

# 密钥认证
PubkeyAuthentication yes

# 禁用密码登录
PasswordAuthentication no
ChallengeResponseAuthentication no

# 禁用空密码
PermitEmptyPasswords no

# 禁用X11转发
X11Forwarding no

# 最大认证尝试
MaxAuthTries 3

# 登录超时
LoginGraceTime 30

# 允许的用户(可选)
AllowUsers username

# 客户端活动检测
ClientAliveInterval 300
ClientAliveCountMax 2

11.2.4 Fail2Ban防暴力破解

安装Fail2Ban:

# Debian/Ubuntu
apt install fail2ban -y

# CentOS/RHEL
yum install epel-release -y
yum install fail2ban -y

# 启动服务
systemctl start fail2ban
systemctl enable fail2ban

配置Fail2Ban:

# 复制配置文件
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# 编辑配置
vi /etc/fail2ban/jail.local

# 修改以下部分
[DEFAULT]
# 封禁时间(秒)
bantime = 3600
# 观察时间窗口
findtime = 600
# 最大失败次数
maxretry = 5
# 忽略的IP(自己的IP)
ignoreip = 127.0.0.1/8 your-home-ip

[sshd]
enabled = true
port = 2222    # 你的SSH端口
logpath = /var/log/auth.log
maxretry = 3

# 重启服务
systemctl restart fail2ban

# 查看状态
fail2ban-client status
fail2ban-client status sshd

# 查看被封禁的IP
fail2ban-client get sshd banned

# 手动解封IP
fail2ban-client set sshd unbanip xxx.xxx.xxx.xxx

11.3 防火墙设置

11.3.1 UFW防火墙(Ubuntu/Debian)

基础配置:

# 安装UFW
apt install ufw -y

# 默认策略
ufw default deny incoming    # 拒绝所有入站
ufw default allow outgoing   # 允许所有出站

# 允许SSH(修改后的端口)
ufw allow 2222/tcp

# 允许HTTP/HTTPS
ufw allow 80/tcp
ufw allow 443/tcp

# 允许代理端口(根据实际配置)
ufw allow 8388/tcp    # Shadowsocks
ufw allow 10086/tcp   # V2Ray

# 启用防火墙
ufw enable

# 查看状态
ufw status verbose

# 查看规则编号
ufw status numbered

# 删除规则
ufw delete 3    # 删除第3条规则
ufw delete allow 80/tcp

高级规则:

# 允许特定IP访问特定端口
ufw allow from 1.2.3.4 to any port 22

# 允许IP段
ufw allow from 192.168.1.0/24

# 拒绝特定IP
ufw deny from 1.2.3.4

# 限制连接速率(防DDoS)
ufw limit 22/tcp

# 删除所有规则
ufw reset

11.3.2 Firewalld(CentOS/RHEL)

基础配置:

# 安装firewalld
yum install firewalld -y

# 启动服务
systemctl start firewalld
systemctl enable firewalld

# 查看状态
firewall-cmd --state
firewall-cmd --list-all

# 允许服务
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https

# 允许端口
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --permanent --add-port=8388/tcp

# 重新加载
firewall-cmd --reload

# 查看开放的端口
firewall-cmd --list-ports

# 删除规则
firewall-cmd --permanent --remove-port=8388/tcp
firewall-cmd --reload

11.3.3 iptables规则

基础规则:

# 查看当前规则
iptables -L -n -v

# 清空所有规则(慎用!)
iptables -F

# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许SSH
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

# 允许HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 允许代理端口
iptables -A INPUT -p tcp --dport 8388 -j ACCEPT

# 拒绝其他所有入站
iptables -P INPUT DROP

# 保存规则
# Debian/Ubuntu
iptables-save > /etc/iptables/rules.v4

# CentOS/RHEL
service iptables save

11.4 系统优化调优

11.4.1 BBR加速

参考第9章内容:

# 检查内核版本
uname -r

# 需要4.9+内核

# 启用BBR
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

# 应用设置
sysctl -p

# 验证
sysctl net.ipv4.tcp_congestion_control
lsmod | grep bbr

11.4.2 系统参数优化

网络参数优化:

# 编辑sysctl配置
vi /etc/sysctl.conf

# 添加以下内容
# 文件描述符限制
fs.file-max = 51200

# 网络核心设置
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 4096

# TCP设置
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000

# TCP内存
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mem = 25600 51200 102400

# TCP Fast Open
net.ipv4.tcp_fastopen = 3

# 应用配置
sysctl -p

文件描述符限制:

# 查看当前限制
ulimit -n

# 临时修改
ulimit -n 51200

# 永久修改
vi /etc/security/limits.conf

# 添加
* soft nofile 51200
* hard nofile 51200

# 重新登录生效

11.4.3 禁用IPv6(可选)

如果不需要IPv6:

# 编辑sysctl配置
vi /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

# 验证
ip addr | grep inet6
# 应该没有输出

11.5 时间同步配置

11.5.1 为什么需要时间同步

时间同步的重要性:

很多代理协议依赖时间验证:

VMess协议:
- 客户端和服务器时间差 > 90秒
- 连接失败

TLS证书:
- 时间不准确
- 证书验证失败

日志分析:
- 时间混乱
- 无法追踪问题

11.5.2 配置NTP时间同步

使用systemd-timesyncd:

# 查看时间状态
timedatectl status

# 启用NTP同步
timedatectl set-ntp true

# 设置时区
timedatectl set-timezone Asia/Shanghai

# 查看可用时区
timedatectl list-timezones | grep Asia

# 检查同步状态
timedatectl timesync-status

使用chrony(推荐):

# 安装chrony
# Debian/Ubuntu
apt install chrony -y

# CentOS/RHEL
yum install chrony -y

# 编辑配置
vi /etc/chrony/chrony.conf

# 修改NTP服务器
# 注释掉默认服务器
# 添加国内NTP服务器
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server time1.cloud.tencent.com iburst
server time2.cloud.tencent.com iburst

# 重启服务
systemctl restart chronyd
systemctl enable chronyd

# 查看同步状态
chronyc tracking
chronyc sources -v

# 强制同步
chronyc makestep

手动同步(临时):

# 使用ntpdate
apt install ntpdate -y
ntpdate ntp.aliyun.com

# 或使用date命令
date -s "2025-12-15 10:00:00"

本章小结

本章介绍了服务器环境配置的基础知识:

核心要点:

  1. Linux基础

    • SSH连接方法
    • 文件和目录操作
    • 软件包管理
    • 系统服务管理
  2. SSH安全

    • 修改默认端口
    • 禁用root登录
    • 密钥认证
    • Fail2Ban防暴力破解
  3. 防火墙

    • UFW(Ubuntu/Debian)
    • Firewalld(CentOS/RHEL)
    • iptables基础规则
  4. 系统优化

    • BBR加速
    • 网络参数调优
    • 文件描述符限制
  5. 时间同步

    • NTP配置
    • chrony使用
    • 时区设置

安全配置清单:

必做:
✓ 修改SSH端口
✓ 禁用密码登录(使用密钥)
✓ 配置防火墙
✓ 安装Fail2Ban
✓ 启用BBR
✓ 配置时间同步

建议:
✓ 禁用root登录
✓ 系统参数优化
✓ 定期更新系统
✓ 配置日志监控

可选:
- 禁用IPv6
- 自定义SSH欢迎信息
- 配置自动备份

下一章我们将学习使用一键脚本快速部署代理服务。


实践任务:

  1. 完成SSH安全配置
  2. 配置防火墙规则
  3. 启用BBR加速
  4. 配置时间同步
  5. 验证所有配置生效