欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker安全開放遠(yuǎn)程訪問連接權(quán)限方式

 更新時間:2024年11月16日 09:49:09   作者:龍茶清歡  
文章介紹了如何配置Docker以實現(xiàn)遠(yuǎn)程訪問、開啟認(rèn)證和通信加密,包括生成證書和私鑰、配置Docker守護進程以及在IDEA和Maven中連接Docker服務(wù)的方法

1、Docker完全開放遠(yuǎn)程訪問

Docker服務(wù)完全開放對外訪問權(quán)限操作如下:

# 開啟端口命令  (--permanent永久生效,沒有此參數(shù)重啟后失效)
firewall-cmd --zone=public --add-port=2375/tcp --permanent
# 重新載入
firewall-cmd --reload

# 使用 vim 編輯docker服務(wù)配置文件
vim /lib/systemd/system/docker.service
# 找到如下配置行
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
# 將其注釋掉或者直接刪除,替換成下面的配置行.然后保存退出
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

# 重新加載docker配置并重啟服務(wù)
systemctl daemon-reload && systemctl restart docker

# 然后直接在命令行客戶端輸入如下命令,IP地址改為自己的
curl http://192.168.56.20:2375/version
# 或者在瀏覽器直接訪問,IP地址改為自己的
http://192.168.56.20:2375/version

出現(xiàn)如下信息則代表修改Docker服務(wù)設(shè)置遠(yuǎn)程訪問成功。

特別注意的點:

完全開放Docker對外訪問權(quán)限有可能會遭到別人攻擊,這是很不安全的,只要別人知道你的服務(wù)器地址就能夠隨意連接你的Docker服務(wù),而不需要任何認(rèn)證,因此,完全開放只推薦自己在內(nèi)網(wǎng)使用,不推薦在云服務(wù)器上直接完全開放。

2、Docker開放遠(yuǎn)程訪問并開啟認(rèn)證和通信加密

為了解決上面Docker完全開放遠(yuǎn)程訪問所帶來的安全隱患,我們需要對Docker服務(wù)進行通信認(rèn)證和加密,操作如下:

首先創(chuàng)建一個文件目錄,用于存放證書和私鑰

mkdir -p /data/certificate/linux-ca && cd /data/certificate/linux-ca

然后在 linux-ca 文件夾下進行以下操作:

生成自簽名的根證書和私鑰

  • a. 執(zhí)行以下命令生成根證書私鑰文件(例如 ca-key.pem):
openssl genrsa -aes256 -passout pass:123456 -out ca-key.pem 4096
  • b. 執(zhí)行以下命令生成根證書文件(例如 ca.pem)并使用私鑰進行簽名。在生成證書時,你需要為其分配一個有效期,通常為幾年。
# 直接指定證書的主題信息
openssl req -x509 -new -key ca-key.pem -sha256 -days 365 -passin pass:123456 -out ca.pem

生成自簽名的服務(wù)端證書和私鑰

  • a. 執(zhí)行以下命令生成私鑰文件(例如 server-key.pem):
openssl genrsa -out server-key.pem 4096
  • b. 執(zhí)行以下命令生成證書簽名請求文件(例如 server.csr)。

在生成 CSR 文件時,你需要提供一些信息,如組織名稱、組織單位、所在國家等。

# 直接指定證書的主題信息
openssl req -new -key server-key.pem -out server.csr
  • c. 執(zhí)行以下命令生成自簽名的服務(wù)器證書(例如 server-cert.pem),并使用 CSR 文件和私鑰進行簽名。
echo extendedKeyUsage = serverAuth >> extfile-server.cnf
openssl x509 -req -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -days 365 -sha256 -passin pass:123456 -out server-cert.pem -extfile extfile-server.cnf

生成自簽名的客戶端證書和私鑰

  • a. 執(zhí)行以下命令生成客戶端私鑰文件(例如 key.pem):
