- 摩傑斯
- 2026-10-16
Linux 伺服器安全加固與入侵應急:被黑了先做什麼?
先講一個很多人以為"輪不到自己"的場景:一臺放在機房或雲上的 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 伺服器的安全,說到底就兩句話:平時把門鎖好(加固清單逐項做紮實),出事後按順序處置(先斷網、留證據、判動機、再清理)。攻擊者盯的是入口和鬆懈,不是廠子大小;真正拉開差距的,是加固做沒做、備份有沒有、出事時亂不亂。排查沒有"看一眼程序列表就下班"的捷徑,但有"先判動機、再按清單走"的章法——這些都不是高深的學問,是有沒有當回事、按不按套路來的問題。




