SSH와 Squid를 프록시로 사용할 때의 차이점은 무엇입니까?

SSH와 Squid를 프록시로 사용할 때의 차이점은 무엇입니까?

나는 오랫동안(몇 년) 내 서버 중 하나에서 투명 프록시로 Squid를 사용해 왔습니다.

기본적으로 다음을 수행하여 클라이언트와 SSH + Squid 서버 사이에 SSH 터널을 만들었습니다.

ssh -T -N -x -C -L3128:127.0.0.1:3128 cedric@xxx

그런 다음 웹 브라우저(크롬)를 시작하고 포트 3128의 127.0.0.1에 프록시 서버를 제공했습니다.

이것은 오랫동안 잘 작동했지만 여러 사이트(포럼, Google을 로그인으로 사용하는 스택 교환 등)에서 로깅 문제가 발생하기 시작했습니다. 일부는 항상 잘 작동했습니다(예: GMail 및 모든 GMail 서비스). 로그인 문제의 원인이 무엇인지 모르겠습니다. 서버 OS 및 소프트웨어를 업그레이드할 때 일부 Squid 구성 문제로 인해 발생한 것으로 생각됩니다.

그래서 VPN 설정에 대해 생각해 보았지만 "가난한 사람의 VPN으로서의 SSH"라는 기사를 읽고 SSH를 사용하여 클라이언트에서 간단히 이 작업을 수행할 수 있다는 것을 깨달았습니다.

ssh -D 5222 cedric@xxx -N

그런 다음 포트 5222의 SOCKS 호스트로 127.0.0.1을 사용하도록 브라우저를 구성했습니다.

이제 모든 것이 잘 작동합니다. 모든 로그인 문제가 해결된 것 같고 더 이상 서버에 Squid가 필요하지 않습니다.

그러나 나는 그것이 어떻게 작동하는지 이해하지 못합니다. 다양한 "내 IP는 무엇입니까" 웹사이트에서 내 서버 주소(내가 원하는 주소)를 볼 수 있습니다. 또한 이러한 사이트는 SSH "터널"이 실행 중인지 감지하지 못하는 것 같습니다.

기본적으로 내 질문은 다음과 같습니다. 기술적으로 Squid를 투명 프록시로 사용하는 것과 "SSH -D ... -N"을 사용하고 VPN을 사용하는 것의 차이점은 무엇입니까?

내가 방문하는 사이트의 관점에 차이가 있나요?

또한 "SSH -D ... -N"을 사용할 때 내가 방문하는 웹사이트에서 내 실제 IP를 감지할 수 있는 방법이 있는지 궁금합니다. 이것이 기술적으로 가능합니까, 아니면 브라우저가 단순히 해당 정보를 얻지 못하는 것입니까?

답변1

1) Squid는 http 및 https 트래픽을 위한 특수 프록시입니다. 알려진 바와 같이 이 프로토콜은 캐싱, 필터링, 다시 쓰기 규칙, DNS 확인과 같은 일부 고급 기능을 제공할 수 있습니다. 모든 웹 브라우저는 http 프록시가 프로토콜 사양의 일부이기 때문에 이를 처리하는 방법을 알고 있습니다.

또한 오징어는 다음과 같은 역할도 할 수 있습니다.투명한이를 사용하기 위해 웹 브라우저를 구성할 필요는 없지만 방화벽은 트래픽을 프록시로 리디렉션합니다. 브라우저는 자신이 프록시를 사용하고 있다는 사실을 알지 못합니다. 이것이 바로 이 경우 투명이 의미하는 바입니다. 이런 의미에서 이전 설정은 투명하지 않습니다.

2) ssh -D는 프로토콜 독립적인 SOCKS 프록시 역할을 합니다. 터널의 로컬 측에 있는 sock 포트의 모든 트래픽을 가져와서 페이로드를 추출하고 수정 및 확인되지 않은 상태로 원격 측으로 보낸 다음 실제 대상으로 보냅니다. SOCKS 프록시가 작동하려면 클라이언트 프로그램이 이를 구체적으로 지원해야 합니다. 클라이언트에서 SOCKS 프록시로 전송된 모든 패킷은 SOCKS 프록시가 보낼 위치를 알 수 있도록 변경(캡슐화)되어야 하기 때문입니다. 모든 웹 브라우저가 이를 지원하는지 여부는 알 수 없지만 원칙적으로는 http뿐만 아니라 많은 프로토콜에서 작동합니다.

3) 이전 명령줄은 ssh -T -N -x -C -L3128:127.0.0.1:3128 ...로컬 포트 ​​3128의 모든 트래픽이 수정되지 않은 채 사전 정의된 대상 127.0.0.1:3128로 전송되는 단순 터널만 엽니다. 전송된 패킷을 수정할 필요가 없고 대상은 고정되어 있으므로 모든 클라이언트에서 이 기능을 사용할 수 있습니다.

프록시 외에도 SSH는 항상 암호화된 터널을 사용하므로 데이터가 터널을 통과할 때 엿보는 사람으로부터 데이터를 보호할 수 있습니다.

이전 설정에서는 방법 1과 3을 결합했지만 원칙적으로 상황에 따라 독립적으로 작동할 수 있습니다.

4) VPN을 사용하면 로컬 호스트에서 "프록시" 서버까지 암호화된 터널을 생성할 수도 있습니다. 이 경우 하나의 클라이언트 프로그램으로 제한되지 않지만 운영 체제는 모든 비로컬 네트워크 트래픽을 프록시로 보낸 다음 이를 대상으로 전달합니다. 관리하려면 루트/관리자 권한이 필요하므로 설정이 쉽지 않을 수 있습니다.

네 가지 경우 모두 데이터가 먼저 원격 호스트로 전송된 다음 원격 호스트가 대상 웹 서버에 대한 실제 연결을 생성하고 요청을 보냅니다. 응답은 먼저 원격 호스트로 반환되며, 원격 호스트는 일부 내부 데이터에서 실제 대상을 찾아 원래 클라이언트로 다시 보냅니다. 귀하의 IP를 보여주는 웹사이트는 귀하의 터널/프록시가 아닌 원격 호스트만 볼 수 있습니다.

편집하다:

웹 사이트가 귀하의 IP를 알고 싶어하는 경우 웹 페이지의 JavaScript 또는 플러그인을 통해 일부 코드를 실행할 수 있으며, 이는 일부 버그를 사용하여 브라우저에서 코드를 실행할 수 있습니다. 실제 IP 주소를 반드시 숨겨야 한다면 자바스크립트와 플러그인을 비활성화해야 합니다.

편집 2:

VPN 추가

관련 정보