ssh tunnels을 이용한 포트 우회 (ssh 터널링)
2013년 8월 10일 토요일
ssh tunnels을 이용한 포트 우회
포워딩
- Local port forwarding
클라이언트->서버
ssh -L포트번호1:호스트명:포트번호2 접속서버
클라이언트에서 포트번호1로 Listening Listening 으로 연결하면 접속서버내에서 호스트명:포트번호2 로 포워딩된다.
- Remote port forwarding
서버->클라이언트
ssh -R포트번호1:호스트명:포트번호2 접속서버
접속서버에서 포트번호1로 Listening Listening 으로 연결하면 클라이언트내에서 호스트명:포트번호2 로 포워딩된다.
plink (윈도우용 ssh)
http://putty.org 에서 다운로드 이후 사용되는 ssh는 plink로 대체가능 혹은 gui가 지원되는 putty 로도 가능하다.
예시1
[허용되지 않은곳에서 ssh 접속] 사내의 네트워크상에서만 abc.com서버의 22번 포트에 접근이 가능하다고 할 때 허용되지 않은곳에서 접속할 수 있도록 우회서버 구성. 우회서버는 foo.com 20001포트로 한다. foo.com서버의 ssh tunnel(22번포트)를 이용하여 우회하도록 한다.
사내PC 에서
ssh -R20001:abc.com:22 -p22 -g foo.com
foo.com 서버에 20001번 포트로 listening이 시작된다. 20001번포트로 접근을하면 abc.com의 22번포트로 포워딩된다.
보안이슈
nano /etc/ssh/sshd_config
GatewayPorts yes
127.0.0.1로 listening이 걸리는경우 -g를 이용하여 다시 다른포트로 바인딩을 건다.
ssh -L 10001:localhost:20001 -g localhost
예시2
내부 1362 - 외부서버 8101 - 외부서버 8000
[Private]
plink -R 119.64.23.220:8101:localhost:1362 -P 8100 heyo.no-ip.org
(putty로 keep alive설정하여 세션으로 등록해 이용하는것이 편하다)
SSH서버(heyo.no-ip.org) 8101포트가 LISTENING 되며 8101포트로 connection시 로컬의 1362로 포워딩된다
하지만 127.0.0.1:8101 로 LISTENING 이 되어 내부에서만 접속이 가능하다
plink에도 ssh의 -g 옵션과 같은게 있으면 아래의 작업이 필요없을 것이다.
[SSH Server]
ssh -L 8000:localhost:8101 -g localhost
(-g Allows remote hosts to connect to local forwarded ports.)
로컬에서 로컬로 포워딩
0.0.0.0:8000 -> 127.0.0.1:8101 포워딩
ssh -g 옵션으로 다른곳에서 전부 접속할수 있도록 설정
sshd_config 참고
24. AllowTcpForwarding yes
TCP 포워딩을 가능토록 설정하는 옵션이다.
25. GatewayPorts no
클라이언트에 포워드된 포트로 원격 호스트 들이 접속할 수 있도록 설정하는 옵션이다.
netsh (윈도우)
netsh interface portproxy add v4tov4 listenport=22 connectport=22 connectaddress=13.200.1.1