시작전에 Proxmox VE에서 CT 활용에 대한 저의 생각을 좀 정리해 보겠습니다.
시스템 설계는 항상 정답이 없는 것 같습니다. 주어진 조건들 속에서 최선의 선택을 하다보면, 항상 다른 결과와 마주하게 됩니다. 여기에 개인의 선호도, 관습까지 더해지면 더 다양한 결과가 나오게 됩니다.
CT를 사용할 것인가 말 것인가에 대한 선택도 상황에 따라 달라지는 것 같습니다.
서버 1~2대인 경우에는 CT를 사용하는 것을 선호합니다. 리소스(특히 메모리)가 제한되기 때문에 컨테이너를 이용해서 OS 레이어가 사용하는 메모리 용량을 줄이는거죠. 비용, 리소스 측면에서 제한이 있기 때문에 효율을 높이는 쪽을 선택하기 때문입니다.
서버 3대 이상의 경우에는 CT 보다는 VM으로 컨테이너 호스트를 만들고 서비스를 돌리는 것을 선호합니다. 이 경우는 컴퓨팅 리소스에 여유가 있다고 봅니다. 그래서 하이퍼바이저 수준의 프로세스를 늘리기 보다는, VM 위에서 컨테이너를 동작시키는 것을 선호합니다. 비용, 리소스 측면에서 조금 여유가 있기 때문에 신뢰성을 높이는 쪽을 선택하기 때문입니다.
Apache Guacamole는 클라이언트 프로그램 없이 웹 브라우저만으로 원격 시스템에 접속할 수 있도록 해주는 게이트웨이 솔루션합니다. 원격 시스템 접속용으로 VNC, RDP, SSH 프로토콜을 지원합니다. 또한 Kubernetes API 접근도 중계할 수 있습니다.
제 경우 다음과 같은 경우에 요긴하게 쓰고 있습니다.
- 조금 더 안전한 원격 접속 환경: Windows 데스크탑을 직접 인터넷에 연결해서 RDP로 접속할 수 있게 하거나, Linux 서버를 직접 인터넷에 연결해서 SSH로 접근하게 하기는 너무 위험합니다. 그래서 Apache Guacamole과 통로(게이트웨이)를 거치게 하면 추가적인 인증 절차를 거쳐서 조금 더 안전해집니다.
- 원격 실습 환경 구성: 공통적인 Linux Desktop 환경 제공. 사용하는 기기 유형이 달라도 웹브라우저만 있으면, 똑 같은 Linux Desktop 환경에서 실습 가능해집니다.
- 제한된 환경에서 자유(?)로운 환경으로 탈출: 외부 접속이 제한된 환경이 종종 있습니다. VPN이 막혀 있다거나, 특정 웹 사이트 접속이 제한된다거나 등등… 웹은 어느 정도 자유롭게(?) 사용 가능하다면 Apache Guacamole을 통해 원격으로 자유로운 내 데스크탑에 접속할 수 있습니다.
- 서버 접속 제한용: 사내에서 인프라 관리용으로 사용하는 서버 접속을 통제하는 용도로 활용 가능합니다. 업무 LAN에서 서버에 직접 접속하는 것이 아니라, Apache Guacamole을 한번 거쳐가게 하는 용도로 구성하는거죠. 사용자별로 접속 가능한 서버를 설정해서 통제할 수도 있습니다.
다만, 인터넷에 내부 접속과 관련된 서비스를 열여 놓는건 상당히 위험한 일입니다. 인터넷에 연결시에는 TOTP를 적용해서 인증 절차를 강화해서 사용하기 바랍니다!!!
Proxmox VE 환경에서 기본 설치
Proxmox VE Helper-Scripts를 이용하면 아주 간단하게 CT 형태로 설치할 수 있습니다.
- 설치 스크립트: https://community-scripts.github.io/ProxmoxVE/scripts?id=apache-guacamole
- Proxmox VE Helper-Scripts 사이트의 Apache Guacamole 페이지에 접속합니다. 빨간색으로 표시된 부분에서 설치 스크립트 URL을 클립보드로 복사합니다.
- Proxmox VE 노드의 Shell 창을 열고 붙여 넣고 -> Enter 키를 눌러 실행시킵니다.
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/apache-guacamole.sh)"
- 새 Ahache-Guacamole LXC를 만들겠냐고 묻는 화면이 표시됩니다. Yes가 선택된 상태에서 -> Enter 키를 누릅니다.
- 설정 방식을 선택합니다. “Default Settings”를 선택하고 -> 가 선택된 상태에서 Enter 키를 누릅니다.
- 컨테이너 템플레이트를 저장할 스토리지 풀을 선택하고 -> 가 선택된 상태에서 Enter 키를 누릅니다. 참고: 선택은 스페이스바, 항목간 이동은 화살표/탭 키 사용
- 컨테이너가 사용할 스토리지 풀을 선택하고 -> 가 선택된 상태에서 Enter 키를 누릅니다.
- apache-guacamole CT가 만들어지고, 애플리케이션 빌드가 진행되면서 Shell 화면이 계속 스크롤 됩니다.
- 빌드가 끝나면 그림과 같이 접속 주소가 표시됩니다.
- 위 주소에 접속해서 아이디 guacadmin, 암호 guacadmin로 로그인합니다.
- 오른쪽 guacadmin 메뉴를 클릭해서 “세팅”을 선택하고 -> “기본 설정” 탭을 선택합니다. “패스워드 변경”에서 guacadmin 계정의 암호를 변경합니다.
Apache Guacamole TOTP 설정
Proxmox VE Helper-Scripts의 Apache Guacamole 설치 스크립트는 mysql 접속을 위한 것을 제외하고 Extentions를 설치하지 않습니다. 그래서 TOTP를 사용하려면 다음과 같은 과정을 통해 TOTP Extensions를 설치/구성해 주어야 합니다.
- apache-guacamole 컨테이너의 Console 창을 엽니다.
guacd -v
명령으로 Guacamole 버전을 확인합니다.
guacd -v
- 홈페이지의 다운로드 페이지를 통해서 해당 버전의 TOTP 확장의 URL 정보를 확인하고, wget 명령을 예제와 같이 입력해서 다운로드 받습니다. 참고: 버전에 주의합니다.
다운로드: https://guacamole.apache.org/releases/1.5.5/
wget https://apache.org/dyn/closer.lua/guacamole/1.5.5/binary/guacamole-auth-totp-1.5.5.tar.gz?action=download -O guacamole-auth-totp-1.5.5.tar.gz
- 다운로드 받은 파일의 압축을 풉니다.
tar zxf guacamole-auth-totp-1.5.5.tar.gz
- jar 파일을 /etc/guacamole/extensions/ 디렉토리로 옮깁니다.
mv guacamole-auth-totp-1.5.5/guacamole-auth-totp-1.5.5.jar /etc/guacamole/extensions/
- 필요에 따라 /etc/guacamole/guacamole.properties 에 설명서를 참고해서, TOTP 구성 정보를 추가합니다. 여기서는 TOTP 앱에서 쉽게 구분하기 위해 표시 이름을 “PVE Apache Guacamole” 변경한 예입니다.
설명서 URL: https://guacamole.apache.org/doc/gug/totp-auth.html
echo "totp-issuer: PVE Apache Guacamole" >> /etc/guacamole/guacamole.properties
- 변경한 내용이 적용되도록 tomcat 서비스를 재시작합니다.
systemctl restart tomcat
- 설치한 페이지에 다시 접속해서 guacadmin 으로 로그인합니다. 그림과 같이 TOTP 등록을 위한 QR 코드 화면이 표시됩니다.
- Google Authenticator와 같은 TOTP 앱에서 스캔해서 등록합니다.
- 등록된 이름에서 나오는 인증 코드 값을 입력하고 “계속”을 클릭합니다.
- 로그인되면, 로그아웃 합니다.
- 다시 guacadmin 으로 로그인합니다. 그림과 같이 “인증 코드”를 묻는 화면이 나옵니다.
- Google 에서 표시된 코드를 보고 “계속”을 클릭합니다.
TOTP 구성 및 확인 끝! 이제 기본 구성은 끝났습니다.
앞으로 컨테이너에 고정 IP를 지정하고 사용자 수에 따라 적절하게 CPU/RAM 설정해줍니다. 그리고 Apache Guacamole에서 사용자를 만들고, 원격으로 사용할 서비스를 구성해서 할당해줍니다.