当前位置:首页>Linux>紧急提醒:Linux服务器正遭疯狂攻击!8招自救指南,跟着做立刻安全

紧急提醒:Linux服务器正遭疯狂攻击!8招自救指南,跟着做立刻安全

  • 2026-09-02 20:03:00
紧急提醒:Linux服务器正遭疯狂攻击!8招自救指南,跟着做立刻安全

服务器被入侵,轻则业务中断,重则数据永久丢失。每天数万次扫描,多数攻击源于基础配置疏忽——22端口暴露、弱密码、数据库公网开放。本文8个措施,堵住99%常见攻击入口。

别等被攻击了再后悔。今天我就把自己每次新购服务器必做的8个安全设置,掰开揉碎了教给你。每一步都有命令和效果说明,你照着做就能防住绝大多数攻击。

1. 第一招:盘点并关闭所有“后门”(防端口扫描)

目标:先搞清楚自己家开了几扇门,然后把没人用的门彻底封死。

操作:

# 查看当前开放的所有端口netstat -tulpn | grep LISTEN

【示意图:终端输出示例,列出所有监听端口,比如22(ssh)、80(nginx)、3306(mysql)等】

你会看到一堆端口。如果发现你根本不需要的服务(比如FTP的21端口、Telnet的23端口),立即关掉它:

# 以关闭FTP服务为例sudo systemctl stop vsftpdsudo systemctl disable vsftpd

再执行 netstat -tulpn | grep LISTEN 检查,那个端口应该消失了。

【示意图:再次执行netstat,vsftpd对应的端口已不在列表中】

记住原则:开放的端口越少,攻击面越小。


2. 第二招:把数据库“藏”起来(防数据库暴露)

目标:MySQL、Redis这类数据库,绝不能把端口直接暴露在公网上。

操作:

先看看你的数据库是不是在“裸奔”:

# 以MySQL为例sudo netstat -tulpn | grep 3306

【危险信号图:显示 0.0.0.0:3306,表示监听所有网络接口】

如果看到 0.0.0.0:3306,说明你的数据库全世界都能访问,这是极度危险的。

把它改造成只监听本地(或内网):

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

找到 bind-address 这一行,修改为:

bind-address = 127.0.0.1      # 只允许本机访问# 如果必须被内网其他服务器访问,则改为内网IP,如 192.168.1.10

保存后重启MySQL:

sudo systemctl restart mysql

再次检查:

sudo netstat -tulpn | grep 3306

【安全图:显示 127.0.0.1:3306 或 内网IP:3306】

现在公网已经扫不到你的数据库端口了。


3. 第三招:给SSH换把“隐形锁”(防暴力破解)

目标:SSH的22端口是全球被扫描最多的目标。我们要改端口、禁root、禁用密码登录,让暴力破解工具彻底失效。

操作:

sudo vim /etc/ssh/sshd_config

在文件中找到并修改或添加以下几行:

Port 2222                   # 将22改为一个不常用的端口,比如2222PermitRootLogin no          # 禁止root直接登录PasswordAuthentication no   # 禁用密码登录,只允许密钥登录

【示意图:vim中sshd_config文件,以上三行被高亮或圈出】

💡 关于禁用密码登录:这是防止暴力破解最关键的一步。如果你还不熟悉如何配置SSH密钥登录,强烈建议先看我的另一篇文章: 《Linux SSH免密登录终极指南:三步搞定,效率翻倍》 里详细讲了密钥生成、公钥部署、权限设置的全过程,看完再回来继续。

保存退出后,重启SSH服务:

sudo systemctl restart sshd

⚠️ 特别注意:在退出当前SSH连接前,一定要新开一个终端窗口,用新的端口和你的私钥测试能否登录成功! 否则你可能把自己锁在服务器外面。

【示意图:新窗口使用 ssh -p 2222 user@your-server 成功登录的画面】

一旦确认新窗口能登录,再关闭原窗口。


4. 第四招:装个“自动门卫”,踢走捣乱者(Fail2ban)

目标:即使改了端口,也可能有漏网之鱼。让Fail2ban自动监控登录日志,谁连续输错密码就封他IP。

操作:

# 安装Fail2bansudo apt updatesudo apt install fail2ban -y

创建一个本地配置文件:

sudo vim /etc/fail2ban/jail.local

写入以下内容(注意端口号要与你修改的SSH端口一致):

[sshd]enabled = trueport = 2222          # 这里填你修改后的SSH端口!maxretry = 3          # 允许连续失败的次数bantime = 3600        # 封禁时间,单位秒(3600=1小时)

【示意图:jail.local文件内容截图】

启动并查看状态:

sudo systemctl restart fail2bansudo fail2ban-client status sshd

【示意图:fail2ban-client状态输出,可能显示已封禁的IP列表】

从此,任何IP尝试3次失败就会被自动封禁1小时,暴力破解者只能望洋兴叹。


5. 第五招:给内核穿上“防弹衣”(防DDoS基础)

目标:在系统层面做简单但有效的配置,抵御常见的SYN Flood等攻击。

操作:

开启SYN Cookie(这是抵御SYN Flood攻击的利器):

# 临时生效sudo sysctl -w net.ipv4.tcp_syncookies=1# 永久生效echo "net.ipv4.tcp_syncookies=1" | sudo tee -a /etc/sysctl.confsudo sysctl -p

【示意图:执行sysctl命令和确认参数写入的画面】

这一行配置会让内核在面对大量半连接请求时,不会耗尽内存,而是直接丢弃攻击包。


