<사는이야기>

[사지방] 사지방에서 원격뚫기

gosoeungduk 2020. 5. 30. 11:11
반응형

#apache_guacamole #docker #사지방 원격 뚫기 #사지방 #사이버지식정보방

* apache guacamole 이란?

guacamole에 대해 쉽게 말하자면 html5를 이용하여, rdp나 ssh 등의 여러 통신을 80(HTTP), 443(HTTPS) 포트를 사용하는 웹 서비스를 통해 연결해주는 서비스라고 볼 수 있다.

이렇게 되면 guacamole을 구축해놓은 서버가 일종의 '프록시 서버' 가 되어 대신 3389(rdp)나 22(ssh)에 연결해주고 그에 대한 데이터를 클라이언트에 쏴준다고 보면 된다.

guacamole_structure

.
.
.

* 구축 방법

1. 로컬 리눅스 서버에 직접 구축하기

로컬에_구축하는방법

필자는 rdp를 이용하기 위해 18.04 우분투 서버에 로컬로 구축했으나 freerdp와 우분투 18.04 사이의 문제가 있는 것 같아서 구축했다가 실패하고 2번 방법으로 넘어갔다. ssh는 잘되는 듯 보인다.
오류현상 : Guacamole reconnect to Win10 with mouse movement

2. 도커 이미지를 가져와서 컨테이너 생성하기

로컬 설치가 실패하고 찾은 다른 방법이다. 도커는 잘 구성된 이미지만 가져와서 실행하면 되니 잘된다.(2020.05.29 기준)

.
.
.

* 필요한 것들

1. ubuntu server

필자는 혹시모를 충돌에 대비하여 18.04 대신 16.04로 구성하였다.

2. docker

애초에 모든 패키지와 모듈이 docker 이미지안에 있어서 mysql이나 tomcat 등등의 여러 서비스들을 로컬에 설치할 필요가 없다.

.
.
.

* 어떻게 설치할까?

1. Docker

<패키지 업데이트>

$ sudo apt-get update

<도커와 https 로 통신하기위한 준비>

$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common

<gpg 키 등록 및 확인>

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

$ sudo apt-key fingerprint 0EBFCD88
    pub   4096R/0EBFCD88 2017-02-22
      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
    uid                  Docker Release (CE deb) <docker@docker.com>
    sub   4096R/F273FCD8 2017-02-22

<OS 아키텍쳐에 맞는 도커 저장소 설정>

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

※ arch 인자는 환경에 맞게 유동적으로 설정하자!

<Docker-CE 설치>

 $ sudo apt-get install docker-ce docker-ce-cli containerd.io

<사용가능한 저장소 버전확인 및 설치>

$ apt-cache madison docker-ce
docker-ce | 5:19.03.10~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
 docker-ce | 5:19.03.9~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:19.03.8~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:19.03.7~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:19.03.6~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:19.03.5~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:19.03.4~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:19.03.3~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages

$ sudo apt-get install docker-ce=[버전] docker-ce-cli=[버전] containerd.io

버전 인자에는 위에서 확인한 "5:19.03.93-0ubuntu-xenial" 같은 버전에 대한 문자열을 기입하자

<설치확인>

$ sudo docker version
$ sudo docker run
$ sudo docker

간단한 몇 가지 명령어로 Docker를 설치하였다. 이제 그러면 반은 이미 완료한 것이다.

 

2. guacamole 설치

$ docker pull guacamole/guacd
$ docker pull guacamole/guacamole
$ docker pull mysql

docker_images

위 커맨드를 실행하면 이런 guacamole 도커 이미지가 받아져있을 것이다.

 $ docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > initdb.sql

(--rm 옵션은 컨테이너가 종료되면 자동으로 삭제되도록 해주는 옵션이다. guacamole 컨테이너는 종료와 함께 자동으로 삭제 될 것이다.)

위 커맨드는 guacamole 에서 쓸 DB 에 대한 테이블 및 설정들을 초기화 해주는 sql 구문을 생성하는 구문이다.

$ mkdir /tmp/scripts
$ cp initdb.sql /tmp/scripts

생성될 컨테이너에 스크립트를 전달해줄 디렉토리를 따로 만든 후, 방금만든 sql 파일을 복사하자.

$ docker volume create mysql_volume

docker_vol

위 커맨드는 SQL 데이터를 위한 volume 을 만들어주는 명령어다.
컨테이너가 삭제되면 컨테이너 내부의 데이터(guacamole로 따지면 연결할 수 있는 세션들 목록? 정도) 들이 다같이 사라지므로 컨테이너가 삭제 되어도 SQL 자료들은 남아있게 하기 위함이다.

$ docker run --name guac-mysql -v /tmp/scripts:/tmp/scripts -v mysql_volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

위 명령어에서 mysql root 계정의 비밀번호를 환경변수로 전달해준다. 필자는 간단하게 root로 했으나 알아서 바꿔도 상관없다.
여기서 초반에 만든 디렉토리와 이전에 만든 SQL 자료용 볼륨을 바인딩하는 것을 볼 수 있다. 구문에 따르면 로컬 리눅스의 /tmp/scripts는 컨테이너의 /tmp/scripts에, mysql_volume은 컨테이너의 /var/lib/mysql 에 바인딩 됨을 알 수 있다.

docker_mysql_con

$ docker exec -it guac-mysql /bin/bash

만든 컨테이너에 들어가보자.

$ mysql -u root -p
$ CREATE DATABASE guacamole; 
$ CREATE USER 'guacamole' IDENTIFIED BY 'root'; 
$ GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole.* TO 'guacamole'; 
$ FLUSH PRIVILEGES;
$ exit

mysql_DB_설정

이를 참고하여 컨테이너안의 DB를 설정해보자.

$ cat /tmp/scripts/initdb.sql | mysql -u root -p guacamole;

위 명령어를 통해 아까 만든 sql 파일을 이제 적용해보면 된다. 그러면 아래 사진과 같이 테이블이 생성되어있을 것이다.

mysql_tables

$ docker run --name guacd -d guacamole/guacd
$ docker run --name guacamole --link guacd:guacd --link guac-mysql:mysql -e MYSQL_DATABASE='guacamole' -e MYSQL_USER='guacamole' -e MYSQL_PASSWORD='root' -d -p 8080:8080 guacamole/guacamole

위 커맨드로 guacamole 을 실행시키자. 앞전에 만든 guacd , mysql 컨테이너를 링크 시키면 된다.

con_result

결과적으로 만들어진 컨테이너는 위 사진과 같이 3개 이다. 이렇게 나오면 잘 되었다고 봐도 된다.

 

하지만, 마무리 작업이 있다.

$ docker exec -it guacamole /bin/bash
$ sed -i 's/redirectPort="8443"/redirectPort="8443" server="" secure="true"/g' /usr/local/tomcat/conf/server.xml
$ sed -i 's/<Server port="8005" shutdown="SHUTDOWN">/<Server port="-1" shutdown="SHUTDOWN">/g' /usr/local/tomcat/conf/server.xml
$ chmod -R 400 /usr/local/tomcat/conf
$ cd /usr/local/tomcat/webapps/
$ rm -Rf docs/ examples/ manager/ host-manager/

톰캣 서버설정을 몇 가지 해주고... guacamole 웹페이지로 접속해보자!

gua_res

잘 접속 된다! ID와 PW 는 "guacadmin" 으로 똑같다.

커넥션 객체를 만드는 방법은 setting 에서 하면 되므로 나머지 이후과정은 간단할 것이다 !

contact : a42873410@gmail.com

반응형