openssl genrsa -out key.pem 4096
  • b. 執(zhí)行以下命令生成客戶端證書簽名請求文件(例如 client.csr)。在生成 CSR 文件時,你需要提供一些信息,如組織名稱、組織單位、所在國家等。
openssl req -new -key key.pem -out client.csr
  • c. 執(zhí)行以下命令生成自簽名的客戶端證書(例如 cert.pem),并使用 CSR 文件和私鑰進行簽名。在生成證書時,你需要為其分配一個有效期,通常為幾年。
echo extendedKeyUsage = clientAuth > extfile-client.cnf
openssl x509 -req -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -days 365 -sha256 -passin pass:123456 -out cert.pem -extfile extfile-client.cnf

刪除多余的四個請求文件:

rm -f server.csr client.csr extfile-server.cnf extfile-client.cnf

完成了上述步驟后,你將獲得以下文件:

  • 根證書文件:ca.pem
  • 根證書私鑰文件:ca-key.pem
  • 服務(wù)器端證書文件:server-cert.pem
  • 服務(wù)器端私鑰文件:server-key.pem
  • 客戶端證書文件:cert.pem
  • 客戶端私鑰文件:key.pem

特別要注意的是以下四點:

  • 根證書名稱必須為 ca.pem
  • 客戶端證書必須為 cert.pem
  • 客戶端私鑰必須為 key.pem
  • 在輸入 commonName 信息時必須添加服務(wù)器的IP地址,否則Docker可能啟動失敗

服務(wù)端和客戶端創(chuàng)建私鑰是不能額外添加加密密碼,不然會導(dǎo)致服務(wù)端、客戶端無法解析。

然后是配置Docker守護進程配置文件 daemon.json 具體操作如下:

# 先查看 /etc/docker/daemon.json 是否存在,如果不存在則創(chuàng)建,存在則直接修改
cat /etc/docker/daemon.json
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
    "tls": true,
    "tlsverify": true,
    "tlscacert": "/data/certificate/linux-ca/ca.pem",
    "tlscert": "/data/certificate/linux-ca/server-cert.pem",
    "tlskey": "/data/certificate/linux-ca/server-key.pem",
    "registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://ung2thfc.mirror.aliyuncs.com",
        "https://mirror.ccs.tencentyun.com",
        "https://registry.docker-cn.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://mirror.baidubce.com"
    ]
}
EOF
systemctl daemon-reload && systemctl restart docker

在以上操作中,我們需要填寫正確的證書和私鑰存放地址,如果你是按照我上面的步驟來,那沒有問題,你什么都不用改。

如果你的證書和私鑰的存放地址是自己定義的地址,那么,你需要將 daemon.json 中的地址也相應(yīng)的修改一下。

完成以上內(nèi)容后,此時我們在瀏覽器使用 https://192.168.56.10:2375/version 就無法獲取信息了,提示需要身份認(rèn)證

3、快速完成Docker服務(wù)開啟認(rèn)證和通信加密

為了解決第二步流程比較繁瑣的問題,我編寫了兩個自動化配置Shell腳本并且我將其上傳到了公網(wǎng),它們能夠幫助我們非??焖俚耐瓿傻诙降乃辛鞒?,

你們可以直接選擇使用我創(chuàng)建好的腳本,操作如下:

# 證書腳本
curl -O https://backup-1305596318.cos.ap-guangzhou.myqcloud.com/shell/cert.sh
chmod +x cert.sh
source cert.sh

# Docker守護進程腳本
curl -O https://backup-1305596318.cos.ap-guangzhou.myqcloud.com/shell/daemon.sh
chmod +x daemon.sh
source daemon.sh

如果自己創(chuàng)建然后使用,可以參考下面的步驟,具體操作如下:

首先是創(chuàng)建證書和私鑰的Shell腳本

我們只需要創(chuàng)建一個 cert.sh 腳本文件,名稱可以任取,然后填入如下內(nèi)容:

#!/bin/bash

