# 佈署 Check Point Harmony Connector(docker container)
###### tags: `checkpoint` `harmonyconnect`
[toc]
# Harmony Connect 產品簡介
Check Point 的 Harmony Connect 為任何人在任何地方存取互聯網和公司網路提供安全存取並防止威脅。
Harmony Connect 網路級存取使客戶能夠將用戶和分支機構連接到數據中心應用程序和網路。 所有連接均通過 Harmony Connect 的雲服務進行隧道傳輸,並受 Harmony Connect 的網路存取政策約束。
客戶可以通過在每個公司數據中心或雲網路部署一個連結器(Docker 容器軟體),將他們的公司數據中心連接到 Harmony Connect 雲服務。
Check Point 連結器是一款輕型軟體,可自動與 Check Point 的雲建立隧道,並為連接的分支站點和遠端用戶提供對公司網路的存取。

# 官方說明
相關產品配置及管理資訊,可參考以下官方連結。
- [Harmony Connect Administration Guide](https://sc1.checkpoint.com/documents/Infinity_Portal/WebAdminGuides/EN/Harmony-Connect-Admin-Guide/Topics-Harmony-Connect-AG/Introduction/Introduction.htm)
- [Network Access with Harmony Connect (sk174504)](https://supportcenter.checkpoint.com/supportcenter/portal?eventSubmit_doGoviewsolutiondetails=&solutionid=sk174504&partition=Basic&product=Harmony)
:::info
**需要有效帳號登入**
:::
# 資料中心組態流程
## 連線Infinity Portal
Infinity Portal 是軟體即服務 (SaaS) 雲管理平台,託管 Check Point 的 SaaS 服務。
使用 Infinity Portal 可以:
- 存取 SaaS 服務並編輯用戶配置文件設定。
- 建立集中式儀表板並查看每個 SaaS 服務的威脅和安全事件。
- 在入口網站上查看有關 SaaS 保護活動的通知。
- 更新和更改全域設定。
- 存取線上文件。
### 帳號註冊
開啟瀏覽器連線 [**Check Point Portal**](https://portal.checkpoint.com/signin)。並於首次登入前先完成帳號建立。

輸入相關資料。
- **Data Residency** 選擇 **EU**。

- **Account Type** 選擇 **Customer**(預設)。
註冊資訊會送至所填入的 Email,點選郵件中連結**啟用帳號**。

:::info
[Infinity Portal Administration Guide: **How to Create an Account**](https://sc1.checkpoint.com/documents/Infinity_Portal/WebAdminGuides/EN/Infinity-Portal-Admin-Guide/Content/Topics-Infinity-Portal/Getting-Started.htm#How_to_Create_an_Account)
:::
## 設定資料中心站點
完成帳號註冊,順利登入 Infinity Portal 入口網站。選擇 **Assets** > **Users & Devices** or **Assets** > **Branches & Data Centers**。
點擊 **+ Add** > **Add Site** 以新增站點。

選擇 **Data Center or Cloud Infrastructure**。

:::info
有效帳號登入後,將啟用 Harmony Connect 的 7 天試用授權。可在 **Global Settings** > **Services & Contracts** 檢視授權。

:::
### 新增資料中心
- 輸入站點資訊

- 設定內部網段

- 確認組態並開始建立站點

- 等待站點建立完成

- 一切就緒!

:::warning
**注意**
- **資料中心的內部網路必須是唯一的**,IP 地址不能與其他資料中心或分支機構重疊。
- **資料中心子網路不能屬於以下範圍**:
- **`100.64.0.1`**
- **`100.127.255.254`**
- 每個連結器必須能夠存取對應資料中心物件中的所有網路。若無法達到,請評估分離至不同的資料中心。
:::
## 準備連結器(Conntector )
:::danger
- 根據官方文件目前支援的作業系統版本:
- **Ubuntu 18.04, 20.04, Ubuntu 22.04**
- **Debian GNU/Linux 11**
- **Red Hat Enterprise Linux Server 7.9**
- 以下採用 **Kali Linux 2202.4** 進行測試。Kali Linux 屬於 Debian 11 Bullseye 修改版本。[[**說明**]](https://www.kali.org/docs/policy/kali-linux-relationship-with-debian/)。
- 此為測試環境,若是<font color=red>**正式環境,請以官方建議系統及版本為主**</font>。
:::
### 佈署主機需求
- 作業系統支援:
- **Ubuntu 18.04, 20.04, Ubuntu 22.04**
- **Debian GNU/Linux 11**
- **Red Hat Enterprise Linux Server 7.9**
- 硬體資源: 至少具備
- **4 vCPUs** (for hyper-threading support)
- **16GB RAM**
- 1 Gbps 網路
:::success
**範例**
- 連結器部署在 AWS 上,連結器主機的機器配置需求建議:
- **生產流量**: **c5-xlarge**
- **測試**: **t2-micro**
- **非生產流量**或**低頻寬**: **t3-xlarge**
:::
:::warning
**注意**
- You may use **up to 5 Network-Level Access Connectors per Data Center**.
- You may use **a single Network-Level Access Connector per host**.
- You can run **both Application-Level and Network-Level Connectors on the same host**. There's **no single Connector for both**.
- Validate that each Connector host can access all networks configured on the corresponding Data Center object under Assets → Branches & Data Centers.
:::
### 連結器對外存取

### 準備安裝 Docker
:::danger
- Docker 安裝參考 Kali Linux 官方說明並適度調整執行。
- Kali Linux 與 Ubuntu 使用相同的 **`apt`** 套件管理工具。
:::
:::info
- 若採用 Ubuntu 可以參考 Docker 官網: [**Install Docker Engine on Ubuntu**](https://docs.docker.com/engine/install/ubuntu/) 說明完成佈署。
- Docker 官方提供多種安裝方式,建議使用 **Docker `apt` 套件庫** 安裝。
:::
### 執行步驟
1. **確認作業系統架構**
Docker Engine 目前**僅支援 64-bit 版本**。可使用命令 **`uname -r`**, **`uname -m`**, **`lsb_release -a`** 檢視目前 Kali Linux 版本、核心版本及安裝架構。

或是使用 **`neofetch`**。

2. **Kali Linux 安裝 Docker**
:::info
**參考**
- [Kali Linux 官網: **Installing Docker on Kali Linux**](https://www.kali.org/docs/containers/installing-docker-on-kali/)
- [Docker 官網: **Install Docker Engine on Debian**](https://docs.docker.com/engine/install/debian/)
:::
使用以下命令完成安裝 Docker
- 使用 **`debian bullseye`** 建立 docker 套件庫
```bash
$ printf '%s\n' "deb https://download.docker.com/linux/debian bullseye stable" |
sudo tee /etc/apt/sources.list.d/docker-ce.list
```
- 匯入 GPG 金鑰
```bash
$ curl -fsSL https://download.docker.com/linux/debian/gpg |
sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker-ce-archive-keyring.gpg
```
- 更新套件並進行安裝
```bash
$ sudo apt update
$ sudo apt install -y docker-ce docker-ce-cli containerd.io
```
完成安裝後,Kali Linux 也會貼心地將 docker 服務設定為開機啟用(is-enabled),可以透過以下命令確認。
```bash
$ sudo systemctl is-enabled docker
```
- 修改使用者至 docker 群組
操作 docker 需要透過 **`sudo`**,為了測試便利性,使用以下命令將使用者加入 docker 群組。
```bash
$ sudo usermod -aG docker $USER
```
:::warning
**注意** 完成以上調整,使用者需要**重新登入** 完成設定變更。
:::
### 確認 Docker 狀態
使用 **`docker version`** 命令檢視安裝版本。

使用 **`sudo systemctl status docker`** 確認服務運作狀態。

使用 **`docker run hello-world`** 驗證 **`hello-world`** 容器映像檔執行狀態。系統會下載映像檔並顯示以下資訊後脫離(exist)。

:::info
- 其實使用 Kali Linux 佈署 Docker 還容易的,連我都會!
- 其他的發行版本只要按照 Docker 官網操作即可。
:::
## 佈署連結器
按照以下步驟取得 Connector 佈署命令。
### 執行步驟
1. **連線 Infinity Portal**
先連線並登入 [**Infinity Portal**](https://portal.checkpoint.com/),選擇 **ASSETS** > **Branches & Data Centers**,點擊欲配置資料中心右上方的組態,選擇 **Configuration Instrutions**。

2. **取得佈署命令**
點擊右側 **複製** 圖示,將佈署命令完整複製。

3. **完成佈署**
將佈署命令在先前準備的系統完整貼上後執行。
佈署命令範本:
```bash!
$ docker run -d -e ODO_ENV=eu --cap-add=NET_ADMIN --name=orion --network=host --restart=always --log-opt max-size=1g -e DeviceInterfaceName=eth0 -e Secret="Secret_Key" adanite/tunnel_connector:eu
```
### 網路界面名稱
由於佈署平台的作業系統及版本有所差異,在網路界面名稱上的顯示也有差異,新一代的 Linux 作業系統,對於網路介面卡也採用新的命名方式。
若在作業系統上顯示的網路界面名稱不是 **eth0**,請修改佈署命令中的 **`-e DeviceInterfaceName=<interface name>`**。
查看 Linux 作業系統的網路界面名稱,使用 **`ip link show`** 命令。
Kali Linux 剛好使用 **eth0**,所以佈署命令不用調整。請**根據查詢結果調整佈署命令**。

### 命名容器
連結器容器佈署預設會配置一個任意的容器名稱,若想配置自定義的容器名稱,可在佈署命令中加入 **`--name <container name>`**。目前並沒有發現會影響佈署及服務啟用狀態。
### 作業系統驗證
其實在完整的佈署命令,最前面有包含以下命令:
```bash!
curl --silent https://assets.checkpoint.security/connector-scripts/DcConnectorOSValidator.sh -o DcConnectorOSValidator.sh
```
原廠會在執行連結器佈署前驗證安裝平台是否符合需求,會從網站下載 **`DcConnectorOSValidator.sh`** 程式進行驗證,若是平台不符合安裝需求,便會離開佈署容器程序,並告知驗證結果。

為了能成功在 Kali Linux 上佈署連結器,在測試過程中則省略該系統驗證檢查,直接執行 **`docker run`** 命令即可。
**`DcConnectorOSValidator.sh` 程式碼**
```bash=
#!/bin/bash
OS=$(cat /etc/*release | grep ^NAME | cut -f2 -d '=' | tr -d '\"')
VERSION=$(cat /etc/*release | grep ^VERSION_ID | cut -f2 -d '=' | tr -d '\"')
echo $OS $VERSION
# Ubuntu 18.04/20.04/22.04
[[ $OS = "Ubuntu" && ($VERSION = 22.04 || $VERSION = 20.04 || $VERSION = 18.04) ]] && exit 0
# Debian GNU/Linux 11
[[ $OS = "Debian GNU/Linux" && $VERSION = 11 ]] && exit 0
# Red Hat 7.9
[[ $OS = "Red Hat Enterprise Linux Server" && $VERSION = 7.9 ]] && exit 0
# None of the above
echo "Unsupported OS
Supported operating systems:
* Ubuntu 18.04
* Ubuntu 20.04
* Ubuntu 22.04
* Debian GNU/Linux 11
* Red Hat Enterprise Linux Server 7.9
"
exit 1
```
### 佈署建議
根據原廠文件提供以下有關連結器佈署建議:
- 若要佈署其他額外的連結器,請重複以上佈署步驟。
- 最多可使用 **5 個連結器**來實現負載共享和高可用性目的。
- Check Point 建議**每個資料中心佈署至少 2 個連結器以實現負載平衡**。
:::warning
:question: 同一個作業系統或主機,是否可以允許佈署多組同一類型的連結器,在此特指 Network Access Connector?
:question: 不同個作業系統或主機,是否都使用同一個佈署命令?
:question: 負載平衡功能是否需要額外設定?還是雲服務會自行建構完成?
:::
:::info
Note: suffix as :eu represents the location of Harmony Connect control plane. It does not impact the traffic of end users.
:::
## 連結器連線測試
使用以下命令確認連結器服務狀態。
### 驗證連接
- **`docker ps | grep 'tunnel_connector'`**

- **`docker logs [-f] {container_id | container_name} | grep -w tunnel`**

- **`docker logs [-f] {container_id | container_name} | grep 'Tunnel established successfully'`**

### 下載日誌紀錄
日誌紀錄由 **application** 和 **IPSec** 紀錄組成。
#### Application Logs
透過以下方式將日誌紀錄儲存至本機。
```bash
docker logs --details {container_id | container_name} > {log_filename}
```

#### IPSec Logs
使用以下命令將日誌紀錄儲存至本機。
```bash
docker cp {container_id | container_name}:/var/log .
```

### 檢視容器資訊
可以透過 **`docker inspect {container_id | container_name}`** 檢視容器運作資訊。

當然,我們可以將此 **JSON 格式**的內容儲存至本地,再透過 **jq** 工具解析。


### 連結器監控
透過 Infinity Portal 確認站點及連結器狀態。選擇 **Logs and Events** > **Monitors** > **Connectors**。

**Sites Overview**

**Connectors Overview**

:::info
**參考** [Monitor Connector Status](https://sc1.checkpoint.com/documents/Infinity_Portal/WebAdminGuides/EN/Harmony-Connect-Admin-Guide/Topics-Harmony-Connect-AG/Logs-and-Events/Monitor-Connector.htm?tocpath=Logs%20and%20Events)
:::
## 設定網路存取政策
根據實際網路環境設定網路存取清單,確保可正確存取資料中心資源。

## 路由排除網段
檢視資料中心內部網段是否在以下路由排除範圍,若有相關網段則需要移除,因為預設這些網段將不會經由通道(Tunnel)。

# 停止及移除連結器
若有**升級連結器**或發生關聯資料中心的**連結器故障**狀況,則有機會需要停止或移除連結器。
由於連結器是容器服務,所以相關動作皆使用 **`docker`** 進行。
:::info
[Docker 官網: **Docker CLI**](https://docs.docker.com/engine/reference/run/)
:::
## 檢視連結器資訊
使用 **`docker ps | grep tunnel_connector`** 篩檢出運行 **tunnel_connector** 映像檔的連結器的**識別碼 `{container_id}`** 或**名稱 `{container_name}`**。

:::info
如果知道**容器名稱**的話,直接以容器名稱操作較為簡便。
:::
## 停止連結器
使用 **`docker stop {container_id | container_name}`**。
## 移除連結器
使用 **`docker rm {container_id | container_name}`**。

:::warning
- 移除容器前務必先停止。
- 移除後就回不來囉!
- `docker rm -f` 可以強制移除。
:::
## 檢視連結器映像檔資訊
使用 **`docker images | grep tunnel_connector`**,可確認**映像檔識別碼**。

## 移除連結器映像檔
使用 **`docker rmi {image_id}`** 移除指定的映像檔。

# 升級連結器映像檔
請參考以下[步驟完成:
1. [停止及移除連結器](#停止及移除連結器)。
2. 參考先前的 [取得佈署命令](#執行步驟1)並完成連結器佈署。
3. 進行 [連結器連線測試](#連結器連線測試)
:::info
**參考** [Upgrading the Connector](https://sc1.checkpoint.com/documents/Infinity_Portal/WebAdminGuides/EN/Harmony-Connect-Admin-Guide/Topics-Harmony-Connect-AG/Appendix/Upgrading-Connector.htm?tocpath=Appendix)
:::
# 參考
- [Installing Linux and Docker](https://sc1.checkpoint.com/documents/Infinity_Portal/WebAdminGuides/EN/Harmony-Connect-Admin-Guide/Topics-Harmony-Connect-AG/Appendix/Linux-and-Docker-installation.htm)
- [Harmony Connect API](https://app.swaggerhub.com/apis-docs/Check-Point/harmony-connect-api/2.0.0#/)
- [Harmony Connect Application Access Setup Requirements(sk178065)](https://supportcenter.checkpoint.com/supportcenter/portal?eventSubmit_doGoviewsolutiondetails=&solutionid=sk178065)