嘿,朋友!看到标题里带着“从零开始”和“安全加固”,我就知道你是那种不想被坑、想要稳稳当当把事办成的实干派。别担心,虽然服务器听起来像是黑客电影里的神秘终端,但实际上,它就像是你家新买的一台超级电脑,只要按对顺序插好线、设好锁,它就能乖乖为你工作。
今天我们要聊的主角是 AlmaLinux。你可能听说过 CentOS,那个曾经红极一时的系统。2020年底,CentOS 8 提前停止维护,搞得很多开发者心里发慌。这时候,红帽(Red Hat)背后的社区推出了 AlmaLinux,它和 RHEL(Red Hat Enterprise Linux)二进制兼容,简单说就是:CentOS 的平替,免费、稳定、企业级。 如果你现在要建一个能跑几年都不带崩的服务,选它准没错。
咱们不整那些虚头巴脑的理论,直接上手。我会把整个过程拆解成几个关键阶段:从你拿到服务器 IP 的那一刻起,到它能抵御外部攻击,每一步都给你讲透,连小白也能听懂。
第一阶段:初识与连接——推开服务器的大门
假设你已经从阿里云、腾讯云或者 AWS 购买了一台云服务器,并拿到了公网 IP 地址和 root 密码。现在,你需要通过“门”走进去。对于 Linux 服务器,这扇门叫 SSH(Secure Shell)。
1. 使用终端连接
如果你是 Windows 用户,推荐下载 PuTTY 或者直接使用 Windows 10⁄11 自带的 PowerShell/CMD;Mac 或 Linux 用户直接在终端操作即可。
打开终端,输入以下命令(请将 your_server_ip 替换为你实际的 IP 地址):
ssh root@your_server_ip
第一次连接时,你会看到一个指纹验证提示:
Are you sure you want to continue connecting (yes/no/[fingerprint])?
输入 yes 并回车。接着,系统会提示你输入密码。注意,Linux 输入密码时屏幕上不会显示任何字符(连星号都没有),这是为了安全,放心盲输完按回车即可。
如果连接成功,你的命令行提示符会从 $ 变成 #,这意味着你现在拥有最高权限(root)。
小贴士:root 用户虽然权力大,但也是黑客重点攻击的目标。接下来的所有步骤,我们都要在保持 root 权限的同时,逐步建立更安全的防线。
第二阶段:基础环境初始化——给房子打地基
刚进来的服务器就像一间刚盖好的毛坯房,虽然能用,但充满了灰尘(默认配置)和漏洞。我们需要先清理一下。
1. 更新系统软件包
AlmaLinux 基于 RHEL,使用 dnf 作为包管理器(它是 yum 的现代升级版,速度更快)。首先,确保你的系统是最新的。
sudo dnf update -y
这里的 -y 表示自动确认所有安装提示,避免你一路按“Y”。更新过程可能需要几分钟,取决于你的网络速度和包的数量。
2. 设置主机名
主机名(Hostname)是服务器在网络中的名字。默认情况下,它可能是一串乱码。给它起个有意义的名字,比如 my-web-server。
sudo hostnamectl set-hostname my-web-server
你可以用 hostnamectl status 来检查是否修改成功。
3. 配置时区
确保服务器的时间与北京时间一致,否则日志里的时间会对不上,排查问题时会非常痛苦。
sudo timedatectl set-timezone Asia/Shanghai
4. 创建普通用户(关键安全步骤)
请务必不要一直用 root 登录! 这是新手最容易犯的错误。我们创建一个名为 admin 的普通用户,并赋予他 sudo 权限。
# 创建用户
sudo useradd -m -s /bin/bash admin
# 设置密码
sudo passwd admin
# 系统会提示你输入两次新密码
# 将用户加入 wheel 组(拥有 sudo 权限)
sudo usermod -aG wheel admin
现在,你可以尝试断开当前连接,用 admin 用户重新登录试试:
ssh admin@your_server_ip
登录后,执行 sudo ls /root,如果不需要密码或者只需要输入你的密码就能看到 root 目录下的内容,说明权限配置正确。
第三阶段:SSH 安全加固——把门锁换得更高级
既然我们已经有了普通用户,接下来就要彻底改变 SSH 的配置,让它更难被破解。
1. 禁用 Root 远程登录
黑客扫描器最喜欢尝试 root 用户的登录。既然我们有 admin 用户,就没必要让 root 直接面对互联网。
编辑 SSH 配置文件:
sudo vi /etc/ssh/sshd_config
找到以下几行(如果没有,就手动添加),并按如下修改:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
解释一下:
PermitRootLogin no: 禁止 root 直接登录。PasswordAuthentication no: 禁止使用密码登录(强制使用密钥)。PubkeyAuthentication yes: 启用公钥认证。
警告:在修改这些设置之前,你必须先配置好 SSH 密钥!否则一旦保存退出,你将无法通过密码登录,而你又没配密钥,那就真的把自己锁在门外了。
2. 配置 SSH 密钥登录
在你本地电脑(不是服务器)上生成密钥对。打开本地终端:
ssh-keygen -t ed25519 -C "your_email@example.com"
一直回车使用默认设置。然后,将公钥复制到服务器:
ssh-copy-id admin@your_server_ip
输入 admin 用户的密码后,密钥就传过去了。现在,你可以测试一下,用 admin 用户登录是否还需要输入密码?如果不需输入密码直接登录,说明配置成功。
3. 更改 SSH 端口(可选但推荐)
默认的 SSH 端口是 22,这也是全球黑客脚本扫描的重点目标。我们可以把它改成一个大一点的端口,比如 2222。
再次编辑 /etc/ssh/sshd_config:
Port 2222
保存后,重启 SSH 服务:
sudo systemctl restart sshd
重要:修改端口后,下次登录必须指定端口:
ssh -p 2222 admin@your_server_ip
4. 安装防火墙 (Firewalld)
AlmaLinux 默认安装了 firewalld。我们需要开放我们刚才改动的端口(2222),并关闭不必要的端口。
# 查看当前防火墙状态
sudo firewall-cmd --state
# 永久开放 SSH 端口 (假设你改成了 2222)
sudo firewall-cmd --permanent --add-port=2222/tcp
# 重载防火墙配置
sudo firewall-cmd --reload
如果你想开放 Web 服务(HTTP/HTTPS),也可以加上:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
第四阶段:系统稳定性优化——让服务器跑得更快更稳
基础安全搞定了,现在我们来 tweak(微调)一些内核参数,让服务器在处理高并发请求时表现更好。
1. 调整文件描述符限制
Linux 中,每个打开的文件、网络连接都被视为一个“文件”。默认限制较低,对于高负载服务器来说不够用。
编辑 /etc/security/limits.conf:
sudo vi /etc/security/limits.conf
在文件末尾添加:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
这将允许每个进程打开更多文件和处理更多线程。
2. 调整 TCP 网络参数
编辑 /etc/sysctl.conf:
sudo vi /etc/sysctl.conf
添加或修改以下参数以优化网络性能:
# 增加最大文件句柄数
fs.file-max = 65535
# 启用 TCP 快速回收
net.ipv4.tcp_tw_reuse = 1
# 增加监听队列长度
net.core.somaxconn = 32768
# 启用 SYN Cookies 防御 SYN Flood 攻击
net.ipv4.tcp_syncookies = 1
# 增加本地端口范围
net.ipv4.ip_local_port_range = 1024 65535
应用更改:
sudo sysctl -p
3. 配置自动安全更新
虽然 AlmaLinux 很稳定,但安全补丁不能少。我们可以设置自动更新。
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer
这样,系统会在后台自动检查并安装安全更新,无需你操心。
第五阶段:监控与备份——最后的保险丝
即使做了所有防护,意外还是可能发生。监控能让你知道服务器“心情”如何,备份则是最后的救命稻草。
1. 安装监控工具
推荐使用 htop 和 nethogs,它们比传统的 top 更直观。
sudo dnf install htop nethogs -y
htop: 彩色显示 CPU、内存使用情况,支持鼠标操作。nethogs: 实时查看哪个进程占用带宽最多。
2. 配置日志监控
Linux 的系统日志位于 /var/log/secure(记录登录尝试)和 /var/log/messages。你可以设置一个简单的脚本来监控失败的 SSH 登录尝试。
创建一个简单的脚本 /usr/local/bin/check-ssh-fail.sh:
#!/bin/bash
# 统计过去1小时内失败登录次数
COUNT=$(journalctl _COMM=sshd --since "1 hour ago" | grep "Failed password" | wc -l)
if [ $COUNT -gt 10 ]; then
echo "Warning: High number of failed SSH login attempts detected!" | mail -s "SSH Alert" your_email@example.com
fi
赋予执行权限:
sudo chmod +x /usr/local/bin/check-ssh-fail.sh
然后通过 crontab 每分钟运行一次:
sudo crontab -e
添加:
* * * * * /usr/local/bin/check-ssh-fail.sh
3. 定期备份
没有备份的服务器等于裸奔。 对于 AlmaLinux,最重要的是备份 /etc(配置文件)、数据库数据以及网站代码。
这里提供一个简单的备份脚本示例 /usr/local/bin/backup.sh:
#!/bin/bash
# 定义变量
BACKUP_DIR="/root/backups"
DATE=$(date +%Y%m%d_%H%M%S)
FILE_NAME="backup_$DATE.tar.gz"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 打包需要备份的目录 (请根据实际情况修改)
tar -czf $BACKUP_DIR/$FILE_NAME /etc /home /var/www/html
# 删除7天前的备份
find $BACKUP_DIR -name "backup_*.tar.gz" -mtime +7 -delete
echo "Backup completed: $FILE_NAME"
赋予执行权限,并添加到 crontab 每天凌晨2点执行:
sudo chmod +x /usr/local/bin/backup.sh
sudo crontab -e
添加:
0 2 * * * /usr/local/bin/backup.sh
常见问题与排错指南
在实际操作中,你可能会遇到一些小麻烦。别慌,这里有几个常见问题的解决方案。
1. 忘记修改 SSH 端口,结果连不上了怎么办?
如果你改了端口但忘了在防火墙开放,或者改错了导致无法连接,你可以通过云服务商的“VNC 控制台”或“救援模式”登录。
- 阿里云/腾讯云:登录控制台,找到实例,点击“远程连接”或“VNC Console”。这是一个基于浏览器的终端,不依赖 SSH 网络配置。
- 进入后,恢复
/etc/ssh/sshd_config中的端口设置为 22,并重启 SSH 服务。
2. 如何查看谁在尝试暴力破解我的服务器?
使用 fail2ban 是最有效的办法。它可以自动屏蔽恶意 IP。
sudo dnf install fail2ban -y
sudo systemctl enable --now fail2ban
它默认已经配置好了监控 SSH 登录失败的功能。你可以通过 sudo fail2ban-client status sshd 查看当前封禁的 IP 数量。
3. 磁盘空间满了怎么办?
# 查看磁盘使用情况
df -h
# 查找大文件
du -sh /* | sort -hr | head -n 10
通常,日志文件(/var/log)或临时文件(/tmp)会占用大量空间。清理不需要的日志:
sudo journalctl --vacuum-time=1d
结语:你的服务器,你做主
到这里,你已经从一个对 Linux 一无所知的小白,变成了一个能够独立搭建、加固、监控 AlmaLinux 服务器的专家。这不仅仅是完成了一次任务,更是掌握了一项受用终身的技能。
记住,服务器安全不是一次性的工作,而是一个持续的过程。定期检查更新、关注安全公告、备份数据,这些习惯会让你的数字资产坚如磐石。
现在,去部署你的第一个 Web 应用、博客或者 API 服务吧!如果有具体的技术细节想深入了解,比如如何配置 Nginx 反向代理或者 Docker 容器化部署,随时可以再问我。祝你玩得开心!
