簡介
在2018年2月27日,Cloudflare 和 Arbor Networks 公司于周二發(fā)出警告稱,惡意攻擊者正在濫用 Memcached 協(xié)議發(fā)起分布式拒絕服務(DDoS)放大攻擊,全球范圍內許多服務器(包括 Arbor Networks 公司)受到影響。下圖為監(jiān)測到Memcached攻擊態(tài)勢。
美國東部時間28日下午,GitHub透露其可能遭受了有史最強的DDoS攻擊,專家稱攻擊者采用了放大攻擊的新方法Memcached反射攻擊,可能會在未來發(fā)生更大規(guī)模的分布式拒絕服務(DDoS)攻擊。對GitHub平臺的第一次峰值流量攻擊達到了1.35Tbps,隨后又出現(xiàn)了另外一次400Gbps的峰值,這可能也將成為目前記錄在案的最強DDoS攻擊,此前這一數據為1.1Tbps。據CNCERT3月3日消息,監(jiān)測發(fā)現(xiàn)Memcached反射攻擊在北京時間3月1日凌晨2點30分左右峰值流量高達1.94Tbps。
Memcached 是一個高性能的分布式內存對象緩存系統(tǒng),用于動態(tài)Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高動態(tài)、數據庫驅動網站的速度。放大攻擊針對使用UDP在公共網絡上公開的Memcached部署。
為了緩解攻擊,最好的選擇是將Memcached綁定到本地接口,禁用UDP,并使用傳統(tǒng)的網絡安全方案保護您的服務器。在本教程中,我們將介紹如何執(zhí)行此操作,以及如何將服務公開給外部客戶端。
在Ubuntu和Debian服務器上保護Memcached
對于在Ubuntu或Debian服務器上運行的Memcached服務,您可以通過編輯/etc/memcached.conf
文件調整服務參數,例如:
sudo nano /etc/memcached.conf
默認情況下,Ubuntu和Debian將Memcached綁定到本地127.0.0.1
端口。受限制的安裝127.0.0.1
不容易受到來自網絡的放大攻擊。
. . . -l 127.0.0.1 . . .
那么禁用UDP也是一個好主意,這更有可能被這種特殊攻擊利用。要禁用UDP,請將以下內容添加到底部或文件中:
. . . -U 0
完成后,保存并關閉文件。
重新啟動Memcached服務以應用更改:
sudo service memcached restart
通過輸入以下內容驗證Memcached當前是否綁定到本地接口并僅偵聽TCP:
sudo netstat -plunt
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name . . . tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 2383/memcached . . .
您應該看到僅使用TCP memcached
綁定到127.0.0.1
。
在CentOS和Fedora服務器上保護Memcached
對于在CentOS和Fedora服務器上運行的Memcached服務,您可以通過編輯/etc/sysconfig/memcached
文件來調整服務參數,例如:
sudo vi /etc/sysconfig/memcached
我們希望綁定到本地網絡接口,使用-l 127.0.0.1
選項限制到同一臺計算機上的客戶端的流量。我們還將設置-U0
禁用UDP協(xié)議。
在OPTIONS
變量中添加這兩個參數:
PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="-l 127.0.0.1 -U 0"
完成后保存并關閉文件。
要應用更改,請重新啟動Memcached服務:
sudo service memcached restart
通過輸入以下內容驗證Memcached當前是否綁定到本地接口并僅偵聽TCP:
sudo netstat -plunt
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name . . . tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 2383/memcached . . .
您應該看到僅使用TCP memcached
綁定到127.0.0.1
。
允許通過專用網絡訪問
上面的步驟告訴Memcached只能偵聽本地接口。這可以通過不將Memcached接口暴露給外部各方來防止放大攻擊。如果您需要允許從其他服務器訪問,則必須調整配置。將Memcached綁定到專用網絡端口。
使用防火墻限制IP訪問
在執(zhí)行此操作之前,最好設置防火墻規(guī)則可以連接到Memcached服務器的計算機。您需要知道您客戶端的IP地址以方便配置防火墻規(guī)則。
如果您使用的是UFW防火墻,則可以通過輸入以下內容來限制對Memcached實例的訪問:
sudo ufw allow OpenSSH sudo ufw allow from client_servers_private_IP/32 to any port 11211 sudo ufw enable
如果您使用的是Iptables,則可以通過輸入以下內容來建立基本防火墻:
sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT sudo iptables -A INPUT -p tcp -s client_servers_private_IP/32 --dport 11211 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -P INPUT DROP
然后,您可以調整Memcached服務綁定到服務器的專用網絡接口。
將Memcached綁定到專用網絡接口
現(xiàn)在您的防火墻已就位,您可以調整Memcached配置以綁定到服務器的專用網絡接口,而不是127.0.0.1
。
對于Ubuntu或Debian服務器,請再次打開/etc/memcached.conf
文件:
sudo nano /etc/memcached.conf
在里面,找到該-l 127.0.0.1行并更改地址以匹配您服務器的專用網絡接口:
. . . -l memcached_servers_private_IP . . .
完成后保存并關閉文件。
對于CentOS和Fedora服務器,請再次打開/etc/sysconfig/memcached
文件:
sudo vi /etc/sysconfig/memcached
在里面,更改變量-l 127.0.0.1
中的OPTIONS
參數以引用Memcached服務器的私有IP:
. . . OPTIONS="-l memcached_servers_private_IP -U 0"
完成后保存并關閉文件。
接下來,再次重新啟動Memcached服務:
sudo service memcached restart
檢查新設置netstat
以確認更改:
sudo netstat -plunt
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name . . . tcp 0 0 memcached_servers_private_IP:11211 0.0.0.0:* LISTEN 2383/memcached . . .
建議您最好還是檢查來自未授權客戶端的訪問權限,以確保防火墻規(guī)則有效。
結論
Memcached放大攻擊會嚴重影響網絡運行狀況和服務的穩(wěn)定性。但是,通過運行服務器的安全設置,可以有效地減輕攻擊。應用本教程中的更改后,最好繼續(xù)監(jiān)控您的服務,以確保維護正常的功能和連接。
應對逐步升級的DDoS攻擊風險,我們還是建議配置百度云加速高防CDN,隱藏源站IP。用高防CDN充足的帶寬資源應對可能的大流量攻擊行為,并根據業(yè)務特點制定個性化的防護策略,被DDoS攻擊時才能保證業(yè)務可用性,從容處理。在面對高等級DDoS威脅時,及時升級防護配置,必要時請求DDoS防護廠商的專家服務。