适配系统:CentOS Linux release 7.9

拿到云服务器,第一件事:安全初始化

初始化核心目标清单:

  1. 系统完整更新 + 自动清理冗余包、缓存
  2. 创建普通运维用户,禁用 root 直连操作
  3. SSH 密钥免密登录、加固 SSH(改端口、禁密码、禁 root 登录)
  4. Firewalld 防火墙最小化放行端口
  5. Fail2ban 防 SSH 暴力破解,自动拉黑恶意 IP
  6. 开启 TCP BBR 网络加速
  7. 时区、基础运维工具安装
  8. 一键自动化初始化脚本

一、基础系统信息查看命令

# 系统版本
cat /etc/os-release
# 内核版本
uname -r
# 系统位数
uname -m
# 内存
free -h
# 磁盘挂载
df -h

二、系统更新 + 清理冗余包 / 缓存(你需求的 yum 全套)

CentOS7 使用 yum,对应 Ubuntu apt full-upgrade/autoremove/autoclean 功能整合:

# 1. 全量升级所有软件、内核、安全补丁
yum update -y
# 2. 自动卸载无用孤立依赖、旧内核冗余包
yum autoremove -y
# 3. 清理yum下载的rpm缓存包
yum clean all
# 4. 重建本地软件源缓存,加速后续安装
yum makecache

单行整合一键执行:

yum update -y && yum autoremove -y && yum clean all && yum makecache

判断内核更新后是否需要重启

CentOS7 无reboot-required文件,手动判断:

# 查看当前运行内核
uname -r
# 查看系统已安装内核
rpm -qa | grep kernel

rpm列出多个内核版本,说明更新了内核,执行重启生效:

reboot

三、安装服务器必备运维工具

CentOS7 无 ufw,使用系统原生firewalld;fail2ban 在 epel 源中,需先装 epel-release:

# 先安装epel扩展源(提供fail2ban、htop等软件)
yum install -y epel-release
# 批量安装全套工具
yum install -y sudo curl wget git vim htop tree unzip net-tools lsof fail2ban

工具对照表

工具 用途
sudo 普通用户临时获取 root 权限
curl/wget 文件下载、接口测试
git 代码版本管理
vim 文本编辑器
htop 可视化进程监控(替代 top)
tree 树形打印目录结构
net-tools ifconfig、route、netstat 传统网络工具
unzip 压缩包解压
firewalld CentOS7 原生系统防火墙(默认自带)
fail2ban 监控登录日志,自动封禁爆破 IP
lsof 查看端口占用、文件占用

四、创建非 root 普通运维用户

禁止日常直接使用 root 操作,降低误删、入侵风险:

# 创建用户(将buer替换为你自定义用户名)
useradd buer
# 设置用户登录密码(输入两次,无回显)
passwd buer

输出示例:

更改用户 buer 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

授予 sudo 管理员权限

CentOS7sudo权限统一归属wheel用户组:

# 将用户加入wheel组,获得sudo提权能力
usermod -aG wheel buer

权限验证

# 切换至新建普通用户
su - buer
# 使用sudo提权执行whoami,输出root即权限正常
sudo whoami

五、配置 SSH 密钥免密登录(安全核心)

1. 本地电脑生成 ED25519 密钥对(Windows/Mac/Linux 本地终端执行)

ssh-keygen -t ed25519 -C "buer@yourdomain.com"

一路回车:默认保存路径、不设置私钥密码。

生成文件:

  • 私钥:~/.ssh/id_ed25519(本地妥善保管,绝不外传)
  • 公钥:~/.ssh/id_ed25519.pub(上传至服务器)

2. 本地上传公钥到服务器普通用户

# 替换用户名、服务器公网IP
ssh-copy-id buer@服务器IP

报错Host key verification failed(重装系统指纹冲突)修复:

# 删除本地旧主机指纹
ssh-keygen -R 服务器IP
# 重新上传公钥
ssh-copy-id buer@服务器IP

3. 测试密钥登录

ssh buer@服务器IP
# 修改SSH端口后登录命令
ssh -p 22000 buer@服务器IP

4. SSH 安全加固(修改端口、禁 root、禁密码登录)

⚠️ 重要:先密钥登录测试成功,再关闭密码登录,否则会失联!

# 修改配置前备份原文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 编辑SSH服务配置
vim /etc/ssh/sshd_config

