공개 서버의 SSH 포트 포워드 기능을 사용하여 백엔드 PC와 통신(TCP, UDP)한다.
개요
자신이 공개하고 있는 서버에서 SSH 서비스가 움직이고 있을 때, SSH의 포트 포워드 기능을 사용하면 그 서버의 뒤에 있는 PC와 통신할 수 있다.
가능한 한 추가로 설치하지 않아도 된다.
가정 네트워크
DMZ상의 공개 서버에서 SSH 서비스가 움직이고 있고, 그 백엔드의 네트워크에 PC나 서버가 존재하고 있다고 상정한다.
개념도 [clientA(Linux)] [clientB(Windows)]
(192.168.22.5) (192.168.22.100)
| |
+--------------------+
|
|
(192.168.22.200)
[SSH server(Linux)]
|
+----------------+
| |
[PC] [server]
(192.168.111.100) (192.168.111.200)
TCP 통신
clientA(Linux)
에서 SSH server(Linux)
로 SSH 포트 포워드를 설정합니다.
동적 포트 포워드 (SOCKS5 프록시) 사용
SSH의 동적 포트 포워드 설정
clientA(Linux)# ssh -D 192.168.22.5:9150 -f -N [email protected]
[email protected]'s password:
#
proxychains 설정
/etc/proxychains.conf를 아래와 같이 편집한다.
clientA(Linux)# vi /etc/proxychains.conf
------------------------
(/etc/proxychains.confを下記の内容で編集)
# Quiet mode (no output from library)
quiet_mode
(snip)
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
socks5 192.168.22.5 9150
백엔드 PC(192.168.111.100)에 RDP 연결해 보기
clientA(Linux)# proxychains xfreerdp /v:192.168.111.100 /u:**** /p:****
ProxyChains-3.1 (http://proxychains.sf.net)
[10:47:00:753] [6624:6625] [INFO][com.freerdp.client.common.cmdline] - loading channelEx cliprdr
[10:47:00:907] [6624:6625] [INFO][com.freerdp.gdi] - Local framebuffer format PIXEL_FORMAT_BGRX32
[10:47:00:907] [6624:6625] [INFO][com.freerdp.gdi] - Remote framebuffer format PIXEL_FORMAT_RGB16
[10:47:00:987] [6624:6625] [INFO][com.winpr.clipboard] - initialized POSIX local file subsystem
로컬 포트 포워드 사용
clientB(Windows)의 「원격 데스크탑 접속」을 사용해 백엔드의 PC(192.168.111.100)에 RDP 접속할 때에 사용할 수 있다.
SSH의 로컬 포트 포워드 설정
clientA(Linux)# ssh -L 192.168.22.5:3389:192.168.111.100:3389 [email protected]
clientB(Windows)에서 clientA(Linux)를 통해 백엔드 PC(192.168.111.100)에 RDP 연결해 봅니다.
UDP 통신
로컬 포트 포워드 설정과 netcat relay를 결합합니다.clientA(Linux)
와 SSH server(Linux)
모두에서 조작해야합니다.
이번은 백엔드에 있는 server(192.168.111.200)와 UDP/161(snmp) 통신을 실시한다.
덧붙여서 UDP는 통신이 끊기기 쉽고, 매번 포워드를 재설정할 필요가 있었다.
SSH 서버 (Linux) 측 설정
조작 사용자에게 루트 권한이 필요하지 않습니다.
netcat relay에 대한 FIFO를 만듭니다.
SSHserver(Linux)$ mkfifo /tmp/pipe
netcat relay를 설정합니다.
UDP 통신을 포워드하고 싶은 IP와 포트(이번에는 192.168.111.200:161)를 지정한다.
DMZ상의 공개 서버에서 SSH 서비스가 움직이고 있고, 그 백엔드의 네트워크에 PC나 서버가 존재하고 있다고 상정한다.
개념도
[clientA(Linux)] [clientB(Windows)]
(192.168.22.5) (192.168.22.100)
| |
+--------------------+
|
|
(192.168.22.200)
[SSH server(Linux)]
|
+----------------+
| |
[PC] [server]
(192.168.111.100) (192.168.111.200)
TCP 통신
clientA(Linux)
에서 SSH server(Linux)
로 SSH 포트 포워드를 설정합니다.
동적 포트 포워드 (SOCKS5 프록시) 사용
SSH의 동적 포트 포워드 설정
clientA(Linux)# ssh -D 192.168.22.5:9150 -f -N [email protected]
[email protected]'s password:
#
proxychains 설정
/etc/proxychains.conf를 아래와 같이 편집한다.
clientA(Linux)# vi /etc/proxychains.conf
------------------------
(/etc/proxychains.confを下記の内容で編集)
# Quiet mode (no output from library)
quiet_mode
(snip)
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
socks5 192.168.22.5 9150
백엔드 PC(192.168.111.100)에 RDP 연결해 보기
clientA(Linux)# proxychains xfreerdp /v:192.168.111.100 /u:**** /p:****
ProxyChains-3.1 (http://proxychains.sf.net)
[10:47:00:753] [6624:6625] [INFO][com.freerdp.client.common.cmdline] - loading channelEx cliprdr
[10:47:00:907] [6624:6625] [INFO][com.freerdp.gdi] - Local framebuffer format PIXEL_FORMAT_BGRX32
[10:47:00:907] [6624:6625] [INFO][com.freerdp.gdi] - Remote framebuffer format PIXEL_FORMAT_RGB16
[10:47:00:987] [6624:6625] [INFO][com.winpr.clipboard] - initialized POSIX local file subsystem
로컬 포트 포워드 사용
clientB(Windows)의 「원격 데스크탑 접속」을 사용해 백엔드의 PC(192.168.111.100)에 RDP 접속할 때에 사용할 수 있다.
SSH의 로컬 포트 포워드 설정
clientA(Linux)# ssh -L 192.168.22.5:3389:192.168.111.100:3389 [email protected]
clientB(Windows)에서 clientA(Linux)를 통해 백엔드 PC(192.168.111.100)에 RDP 연결해 봅니다.
UDP 통신
로컬 포트 포워드 설정과 netcat relay를 결합합니다.clientA(Linux)
와 SSH server(Linux)
모두에서 조작해야합니다.
이번은 백엔드에 있는 server(192.168.111.200)와 UDP/161(snmp) 통신을 실시한다.
덧붙여서 UDP는 통신이 끊기기 쉽고, 매번 포워드를 재설정할 필요가 있었다.
SSH 서버 (Linux) 측 설정
조작 사용자에게 루트 권한이 필요하지 않습니다.
netcat relay에 대한 FIFO를 만듭니다.
SSHserver(Linux)$ mkfifo /tmp/pipe
netcat relay를 설정합니다.
UDP 통신을 포워드하고 싶은 IP와 포트(이번에는 192.168.111.200:161)를 지정한다.
# ssh -D 192.168.22.5:9150 -f -N [email protected]
[email protected]'s password:
#
# vi /etc/proxychains.conf
------------------------
(/etc/proxychains.confを下記の内容で編集)
# Quiet mode (no output from library)
quiet_mode
(snip)
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
socks5 192.168.22.5 9150
# proxychains xfreerdp /v:192.168.111.100 /u:**** /p:****
ProxyChains-3.1 (http://proxychains.sf.net)
[10:47:00:753] [6624:6625] [INFO][com.freerdp.client.common.cmdline] - loading channelEx cliprdr
[10:47:00:907] [6624:6625] [INFO][com.freerdp.gdi] - Local framebuffer format PIXEL_FORMAT_BGRX32
[10:47:00:907] [6624:6625] [INFO][com.freerdp.gdi] - Remote framebuffer format PIXEL_FORMAT_RGB16
[10:47:00:987] [6624:6625] [INFO][com.winpr.clipboard] - initialized POSIX local file subsystem
# ssh -L 192.168.22.5:3389:192.168.111.100:3389 [email protected]
로컬 포트 포워드 설정과 netcat relay를 결합합니다.
clientA(Linux)
와 SSH server(Linux)
모두에서 조작해야합니다.이번은 백엔드에 있는 server(192.168.111.200)와 UDP/161(snmp) 통신을 실시한다.
덧붙여서 UDP는 통신이 끊기기 쉽고, 매번 포워드를 재설정할 필요가 있었다.
SSH 서버 (Linux) 측 설정
조작 사용자에게 루트 권한이 필요하지 않습니다.
netcat relay에 대한 FIFO를 만듭니다.
SSHserver(Linux)
$ mkfifo /tmp/pipe
netcat relay를 설정합니다.
UDP 통신을 포워드하고 싶은 IP와 포트(이번에는 192.168.111.200:161)를 지정한다.
SSHserver(Linux)
$ nc -l -p 31337 < /tmp/pipe | nc -u 192.168.111.200 161 > /tmp/pipe
clientA (Linux) 측 설정
SSH의 로컬 포트 포워드 설정
clientA(Linux)
# ssh -L 1337:localhost:31337 [email protected]
netcat relay에 대한 FIFO를 만듭니다.
clientA(Linux)
# mkfifo /tmp/pipe
netcat relay를 설정합니다.
clientA(Linux)
# nc -l -u -p 161 < /tmp/pipe | nc localhost 1337 > /tmp/pipe
snmpwalk 해보자.
백엔드의 server(192.168.111.200)에 대해서 UDP/161로 통신해, 정보를 취득할 수 있었다.
clientA(Linux)
# snmpwalk localhost -c public -v2c
iso.3.6.1.2.1.1.1.0 = STRING: "Linux fileserver 4.8.0-36-generic #36~16.04.1-Ubuntu SMP Sun Feb 5 09:39:57 UTC 2017 x86_64"
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.8072.3.2.10
iso.3.6.1.2.1.1.3.0 = Timeticks: (238794) 0:39:47.94
iso.3.6.1.2.1.1.4.0 = STRING: "Me <[email protected]>"
iso.3.6.1.2.1.1.5.0 = STRING: "fileserver"
iso.3.6.1.2.1.1.6.0 = STRING: "Sitting on the Dock of the Bay"
iso.3.6.1.2.1.1.7.0 = INTEGER: 72
(snip)
Reference
이 문제에 관하여(공개 서버의 SSH 포트 포워드 기능을 사용하여 백엔드 PC와 통신(TCP, UDP)한다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/zunil2_test/items/852cda9fb172ca7c2504텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)