第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端口¶
为什么要修改端口?
修改步骤:
# 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 为什么需要时间同步¶
时间同步的重要性:
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
手动同步(临时):
本章小结¶
本章介绍了服务器环境配置的基础知识:
核心要点:
-
Linux基础:
- SSH连接方法
- 文件和目录操作
- 软件包管理
- 系统服务管理
-
SSH安全:
- 修改默认端口
- 禁用root登录
- 密钥认证
- Fail2Ban防暴力破解
-
防火墙:
- UFW(Ubuntu/Debian)
- Firewalld(CentOS/RHEL)
- iptables基础规则
-
系统优化:
- BBR加速
- 网络参数调优
- 文件描述符限制
-
时间同步:
- NTP配置
- chrony使用
- 时区设置
安全配置清单:
必做:
✓ 修改SSH端口
✓ 禁用密码登录(使用密钥)
✓ 配置防火墙
✓ 安装Fail2Ban
✓ 启用BBR
✓ 配置时间同步
建议:
✓ 禁用root登录
✓ 系统参数优化
✓ 定期更新系统
✓ 配置日志监控
可选:
- 禁用IPv6
- 自定义SSH欢迎信息
- 配置自动备份
下一章我们将学习使用一键脚本快速部署代理服务。
实践任务:
- 完成SSH安全配置
- 配置防火墙规则
- 启用BBR加速
- 配置时间同步
- 验证所有配置生效