修改 / 新增以下参数(注释 #全部删除):

# 自定义SSH端口,范围1024-65535,示例22000, 有的云服务器SSH放行规则不让修改22端口
Port 22
# 禁止root用户SSH远程登录
PermitRootLogin no
# 启用密钥认证
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# 关闭密码登录(密钥可用再启用)
PasswordAuthentication no
# 禁止空密码账号登录
PermitEmptyPasswords no
# 最大认证失败次数,3次失败直接断开
MaxAuthTries 3
# 客户端无操作超时断开
ClientAliveInterval 300
ClientAliveCountMax 2
# 仅使用安全SSH2协议
Protocol 2

校验配置 + 重启 sshd 服务

# 校验配置语法,报错则不重启,防止失联
sshd -t
# 重启SSH服务
systemctl restart sshd
# 设置开机自启
systemctl enable sshd
# 查看运行状态
systemctl status sshd

六、Firewalld 防火墙配置(CentOS7 原生,替代 Ubuntu ufw)

1. 启用防火墙并开机自启

# 开机自启+立即启动
systemctl enable firewalld --now
# 查看运行状态
firewall-cmd --state

2. 基础安全策略:默认拒绝所有入站,允许全部出站

firewalld 默认 zone 为public,永久写入规则:

# 默认拒绝外部主动访问本机
firewall-cmd --set-default-zone=public
# 放行自定义SSH端口(和sshd_config端口保持一致)
firewall-cmd --permanent --add-port=22/tcp
# 放行网站80/443
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
# 重载所有永久规则生效
firewall-cmd --reload

防火墙常用操作命令

# 查看已放行端口/服务
firewall-cmd --list-ports
firewall-cmd --list-services

# 新增端口放行(示例3306数据库)
firewall-cmd --permanent --add-port=3306/tcp && firewall-cmd --reload

# 删除放行端口
firewall-cmd --permanent --remove-port=22/tcp && firewall-cmd --reload

# 仅允许指定IP访问SSH
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="1.2.3.4" port protocol="tcp" port="22000" accept' && firewall-cmd --reload

# 重置所有防火墙规则
firewall-cmd --complete-reload

配套提醒:云服务商控制台安全组必须同步放行自定义 SSH 端口、80、443,否则外部无法访问。

七、开启 TCP BBR 网络加速(CentOS7 内核≥4.9 支持)

1. 查看内核版本

uname -r

内核低于 4.9 需升级内核后再操作(我的建议是国内的服务器就不升级了,BBR加速作用不大)。

2. 修改系统内核参数

# 编辑sysctl配置
vim /etc/sysctl.conf
# 文件末尾添加两行
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

命令行一键追加(避免重复写入):

grep -q "net.core.default_qdisc=fq" /etc/sysctl.conf || echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
grep -q "net.ipv4.tcp_congestion_control=bbr" /etc/sysctl.conf || echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

3. 生效并验证

# 加载新内核参数
sysctl -p
# 输出bbr即开启成功
sysctl net.ipv4.tcp_congestion_control
# 查看系统支持的拥塞算法
sysctl net.ipv4.tcp_available_congestion_control

八、Fail2ban 防 SSH 暴力破解

监控登录日志/var/log/secure,多次密码错误自动用 firewalld 拉黑 IP

1. 复制配置文件(不直接修改 jail.conf,升级不丢失配置)

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vim /etc/fail2ban/jail.local

2. 修改核心配置

[DEFAULT]
# 封禁时长 600秒=10分钟
bantime  = 600
# 600秒内多次失败触发封禁
findtime = 600
# 最多允许3次登录失败
maxretry = 3
# 本地IP白名单,永不封禁
ignoreip = 127.0.0.1/8 ::1

[sshd]
enabled  = true
# 填写你的自定义SSH端口
port     = 22
maxretry = 3
# CentOS7 SSH登录日志路径(区别Ubuntu /var/log/auth.log)
logpath  = /var/log/secure
# 联动firewalld封禁IP
banaction = firewallcmd-ipset

3. 启动 + 开机自启

systemctl restart fail2ban
systemctl enable fail2ban
systemctl status fail2ban

Fail2ban 常用运维命令

# 查看SSH封禁列表
fail2ban-client status sshd
# 手动解封IP
fail2ban-client set sshd unbanip 111.222.33.44
# 手动拉黑恶意IP
fail2ban-client set sshd banip 1.2.3.4
# 修改配置后重载
fail2ban-client reload
# 查看SSH登录失败日志
grep Failed /var/log/secure

误封自救方案

若自己 IP 被封禁:使用云服务器 VNC 控制台登录,执行解封命令,同时把本地公网 IP 加入ignoreip白名单。

九、系统时区配置(默认 UTC 改为上海时区)

# 查看当前时区
timedatectl
# 设置亚洲上海时区
timedatectl set-timezone Asia/Shanghai
# 验证
date

十、扩展实用功能

1. 本地 SSH Config 多服务器快捷登录

本地电脑编辑~/.ssh/config,无需每次输入 IP / 端口 / 密钥,在云服务器厂商允许修改ssh放行规则端口的情况下考虑!!!

Host vps-centos7
    HostName 你的服务器公网IP
    User buer
    Port 22000
    IdentityFile ~/.ssh/id_ed25519
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3
    AddKeysToAgent yes

快捷登录:

ssh vps-centos7

2. 自动安全更新(yum-cron 定时自动打安全补丁)

# 安装自动更新工具
yum install -y yum-cron
# 编辑配置,仅自动安装安全补丁
vim /etc/yum/yum-cron.conf

修改参数:

update_cmd = security
apply_updates = yes

启动并开机自启:

systemctl start yum-cron
systemctl enable yum-cron

3. 系统日志清理,释放磁盘

# 清理临时目录
rm -rf /tmp/* /var/tmp/*
# 限制系统日志最大占用100M
journalctl --vacuum-size=100M
# 清理旧内核(仅保留最新1个)
package-cleanup --oldkernels --count=1 -y

十一、CentOS7.9 一键安全初始化脚本

使用说明:root 用户执行,修改脚本顶部自定义参数

#!/bin/bash
set -e
# =====================配置区=====================
NEW_USER="buer"
NEW_SSH_PORT="22"
TIMEZONE="Asia/Shanghai"
# ================================================
echo "===== CentOS7.9 云服务器安全初始化脚本 ====="

echo "[1/9] 更新系统并清理冗余包、缓存"
yum update -y && yum autoremove -y && yum clean all && yum makecache

echo "[2/9] 安装epel源与全套运维工具"
yum install -y epel-release
yum install -y sudo curl wget git vim htop tree unzip net-tools lsof fail2ban

echo "[3/9] 创建普通运维用户并授予sudo权限"
if id "$NEW_USER" &>/dev/null; then
    echo "用户$NEW_USER已存在,跳过创建"
else
    useradd $NEW_USER
    echo "请设置用户$NEW_USER登录密码:"
    passwd $NEW_USER
    usermod -aG wheel $NEW_USER
fi

echo "[4/9] 配置用户SSH目录权限(等待粘贴公钥)"
mkdir -p /home/$NEW_USER/.ssh
chmod 700 /home/$NEW_USER/.ssh
touch /home/$NEW_USER/.ssh/authorized_keys
chmod 600 /home/$NEW_USER/.ssh/authorized_keys
chown -R $NEW_USER:$NEW_USER /home/$NEW_USER/.ssh
echo "====================================="
echo "请将本地电脑生成的公钥完整粘贴到下方,粘贴完成按Ctrl+D结束"
cat >> /home/$NEW_USER/.ssh/authorized_keys
echo "公钥写入完成"

echo "[5/9] 加固SSH配置文件"
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sed -i "s/^#*Port .*/Port $NEW_SSH_PORT/" /etc/ssh/sshd_config
sed -i "s/^#*PermitRootLogin .*/PermitRootLogin no/" /etc/ssh/sshd_config
sed -i "s/^#*PasswordAuthentication .*/PasswordAuthentication no/" /etc/ssh/sshd_config
sed -i "s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/" /etc/ssh/sshd_config
sed -i "s/^#*MaxAuthTries .*/MaxAuthTries 3/" /etc/ssh/sshd_config

# SSH语法校验,异常直接退出
if ! sshd -t; then
    echo -e "\033[31m SSH配置语法错误,终止执行!\033[0m"
    exit 1
fi
systemctl restart sshd
systemctl enable sshd

echo "[6/9] 配置Firewalld防火墙"
systemctl enable firewalld --now
firewall-cmd --set-default-zone=public
firewall-cmd --permanent --add-port=${NEW_SSH_PORT}/tcp
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

echo "[7/9] 开启TCP BBR网络加速"
grep -q "net.core.default_qdisc=fq" /etc/sysctl.conf || echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
grep -q "net.ipv4.tcp_congestion_control=bbr" /etc/sysctl.conf || echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

echo "[8/9] 配置Fail2ban防暴力破解"
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sed -i "s/^port     = ssh/port     = $NEW_SSH_PORT/" /etc/fail2ban/jail.local
sed -i "s|logpath  = /var/log/auth.log|logpath  = /var/log/secure|" /etc/fail2ban/jail.local
sed -i "s/banaction = iptables-multiport/banaction = firewallcmd-ipset/" /etc/fail2ban/jail.local
systemctl restart fail2ban
systemctl enable fail2ban

echo "[9/9] 设置系统时区"
timedatectl set-timezone $TIMEZONE

echo -e "\033[32m ======================================="
echo "  CentOS7.9 安全初始化全部完成!"
echo "  新SSH端口:$NEW_SSH_PORT"
echo "  运维用户名:$NEW_USER"
echo "  时区:$TIMEZONE"
echo ""
echo "  登录命令示例:ssh -p $NEW_SSH_PORT $NEW_USER@你的服务器IP"
echo -e "  ⚠️ 重要:新开终端测试密钥登录正常后,再关闭当前连接!\033[0m"

脚本使用步骤

  1. 本地电脑上传脚本到服务器:
scp init_centos7_secure.sh root@服务器IP:~/
  1. 服务器 root 登录,赋予执行权限并运行:
chmod +x init_centos7_secure.sh
./init_centos7_secure.sh

重要注意事项

  1. CentOS7 官方已于 2024 年 6 月停止维护,无官方安全补丁,生产环境长期使用建议迁移 Rocky Linux/AlmaLinux8/9;
  2. 修改 SSH 端口后,云厂商安全组必须同步放行该端口,否则外部无法连接;
  3. 关闭 SSH 密码登录前,必须完整测试密钥登录,避免服务器失联;
  4. Fail2ban 依赖 firewalld,不要同时运行 iptables-services,会导致封禁失效;
  5. yum autoremove只会删除无依赖孤立包,不会删除业务运行必需软件,安全可靠。