一個來自德國機房的IP,來到了我的AIHOT網站,請求了一張圖片。
因爲我的網站上,爲了大家的用戶體驗,所以很多的圖片,我都提前緩存下來了,大概就像這樣。
我的服務器認認真真接待了它,把這張壓縮過的86k的圖片給它返回了過去。
事後看,這其實就是個踩點,後來我覆盤纔看清它的打法。
這個德國的IP,做了一個腳本,手裏拿着一份提前爬好的清單,上面全是我們頁面裏真實存在的圖片鏈接,它照着清單,一條一條地試,確認哪些鏈接能讓我的服務器真的跟他進行交互給它返回數據。
這個德國IP的請求的身份標識欄裏,沒有僞裝成服務器,沒有僞裝成爬蟲,只有一行字:
#TeamAntiAI
這個翻譯過來就是,反AI小隊。
我之前以爲是某個組織,但是週末查了一下以後發現,全網都沒有這個反AI小隊的任何信息,大概率,就是某一個大佬自己標的。
目的特別單純,就是打垮我這種vibe coding做的網頁,讓我這種外行喫喫教訓,讓我們知道,不是誰都可以做網站對外提供服務的。
你敢對外,我就打死你。
凌晨5點半,攻擊正式開始了。
對我服務器的請求量開始陡峭地往上爬。
5點58分的時候,一分鐘直接請求了13萬次。
6點整,我服務器的報錯日誌開始出現了第一個報錯,翻譯成人話就是,他請求的太猛了,我的AIHOT,完全接待不過來了。
然後是早上6點04分到6點07分。
這4分鐘,它往我的圖片接口灌了236萬個請求。
峯值出現在6點05分,那一分鐘,直接灌了87萬次。
我的站按過去一個月的數據算,平時一天的請求量是三百多萬,平均到每分鐘,也就兩千多次。
而這一分鐘,直接打了我平時的340倍。
整個上午它沒停過手,一波一波的,到中午我起牀爲止,總共砸了大概1100萬個請求。
而這一切發生的時候,我正在睡覺。
等我睡醒,看到鋪天蓋地的用戶反饋,同時看到飛書羣的告警、反應過來的時候,網站已經炸了,用戶打開時不時就會報錯,Skill和API啥的動不動就是失敗。
我翻着日誌裏那些密密麻麻的攻擊記錄,每一行都頂着同一個簽名,#TeamAntiAI。
這裏簡單的提一下,這個所謂的簽名,其實就是署名,放在HTTP的一個User-Agent裏,這個User-Agent本來是瀏覽器和爬蟲告訴服務器我是誰的地方,比如Chrome、GPTBot、Googlebot等等,所以呢,攻擊者留下這個署名,用意也很簡單。
就是純粹的挑釁,以及傳達態度,然後教育我。
我也是挺崩的。
也不知道招誰惹誰了。
我醒了以後,看到這些,沒辦法,第一時間在AIHOT的飛書訂閱羣裏發了通知,跟大家說明了一下情況。
還有一個最根本的問題,我不是開發,更不是安全工程師,作爲一個設計師出身的純粹的外行,你讓我去排查線上的攻擊,我說實話,那跟讓我去修飛機也沒啥區別。
所以呢,爲了解決這個問題,讓我的網站還能正常提供服務,我只能祭出AI了,你不是反AI小隊嗎,那就跟Claude Fable 5打一打吧。。。
於是,我就跟我的Claude Fable 5說:
我們被攻擊了,目標只有一個,在不誤傷真實用戶的前提下,把攻擊擋住。然後進行全方位的修復。
作爲一個純粹的外行,我只能這麼幹了。
但坦誠的講,接下來的48小時,可能是我學習速度最快的48小時,因爲我不可能當個傻子,真的全部讓渡給AI,所以,它一邊分析,我一邊學習,所有的思考過程,有任何我不懂的專業名詞和做法,我就立刻截圖扔給Codex,讓它根據我的AIHOT這個項目,給我用大白話進行解釋。
相信我,當你的服務器持續的崩,你的域名賬單持續的燒錢的時候,你的學習慾望,一定是最強烈的時候。。。
Claude Fable 5在扒了半天以後,給了我一個讓我非常意外的結論。
它說, 我的站,其實沒被打穿,我的服務器防護做的非常的好。
那將近240萬個打向AIHOT圖片接口的請求,被我們之前配好的限流器結結實實擋住了,日誌裏的數據非常漂亮,239萬次拒絕,放進來的只有最開始踩點那一千來個,攔截率做到了百分之九十九點九五。
那我懵逼了,那我的服務器是怎麼崩掉的???
然後Fable 5說,真正出事的,是我們服務器另一個地方。
這裏得先交代一下我們這臺服務器的特殊性,不然大家可能會看不懂這個坑是怎麼冒出來的。
我在火山上買的這臺服務器,其實現在是我們公司的共享服務器,上面跑着三十多個項目。
因爲之前爲了讓公司同事都能享受Vibe Coding的快樂,所以,我把這臺服務器的整套部署流程,包裝成了一個Skill,效果特別好。
同事不需要懂任何開發知識或者運維,只需要跟AI說一句“幫我把這個項目部署上去”,AI自己連服務器、做隔離、建服務、自建域名,幾分鐘,項目就能正式上線了。
但現在回頭看,幾個月前,我給大家封裝那個Skill的時候,腦子裏只有一個詞,方便。
那個時候,安全這個維度,壓根不在我的需求清單裏。
那個時候還是Opus 4.6的時代,我沒提,AI就沒做。
於是呢,每個項目就像一扇扇的門,每一扇新開的門,都開得飛快,但沒有一扇門配了鎖。
我自己的AIHOT自己的限流,是我之前單獨做安全硬化的時候加的,等於三十多個項目裏,就我自己這個項目,做了防護。
攻擊者把整臺服務器試了一圈,就發現了這個事。
我的圖片接口,從aihot的域名進來,有限流,發現攻擊不了。
但是,它硬生生找到了另一個當時沒有設防的別的項目的域名。
於是,直接往那個域名中,爆破了 868萬個請求。
這868萬個請求瞬間把整臺服務器的併發連接佔滿了,我的nginx當時的併發上限,一共就768個。
你可以理解成整臺服務器同時只能張開768隻手,現在全被攻擊者握住了,真實用戶伸過來的手,就完全沒人理他了。
於是,握手不成功,於是就是在用戶視角里,全站癱瘓,當時看了一下,週六的早上,間歇性報錯了1萬多次。
說實話,看到這個分析,我都懵逼了,因爲我其實一直自認爲是一個非常謹慎的人,AIHOT現在流量也還挺大的,所以我對着AIHOT,加了非常非常多的防護,但是如果不是Claude Fable 5幫我分析,我是真的不知道,我那個服務器上其他人的項目上,還有那麼多的坑。
然後就是正常的封禁IP、加限流,往服務器上做安全中臺,對所有項目進行全域防護。
同時在這個過程中,Claude Fable 5也在全面審查以後,自主的發現了我們服務器還有AIHOT上的一些安全漏洞和可以優化的小點,這全都是以前Opus 4.8還有GPT-5.5在審查的時候,沒有查出來的。
週六下午提交了很多的防護以後,看了一眼日誌,又讓AI掃了一遍,基本上流量和穩定性都回到了正常,我本來覺得這事就翻篇了。
結果,我想多了。
週六深夜12點多的時候,我洗完澡回來,發現我們飛書反饋羣,忽然炸了。
我們AIHOT網站上有個用戶反饋功能,用戶提交的反饋會自動推送到我的飛書羣裏,方便我去看大家的反饋,以及判斷是不是要優化。
那天晚上開始,羣裏的推送莫名奇妙的冒出了上萬條,我看了一眼,人都傻了,點開全是純數字亂碼,落款是一堆僞造的QQ郵箱。
這個攻擊者老哥,盯上了反饋接口。
一個北京聯通的IP,以每秒5.5次的頻率,往我們的反饋接口灌垃圾數據。
而且這個頻率,是精心挑選過的,正正好踩在限流的下沿一點點。
直接給我的數據庫裏灌了3萬多條垃圾數據,我的飛書直接爆炸了。
真的就是純粹的惡意。。。
而這還只是開胃菜。
凌晨12點半,主力正式到場。
一批新IP加入進來, 有云服務器,有居民寬帶, 跟第一波單槍匹馬的莽夫畫風完全不同,這一次是多IP協同,而且每個IP的請求頻率都精準的壓在限流紅線之下,單看誰都不違規,但是合起來,就是一支軍隊。
而且這次,大部分都不打 # TeamAntiAI 的旗號了,全部僞裝成各種普通的用戶,開始批量攻擊。
打法也升級了,他們專挑最貴的頁面,就是那種沒法用緩存、每次都要服務器現場渲染的頁面,而且每個請求都帶一個隨機參數,這個隨機參數是用來騙緩存的,緩存一看參數不一樣,以爲是新頁面,就放請求進去讓服務器重新算。
於是,我服務器後臺的渲染隊列很快就堵死了。
我當時甚至看到日誌裏有一條真實用戶的請求,加載一個列表頁,等了60.024秒。
60秒。。。
真的,平時這個頁面,40毫秒就出來了,連1秒都用不到,直接慢了一千五百倍。
沒辦法,只能在飛書羣裏又給大家磕頭。
然後Claude Fable 5開始同步的防禦。
那天晚上的git提交記錄,我現在回看,還是會覺得感慨。
凌晨0點56分,AI封掉往反饋接口灌水的IP,給反饋接口加上獨立的防灌水規則,飛書羣安靜了。
1點17分,給埋點接口加上限流,堵住另一個同樣能被灌的口子。
1點36分,7個證據確鑿的攻擊IP拉黑。
那幾個攻擊的IP拉黑的那一刻,列表的響應時間終於從60秒跌回了40毫秒。
1點51分,開始治本,一整套緩存加固上線,這一條是當晚真正的勝負手。
它先改了緩存的識別規則,讓緩存徹底無視那個隨機參數,從此參數再怎麼隨機,命中的都是同一份緩存,堵上了之前的漏洞。
然後把緩存時間從60秒拉長到3分鐘,因爲我們是個資訊站,大部分時間其實都是靜態的,列表頁3分鐘前的樣子和現在的樣子,幾乎沒區別,但對服務器來說,同一個頁面被真正重新渲染的次數,直接除以3,進一步優化性能。
然後做了合單, 同一時刻湧進來一百個人要同一個頁面,以前是後廚炒一百遍,現在只放第一個請求進去炒,剩下九十九個在窗口等着,炒好了一起分,繼續做性能優化。。。
2點15分,它把系統裏所有的報警消息全部重寫了一遍,從工程師黑話,改成產品經理能看懂的人話。
因爲它知道,半夜看報警的人,是我,之前我提了一下我有點看不懂文案。
然後,它還把封禁審批的流程改了,之前的Claude Opus 4.8開發的規矩是每個封禁因爲怕誤封,都要我拍板,但它同樣的,發現我根本看不懂那些證據,IP歸屬、請求指紋、行爲特徵,我盯着看半天也只能憑感覺。
所以它直接拉了最近兩個月以來的惡意IP的特徵,列出了6條,做了自動化封禁策略,保證不傷真人用戶的同事,自動化的Ban掉所有的惡意IP。
2點40分, 把訪問日誌的留存拉長到一年,理由是,爲了可能取證需要。
最後,順道手還挖出了一些長期潛伏的盜採爬蟲,無時無刻的不在爬我們的數據做了鏡像站,Claude Fable 5在覈實完特徵以後全封了。。。
一切搞定,大概凌晨3點了,我害怕又出現凌晨5點多的大規模攻擊導致我服務器崩了,然後又賬單爆炸,於是我跟Claude Fable 5說,我要去睡覺了,你幫我盯着。。。
所幸,一夜平安無事,所有的攻擊,全都防住了。
昨天晚上,看到用戶給我評論。
還是挺感慨的。
哪有啥團隊,就我一個人+一個AI。
我還是個純外行,純小白,能做的,就是告訴Claude Fable 5,發生了啥,用戶反饋了啥,快去幫我處理。
我以前打過一個比方,說不同檔次的模型,用起來完全是三種東西。
差一點的模型,像一個非常初級的執行者。你得把方案想得明明白白,prompt寫得事無鉅細,它只負責純粹地幹活,你漏想一步,它就錯一步。
好一點的模型,比如GPT 4.8、GPT 5.5這一檔,像一個組長,或者初級總監,你給它一個大概的任務,它能自己拆解,做出來的東西有的時候會比你自己想的全面一些。
而這兩天一直在用的Fable 5,我覺得,是另一個物種。
它像一個高級總監,甚至合夥人。
你不需要給它方案,甚至不需要給它任務,你只需要給它目標。
我這兩天給它的目標就一句話:在不誤傷真實用戶的前提下,把攻擊擋住。
最後交回來的東西,比我自己能想象出來的上限,還要高,至少在我這個外行的眼裏,一切都做的井井有條,多想一步,全力的解決所有的問題。
給執行者,你要寫一頁紙的說明書。
給組長,你要交代一段話。
給合夥人,你只需要說清楚你要什麼,和什麼不能碰。
我越來越感受到,模型越強,prompt越短。
你需要定死的,就是目標與紅線,這其實,對應在Agent裏面的,就是Goal和Harness。
這兩天,真的讓我成長很多,學到了太多了, 一邊被攻擊,一邊惡補網絡安全知識,一邊防守。
這兩天我搞明白了限流、封禁IP、緩存擊穿、應用層攻擊和帶寬攻擊的區別、爲什麼防守要一層一層設。
沒有一個是看教程學的。
這種學習效率,我說實話,我過去從來沒體驗過。
以前自學一個新領域,最大的成本其實就是不知道該學什麼,教程會把一百個知識點平鋪在你面前,個個都顯得挺重要。
但實戰裏,每個知識點登場的時候,他其實,都帶着一個正在流血的傷口,你想不記住都難。
這可能就是最大的進化了。
網站現在還在跑着。
我也不知道,下一波攻擊什麼時候會再來。
我只能說,謝謝大佬們,給我學習的機會。
以上,既然看到這裏了,如果覺得不錯,隨手點個贊、在看、轉發三連吧,如果想第一時間收到推送,也可以給我個星標⭐~謝謝你看我的文章,我們,下次再見。
>/ 作者:卡茲克
>/ 投稿或爆料,請聯繫郵箱: [email protected]