# 從控制臺讀取必要輸入信息
read -p "please input the cert store path: " certDir
echo your cert store path is: "$certDir"
read -p "please input the ca-key's password: " password
echo your password is: "$password"
read -p "please input the IP of your server: " ip
echo your server IP is: "$ip"

# 檢查輸入的證書路徑是否已經(jīng)存在
# 如果不存在,則創(chuàng)建;如果存在則刪除后創(chuàng)建
if [ ! -d "$certDir" ]; then
	echo ""
	echo "$certDir , not exist, it will be create"
	echo ""
	mkdir -p $certDir
else
	echo ""
	echo "$certDir , already exist , it will be delete then create"
	echo ""
	rm -rf $certDir
	mkdir -p $certDir
fi
 
cd $certDir

# 定義服務(wù)端證書擴展配置
server_conf="[req]
prompt = no
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
countryName = CN
stateOrProvinceName = JX
localityName = SR
organizationName = PY
organizationalUnitName = XS
commonName = $ip
emailAddress = 2320391937@qq.com

[v3_req]
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
IP.1 = 0.0.0.0"

# 將服務(wù)端證書的擴展配置寫入extfile-server.cnf文件
echo "$server_conf" > extfile-server.cnf

# 定義客戶端證書擴展配置
client_conf="[req]
prompt = no
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
countryName = CN
stateOrProvinceName = JX
localityName = SR
organizationName = PY
organizationalUnitName = XS
commonName = $ip
emailAddress = 2320391937@qq.com

[v3_req]
extendedKeyUsage = clientAuth"

# 將客戶端證書的擴展配置寫入extfile-client.cnf文件
echo "$client_conf" > extfile-client.cnf


# 創(chuàng)建根證書RSA私鑰
openssl genrsa -aes256 -passout pass:$password -out ca-key.pem 4096
# 創(chuàng)建CA證書
openssl req -new -x509 -days 365 -key ca-key.pem -passin pass:$password -sha256 -out ca.pem -subj "/C=CN/CN=$ip"

# 創(chuàng)建服務(wù)端私鑰
openssl genrsa -out server-key.pem 4096
# 創(chuàng)建服務(wù)端簽名請求證書文件
openssl req -subj "/CN=$ip" -sha256 -new -key server-key.pem -out server.csr
# 創(chuàng)建簽名生效的服務(wù)端證書文件 
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$password" -CAcreateserial -out server-cert.pem -extfile extfile-server.cnf

# 創(chuàng)建客戶端私鑰
openssl genrsa -out key.pem 4096
# 創(chuàng)建客戶端簽名請求證書文件
openssl req -subj "/CN=$ip" -new -key key.pem -out client.csr
# 創(chuàng)建簽名生效的客戶端證書文件
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$password" -CAcreateserial -out cert.pem -extfile extfile-client.cnf

# 刪除多余文件
# 使用了 -v 參數(shù),rm 命令將會顯示每個被刪除的文件或目錄的名稱,以便您能夠看到操作的進展和結(jié)果。
rm -f -v client.csr server.csr extfile-server.cnf extfile-client.cnf
# 為所有用戶設(shè)置對這些文件的讀取權(quán)限
chmod -v 444 ca-key.pem key.pem server-key.pem
chmod -v 444 ca.pem server-cert.pem cert.pem

該腳本只需要我們在控制臺輸入證書和私鑰的存放地址、根私鑰密碼以及服務(wù)器IP地址三個參數(shù)即可,其他的什么都不用做。

如果你按照上面的步驟創(chuàng)建好了 cert.sh 腳本文件并填入了腳本內(nèi)容,那么接下來我們就可以通過如下命令來執(zhí)行腳本了

source /xxx/cert.sh

使用 source 命令后接腳本的絕對地址或者相對地址即可執(zhí)行腳本。

創(chuàng)建Docker守護進程配置腳本

我們創(chuàng)建一個 daemon.sh 腳本文件,名稱可以任取,然后填入如下內(nèi)容:

#!/bin/bash

