프록시 IP를 이용한 포트 포워딩

프록시 IP를 이용한 포트 포워딩

내 공용 IP로 SSH를 통해 원격으로 내 컴퓨터에 액세스하려고 합니다.

이를 수행하는 일반적인 방법은 내 라우터에서 포트 전달을 허용한 다음 그렇게 하는 것입니다. ssh ubuntu@myPublicIp그러나 내 ISP는 CGNAT를 사용하므로 할당된 공용 IP로 포트 전달을 할 수 없습니다. 그래서 AWS 인스턴스에서tinyproxy를 사용하고 로컬 컴퓨터를 프록시 IP 주소에 연결했습니다.

즉, 로컬 컴퓨터를 통해 보내는 모든 요청은 프록시 IP를 통과합니다. 이제 내 공용 IP가 프록시 IP로 대체되었습니다. 내 질문은 다음과 같이 ssh를 사용하여 원격으로 컴퓨터에 연결할 수 있도록 프록시가 활성화된 로컬 Linux 컴퓨터에서 포트 전달을 설정하는 방법입니다 ssh ubuntu@myProxyIp.

답변1

NAT/방화벽 등 뒤에 있는 머신에 접근하려면 해당 머신이 공용 네트워크에 아웃바운드 연결을 만들고 공용 네트워크의 인스턴스에 SSH 액세스할 수 있는 것 외에는 아무것도 필요하지 않습니다.

NAT 뒤에 있는 머신의 설정은 역방향 포트 전달이 활성화된 상태에서 아웃바운드 SSH 연결을 만드는 것입니다.

ssh -R:60000:127.0.0.1:22 [email protected]

[email protected]액세스할 수 있는 공용 네트워크의 인스턴스 주소와 계정은 어디에 있습니까? 이 명령은 기본적으로 다음을 의미합니다. friendly.domain.tld사용자를 사용하여 joe원격 끝에서 로컬 TCP 포트 22를 인증하고 TCP 포트 60000으로 노출하는 SSH 연결을 설정합니다. SSH 서버 소프트웨어가 충분히 최신이고 구성이 허용하는 경우 다음을 수행할 수 있습니다. 또한 로컬 전달 포트를 의 인터넷 연결 IP 주소에 직접 매핑 friendly.domain.tld하지만 여기서는 그러한 구성이 허용되지 않는다고 가정합니다.

이제 우리 기계가 나가는 링크를 설정했으므로 어디에서나 연결하기 위해 해야 할 일은 friendly.domain.tldSSH 연결에서 해당 링크를 프록시로 사용하는 것뿐입니다. 이를 위해서는 두 개의 터미널 창을 열어야 합니다. 첫 번째 창은 friendly.domain.tld노출된 TCP 포트 60000을 로컬 시스템으로 포트 전달하기 위해 인스턴스와의 링크를 설정하는 데 사용됩니다.

ssh -L60000:127.0.0.1:60000 [email protected]

이는 루프백 인터페이스의 TCP 포트 60000을 friendly.domain.tldssh 명령을 실행 중인 인스턴스의 루프백 인터페이스에 매핑합니다.

이 시점부터 간단히 다음을 사용하여 NAT 뒤의 머신에 연결할 수 있습니다.

ssh -p60000 my_account@localhost

my_accountNAT 뒤에 있는 컴퓨터의 계정은 어디에 있습니까?

전체적으로 3개의 SSH 터널이 사용됩니다.

machine_behind_nat <=1=> friendly_instance <=2=> your_laptop
            <=================3==================>

이러한 설정을 하는 이유는 NAT 뒤에 있는 시스템과의 통신이 중단되더라도 손상되지 않도록 하기 위한 것입니다(우리는 루프백 인터페이스를 통해 바이트를 전송하는 것을 허용하는 것 이상으로 "Friend_instance"를 신뢰하지 않습니다. 우리는 터널 #1과 #2를 통해 이동하는 터널 #3에서 종단 간 암호화를 사용합니다.

나는 취재했다내 블로그에 있는 이 설정약간의 배경 지식과 기타 트릭을 원한다면 ssh를 사용하여 수행할 수 있습니다.

답변2

실제로 포트 전달에 필요한 사항에 따라 SSH를 사용하여 동적 역방향 포트 전달을 만들 수 있습니다.

포트 22만 프록시해야 하는 경우:

ssh -R 22:0.0.0.0:2222 user@remote_server

그런 다음 로컬 컴퓨터에서 다음을 수행하여 SSH를 실행할 수 있습니다.

ssh -p 2222 localuser@ProxyIP

동적으로 전달하려는 경우:

ssh -R 0.0.0.0:2222 user @remote_server

프록시 체인을 사용하면 로컬 네트워크의 모든 항목에 액세스할 수 있습니다. SOCKS 프록시에 대한 원격 IP와 포트를 아는 사람은 누구나 로컬 네트워크에 액세스할 수 있다는 점에 유의하세요. 방화벽에 액세스할 수 있는 사람을 제한하기 위해 방화벽을 구현할 수도 있습니다.

이에 대해 설명하는 좋은 기사는 다음과 같습니다.https://posts.specterops.io/offensive-security-guide-to-ssh-tunnels-and-proxies-b525cbd4d4c6

관련 정보