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