2026-10-28 · 技術
為了讓本地電腦或流水線連上伺服器上的容器,不少人把 Docker 管理埠直接開到公網。這個埠沒有認證,掃到就等於拿到 root。本文講清風險、自查方法和三步加固。
部署容器時,很多人會順手把 Docker 管理埠對外開放。本地電腦能直接連上去敲命令,流水線也能遠端構建映象,省掉每次登入的麻煩。但代價是把整臺機器的控制權交給了公網。 Docker 預設的 2375 埠走明文 HTTP,不帶任何身份認證。誰能連上,誰就能建立容器、把宿主機根目錄掛進容器、讀取任意檔案,甚至直接拿到 root 許可權。暴露 2375 不是開放了一個服務,而是釋出了一把不需要密碼的鑰匙。 近期安全研究披露的細節值得警惕:有殭屍網路專門以 2375 為入口在雲環境裡橫向傳播。做法並不複雜,每隔幾分鐘掃描本子網和相鄰網段,尋找可連通的 Docker 守護程序,命中後投放惡意容器。容器被命名為 systemd-resolved 偽裝成系統服務,程序名改成 [kworker/u2:0] 混在後臺,檔案還用 chattr 加上不可修改屬性,刪完重啟照樣回來。 自查三條命令就夠。在伺服器上執行 ss -lntp | grep 2375,看是否有程序監聽在 0.0.0.0;換一臺機器執行 docker -H tcp://目標IP:2375 version,能返回版本資訊說明無認證可直連;再到雲控制台看安全組,是否有來源為 0.0.0.0/0 的 2375 規則。命中任意一條,都建議當天處理。 加固按優先順序排三步。第一,遠端訪問改成 SSH 隧道,宿主機只監聽 127.0.0.1,本地用 ssh -L 2375:127.0.0.1:2375 轉發,功能不受影響。第二,確實需要遠端直連的,給守護程序開啟 TLS 雙向認證,配置 ca.pem、server-cert.pem、server-key.pem 並要求客戶端出示證書,啟動引數加 --tlsverify,同時停用裸 HTTP。第三,安全組只放行固定出口 IP,清掉 0.0.0.0/0 規則,並且不要把 docker.sock 掛進業務容器,那等於在容器裡開了直達宿主機的後門。 容器本身不是安全邊界。真正的邊界是埠暴露面、認證方式和訪問控制,這三件事管住,容器才談得上好用。 加速IDC 的雲伺服器與物理伺服器預設只開放業務必要埠,安全組可按來源 IP 精確收緊,需要應對外部掃描與流量攻擊時,也可以疊加高防清洗能力。