세 대의 기계가 있다고 가정 해 봅시다.
A - SSH를 통해 연결하는 서버
B - SSH를 통해 연결하는 클라이언트
C - B 서브넷의 다른 클라이언트
이제 클라이언트 B에서 이 명령을 실행하여 포트 1235에 대한 동적 포트 전달을 설정했습니다.
ssh -D 1235 a@A
여기서 a는 서버 A의 사용자 이름입니다.
이제 이 포트 1235는 B에서 localhost에 바인딩되어 있으므로 이 포트 1235에만 연결할 수 있습니다. 명령을 다음과 같이 수정하면
ssh -D C:1235 a@A
그러면 C만 B의 1235 포트에 연결할 수 있지만 B 자체는 연결할 수 없습니다. 세 번째 옵션을 사용할 수 있습니다.
ssh -D 0.0.0.0:1235 a@A
B와 C는 모두 B의 포트 1235에 연결할 수 있지만 B와 C와 동일한 서브넷에 있는 다른 모든 컴퓨터도 연결할 수 있습니다. 내가 정말로 원하는 것은 동적 포트를 바인딩하여 B와 C만 연결할 수 있도록 하고 다른 컴퓨터는 연결할 수 없도록 하는 방법입니다. 이 목표를 어떻게 달성할 수 있나요?
답변1
SSH 옵션을 사용한 -g
다음 해당 포트에 대한 C 연결만 허용하도록 방화벽 규칙을 구성합니다.
-g Allows remote hosts to connect to local forwarded ports.
명령은 다음과 같습니다:
ssh -g -D 1235 a@A
답변2
내가 아는 한 SSH 자체는 어떤 상황에서도 소스 IP 주소를 확인하지 않습니다(어쨌든 스푸핑될 수 있음). 따라서 B에서 패킷 필터(예: iptables)를 사용하고 대상 포트 1235로 들어오는 TCP 패킷이 소스 주소로 B를 갖도록 설정해야 할 수도 있습니다.