# 讀取控制臺輸入,需要輸入一個目錄
read -p "please input the cert store path: " certDir
echo your cert store path is: "$certDir"
# 檢查輸入的證書路徑是否已經(jīng)存在
# 如果不存在,則直接退出
if [ ! -d "$certDir" ]; then
	echo ""
	echo "$certDir , not exist, please input a correct cert path"
	exit
fi

json_content='{
    "tls": true,
    "tlsverify": true,
    "tlscacert": "$certDir/ca.pem",
    "tlscert": "$certDir/server-cert.pem",
    "tlskey": "$certDir/server-key.pem",
    "registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://ung2thfc.mirror.aliyuncs.com",
        "https://mirror.ccs.tencentyun.com",
        "https://registry.docker-cn.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://mirror.baidubce.com"
    ]
}'

# 替換變量
json_content=$(echo "$json_content" | sed "s|\$certDir|$certDir|g")

daemonDir='/etc/docker'
# 如果docker配置目錄不存在則創(chuàng)建;存在則刪除后創(chuàng)建
if [ ! -d "$daemonDir" ]; then
	echo ""
	echo "$daemonDir not exist, it will be create"
	mkdir -p "$daemonDir" && cd "$daemonDir"
	# 將替換后的內(nèi)容保存到新的 JSON 文件
	echo "$json_content" > "$daemonDir/daemon.json"
else
	echo ""
	echo "$daemonDir already exist, it will be delete then create"
	rm -rf "$daemonDir"
	mkdir -p "$daemonDir" && cd "$daemonDir"
	# 將替換后的內(nèi)容保存到新的 JSON 文件
	echo "$json_content" > "$daemonDir/daemon.json"
fi

systemctl daemon-reload && systemctl restart docker

然后我們可以通過 source 命令后接腳本的絕對地址或者相對地址即可執(zhí)行腳本。

source /xxx/daemon.sh

這個腳本主要是對Docker服務(wù)進行通信加密、服務(wù)認(rèn)證、鏡像加速配置這三個設(shè)置,使用方式和上一個腳本一樣。

在執(zhí)行腳本的過程中,會提示我們輸入之前創(chuàng)建的證書和私鑰的存放地址,我們必須填寫正確的地址,否則會導(dǎo)致Docker服務(wù)無法讀取證書和私鑰。

4、IDEA連接Docker服務(wù)

下載證書文件夾到Windows本地,

只需要這三個文件即可:ca.pem、cert.pem、key.pem 將他們下載到本地并裝入一個文件夾中

在具體的 IDEA 配置中,可以按照以下步驟進行設(shè)置:

  1. 打開 IDEA,進入 Settings 。
  2. 導(dǎo)航到 Docker 部分(一般是 Build, Execution, Deployment 下的 Docker)。
  3. 找到 Connect to Docker daemon with 配置下面的 TCP socket 配置選項
  4. 在 Engine API URL 中填入Docker服務(wù)連接地址,例如:https://192.168.56.10:2375
  5. 在 Certificates folder 中選擇裝有三個證書文件的文件夾,用以客戶端向服務(wù)端的身份認(rèn)證
  6. 保存設(shè)置并嘗試連接到 Docker 服務(wù)。

需要注意的是,具體的設(shè)置步驟可能因 IDEA 版本而異,請根據(jù)你使用的版本進行適當(dāng)調(diào)整。

5、Maven連接Docker服務(wù)

