docker開通2375端口防漏洞問題
前言
最近因為自己的云服務(wù)器開放了Docker 2375端口,導(dǎo)致被注入蠕蟲,一直在跑挖礦程序。
所以大家一定要注意外網(wǎng)環(huán)境下不要輕易打開此端口,如果要對外開放此端口,可以參考下面的解決方案,下面就Docker對外開放2375端口引發(fā)安全漏洞進行一個詳細的說明。
緣由
2375:未加密的docker socket,遠程root無密碼訪問主機為了實現(xiàn)集群管理,Docker提供了遠程管理接口。
Docker Daemon作為守護進程,運行在后臺,可以執(zhí)行發(fā)送到管理接口上的Docker命令。
正是因為錯誤的使用了Docker遠端接口,引起安全漏洞。
啟動Docker Daemon時,加入-H 0.0.0.0:2375,Docker Daemon就可以接收遠端的Docker Client發(fā)送的指令。
注意,Docker是把2375端口作為非加密端口暴露出來,一般是用在內(nèi)網(wǎng)環(huán)境中。
此時,沒有任何加密和認證過程,只要知道Docker主機的IP,任何人都可以管理這臺主機上的容器和鏡像。
黑客可以掃描出主機上的暴露的端口,因為沒有加密,知道了主機IP以后,黑客就可以為所欲為了。
解決方案
知道了來龍去脈,下面就如何安全開放Docker 2375端口進行一個詳細的介紹。
我們可以通過添加安全傳輸層協(xié)議(TLS)和CA認證對2375端口進行一個驗證。
這樣黑客只要拿不到我們的證書秘鑰,就無法進行攻擊了。
1. 創(chuàng)建一個目錄用于存儲生成的證書和秘鑰
mkdir /docker-ca && cd /docker-ca
2. 使用openssl創(chuàng)建CA證書私鑰
期間需要輸入兩次密碼,生成文件為ca-key.pem
openssl genrsa -aes256 -out ca-key.pem 4096 Enter pass phrase for ca-key.pem: Your password (hylink2014)
3. 根據(jù)私鑰創(chuàng)建CA證書
期間需要輸入上一步設(shè)置的私鑰密碼,然后依次輸入國家是 CN,省例如是Guangdong、市Guangzhou、組織名稱、組織單位、姓名或服務(wù)器名、郵件地址,都可以隨意填寫,生成文件為ca.pem(注意證書有效期)
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
4. 創(chuàng)建服務(wù)端私鑰
生成文件為server-key.pem
openssl genrsa -out server-key.pem 4096
5. 創(chuàng)建服務(wù)端證書簽名請求文件
用于CA證書給服務(wù)端證書簽名。IP需要換成自己服務(wù)器的IP地址,或者域名都可以。生成文件server.csr
openssl req -subj "/CN=Your server IP" -sha256 -new -key server-key.pem -out server.csr openssl req -subj "/CN=35.1.176.8" -sha256 -new -key server-key.pem -out server.csr
6. 配置白名單,用多個用逗號隔開
例如: IP:192.168.0.1,IP:0.0.0.0,這里需要注意,雖然0.0.0.0可以匹配任意,但是仍然需要配置你的服務(wù)器IP,如果省略會造成錯誤
echo subjectAltName = IP:Your server IP,IP:0.0.0.0 >> extfile.cnf echo subjectAltName = IP:35.1.176.8,IP:0.0.0.0 >> extfile.cnf
7. 將Docker守護程序密鑰的擴展
使用屬性設(shè)置為僅用于服務(wù)器身份驗證
echo extendedKeyUsage = serverAuth >> extfile.cnf
8. 創(chuàng)建CA證書簽名好的服務(wù)端證書
期間需要輸入CA證書私鑰密碼,生成文件為server-cert.pem
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out server-cert.pem -extfile extfile.cnf
9. 創(chuàng)建客戶端私鑰
生成文件為key.pem
openssl genrsa -out key.pem 4096
10. 創(chuàng)建客戶端證書簽名請求文件
用于CA證書給客戶證書簽名,生成文件client.csr
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
11. 要使密鑰適合客戶端身份驗證
請創(chuàng)建擴展配置文件
echo extendedKeyUsage = clientAuth >> extfile.cnf
12. 創(chuàng)建CA證書簽名好的客戶端證書
期間需要輸入CA證書私鑰密碼,生成文件為cert.pem
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out cert.pem -extfile extfile.cnf
13. 刪除不需要的文件
兩個證書簽名請求
rm -v client.csr server.csr
14. 修改證書為只讀權(quán)限保證證書安全
chmod -v 0400 ca-key.pem key.pem server-key.pem chmod -v 0444 ca.pem server-cert.pem cert.pem
15. 歸集服務(wù)器證書
cp server-*.pem /etc/docker/ && cp ca.pem /etc/docker/
最終生成文件如下,有了它們我們就可以進行基于TLS的安全訪問了
ca.pem CA證書
- ca-key.pem CA證書私鑰
- server-cert.pem 服務(wù)端證書
- server-key.pem 服務(wù)端證書私鑰
- cert.pem 客戶端證書
- key.pem 客戶端證書私鑰
16. 配置Docker支持TLS
修改docker.service文件
vi /usr/lib/systemd/system/docker.service
實際位置:
vi /etc/systemd/system/docker.service
修改以ExecStart開頭的配置,開啟TLS認證,并配置好CA證書、服務(wù)端證書和服務(wù)端私鑰
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
重新加載daemon
systemctl daemon-reload && systemctl restart docker
重啟docker
service docker restart
17. 在客戶端測試連接
保存相關(guān)客戶端的pem文件到本地
IDEA->Preferences->Bulild, Execution,Deployment->Docker->TCP socket
到此,Docker對外開放2375端口再也不怕被攻擊了!
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于docker部署的jenkins跑git上的程序的問題
這篇文章主要介紹了docker部署的jenkins跑git上的程序的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11