[Linux] Cockpit 에 HTTPS 적용하기(via Cludflare)

최근 Cloudflare Tunnel을 알게되어 개발서버의 cockpit에 적용해봤습니다.

왜 클라우드 플레어를 사용하나요?

사람들마다 목적이 다르겠지만, 저는 보안 프로토콜 사용과 IP를 숨기기 위한 목적입니다.
IP가 노출되면 공격하기 훨씬 용이해지는데요. 저는 클라우드 플레어를 사용해서 IP를 숨겨 공격자로부터 최소한의 힌트를 주지 않으려고 했습니다.

지금 소개해드릴 cloudflare tunnel 을 사용하면 트래픽을 외부 IP로 전송하지 않고, cloudflared 이 cloudflare의 글로벌 네트워크로 아웃바운드 연결을 만들어냅니다.

Cloudflared 설치

cloudflared 는 cloudflare 의 tunnel의 daemon이고, 이를 다운로드 받기 위해서는 다음과 같이 입력합니다.

# cloudflared 다운로드 (AMD64 기준)
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64

# 실행 권한 부여
chmod +x cloudflared-linux-amd64

# /usr/local/bin으로 이동
sudo mv cloudflared-linux-amd64 /usr/local/bin/cloudflared

# 설치 확인
cloudflared --version

위 과정이 완료되면 다음을 입력하여 cloudflare 에 로그인합니다.

$ cloudflared tunnel login // 이후 나타나는 웹사이트에 접속해서 인증받기

터널링 만들기

첫번째 터널을 만들어보겠습니다.

// cockpit 이라는 제목의 터널을 만듭니다
// cloudflared tunnel create [원하는 이름]
$ cloudflared tunnel create cockpit



# cloudflare 설정 디렉토리를 만듭니다
sudo mkdir -p /etc/cloudflared

# 설정 파일을 작성합니다
sudo vi /etc/cloudflared/config.yml

잘 만들어졌는지도 확인해야겠네요.

// 잘 만들어졌는지 리스트 확인
$ cloudflared tunnel list

root@localhost:/etc/cockpit# cloudflared tunnel list
You can obtain more detailed information for each tunnel with `cloudflared tunnel info <name/uuid>`
ID                                   NAME            CREATED              CONNECTIONS               
7b9244c9-ee41-4514-8f9d-107746ccea84 test       2025-10-07T17:35:13Z 1xicn01, 1xicn05, 2xicn06 

강조된 Tunnel ID를 설정에서 입력해야하니 꼭 복사해두세요.
설정은 다음과 같이 작성해주시면 됩니다.

우리는 Cloudflare 를 통해 Cockpit 을 보호하려고 합니다.
설정은 다음과 같이 작성해주시면 됩니다.

tunnel: 7b9244c9-ee41-4514-8f9d-107746ccea84 # 상단 list 의 ID를 입력하세요
credentials-file: /root/.cloudflared/7b9244c9-ee41-4514-8f9d-107746ccea84.json # ID 입력!

ingress:
  - hostname: [호스트명 입력]
    service: http://localhost:9090
    originRequest:
      noTLSVerify: true
      connectTimeout: 30s
      httpHostHeader: localhost
  # 기본 규칙 (필수)
  - service: http_status:404

터널을 작성하고 cloudflare 에 CNAME을 등록해야합니다.
이미 작성한 내용이 있으니 다음을 입력하고 실행합니다.

# cloudflared tunnel route dns [NAME] [HOSTNAME] 으로 입력합니다!

$ cloudflared tunnel route dns test [subdomain].startsomething.dev

끝으로 systemctl 에 cloudflare 을 등록해주는것도 잊지마세요.

# systemctl 등록
sudo cloudflared service install

# 서비스 시작
sudo systemctl start cloudflared

# 부팅 시 자동 시작 활성화
sudo systemctl enable cloudflared

# 상태 확인
sudo systemctl status cloudflared

다음은 cockpit 설정을 해줘야겠죠..
cockpit.conf 가 초기에는 없었습니다. 처음 설정하시는거라면 만들어서 진행해주세요..

# /etc/cockpit/cockpit.conf
[WebService]
AllowUnencrypted=true
OriginProtocol=http
Origins = http://[사이트명 입력] https://[사이트명 입력] # http와 https 모두 입력
ProtocolHeader = X-Forwarded-Proto
LoginTo = false

끝으로, systemctl 설정을 통해 마무리해주세요.

$ sudo systemctl restart cockpit
$ sudo systemctl restarat cockpit-session

이렇게 하시면 아마 정상적으로 동작할겁니다!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다