有時候我們需要讓自己的項目配置Docker服務(wù)的連接配置,以方便快速進行項目打包并部署在Docker中,因此,我們需要如下配置:

        <!-- 項目maven插件統(tǒng)一管理 -->
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${maven-compiler.version}</version>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                        <encoding>${project.build.sourceEncoding}</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot.version}</version>
                </plugin>
                <!-- docker插件,用于制作鏡像 -->
                <plugin>
                    <groupId>com.spotify</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>${docker-maven.version}</version>
                    <!-- docker配置 -->
                    <configuration>
                        <!-- docker遠(yuǎn)程地址 -->
                        <dockerHost>${docker.host}</dockerHost>
                        <!-- docker打包鏡像名稱 -->
                        <imageName>${docker.image.prefix}/${project.artifactId}:${project.version}</imageName>
                        <!-- DockerFile的存放位置 -->
                        <dockerDirectory>${project.basedir}</dockerDirectory>
                        <!-- 由于docker服務(wù)使用加密通信,開啟了認(rèn)證,因此需要提供通信證書 -->
                        <dockerCertPath>C:\Users\23203\Desktop\linux-ca</dockerCertPath>
                        <!-- 配置制作鏡像時需要依賴的資源,此處依賴項目jar包 -->
                        <resources>
                            <resource>
                                <targetPath>/</targetPath>
                                <directory>${project.build.directory}</directory>
                                <include>${project.build.finalName}.jar</include>
                            </resource>
                        </resources>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>

因為配置過長,我只選取關(guān)鍵的部分展示。 

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Docker之容器導(dǎo)出為鏡像問題

    Docker之容器導(dǎo)出為鏡像問題

    這篇文章主要介紹了Docker之容器導(dǎo)出為鏡像問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Docker部署MySQL并實現(xiàn)客戶端連接

    Docker部署MySQL并實現(xiàn)客戶端連接

    這篇文章介紹了Docker部署MySQL并實現(xiàn)客戶端連接的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • docker自建GitLab倉庫的實現(xiàn)

    docker自建GitLab倉庫的實現(xiàn)

    Harbor是一個用于存儲和分發(fā)Docker鏡像的企業(yè)級Registry服務(wù)器,本文主要介紹了docker自建GitLab倉庫的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • Docker中部署nginx服務(wù)的方案

    Docker中部署nginx服務(wù)的方案

    這篇文章主要介紹了Docker中部署nginx服務(wù)的方案的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 利用Docker部署PostgreSQL 12.4主從方式

    利用Docker部署PostgreSQL 12.4主從方式

    這篇文章主要介紹了利用Docker部署PostgreSQL 12.4主從方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 基于Docker搭建Graylog分布式日志采集系統(tǒng)的詳細(xì)過程

    基于Docker搭建Graylog分布式日志采集系統(tǒng)的詳細(xì)過程

    Graylog是一個開源的日志管理工具,支持日志收集、解析、存儲、搜索和可視化,它可以從各種數(shù)據(jù)源收集日志,并通過內(nèi)置的解析器將日志格式化,本文介紹基于Docker搭建Graylog分布式日志采集系統(tǒng),感興趣的朋友一起看看吧
    2025-02-02
  • ngrok私有服務(wù)搭建方式(docker交叉編譯)

    ngrok私有服務(wù)搭建方式(docker交叉編譯)

    文章介紹了如何使用Docker環(huán)境進行ngrok的編譯,并提供了一個詳細(xì)的Dockerfile和關(guān)鍵編譯腳本
    2024-12-12
  • Docker部署nGrinder性能測試平臺過程解析

    Docker部署nGrinder性能測試平臺過程解析

    這篇文章主要介紹了Docker部署nGrinder性能測試平臺過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • Linux環(huán)境下安裝docker環(huán)境(親測無坑)

    Linux環(huán)境下安裝docker環(huán)境(親測無坑)

    大家好,本篇文章主要講的是Linux環(huán)境下安裝docker環(huán)境(親測無坑),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2021-12-12
  • docker運行異構(gòu)鏡像詳解

    docker運行異構(gòu)鏡像詳解

    介紹了在不同CPU架構(gòu)下運行Docker鏡像時遇到的問題及解決方法,作者分享了由于銀行使用鯤鵬系統(tǒng)(ARM架構(gòu))導(dǎo)致Docker容器運行失敗的經(jīng)歷,解決方法包括啟用`--platform`參數(shù)、安裝`qemu-user-static`及`binfmt_misc`
    2024-12-12

最新評論