remot3.it을 사용하여 집에서 NAT를 넘어서는 Dockerfile

라우터에 구멍을 뚫지 않아도 인바운드로 연결할 수 있는 수상한 소프트를 직장 근처에서 된장라면 먹고 있던 사람에게 가르쳤다.
어떻게 생각해도 백도어를 걸어 NAT 넘는 것 외에 사용도가 생각나지 않기 때문에 , 우선 Dockerfile 에 써 남는다.

어쨌든 이미지



※ 라우터에는 특별히 아무것도 설정할 필요는 없다.


집에 백도어를 설치하는 절차



1. remote.it 계정을 만들고 웹 포털에 로그인
non-commercial의 personal use로 계정 만들기

2. Docker 호스트 준비
여기 CentOS 7.5 1804 사용
3. Dockerfile을 만들어 컨테이너 시작

CentOS
$ sudo yum update -y
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install -y docker-ce
$ sudo systemctl enable docker; sudo systemctl start docker; systemctl status docker
$ mkdir -p ~/docker/ubuntu && cd $_
$ vi Dockerfile
$ vi startup.sh
$ sudo docker build -t 'my/ubuntu' .
$ sudo docker logs -f $(sudo docker run -d -it my/ubuntu)

docker run 때도 -p 12345:22 같은 port forwarding 는 불필요

Dockerfile
FROM ubuntu:latest
RUN apt-get update
RUN export DEBIAN_FRONTEND=noninteractive
RUN apt-get install -y ssh curl psmisc iproute2 cron net-tools expect
RUN echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
RUN mkdir -p /root/.ssh
RUN chmod 700 /root/.ssh
RUN touch /root/.ssh/authorized_keys
RUN chmod 600 /root/.ssh/authorized_keys
RUN echo "ssh-rsa AAAAB3N********c6rzZOpGQ== [email protected]" >> /root/.ssh/authorized_keys
RUN mkdir -p /var/run/sshd
RUN curl -sL https://github.com/weaved/installer/raw/master/Ubuntu_deb/weavedconnectd_1.3-07_x86/weavedconnectd_1.3-07k_x86.deb -o /root/weavedconnectd_1.3-07k_x86.deb
RUN dpkg -i /root/weavedconnectd_1.3-07k_x86.deb
ADD startup.sh /root
RUN chmod 700 /root/startup.sh
CMD ["/root/startup.sh"]

상기의 SSH 공개키는 길었기 때문에 생략하고 있다. 누군가가 나를 등록해주더라도 특별히 기쁘지 않습니다.

startup.sh
#!/bin/bash

DATE=`date "+%Y%m%d-%H%M%S"`
TIMEOUT="30"
COMMAND="/usr/bin/weavedinstaller"
LOGIN_SELECTION="1"
LOGIN_MAIL="[email protected]"
LOGIN_PASS="yourpassword"
LOGIN_DEVICE="ubuntu-${DATE}"
MAIN_SELECTION="1"
PROTO_SELECTION="1"
PROTO_PORT_DEFAULT="y"
PROTO_APP_NAME="ubuntu-${DATE}-ssh"
EXIT_SELECTION="4"

/usr/sbin/sshd -D &
expect -c "
set timeout ${TIMEOUT}
spawn ${COMMAND}
expect \"Please select from the above options (1-4):\";                    send -- \"${LOGIN_SELECTION}\n\"
expect \"Please enter your remot3.it Username (e-mail address):\";         send -- \"${LOGIN_MAIL}\n\"
expect \"Please enter your remot3.it password:\";                          send -- \"${LOGIN_PASS}\n\"
expect \"Only letters, numbers, underscore, space and dash are allowed.\"; send -- \"${LOGIN_DEVICE}\n\"
expect \"Please select from the above options (1-4):\";                    send -- \"${MAIN_SELECTION}\n\"
expect \"Please select from the above options (1-5):\";                    send -- \"${PROTO_SELECTION}\n\"
expect \"Would you like to continue with the default port assignment?\";   send -- \"${PROTO_PORT_DEFAULT}\n\"
expect \"Only letters, numbers, underscore, space and dash are allowed.\"; send -- \"${PROTO_APP_NAME}\n\"
expect \"Please select from the above options (1-4):\";                    send -- \"${EXIT_SELECTION}\n\"
interact
"
tail -f /dev/null

위의 사용자 이름과 암호는 물론 자신에게 다시 작성하십시오.
대화식 설치 프로그램은 Dockerfile에 어떻게 쓰는지 잘 모르기 때문에 삶에서 처음으로 expect와 과를 사용했습니다.

4. Docker 컨테이너 로그를 보고 기기 등록 완료를 기다립니다.
마지막으로 sudo docker logs -f $(sudo docker run -d -it my/ubuntu)를 실행하고 있기 때문에 컨테이너 로그가 흘러 들어갑니다.
아래와 같이 Main Menu로 돌아가 4) Exit를 선택하고 있으면 등록 완료이므로 CTRL+C로 빠져도 좋다.
SSH             22      sshd                    ubuntu-20181028-125059-ssh
------------------------------------------------------------
 Device Name: ubuntu-20181028-125059
============================================================

********************** Main Menu *************************

      1) Attach/reinstall remot3.it to a Service
      2) Remove remot3.it attachment from a Service
      3) Remove all remot3.it attachments, then exit
      4) Exit

**********************************************************

Please select from the above options (1-4):
4
weavedConnectd[521]: 59609> NAT type selected at 3 with natmap 2
weavedConnectd[521]: Server Connection changed to state 4
weavedConnectd[521]: Server Connection changed to state 5
weavedConnectd[521]: Connected to server is xxx.xxx.xxx.xxx:xxxx
weavedConnectd[521]: 59729> -Updating Internal IP address of 172.17.0.2:11648 to Weaved Service.
weavedConnectd[521]: 59729> Updating Internal IP address of 172.17.0.2:11648 to Weaved Service.

5. 외부에서 컨테이너에 ssh 연결해 봅니다.

웹 콘솔로 돌아가서 장치 목록을 업데이트해 보면, 지금 등록한 장치가 나오므로 선택한다

디바이스를 클릭하면 디바이스와 함께 등록한 SSH 포트가 나오므로 선택한다

몇 초 동안 기다리면 백도어가 프록시 서버의 주소와 포트를 표시합니다.

어디서나 좋기 때문에 SSH 클라이언트를 시작하고 프록시 서버와 포트를 입력하고 연결합니다.

연결됨


6. 끝

따로 SSH 이외에 http에서도 RDP에서 무엇이든 자유롭게 백도어 어디서나 문을 넣을 수 있다.

Docker 컨테이너에 넣어 무엇에 사용한다는 츳코미도 있을지도 모른다.
사실은 라즈파이나 IoT 용도라든지 사용하는 것 같다. 고래 고기가 안 된다면 과자를 먹으면 좋지 않다.

좋은 웹페이지 즐겨찾기