xmlrpc.php 被攻擊了!Nginx 一個設定擋掉 DoS / DDoS 攻擊
小蛙有一天在翻 log 的時候突然看到一堆存取 xmlrpc.php 的記錄,源源不絕的出現,Google 了一下解法,大概記錄一下。
問題
大概長這樣,源源不絕噴出來~
DoS / DDoS 在維基百科的翻譯是
阻斷服務攻擊(英語:denial-of-service attack,簡稱DoS攻擊)亦稱洪水攻擊,是一種網路攻擊手法,其目的在於使目標電腦的網路或系統資源耗盡,使服務暫時中斷或停止,導致其正常用戶無法存取。
阻斷服務攻擊
當駭客使用網路上兩個或以上被攻陷的電腦作為「殭屍」向特定的目標發動「阻斷服務」式攻擊時,稱為分散式阻斷服務攻擊(distributed denial-of-service attack,簡稱DDoS攻擊)。
解決方法
小蛙有掛 Cloudflare CDN,標榜可以擋掉一些 DoS / DDoS,不過 log 裡還是能看到一大堆記錄,小蛙參考了兩篇文章,基本做法都差不多。
第一篇參考自 Deny Access to WordPress xmlrpc.php with NGINX
第二篇參考自 資安:WordPress 禁止 xmlrpc.php 攻擊
從 WordPress 3.5 以後,xmlrpc 預設是開啟的,記得很久以前小蛙的主機也被密集攻擊過一次
小蛙用的是 nginx,裡面可以設定當某個路徑被存取的時候,作相對應的動作,這邊我們確切知道就是 /xmlrpc.php 這支,所以就可以這樣寫
server { ... location = /xmlrpc.php { deny all; access_log off; log_not_found off; return 444; } }
當被存取 xmlrpc.php 的時候,拒絕所有連線,把存取 log 跟找不到檔案 log 都關掉,最後回傳 444,而這個 444 維基百科上的說明是 nginx 自己擴充的狀態碼。
雖然這樣 request 還是會進來,但是至少被 nginx 拒絕掉之後,不會因為大量執行 php,導致占用 CPU 跟記憶體,另外 Deny Access to WordPress xmlrpc.php with NGINX 最下面也有提到,用這個方法的話,會導致一些需要透過外部存取的插件失效,不過小蛙沒有用類似的套件,先解燃眉之急囉!這篇留在這邊給有需要的人或是未來換主機之後又遇到的自己。