내 공용 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.tld
SSH 연결에서 해당 링크를 프록시로 사용하는 것뿐입니다. 이를 위해서는 두 개의 터미널 창을 열어야 합니다. 첫 번째 창은 friendly.domain.tld
노출된 TCP 포트 60000을 로컬 시스템으로 포트 전달하기 위해 인스턴스와의 링크를 설정하는 데 사용됩니다.
ssh -L60000:127.0.0.1:60000 [email protected]
이는 루프백 인터페이스의 TCP 포트 60000을 friendly.domain.tld
ssh 명령을 실행 중인 인스턴스의 루프백 인터페이스에 매핑합니다.
이 시점부터 간단히 다음을 사용하여 NAT 뒤의 머신에 연결할 수 있습니다.
ssh -p60000 my_account@localhost
my_account
NAT 뒤에 있는 컴퓨터의 계정은 어디에 있습니까?
전체적으로 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