SSH 프록시 설정

SSH를 쓰다 보면 프록시를 타야 할 경우가 가끔 생긴다. 공유기 밑에 여러 호스트가 물려 있다든지 최종 목적지가 특정한 IP로부터의 접속만 허용한다든가 하는 이유로 말이다.
그런 경우엔 방법이 몇 가지 존재하는데 프록시로 쓸 호스트를 A, 최종 목적지 호스트를 X라고 하자.

1. A에 접속한 후 거기에서 X에 접속

1.1 이걸 한 번에

2. 프록시 설정

1의 방법은 좀 문제가 있는데 SSH를 여러 번 타면 괜히 암호화를 여러 번 거치게 된다. scp도 쓰기에 굉장히 불편하고.
그래서 ~/.ssh/config를 수정해서 아예 프록시 설정을 만들어버리자.

ControlMaster, ControlPath 부분은 굳이 적지 않아도 되는 부분이지만 X 호스트에 여러 커넥션을 만들 때 굳이 A에 커넥션을 여러 개 만들지 않게 하는 옵션이다. 이 옵션을 쓰려면 ControlPath에 해당하는 디렉터리를 수동으로 만들어 줘야 한다. 디렉터리가 없다면 스스로 만들어 주지 않고 에러를 뱉는다.

ProxyCommand 옵션은 말 그대로 프록시를 만드는 커맨드를 적는 옵션인데 %p는 X에 접속할 때의 포트를 뜻하는 이스케이프 시퀀스이고 나머지는 그냥 평범하게 netcat을 이용해서 커넥션을 여는 것이다.
-W 옵션을 이용하여 nc 없이도 커넥션을 열 수 있다.

2.1 보너스

가끔 포트포워딩이 전혀 동작하지 않는 환경에서 SSH를 열어 둬야 할 때가 있는데 이 때는 Tor를 이용하면 편하다(Tor가 그러라고 있는 건 아니지만..). 참고
SSH를 Tor의 Hidden service로 열어 두고 ssh 설정에 이 ProxyCommand를 쓰면 된다.

임베디드 기기를 프록시로

가끔 보면 프린터 설정 페이지라든가 하는 게 외부에서 접근 가능한 경우가 있는데 사용자가 이렇게 방치하는 게 보안상 얼마나 위험한건지에 대해서는 너무 많은 글이 있으니 생략하겠다.

근데 이게 개발자가 어떻게 만졌는지 프록시로 쓰면 작동이 되는 경우가 있다. 공짜 프록시가 된다 이 말이다. 이건 개발자들이 그렇게 남겨 둔 거라서 우리가 스스로 펌웨어를 해킹하지 않는 한 그대로 존재하는 문제다. 물론 사용자가 외부에 노출하지 않으면 문제가 안 되기는 하지만 암호를 걸고 외부에 노출하는 경우에도 그냥 통한다는 게 문제다.

임베디드 기기 얘기는 아니지만 무료 프록시 목록을 뿌려주는 사이트에서 이상하게 빠른 프록시가 있어서 봤더니 eportal.kita.net의 서버가 IP로 접속하면 IBM 서버 초기화면이 뜨고 프록시로 쓰면 그냥 써지는 걸 발견했다(근데 지금은 고쳐졌다).