Cockpit을 SSL 없이 HTTP로 접속하거나 Cloudflare를 통한 HTTPS로 접속해보자.

인증 기능을 꺼서 Cockpit 외부 접속하기

지극히 개인적인 용도로 개인 서버를 운용하고 있는데, 관리하기 위한 모니터링 서비스가 필요했다. 여러 가지 모니터링 시스템들이 있지만 (ex. Webmin, Cockpit, Nagios, Zabbix, Cacti, Netdata) Cockpit만큼 좋은 것은 발견하지 못했다. (가장 예쁜 것은 아니다. Netdata가 예쁨)

선택의 이유는 다음과 같다.

  1. 남은 용량을 확인하기 쉽다.
  2. 모니터링 프로그램 내에서 터미널 접속이 가능하다.
  3. 간단히 재부팅 기능을 제공한다.
  4. 로그 확인이 쉽다.

하지만 문제가 한 가지 있다. 외부 접속이 어렵다는 것이다. HTTPS 사용을 강제하기 때문에 VirtualHost로 외부에서 접속하기 어렵다. 내부에서는 http://<아이피:9090>로 접속하면 자동으로 https://<아이피:9090>으로 접속된다. 이 과정에서 인증서 경고가 한 번 뜨고 인증서 없는 HTTPS로 접속이 된다. 그러나 외부에서 접속하려면 접속이 잘 안 될 때가 많다.

Nginx로 가상 도메인을 사용해 접속할 경우는 의외로 접속이 잘 된다. 참고
그러나 나는 서버의 80번 포트만 열어 놓고 Apache를 사용하며 Cloudflare를 통해 HTTPS에 접속하는 사람으로서 (Apache에 SSL은 설치조차 하지 않았음) HTTPS가 아닌 오직 HTTP로만 접속해야만 했다. (물론 보안상 위험이 있음을 경고한다.)

여러 번의 시행착오를 거친 뒤에 첫 화면은 로그인이 되는데, 그 뒤로 발생되는 다음 메시지에 여러 번의 삽질 끝에 접속에 성공하였다.

Connection failed
There was an unexpected error while connecting to the machine.
Messages related to the failure might be found in the journal:
journalctl -u cockpit

핵심은 HTTPS 인증서를 끄는 것과 RewriteEngine On 하는 것에 있었다.

다음 순서로 진행했다.

  1. 서버에 Cockpit을 설치한다.
  2. 서버 내부에 cockpit.conf 파일을 생성해서 접속 환경을 수동으로 설정해 준다.
  3. Apache에 호스트네임을 지정해서 특정 도메인으로만 접속 가능하게 설정한다.
  4. Cloudflare에 도메인을 지정해서 접속하게 해준다. (HTTPS 프록싱 사용 가능)

자세한 셋팅 방법은 이렇다.

서버에 Cockpit을 설치한다.

sudo apt-get update
sudo apt-get install cockpit

서버 내부에 cockpit.conf 파일을 생성해서 접속 환경을 수동으로 설정해 준다.

sudo nano /etc/cockpit/cockpit.conf

다음 내용을 붙여넣고 myhome.site를 나의 홈페이지로 수정해 준다.

[WebService]
Origins = http://myhome.site wss://myhome.site https://myhome.site
AllowUnencrypted = true

Apache에 호스트네임을 지정해서 특정 도메인으로만 접속 가능하게 설정한다.

sudo nano /etc/apache2/sites-enabled/000-default.conf

제일 아래 다음 부분을 추가한 뒤 myhome.site 부분을 수정해 준다.

<VirtualHost *:80>
    ServerName myhome.site

    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:9090/
    ProxyPassReverse / http://127.0.0.1:9090/

    RewriteEngine On
    RewriteCond %{HTTP:Upgrade} =websocket [NC]
    RewriteRule /(.*)           ws://127.0.0.1:9090/$1 [P,L]
    RewriteCond %{HTTP:Upgrade} !=websocket [NC]
    RewriteRule /(.*)           http://127.0.0.1:9090/$1 [P,L]
</VirtualHost>

Cloudflare에 도메인을 지정해서 접속하게 해준다. (HTTPS 프록싱 사용 가능)

Cloudflare로 접속해 myhome.site에 맞는 도메인을 입력해 주거나 Cloudflare가 아닐 경우 자신의 네임서버에서 myhome.site을 자신의 서버 IP에 입력해 준다.

이제 http://myhome.site로 접속하면 Cloudflare에서 HTTPS 프록싱을 했을 경우 자동으로 https://myhome.site로 접속하면서 로그인 화면이 나온다. Apache 부분 설정이 잘못되어 있다면 로그인 후 “Connection failed” 화면과 함께 로그인 실패를 맛보게 되니 Apache 설정에 특히 주의하자. 다만 강제로 ssl사용을 중지 하는 것이기 보안의 문제가 발생할 수는 있다. (딱히 어떤 부분이 문제가 되는지는 모르겠다.)


IT 7