Linux 服务器安全加固与入侵应急:被黑了先做什么?
2026-10-16 07:32:17
先讲一个很多人以为"轮不到自己"的场景:一台放在机房或云上的 Linux 服务器,跑着公司的 Web、数据库、ERP 或者生产管理软件。某天你发现机器风扇一直响、负载居高不下,或者云平台发来一条安全告警,再或者客户说"你们网站怎么这么慢"。一查,进程列表里躺着一个不认识的挖矿程序,CPU 被吃满,开机时间显示是凌晨三点。
还有一个场景:一早进门,发现业务系统登不进去,连上去看,文件后缀全被改成了陌生的一长串字符,桌面上躺着一个说明文件,写着"你的数据已被加密,限期付款"。
这不是危言耸听。互联网上扫描器全天候在扫 22 端口(SSH)和 80/443,弱口令的机器从暴露到被拿下,经常是按分钟算的。服务器被黑不是"会不会"的问题,是"迟不迟"的问题。
先说结论:Linux 服务器安全就两件事——平时加固,把门锁好;出事后应急,按顺序处置。加固是有清单的,把 SSH、口令、防火墙、补丁、备份这几项做扎实,绝大多数自动化的扫描和爆破都会被挡在门外;真被入侵了也别慌,先断网、别重启、留证据,按套路来。

