Motive

공공기관이나 학교 등의 경우 SSH 포트인 22번을 보안상의 이유로 게이트웨이 단에서부터 막아두는 경우가 있음. 기관에 정식으로 특정 IP 주소의 포트 오픈을 요청하거나 VPN 등을 사용하는 방법이 있으나, 그것이 귀찮은 경우 어떤 사정으로 항시 오픈되어 있는 다른 포트를 SSH 접속에 쓸 수 있다. (어느어느 포트가 열려 있을까? https://ko.wikipedia.org/wiki/TCP/UDP%EC%9D%98_%ED%8F%AC%ED%8A%B8_%EB%AA%A9%EB%A1%9D) 대표적으로 80번 포트, 443번 포트 등은 HTTP 프로토콜(사람들이 학교 홈페이지는 들어올 수 있어야 하니까?)에 사용되므로 99.999% 항시 오픈되어 있다.

물론 보안상 권장할만한 방법은 아니지만 유용한데, 접속하고자 하는 네트워크 내의 모든 터미널을 다 바꾸기는 찝찝하기도 하고 귀찮기도 해서 백도어용으로 사용할 노드 한 대만 포트를 열어두고 나머지는 그 노드를 경유하여 접속하는 것이 나의 일반적인 방식.

그마저도 귀찮을 때 백도어 노드에 iptables를 통해 포트포워딩을 해주어 특정 포트를 사용하여 한 번에 원하는 서버 접속을 할 수 있게 하기 위한 방법을 소개.

출처: http://webterror.net/?p=1622

위의 다이어그램에서 볼 수 있듯, 포워딩을 해줄 노드의 역할은 그냥 패킷을 스쳐지나가듯 흘려보내주기만 하면 되므로 그림상에서 PREROUTING, FORWARD, POSTROUTING 쪽의 규칙만 어떻게 잘 해주면 어찌어찌 돌아갈 것 같다고 대충 눈치를 깔 수 있다. 그렇다면 문제는 그걸 구체적으로 어떻게 하느냐…?

환경

작업 노드: 라즈베리 파이3

OS: Raspbian 8

Procedure

참고 링크: https://wikileaks.org/ciav7p1/cms/page_16384684.html

i) Enable IP Forwarding

혹은 config 파일을 직접 수정해도 된다.

나의 경우에는 config 파일을 열어보았더니 이미 설정이 1로 되어 있어서 뭘 굳이 바꿀 필요는 없었음.

ii) Forward traffic on port [port] to IP [server] on port 22

[port] 자리에 포워딩할 포트, [server] 자리에 라즈베리를 경유해 접속할 서버의 주소. 예를 들어 라즈베리의 1111번 포트를 1.1.1.1의 주소를 가진 서버로 포워딩하고 싶다면,

iii) Nothing for FORWARD

필터링 따윈 없이 모든 패킷이 이랏샤이마세이므로 FORWARD에 해당하는 규칙은 아무것도 정하지 않을 것이다. 물론 FORWARD chain의 기본정책은 ACCEPT여야 할 것이다. ACCEPT로 안되어 있다면,

iv) Ask iptables to Masquerade

클라이언트의 주소가 아니라 라즈베리의 주소로 패킷을 다시 써야 한다. 마스커레이딩은 나도 완벽하게 이해한 것은 아니므로 나중에 다뤄봄.

v) Test

아무 클라이언트에서 라즈베리파이의 1111 포트로 SSH 접속을 시도해본다. 정상적으로 세팅이 되었다면 SSH 접속이 라즈베리가 아닌, 포워딩된 서버로 될 것임.

vi) Save iptables rules

iptables에 기록된 규칙들은 시스템을 리부트하면 다 사라져버린다. 매번 리부팅 할때마다 다시 위의 설정을 해주면 되지만, 귀찮은 사람이라면 자동으로 해주면 되는데 이건 위의 참고 링크에서 방법을 확인할 수 있음.

2019. 11. 8. 추가)

위의 링크는 좀 구닥다리 방식인 듯 하고 아래 링크가 더 나은 것 같음.

https://www.thomas-krenn.com/en/wiki/Saving_Iptables_Firewall_Rules_Permanently


iptables로 이것저것 세팅하다보니 유무선공유기라는게 사실 별게 아니라 이런 식으로 동작하는건가 싶다.

카테고리: Linux

0개의 댓글

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다