為了提高云上流量入口安全性,如果您需要對NLB進行基于協議/端口/IP的訪問控制,可以通過為NLB實例配置安全組來實現。與傳統負載均衡CLB使用的ACL組不同,NLB通過安全組能力可實現更細粒度的訪問控制,可以在整個實例上實現基于協議/端口的訪問控制。本文為您介紹NLB實例如何通過安全組實現基于監聽/端口粒度的訪問控制。
場景說明
當NLB實例未加入安全組時,NLB監聽端口默認對所有請求放通。
當NLB實例加入安全組且未設置任何拒絕策略時,NLB監聽端口默認對所有請求放通。如果您需要只允許特定IP訪問NLB,請注意添加一條拒絕策略進行兜底。
當您的NLB實例有訪問控制的訴求,希望控制NLB實例的入流量時,您可以選擇為NLB實例添加安全組,同時可基于業務設置相應的安全組規則。
負載均衡的出方向流量為用戶請求的回包,為了保證您的業務正常運行,NLB的安全組對出流量不做限制,您無需額外配置安全組出方向規則。
本文從以下三種操作來說明NLB實例加入安全組后對協議/端口的訪問控制,且以NLB實例配置TCP 80監聽和TCP 81監聽為例說明。
編號 | 安全組規則 | 預期結果 | 相關操作鏈接 |
操作一:NLB實例未加入安全組 | NLB監聽端口默認對所有請求放行。 | 此處僅以NLB實例配置TCP 80監聽和TCP 81監聽為例說明。
| |
操作二:NLB實例加入安全組 | 拒絕訪問TCP協議的81端口 說明 此處僅列出與本文強相關的安全組規則,其余默認規則未列出。 |
| |
操作三:修改NLB實例加入的安全組 |
說明 此處僅列出與本文強相關的安全組規則,其余默認規則未列出。 |
|
使用限制
分類 | 安全組類型 | 說明 |
NLB支持加入的安全組 |
|
關于普通安全組和企業安全組的介紹,請參見普通安全組與企業級安全組。 |
NLB不支持加入的安全組 | 托管安全組 | 關于托管安全組的介紹,請參見托管安全組。 |
前提條件
您已創建專有網絡VPC1,具體操作,請參見創建和管理專有網絡。
您已在VPC1中創建了2臺ECS實例。ECS01和ECS02實例作為NLB實例的后端服務器,且ECS01和ECS02實例中部署了應用服務。
關于創建ECS實例,請參見自定義購買實例。
本文ECS01和ECS02部署測試應用示例如下:
yum install -y nginx systemctl start nginx.service cd /usr/share/nginx/html/ echo "Hello World ! This is ECS01." > index.html
yum install -y nginx systemctl start nginx.service cd /usr/share/nginx/html/ echo "Hello World ! This is ECS02." > index.html
您已注冊域名并完成備案,且通過自有域名為NLB配置CNAME解析。
步驟一:創建服務器組
- 登錄網絡型負載均衡NLB控制臺。
在頂部菜單欄,選擇服務器組所屬的地域。本文選擇華東1(杭州)。
在左側導航欄,選擇 。
在服務器組頁面,單擊創建服務器組。
在創建服務器組對話框中,完成以下配置,然后單擊創建。
此處僅列出與本文強相關的配置項,其余部分參數可保持默認值。更多信息,請參見創建服務器組。
配置
說明
服務器組類型
選擇一種服務器組類型。本文選擇服務器類型。
服務器組名稱
輸入服務器組名稱。本文輸入RS01。
VPC
從VPC下拉列表中選擇一個VPC。本文選擇已創建的VPC1。
選擇后端協議
選擇一種后端協議。本文選擇TCP。
選擇調度算法
選擇一種調度算法。本文選擇加權輪詢。
在服務器組創建成功對話框中單擊添加后端服務器。
在后端服務器頁簽單擊添加后端服務器。
在添加后端服務器面板,選擇已創建的ECS01和ECS02實例,然后單擊下一步。
為已添加的服務器設置端口和權重,然后單擊確定。
步驟二:創建NLB實例并配置監聽
- 登錄網絡型負載均衡NLB控制臺。
在頂部菜單欄,選擇NLB實例所屬的地域。本文選擇華東1(杭州)。
在實例頁面,單擊創建網絡型負載均衡。
在網絡型負載均衡(按量付費)購買頁面,完成以下配置。
此處僅列出和本文強相關的配置項。其余參數的配置,請參見創建實例。
地域:本文選擇華東1(杭州)。
實例網絡類型:本文選擇私網。
VPC:本文選擇已創建的VPC1。
單擊立即購買,然后根據控制臺提示完成實例購買。
返回實例頁面,找到已創建的NLB實例,單擊該NLB實例ID。
單擊監聽頁簽,在監聽頁簽單擊快速創建監聽。在快速創建監聽對話框中,配置以下參數,完成TCP 80監聽的創建,然后單擊確定。
監聽配置
說明
選擇負載均衡協議
選擇監聽的協議類型。本文選擇TCP。
監聽端口
輸入監聽端口,本文輸入80。
轉發的后端服務器組
選擇服務器類型及服務器類型下的服務器組。
本文選擇步驟一:創建服務器組創建的服務器組RS01。
在監聽頁簽單擊快速創建監聽。在快速創建監聽對話框中,配置以下參數,完成TCP 81監聽的創建,然后單擊確定。
監聽配置
說明
選擇負載均衡協議
選擇監聽的協議類型。本文選擇TCP。
監聽端口
輸入監聽端口,本文輸入81。
轉發的后端服務器組
選擇服務器類型及服務器類型下的后端服務器組。
本文選擇步驟一:創建服務器組創建的服務器組RS01。
NLB實例未加入安全組時,驗證訪問結果。
登錄任意一臺可以訪問公網的Linux客戶端。如果未安裝telnet,以CentOS系統為例可以參考執行
yum install -y telnet
安裝telnet。執行
telnet 域名 80
命令,測試客戶端是否可以訪問NLB實例TCP協議的80端口。收到如下所示的回復報文,則表示訪問成功。
Trying *.*.*.*... Connected to www.example.com. Escape character is '^]'.
通過瀏覽器輸入域名和端口號,例如
http://域名:80
,可以看到類似下圖所示,表示NLB可以將請求轉發至后端服務器。執行
telnet 域名 81
命令,測試客戶端是否可以訪問NLB實例TCP協議的81端口。Trying *.*.*.*... Connected to www.example.com. Escape character is '^]'.
通過瀏覽器輸入域名和端口號,例如
http://域名:81
,可以看到類似下圖所示,表示NLB可以將請求轉發至后端服務器。驗證結果顯示,NLB實例未加入安全組時,客戶端可正常訪問NLB實例TCP監聽的80端口和81端口
步驟三:創建安全組
在NLB實例加入安全組前,您需要先至ECS管理控制臺創建安全組。
步驟四:NLB實例加入安全組并驗證結果
NLB實例加入步驟三:創建安全組創建的安全組,并驗證安全組規則對NLB實例的訪問控制是否生效。
- 登錄網絡型負載均衡NLB控制臺。
在頂部菜單欄,選擇NLB實例所屬的地域。本文選擇華東1(杭州)。
在NLB實例頁面,找到步驟二:創建NLB實例并配置監聽創建的NLB實例,單擊實例ID。在實例詳情頁簽,單擊安全組頁簽。
在安全組頁簽,單擊添加安全組,在彈出的NLB實例加入安全組對話框中,選擇步驟三:創建安全組創建的安全組,然后單擊確定。
在左側列表框單擊目標安全組ID,可單擊入方向或出方向頁簽分別查看安全組規則。
此處僅列出與本文強相關的安全組入方向規則。此時NLB實例加入的安全組規則如下:
授權策略
優先級
協議類型
端口范圍
授權對象
允許
1
自定義TCP
目的:80/80
源:0.0.0.0/0
拒絕
1
自定義TCP
目的:81/81
源:0.0.0.0/0
NLB實例加入安全組后,測試訪問結果。
登錄任意一臺可以訪問公網的Linux客戶端。
執行
telnet 域名 80
命令,測試客戶端是否可以訪問NLB實例TCP監聽的80端口。收到如下所示的回復報文,則表示訪問成功。
Trying *.*.*.*... Connected to www.example.com. Escape character is '^]'.
通過瀏覽器輸入域名和端口號,例如
http://域名:80
,可以看到類似下圖所示,表示NLB可以將請求轉發至后端服務器。執行
telnet 域名 81
命令,測試客戶端是否能訪問NLB實例TCP協議的81端口。收到如下所示的回復報文,則表示客戶端無法訪問NLB實例TCP監聽的81端口,NLB實例加入的安全組對NLB實例的訪問控制已生效。
Trying *.*.*.*... telnet: connect to address *.*.*.*: Connection timed out Trying *.*.*.*... telnet: connect to address *.*.*.*: Connection timed out
通過瀏覽器輸入域名和端口號,例如
http://域名:81
,可以看到無法訪問網頁,則表示客戶端無法訪問NLB實例TCP監聽的81端口,NLB實例加入的安全組對NLB實例的訪問控制已生效。
步驟五:修改安全組并驗證結果
修改安全組規則,并驗證修改后的安全組規則對NLB實例的訪問控制是否生效。
返回NLB實例頁面,找到步驟二:創建NLB實例并配置監聽創建的NLB實例,單擊實例ID。在實例詳情頁簽,單擊安全組頁簽。
在基本信息區域單擊安全組ID,或在安全組頁簽右上角單擊前往ECS控制臺編輯,進入安全組規則頁面修改安全組規則。
在安全組規則頁面,找到允許訪問TCP協議80端口的規則,在操作列單擊編輯,修改授權策略為拒絕。
此處僅列出與本文強相關的安全組規則。修改后的安全組規則如下:
授權策略
優先級
協議類型
端口范圍
授權對象
拒絕
1
自定義TCP
目的:80/80
源:0.0.0.0/0
拒絕
1
自定義TCP
目的:81/81
源:0.0.0.0/0
修改NLB實例加入的安全組規則后,測試訪問結果。
登錄任意一臺可以訪問公網的Linux客戶端。
執行
telnet 域名 80
命令,測試客戶端是否能訪問NLB實例TCP協議的80端口。收到如下所示的回復報文,則表示客戶端無法訪問NLB實例TCP監聽的80端口,修改后的安全組規則對NLB實例的訪問控制已生效。
Trying *.*.*.*... telnet: connect to address *.*.*.*: Connection timed out Trying *.*.*.*... telnet: connect to address *.*.*.*: Connection timed out
通過瀏覽器輸入域名和端口號,例如
http://域名:80
,可以看到無法訪問網頁,則表示客戶端無法訪問NLB實例TCP監聽的80端口,NLB實例加入的安全組對NLB實例的訪問控制已生效。執行
telnet 域名 81
命令,測試客戶端是否能訪問NLB實例TCP協議的81端口。收到如下所示的回復報文,則表示客戶端無法訪問NLB實例TCP監聽的81端口,修改后的安全組規則對NLB實例的訪問控制已生效。
Trying *.*.*.*... telnet: connect to address *.*.*.*: Connection timed out Trying *.*.*.*... telnet: connect to address *.*.*.*: Connection timed out
通過瀏覽器輸入域名和端口號,例如
http://域名:81
,可以看到無法訪問網頁,則表示客戶端無法訪問NLB實例TCP監聽的81端口,NLB實例加入的安全組對NLB實例的訪問控制已生效。
相關文檔
關于NLB加入安全組和解綁安全組等操作,請參見NLB加入安全組。
如果您需要拒絕或允許特定IP訪問NLB實例,請參見配置NLB安全組實現黑白名單訪問策略。
關于安全組的詳細介紹,請參見安全組。
LoadBalancerJoinSecurityGroup:為網絡型負載均衡實例綁定已創建的安全組。
LoadBalancerLeaveSecurityGroup:為網絡型負載均衡實例解綁安全組。