一、先看清楚:攻击者来干什么的
处置入侵最怕的不是机器被拿下,是不知道对方想干什么就一通乱查——进程翻了个底朝天,却不知道对方要的是算力还是数据,结果该保的证据没保、该堵的外联没堵。
同一台机器被拿下,动机不同,损害方式、排查重点、处置策略完全是两码事。先判断动机,再动手,事半功倍。针对小厂服务器的入侵,动机基本是这么几类:
挖矿——要的是算力(最常见)。拿你的 CPU/GPU 挖矿,机器当矿机,这是中小服务器被入侵的头号原因——自动化扫描不挑厂子,扫到弱口令就拿下,拿下了就挂矿。典型痕迹:CPU 持续飙满、负载居高不下,但业务本身没明显变慢(挖矿进程通常调低优先级、主动让着业务,就怕你早早发现);有外联到固定 IP/域名的 3333、5555、14444、45700 等端口(矿池协议常用端口);进程名常伪装成系统名;放在云上的机器,账单流量会比平时高出一截。对处置的意义:目标一般是算力,不针对你的数据,恢复可以快——但持久化不清干净照样复活,外联不封电费照付。
勒索——要的是钱,拿你的数据当人质。加密你的文件,留一个勒索信,限时付款换密钥。典型痕迹:文件批量被改后缀名、出现勒索说明、磁盘 IO 异常;有时先潜伏观察几天——摸清你的备份习惯、业务高峰时段,再挑个周末晚上动手。对处置的意义:时间线决定损失面,处置核心是隔离、留样本、判断变种(部分老变种已有公开解密工具)、靠备份恢复。业界的明确态度是不建议付赎金——付了不保证解密,给了坏工具你也验证不了,还资助继续作案。
窃密——要的是数据本身。悄无声息地潜伏,把客户资料、图纸、工艺文件、账务数据、源码往外搬,这类最阴险——你可能被黑了半年都不知道。典型痕迹:非工作时间的异常外联和上传流量(有时走 DNS 查询、有时连陌生对象存储端点)、异地登录、可疑账号读取大量文件、Web 服务器出现可疑的 webshell 文件。对处置的意义:排查重点是外传通道和时间线,处置重点是评估影响范围、改全部口令、按情况履行告知义务。悄无声息是这类动机的特征,发现得晚是常态,尽快把范围圈清楚才是正事。
当跳板——要的是你的网络位置。你的机器只是工具:拿你扫别人、发垃圾邮件、藏控制端。典型痕迹:对内网其他网段的扫描记录、邮件队列异常暴涨、连接已知恶意地址。对处置的意义:有连带责任风险——别人被攻击溯源到你这里,可能被通报、封禁,清理之外还要留好证据自证,配合上游处理。
破坏——要的是让你瘫。删库、删数据、毁配置。相对少见,多半带着明确针对性。对处置的意义:备份是唯一答案,处置重点是恢复而非排查。
无差别扫中——没什么明确目标。脚本试弱口令,进来也没想好干什么,挂个矿或者放着不管。同样要按流程走一遍,但心态上不用过度恐慌——大多数"被黑"属于这一类,把入口堵上就完了。
判断动机的三个快速线索:CPU/IO 被谁占着(挖矿、勒索都会动静很大,窃密往往很安静);网络流量往哪去、什么规律(外传数据还是连矿池、扫别人);文件系统被怎么动过(加密是勒索,批量外发是窃密,删除是破坏)。三条一对,动机基本能定性。定性了再排查,就知道该重点看什么、该优先保什么。
补一句实话:动机不是永远单一的——同一台机器上可能既有挖矿又有窃密,矿工顺手打包数据外卖的情况并不罕见。上面的分类是排查的起点,不是终点;时间线还原出来之后,以证据为准。
二、排查为什么远没有这么简单
"看一眼进程列表、翻一下定时任务、没事就重启"——这套流程对付脚本小子够了,对付真正的入侵远远不够。排查难,难在八个地方:
1. 你看到的命令,可能全是假的。对方只要拿到了 root,第一件事就是让看家护院的工具说谎:进程名可以伪造,列表里显示的名字只是启动参数的第一项,改个名就能伪装成系统进程名;查看进程、连接、打开文件的那些命令本身可能被替换成隐藏恶意内容的版本;甚至通过 /etc/ld.so.preload 注入一段库,让系统命令调用时顺带过滤掉攻击者的痕迹——命令还是原版的命令,输出被动了手脚。对策是别只信一个来源:用静态编译的 busybox(不依赖系统库,被劫持不了)跑一遍和系统命令的输出交叉比对,两边对不上的差异就是要查的方向;更硬的做法是直接读 /proc——那是内核暴露的原始信息,不经用户态工具的手。做加固时顺手备一个静态 busybox 在 U 盘或跳板机上,出事时它就是"可信参照物"。
2. 进程要往 /proc 里挖。进程列表只是进程的"名片",真面目要去 /proc 底下翻:可执行文件指向哪里(如果显示已删除而进程还在跑,这是"干完活清现场"的典型痕迹,赶紧把文件从 /proc 里拷出来留证——删掉的二进制的本身就是物证);真实启动参数(显示的名是伪装的,这里藏不住,带着矿池地址、钱包地址的情况很常见);工作目录(有时能看出它在翻哪个目录);环境变量里可能带着矿池地址、钱包地址、控制端域名——直接定性动机的物证;以及它开着哪些文件、连着哪些地址。判读顺序:先定位真实二进制,再拷贝留证,然后看启动参数和环境变量确认它连什么,最后看它摸过哪些业务文件。
3. 网络连接不是看一眼的事。看连接去向比看有没有连接更重要:连的是 IP 还是域名(域名会随时换,IP 相对稳定);端口是不是常见矿池端口;是不是在往陌生对象存储端点上传;DNS 查询记录别漏——数据外传越来越爱走 DNS 查询,按 IP 封根本拦不住,得看解析日志。非工作时间的大流量外发,比任何单点异常都更值得警惕——挖矿是持续小流量,窃密常是集中大流量,流量画像比单点更能说明问题。
4. 持久化是个清单,不是定时任务一行。杀掉进程半小时后又长出来——因为只砍了枝叶,根还在。该逐一过的地方:定时任务家族(系统级 crontab、cron.d 目录、各用户自己的任务、at 任务——只看当前用户的 crontab 会漏掉大半);systemd 的 service,以及比 cron 更少有人想起来的 timer;/etc/ld.so.preload 全局库劫持,一行路径就够隐蔽;SUID 文件(多出来的 SUID 等于永久 root 后门——这条要有基线才好判断,刚装好系统时跑一遍 find / -perm -4000 存起来,出事时才知道什么是"多出来");SSH 授权公钥文件里不认识的公钥只是其一,而且每个用户的家目录都要查、不只 root;被改过的 SSH 配置(放开 root 登录、加个高位端口)同样要查——公钥是钥匙,改配置是"把门留着",攻击者进来第一步往往就是把门留着;多出来的账号和 sudoers 条目;shell 启动文件里被塞的几行,每次登录都执行;内核模块。
5. 日志散在十几个地方,还可能被改过。登录痕迹不止失败登录记录:系统安全日志看认证成败、二进制的登录台账、systemd 的 journal 看服务事件、Web 访问日志(找 webshell 的异常请求、异常 UA)、应用自己的日志、云平台的安全审计——每一处都可能藏着一段时间线。而且日志可能被删、被截断——命令历史清空了、安全日志被截成零字节,"该有的日志没有了"本身就是一条重要线索,说明来者不光进来了,还花了心思收尾。这也是加固节反复强调日志外发的原因:本地留一份、远端同步一份,本地的被清了,远端的还在。
6. 单点没意义,要重建时间线。排查的目标不是"找到一个恶意进程",而是把整件事按时间串起来:第一次异常登录是什么时候、从哪来、哪个账号进来的,怎么提的权,什么时候植入了什么,持久化是什么时候布的,什么时候开始外传数据。时间线清楚了,入口、手法、动机、损失面全部有答案。举个例子,一条还原出来的时间线长这样:凌晨 2:17 陌生 IP 首次登录成功(弱口令)→ 2:19 提权成功 → 2:25 可疑二进制落进临时目录 → 2:31 定时任务多出一行 → 3:00 起 CPU 持续 90% 以上 → 隔天起每天凌晨 3 点固定外联。入口、手法、动机,全在这条线里。注意日志时间戳和文件时间都可能被动手脚,多来源交叉验证,别只信一个时钟。
7. 别忘了内存取证、文件时间戳和横向移动。内存里还有重启就没了的东西:正在跑的恶意进程、没落盘的连接、内存里的密钥和配置,这也是"先别重启"的根本原因——真要取证,重启前先抓内存镜像。文件系统自己的时间戳也是一条时间线:最近几天被改过的可执行文件、临时目录里多出来的东西、比某个"确定干净"的系统文件还新的可疑文件,都能把植入的时间点圈出来;时间戳可能被抹平,但"全目录里就它一个新"的突兀感藏不住。被攻破的往往不止一台:同一个口令用在三台机器上,进来一台就等于进来三台;日志里出现对内网其他机器的扫描记录,就是横向移动的实锤,共用口令、同网段的机器都要查。
8. 诚实的边界:rootkit 检测。用户态的 rootkit,chkrootkit、rkhunter 这类工具能发现一部分;内核态的 rootkit 加载之后,系统本身就已经不可信了,检测极其困难,基本要靠离线分析。对绝大多数场景,务实答案是:说不清干不干净就重装——重装解决用户态一切后门,配合改全部口令、封入口、从干净备份恢复,是把风险收敛到可接受范围的标准打法。既不用为此觉得"机器废了",也不能幻想杀杀毒就干净了。
三、安全加固清单:把该锁的门锁上
以下是一台生产 Linux 服务器该有的基线配置,按优先级从高到低。上面排查清单里的每一个后门位置,反过来说就是加固的检查点:
1. SSH:远程入口是重中之重。禁止 root 直接登录(用普通用户登进去再 sudo,出问题能追溯到人);改用密钥登录、关掉口令登录,爆破工具面对密钥基本无从下手——提醒一个实操顺序:先把公钥配上、验证能登进去,再关口令认证,顺序反了会把自己关在门外,这是加固现场最常见的自伤事故;用防火墙限制登录来源,只放行公司固定 IP或先走跳板机;装 Fail2ban,同一 IP 连续失败登录就自动封一段时间。几层叠一起,远程入口才算真锁上。
2. 口令与账号。所有账号强口令,禁止空口令;不同机器不同口令,别复用——复用的机器,攻破一台等于攻破一片。用 sudo 管提权,别图省事所有人都能直接切 root。不用的账号一律禁用或删除,定期核对账号列表和 SUID 文件,减少猜测面。
3. 防火墙:默认拒绝,按需放行。用 firewalld 或 iptables 把策略立起来:默认拒绝入站,只开业务必需的端口。数据库、缓存、管理端口绝不对公网开放。出站也值得管——挖矿外联、数据外传走的都是出站连接,把出站限制到业务必需的端点,是这两年被劫持场景下最划算的一道防线:机器真被拿下了,外联不通,矿池连不上、数据传不出,损害直接减半。云服务器同理,安全组只放业务端口和运维来源 IP,其余全关。
4. 补丁:让安全更新自动跑。CentOS/RHEL 系开 dnf-automatic,Ubuntu/Debian 开 unattended-upgrades,安全补丁自动装,别等出事才想起"好久没更新了"。应用层组件同样要跟版本——近年影响最大的几个漏洞(Heartbleed、Shellshock、Log4Shell、XZ Utils 后门)都是基础组件出的问题,跟着社区安全公告走。稳妥的策略是:安全补丁自动装,普通更新攒月度窗口,爆出高危漏洞时单独应急。
5. 最小化:关掉不用的东西。不跑的服务、不装的包、不开的端口,全部关掉。每多一个监听端口就多一个攻击面,生产服务器不是试验田。
6. 备份:最后一道防线。再稳的系统也可能被攻破或被勒索,能救命的只有备份。原则一条:备份和线上分开存(异地/离线/至少另一台机器),定期做恢复演练——没演练过的备份,等于没有备份。注意别让备份目录和线上机器长期保持可写的连通——现在的主流勒索软件专门找同步盘和可写的网络备份加密。这块单独展开成了一篇:《服务器备份到底该怎么做》。
7. 日志和监控:出事能追溯。开 auditd、把登录日志发到另一台机器上集中存(本地日志会被删,异地留一份才查得了)、对 CPU/内存/磁盘/流量做监控告警。入侵不可怕,可怕的是被黑了三个月才发现——早发现一天,损失小一圈。
四、按动机处置:底线相同,侧重不同
不管哪种动机,通用底线不变:断网隔离、留证据、排查、清持久化、改全部口令、评估恢复。但在通用底线之上,动机决定了每步的侧重点:
挖矿动机,重点是连窝端加封外联:持久化位置按第二节的清单逐一清干净,防火墙封掉矿池通信(IP 加端口),全机器改口令,找入口(多半是弱口令或暴露端口)。数据一般没被碰,恢复可以快——但别因此跳步,持久化漏一项就是白干;清理完之后再观察两三天,CPU 曲线正常了、外联干净了,才算完。
勒索动机,按分钟算的一场仗:先隔离(断网、拔共享盘,加密中的机器千万别让它继续扫内网共享);留样本(加密文件样本、勒索信、可疑进程拷一份,用于判断变种、日后报案);判断变种(部分老变种有公开解密工具);看备份——备份可用且未被同步加密,就是最大的赢面,直接走恢复;不建议付赎金;恢复后第一件事是找入口、做加固。没备份又必须赎回数据的,先找专业的人评估,别自己拍脑袋。
窃密动机,核心是外传时间线加影响范围:从日志和流量里还原"什么时候开始、通过什么通道、搬走了哪些数据",据此评估要告知谁(客户、合作方,必要时走法律/监管路径);所有口令全改——攻击者在里面潜伏了多久,口令就泄露了多久;可疑的外传通道一并封死。悄无声息是这类动机的特征,发现得晚是常态,尽快把范围圈清楚才是正事。
跳板动机,清理之外多两步:保留证据(证明你是受害者而非攻击源,配合上游通报时用);评估连带风险(你的 IP 有没有被拿去干坏事,可能被通报或封禁,主动申诉处理比被动等着强)。
破坏动机,排查是次要的,恢复是主要的:备份全不全、恢复要多久、先恢复哪套业务——按这个顺序走,查清是谁干的交给事后。
拿不准干不干净的生产服务器,重装系统、从备份恢复是最稳解——重装解决用户态的一切后门,配合改口令、封入口,风险就收敛到可接受范围。重装前记得先留证据。
五、几个最容易踩的误区
"杀掉进程就干净了。"杀进程只是把看得见的按下去,定时任务、启动项、后门公钥、入口漏洞都还在,过不了半天它自己回来。
"重启一下试试。"重启毁掉内存证据,还可能触发定时任务在开机时把现场清一遍。先断网留证,再谈重启。
"进程列表里没异常就是没被黑。"进程列表会撒谎——进程名能伪装、命令能被换、库能被劫持。工具的输出只是线索,不是结论。
"防火墙开着、端口放了,就安全了。"防火墙放行了 80/443,不等于 Web 应用自身没有漏洞——webshell 走的就是放行进来的端口,应用漏洞、弱口令、组件过时,哪条都能绕开它。
"内网服务器,没事。"内网不是保险箱:U 盘、一台被攻破的边缘设备、一个弱口令的远程入口,都能把风险带进来。
"云平台会管安全,买了服务器就省心。"云平台负责的是机房和虚拟化层的安全,操作系统以上——账号、口令、补丁、防火墙、应用——是租户自己的责任,这条边界叫"责任共担",出事时平台帮不了你。
"装了杀毒软件就安全了。"Linux 上的"杀毒软件"能力有限,真正的防护是加固本身——入口堵死、补丁跟上、备份常在。
"小厂没人盯着,黑客看不上。"自动化扫描可不挑厂子大小,它只看你的端口开没开、口令弱不弱。被当成"肉鸡"拿去打别人,连带责任还是你的。
六、这事可以交给专业的人做
安全加固是典型的一次性短期项目——按基线逐项配置、验收、交付文档,有明确的起点和终点;入侵应急更是分秒必争的活:断网、留证、排查、清入口、恢复,早一小时处置,少一分损失。真正复杂的那部分(动机定性、时间线重建、rootkit 判定、取证留证)吃的是经验,不是清单——排查时少看一个方向,可能就把最关键的证据漏过去了。
我们摩杰斯自己的核心业务系统(生产管理软件 PMS9、PMS5)十四年来一直跑在 Linux 上,从安装、配置到加固、应急,在几百家制造客户的现场一台台做过。我们处理这类事就按本文这两条线来:平时把该锁的门锁好,出事后按顺序处置、先留证再清理——动机判得准、证据留得住、损失控得住。
想了解系统为什么值得建在 Linux 上,可以看《系统为什么从第一天就跑在 Linux 上》;半夜宕机怎么分钟级处理,可以看《产线系统半夜宕机怎么分钟级拉起》;Linux 服务器的应急处理、安全加固、备份搭建这类短期项目的服务范围,见Linux 服务器服务介绍。
结语
Linux 服务器的安全,说到底就两句话:平时把门锁好(加固清单逐项做扎实),出事后按顺序处置(先断网、留证据、判动机、再清理)。攻击者盯的是入口和松懈,不是厂子大小;真正拉开差距的,是加固做没做、备份有没有、出事时乱不乱。排查没有"看一眼进程列表就下班"的捷径,但有"先判动机、再按清单走"的章法——这些都不是高深的学问,是有没有当回事、按不按套路来的问题。