服务器安全基线:CentOS/Ubuntu一键加固脚本

服务器安全基线:CentOS/Ubuntu一键加固脚本

新服务器到手,你要做多少安全配置?

改SSH端口、禁root登录、配防火墙、装fail2ban、设自动更新……每一项单独做,半小时起步。如果配10台,几个小时就过去了。而且手动操作容易漏,漏一项就是隐患。

今天不讲复杂的脚本原理,而是告诉你服务器上线前必须做的6项安全配置。每项都说明白:为什么做、怎么做、不做会怎样。最后附上一键脚本,供需要的人直接用。


为什么需要安全基线?

云服务器一上线,公网IP就暴露在攻击者的扫描范围内。默认配置追求的是“方便”,不是“安全”。你不改,攻击者替你试。

安全基线不是让你变成安全专家,而是把那些“大家都知道但经常忘”的基础配置一次性做完。


6项核心安全配置

1. 禁用root远程登录

为什么做:root是已知用户名,攻击者只需要猜密码。禁用root登录,让他连用户名都要猜。

怎么做:创建普通用户,给它sudo权限,然后修改/etc/ssh/sshd_configPermitRootLogin为no。

不做会怎样:攻击者可针对root账户持续尝试暴力破解,即使密码足够复杂,大量的失败尝试也会占用系统资源,日志飞速增长。

2. 改用SSH密钥登录,禁用密码

为什么做:密码可被暴力破解、可被键盘记录器窃取。密钥对(公钥+私钥)比密码安全得多。

怎么做:生成密钥对(ssh-keygen -t ed25519),把公钥追加到服务器的~/.ssh/authorized_keys,然后设置PasswordAuthentication no

不做会怎样:弱密码可能很快被爆破。强密码虽难猜,但每次登录都要手动输入,日常使用很不方便,很多人因此选择弱密码或重复使用密码。

3. 修改SSH默认端口

为什么做:22端口是SSH的默认端口,所有扫描器的第一站。

怎么做:修改Port 22为其他端口,比如Port 2222

不做会怎样:扫描器只扫22端口,改端口就能过滤掉99%的批量攻击。

4. 配置防火墙(最小开放原则)

为什么做:默认拒绝所有,只开放必需的端口(如SSH端口、80、443)。

怎么做:Ubuntu用ufw,CentOS用firewalld。先deny incoming,再allow具体端口。

不做会怎样:服务器上任何服务都可能被外网访问。你不小心装了个Redis没设密码,别人就能直接连上来。

5. 安装fail2ban防暴力破解

为什么做:即使改了端口、禁了密码,攻击者仍可通过其他服务尝试爆破。fail2ban能自动封禁反复失败的IP。

怎么做:安装fail2ban,配置监控SSH、Nginx等服务的日志,设置3次失败封1小时。

不做会怎样:攻击者可以无限次尝试密码,不受任何限制。你的日志会被塞满,CPU也会被浪费。

6. 开启自动安全更新

为什么做:系统漏洞公布后,黑客立刻开始扫。你不更新,就是靶子。

怎么做:Ubuntu装unattended-upgrades只开安全更新,CentOS用yum-cron

不做会怎样:出了新漏洞,你的服务器会暴露在风险中。等你手动更新时,可能已经被扫到了。


一键加固脚本

以下脚本整合了上述6项配置,适用于Ubuntu 20.04+和CentOS 7+。

使用方法

bash

# 下载脚本
wget https://hostol.com/scripts/secure.sh

# 添加执行权限
chmod +x secure.sh

# 以root用户执行
./secure.sh

脚本内容(需要时复制):

bash

#!/bin/bash
# 服务器安全加固脚本
# 适用:Ubuntu 20.04+ / CentOS 7+

set -e

# 检测系统
if [ -f /etc/os-release ]; then
    . /etc/os-release
    OS=$ID
else
    echo "无法检测系统类型"
    exit 1
fi

echo "开始加固 $OS ..."

# 1. 更新系统
if [ "$OS" = "ubuntu" ]; then
    apt update && apt upgrade -y
    apt install -y ufw fail2ban unattended-upgrades
elif [ "$OS" = "centos" ]; then
    yum update -y
    yum install -y epel-release fail2ban
fi

# 2. 创建普通用户(如未创建)
if ! id "deploy" &>/dev/null; then
    useradd -m -s /bin/bash deploy
    echo "deploy ALL=(ALL) ALL" >> /etc/sudoers
    echo "请设置deploy用户密码:"
    passwd deploy
fi

# 3. SSH加固
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
echo "UseDNS no" >> /etc/ssh/sshd_config
systemctl restart sshd

# 4. 防火墙
if [ "$OS" = "ubuntu" ]; then
    ufw default deny incoming
    ufw default allow outgoing
    ufw allow 22/tcp
    ufw --force enable
elif [ "$OS" = "centos" ]; then
    systemctl start firewalld
    systemctl enable firewalld
    firewall-cmd --permanent --add-service=ssh
    firewall-cmd --reload
fi

# 5. 启动fail2ban
systemctl enable fail2ban
systemctl start fail2ban

# 6. 自动安全更新 (Ubuntu)
if [ "$OS" = "ubuntu" ]; then
    cat > /etc/apt/apt.conf.d/50unattended-upgrades << EOF
Unattended-Upgrade::Allowed-Origins {
    "\${distro_id}:\${distro_codename}-security";
};
Unattended-Upgrade::Automatic-Reboot "false";
EOF
    echo "APT::Periodic::Update-Package-Lists \"1\";" > /etc/apt/apt.conf.d/10periodic
    echo "APT::Periodic::Unattended-Upgrade \"1\";" >> /etc/apt/apt.conf.d/10periodic
fi

echo "加固完成!"
echo "请记得:"
echo "1. 将本地公钥添加到 /home/deploy/.ssh/authorized_keys"
echo "2. 测试用deploy用户登录成功后,再关闭当前root会话"

注意事项

  1. 执行前务必备份:脚本会自动备份SSH配置到.bak文件。
  2. 不要关掉当前SSH窗口:先用新用户测试登录成功后再关,避免把自己锁在外面。
  3. SSH端口可自行修改:脚本默认保持22,如需改端口,手动编辑/etc/ssh/sshd_config中的Port
  4. 云厂商安全组:如果你改了SSH端口,记得在云厂商控制台的防火墙(安全组)里也放行新端口。

一个真实案例

一个朋友的初创团队,5台服务器,全是默认配置跑了半年。某天发现其中一台被人种了挖矿病毒,CPU一直100%。排查发现,root密码被爆破,攻击者进来装了挖矿脚本。清理花了4小时,还丢了当天的部分日志。

后来他用这份脚本重新加固了所有服务器,再也没有被扫到过。

他说:“早知道这10分钟能做的事,我就不拖半年了。”


最后一句

安全基线不是什么高深技术,就是那些“大家都知道但经常忘”的基础配置。

一键脚本帮你把6项配置打包,10分钟跑完。以后每台新服务器上线,跑一遍,心里有底。

今天去检查你的服务器,看看这6项做了几项。没做的,现在补上。

知识库

Git从入门到日常:团队协作必备命令

2026-5-19 15:26:54

网站安全

构建坚如磐石的K8s集群:生产环境网络、存储与节点规划的黄金法则

2025-12-16 14:21:28

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