写在前面:一次真实的“被入侵”经历
💡 推荐阅读:还在手动改端口?Nginx反向代理配置实战:从入门到高可用,三种方案横评对比
各位站长朋友,大家好。笔者今天不聊虚的,先讲讲自己前段时间的一次“翻车”经历。
凌晨三点,手机突然收到云平台的一条告警短信,提示服务器外联可疑IP。当时心里就“咯噔”一下,赶紧爬起来开电脑。登录后台一看,好家伙,CPU跑满100%,一个陌生的进程占用了大量资源。再一看,crontab里多了一条定时任务,每隔几分钟就从某个奇怪的域名下载脚本执行。
那一刻的心情,相信经历过的人都懂。后来花了整整一个下午排查、清理、修补漏洞,才算彻底肃清。今天这篇文章,就是想把这次“踩坑”经历以及笔者多年积累的Linux安全攻防经验,毫无保留地分享给大家。希望能帮各位少走弯路,别等服务器被“掏空”了才后悔没做防护。
环境准备与前置要求
💡 延伸阅读:Linux服务器刚上线就被黑?这份安全加固实操指南请收好
为了确保下面的实操步骤有效,请先确认你的服务器环境满足以下条件:
- 操作系统:本文以 CentOS 7.9 / Ubuntu 20.04 LTS 为例,其他发行版命令略有差异。
- 权限要求:必须拥有服务器的
root权限,或者具备sudo免密执行权限。 - 网络环境:服务器需能正常访问外网,以便更新软件源和下载安全工具。
- 重要提醒:请务必提前做好快照或备份!接下来的操作涉及系统配置修改,一旦失误可能导致SSH断开或服务异常。
第一道防线:从“入口”开始收紧
💡 深度技术指南:Nginx反向代理配置后页面全乱了?资深站长手把手排查:是缓存、路径还是Header的锅?
攻击者想要入侵,第一步必然是扫描你的端口。如果暴露了不必要的服务,就等于给黑客敞开了大门。
1. 修改SSH默认端口与禁用Root登录
默认的22端口是扫描器的“重灾区”。修改SSH配置是最基础、最有效的防护手段。
# 1. 编辑SSH配置文件
vim /etc/ssh/sshd_config
# 2. 修改以下参数(去掉注释并修改)
Port 22999 # 将默认22端口改为高位端口,如22999
PermitRootLogin no # 禁止root用户直接登录
PasswordAuthentication yes # 先保留密码登录,等配置好密钥后再改为no
MaxAuthTries 3 # 限制最大密码尝试次数为3次
# 3. 保存退出后重启SSH服务
systemctl restart sshd
# 4. 重要!不要关闭当前SSH窗口,另开一个窗口测试新端口连接
ssh -p 22999 your_user@your_server_ip
配置密钥登录(更安全):
# 在本地机器生成密钥对(若已存在可跳过)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 将公钥上传到服务器(会提示输入密码)
ssh-copy-id -p 22999 your_user@your_server_ip
# 上传完成后,修改sshd_config文件,禁用密码登录
PasswordAuthentication no
# 重启服务生效
systemctl restart sshd
2. 配置防火墙:只放行必要端口
无论是使用 firewalld 还是 iptables,原则都一样:默认拒绝,按需放行。
# CentOS 7+ 使用 firewalld
systemctl start firewalld
systemctl enable firewalld
# 放行新的SSH端口和Web服务端口
firewall-cmd --permanent --add-port=22999/tcp
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
# 移除默认的22端口(如果已经添加)
firewall-cmd --permanent --remove-service=ssh
# 重新加载防火墙规则
firewall-cmd --reload
# 查看当前规则列表
firewall-cmd --list-all
第二道防线:系统层面的主动防御
光有“门锁”还不够,系统内部也需要有“监控摄像头”和“报警器”。
1. 安装并配置Fail2ban(防暴力破解)
Fail2ban 能自动扫描日志,发现多次尝试失败的IP后,自动将其加入防火墙黑名单。
# 安装Fail2ban
yum install fail2ban -y # CentOS
# apt install fail2ban -y # Ubuntu
# 创建本地配置文件
cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 86400 # 封禁时间:1天
findtime = 600 # 在10分钟内统计
maxretry = 5 # 超过5次尝试即封禁
[sshd]
enabled = true
port = 22999 # 必须改为你修改后的SSH端口!
logpath = /var/log/secure # CentOS路径
# logpath = /var/log/auth.log # Ubuntu路径
EOF
# 启动并设置开机自启
systemctl start fail2ban
systemctl enable fail2ban
# 查看封禁状态
fail2ban-client status sshd
2. 使用Rkhunter进行Rootkit查杀
Rootkit 是入侵者用来隐藏踪迹的工具,普通命令无法发现。Rkhunter 是业内常用的检测工具。
# 安装Rkhunter
yum install rkhunter -y # CentOS
# apt install rkhunter -y # Ubuntu
# 更新特征库
rkhunter --update
# 对系统进行全面扫描(首次扫描会较慢)
rkhunter --check --skips-keypress
# 查看扫描报告(重点关注 Warning 项)
cat /var/log/rkhunter.log | grep -E "Warning|Error"
第三道防线:应用层与文件的“体检”
如果你的服务器运行着网站或业务应用,那么代码漏洞往往是最大的突破口。下面分享一些排查经验。
1. 快速定位可疑进程与文件
当怀疑服务器被入侵时,以下命令组合能帮你快速找到“元凶”。
# 查看CPU占用最高的前10个进程
top -b -n 1 | head -20
# 查看网络连接,找出可疑的外联IP
netstat -antlp | grep ESTABLISHED
# 查找最近24小时内被修改的可疑文件(排除系统目录)
find / -mtime -1 -type f \( -name "*.sh" -o -name "*.pl" -o -name "*.py" \) ! -path "/proc/*" ! -path "/sys/*" 2>/dev/null
# 检查计划任务,这是黑客常用的持久化手段
crontab -l
cat /etc/crontab
ls -la /etc/cron.d/
2. 加固Web目录权限
很多入侵事件源于Web目录权限过大,导致攻击者可以上传并执行恶意脚本。
# 假设Web根目录为 /var/www/html
# 将目录权限设置为755,文件权限设置为644
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
# 禁止在图片目录执行PHP脚本(以Nginx为例)
location ~* /(uploads|images|static)/.*\.(php|php5)$ {
deny all;
}
3. 数据库安全基线检查
MySQL/MariaDB 的默认安装存在风险,请务必执行以下加固操作。
# 执行安全安装向导(会提示设置root密码、移除匿名用户等)
mysql_secure_installation
# 为数据库创建专用账号,而不是使用root连接应用
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'Strong_Password_Here!';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
避坑清单:这些都是血泪教训
在长期维护服务器的过程中,笔者总结了以下容易忽略的“坑”,分享给大家。
| 常见误区 | 潜在风险 | 正确做法 |
|---|---|---|
| 使用弱密码或默认密码 | 极易被暴力破解 | 使用16位以上随机密码,并启用密钥登录 |
| 所有服务都用root运行 | 一旦被入侵,攻击者直接获得最高权限 | 创建专用用户运行服务,遵循最小权限原则 |
| 不更新系统补丁 | 已知漏洞被利用 | 每月执行 yum update 或 apt upgrade |
| 备份文件放在Web目录下 | 数据库备份被下载泄露 | 备份文件存放于服务器外部存储,且设置严格权限 |
| 忽视日志监控 | 无法及时发现入侵行为 | 配置日志集中管理或使用云监控服务 |
写在最后的建议
安全攻防是一个持续对抗的过程,没有一劳永逸的解决方案。今天分享的这些实操步骤,是每一位站长都应该掌握的“基本功”。
不过话说回来,软件层面的加固固然重要,但硬件和网络层面的基础安全同样不可忽视。如果一台服务器所在的物理机房本身防护薄弱,或者云平台存在漏洞,那我们在系统内做得再多也是徒劳。这也是为什么笔者一直强调,选择一家靠谱的云服务商至关重要。正规的云平台不仅提供DDoS高防、入侵检测等基础安全能力,其底层虚拟化隔离技术也更为成熟可靠。大家在选购服务器时,千万不要只看价格便宜,要综合考量服务商的资质、口碑和安全能力。毕竟,数据无价,一旦丢失或泄露,损失是不可估量的。
希望这篇文章能帮你筑牢服务器的第一道防线。如果你在实操过程中遇到任何问题,或者在排查入侵痕迹时发现了什么新的套路,欢迎在评论区留言交流。咱们下期再见。
相关技术专题与延伸阅读
- 还在手动改端口?Nginx反向代理配置实战:从入门到高可用,三种方案横评对比
- Linux服务器刚上线就被黑?这份安全加固实操指南请收好
- Nginx反向代理配置后页面全乱了?资深站长手把手排查:是缓存、路径还是Header的锅?
- Nginx反向代理配置前端:从入门到生产环境的最佳实践调优指南
📦 【资源免费领】本文全套实操配置文件与避坑手册下载
本文涉及的全套 Docker Compose 配置文件、服务器运维避坑清单及 AI 提效指令库已完整打包,可免费极速转存:
💡 提示:推荐使用手机【夸克网盘 App】打开保存,新用户首月免费赠送 1TB 超大空间与免流量极速下载特权。