포트에 전달된 모든 트래픽에 rot13(또는 기타 암호화)을 적용합니다.

포트에 전달된 모든 트래픽에 rot13(또는 기타 암호화)을 적용합니다.

어리석게 들리겠지만, 내 말을 들어보세요(아마도 여전히 그렇습니다).

저는 CS 학생입니다. 제가 공부한 대학은 보안이라는 이름으로 모든 침입적인 SSH 및 VPN 트래픽을 차단한다는 영리한 아이디어를 가지고 있었습니다. 그런 다음 모든 사람은 오래되고 악용 가능한 OpenVPN 서버를 통해 방화벽 뒤에 들어가도록 요청받습니다. 이것이 내 삶을 어렵게 만듭니다. 집에서 랩 서버에 액세스하고 싶습니다. 그러나 오래된 OpenVPN 서버를 통해서는 그렇지 않습니다.

---------------       ---------------            -----------------
| My home PC  | --->  | Firewall    |   -X--->   | Lab server    |
---------------       ---------------            -----------------

모든 것이 나에게는 어리석은 것처럼 들립니다. (누군가가 기본 비밀번호를 사용하는 것이 더 큰 문제라고 생각합니다. 어쨌든). 나는 방화벽이 얼마나 강한지 알아보기로 결정했습니다. 그러다가 내가 찾았어암호화내 교통수단은 통과한다로트 13방화벽을 속이기에 충분합니다.

---------------                   ---------------                         -----------------
| My home PC  |->| rot13 | --->  | Firewall     |   ----->  | rot13 | ->  | Lab server    |
---------------                   ---------------                         -----------------

내 개념 증명은 다음과 같습니다.

# Client side:
nc -l -p 2222 | rot13 | nc my_server_ip 2222
# server side:
nc -l -p 2222 -s my_server_ip | rot13 | nc localhost 22

. 에 연결할 때 localhost 2222이는 단방향 링크이므로 핸드셰이크가 완료되지 않습니다. (이를 핸드셰이크 없이는 도착하지 않는 핸드셰이크 패킷과 비교해 보세요 rot13.)

문제는 이것이 암호화된 단방향 링크라는 것입니다. 어떻게 양방향으로 만들 수 있나요? 지금까지 파이프를 통해 iptables 간에 데이터 전송을 시도했습니다 rot13. 하지만 나는 못해.

노트

  1. obfsproxy나는 쉬울 것이기 때문에 이와 같이 프록시를 망칠 것을 고려하지 않을 것입니다 . 무거운 무기를 사용하고 싶지 않습니다.
  2. ROT13은 방화벽을 우회하는 데에만 사용됩니다. 약하다는 걸 알아요.
  3. "글쎄... 내가 이걸 할 수 있을까? "라는 질문입니다. “이걸 꼭 해야 하나?”가 아닙니다.

답변1

socat해야 할 것.

이것socat이 도구는 모든 콘텐츠를 어디서나(양방향으로) 스트리밍하려는 모든 요구 사항을 충족합니다. 한 쌍의 매개변수만 사용하며, 각 매개변수는 함께 연결될 하나의 항목을 지정합니다. 이 경우 가장 흥미로운 옵션은 TCP:host:portTCP-LISTEN:port또는 FD:입니다 OPEN:. 각 인수는 분리된 인수 쌍으로 구성될 수도 있으며 !!, 여기서 첫 번째 요소를 읽고 다른 요소를 씁니다.

따라서 - 기반 예제의 최소 확장은 nc다음과 같습니다.

서비스 터미널:

mkfifo in in_rot out out_rot
rot13 < in > in_rot &
rot13 < out > out_rot &
socat TCP:localhost:22 OPEN:in_rot!!OPEN:out &
socat TCP-LISTEN:2222 OPEN:out_rot!!OPEN:in &

명명된 FIFO를 제거하고 FD:Bash에 설정된 파이프를 참조하는 데 사용하면 이를 단순화할 수 있습니다.

작성된 대로 이는 단일 사용에만 적합합니다( socat연결이 닫히면 종료됩니다). 무한 루프에서 이를 실행하거나 시스템 .socket장치 또는 xinetd사용자의 말을 듣고 연결 시 이 스크립트를 생성하는 것과 유사한 것을 설정할 수 있습니다.

클라이언트는 매우 유사한 방식으로 수행될 수 있습니다(일부 로컬 포트에서 수신 대기하고 2222에서 서버에 연결). 또는 TCP-LISTEN 부분을 생략하고 대신 전체 작업을 from ProxyCommand( from)으로 실행할 수 있습니다 ssh. .ssh/config터널이 없는 것처럼 ssh를 사용하고 있습니다) .

단순한 SSH 연결 이상의 터널을 만들고 싶다면, 실제 VPN으로 쉽게 전환할 수 있도록 전체 터널 인터페이스를 제공하는 옵션 socat도 있다는 점에 유의하세요.TUN:

관련 정보