Reverse Shell, VPC 활용 인바운드 차단 서버 우회

KBC·2026년 1월 10일

TIL

목록 보기
9/9

  • GPT 이미지생성 활용

연구 목적으로 작성한 글, 사이버 공격이 될 수 있으니 무분별한 사용의 책임은 본인에게 있음을 명심.

목표

  • 인바운드 포트가 차단된 서버에 외부에서 안정적으로 SSH/VSCode 접속함
  • Reverse SSH Tunnel을 사용함
  • 외부 VPS를 단일 진입 허브로 사용함

구조

[Local PC]
    |
    | SSH / VSCode
    v
[VPS (공인 IP, 인바운드 허용)]
    ^
    | Reverse SSH (outbound)
    |
[Internal Server]

1. VPS 기본 설정


VPS 생성함 - Oracle, AWS 등 상용 서비스 : AWS Lightsail 사용하였음

  • Linux (Ubuntu LTS)
  • 공인 IP 할당됨

방화벽에서 아래 포트 허용함

  • TCP 22
  • TCP 2222

2. VPS SSH 설정


/etc/ssh/sshd_config 수정함

AllowTcpForwarding yes
GatewayPorts yes

SSH 재시작함

sudo systemctl restart ssh


3. 내부 서버에서 Reverse SSH Tunnel 생성


VPS 접속용 키 준비함

  • 예: vps_key.pem
  • 권한 600 설정함

chmod 600 vps_key.pem

Reverse SSH 실행함

ssh -i vps_key.pem -N -R 2222:localhost:22 vps_user@<VPS_IP>

의미

  • VPS의 2222 포트를 내부 서버의 22번 SSH로 연결함
  • 세션 유지 중 명령 종료되지 않음

4. 로컬 PC SSH 설정


로컬 PC의 SSH config 작성함

파일 위치

  • Linux/macOS: ~/.ssh/config
  • Windows: C:\Users\.ssh\config
Host vps
    HostName <VPS_IP>
    User vps_user
    IdentityFile ~/.ssh/vps_key.pem
    IdentitiesOnly yes

Host internal-server
    HostName localhost
    User internal_user
    Port 2222
    ProxyJump vps

5. 접속 테스트


ssh internal-server


6. autossh로 터널 자동 유지


sudo apt update
sudo apt install -y autossh

autossh -M 0 -N \
  -o ServerAliveInterval=30 \
  -o ServerAliveCountMax=3 \
  -i vps_key.pem \
  -R 2222:localhost:22 \
  vps_user@<VPS_IP>

7. systemd로 완전 자동화(재부팅시)


/etc/systemd/system/reverse-ssh.service

[Unit]
Description=Reverse SSH Tunnel
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/bin/autossh -M 0 -N \
  -o ServerAliveInterval=30 \
  -o ServerAliveCountMax=3 \
  -i /path/to/vps_key.pem \
  -R 2222:localhost:22 \
  vps_user@<VPS_IP>
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

sudo systemctl daemon-reload
sudo systemctl enable reverse-ssh
sudo systemctl start reverse-ssh

systemctl status reverse-ssh
profile
AI, Security

0개의 댓글