6. 第六招:防小人,给网站加上“限流阀”(防CC攻击)

目标:如果有人想用大量请求把你的网站累垮(CC攻击),Nginx可以自动限制他。

操作:

编辑你的Nginx站点配置文件(例如 /etc/nginx/sites-available/你的站点),在 server 块外面添加限流池定义:

# 定义一个名为“one”的限流池,每个IP每秒最多10个请求limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

然后在 location / 内部应用这个限流:

server {    ...    location / {        limit_req zone=one burst=20;   # 每秒10次,突发最多20个排队        ...    }}

【示意图:nginx配置文件中添加的这两段代码】

测试配置并重载Nginx:

sudo nginx -tsudo systemctl reload nginx

现在,任何一个IP如果每秒请求超过10次,多余的请求就会被Nginx直接返回503,你的应用服务器就不会被拖垮。


7. 第七招:自动更新+定期备份,最后的救命稻草(防勒索与漏洞)

目标:自动更新能堵住大部分已知漏洞;3-2-1备份策略能让你在被勒索或误操作后安然无恙。

操作:

自动安全更新:

sudo apt install unattended-upgradessudo dpkg-reconfigure --priority=low unattended-upgrades

在配置界面选择“是”,以后系统就会自动安装重要的安全更新。

【示意图:unattended-upgrades配置界面】

定期备份(3-2-1原则:3份备份,2种介质,1份异地):

编辑crontab,每天自动备份重要数据到另一块硬盘或远程服务器:

crontab -e

添加一行(示例:每天凌晨2点备份 /data 目录到 /backup 下以日期命名的文件夹):

0 2 * * * rsync -av --delete /data/ /backup/$(date +\%Y\%m\%d)/

【示意图:crontab -e中显示已添加的备份任务】

如果有条件,再定期将备份同步到另一台机器或云存储。


8. 第八招:给数据通信加把锁(防中间人攻击)

目标:防止数据在传输过程中被监听或篡改。

操作:

全站启用HTTPS,并强制跳转:

# 在Nginx配置中server {    listen 80;    server_name yourdomain.com;    return 301 https://$host$request_uri;  # 所有HTTP请求301跳转到HTTPS}server {    listen 443 ssl;    ssl_certificate     /path/to/cert.pem;    ssl_certificate_key /path/to/key.pem;    # 启用HSTS,告诉浏览器强制使用HTTPS访问    add_header Strict-Transport-Security "max-age=31536000" always;}

【示意图:浏览器地址栏显示绿色锁标志,以及HSTS响应头】

现在,即使攻击者在你和服务器之间,也无法解密你的数据。


🛡️ 终极福利:一键加固脚本

为了方便你操作,我把前七步(除数据库和Nginx配置外)的核心操作打包成了一个脚本。注意:执行前请仔细阅读注释,并根据你的实际情况修改(特别是SSH端口)!

保存为 secure.sh:

#!/bin/bash# Linux服务器一键安全加固脚本 (适用Ubuntu/Debian)# 警告:执行前请确保你已准备好SSH密钥,并知晓新端口!# 1. 关闭无用服务示例 (请根据实际调整)echo ">>> 正在关闭vsftpd服务(如果存在)..."sudo systemctl stop vsftpd 2>/dev/null && sudo systemctl disable vsftpd 2>/dev/null# 2. 开启SYN Cookieecho ">>> 开启SYN Cookie..."echo "net.ipv4.tcp_syncookies=1" | sudo tee -a /etc/sysctl.confsudo sysctl -p# 3. SSH强化NEW_SSH_PORT=2222  # <--- 请修改为你想要的端口!echo ">>> 配置SSH: 端口=$NEW_SSH_PORT, 禁用root登录, 禁用密码登录..."sudo sed -i "s/^#Port 22/Port $NEW_SSH_PORT/" /etc/ssh/sshd_configsudo sed -i 's/^#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_configsudo sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_configsudo systemctl restart sshdecho ">>> SSH配置完成!请在另一个窗口测试登录成功后,再退出当前会话!"# 4. 安装并配置Fail2banecho ">>> 安装Fail2ban..."sudo apt update && sudo apt install fail2ban -ycat << EOF | sudo tee /etc/fail2ban/jail.local[sshd]enabled = trueport = $NEW_SSH_PORTmaxretry = 3bantime = 3600EOFsudo systemctl restart fail2banecho ">>> Fail2ban配置完成。"# 5. 安装自动更新echo ">>> 配置自动安全更新..."sudo apt install unattended-upgrades -ysudo dpkg-reconfigure --priority=low unattended-upgrades -f noninteractiveecho "====================================================="echo "✅ 基础加固完成!请务必:"echo "1.  ✅ 确认SSH密钥登录正常,且端口为 $NEW_SSH_PORT"echo "2.  🔥 手动配置防火墙,放行新SSH端口,并限制数据库端口"echo "3.  🌐 手动配置Nginx限流和HTTPS"echo "4.  💾 手动设置定时备份任务"echo "====================================================="

【示意图:运行bash secure.sh的过程和结束提示】

执行:chmod +x secure.sh && sudo ./secure.sh


写在最后

安全不是一劳永逸的事,而是一场持续的攻防战。但这8招,能帮你防住90%的常见攻击。

现在就登录你的服务器,跑一遍脚本,检查一遍配置。 别等到被黑了才追悔莫及。

如果你在操作中遇到问题,或者有自己独到的防御技巧,欢迎在评论区留言分享!

最新文章

随机文章