제한적인 방화벽을 통해 OpenVPN을 사용하는 방법은 무엇입니까?

제한적인 방화벽을 통해 OpenVPN을 사용하는 방법은 무엇입니까?

저는 현재 주로 지나치게 제한적인 방화벽을 통해 연결하기 위해 개인 VPS에 OpenVPN을 설정하려고 시도하고 있습니다. 아래에 언급된 모든 설정은 합리적인 방화벽 연결을 통해 사용될 때 작동합니다.

나는 시도했다:

  1. 표준 포트에서 실행되는 OpenVPN
  2. 포트 443에서 실행되는 OpenVPN(VPS의 명령줄에서 OpenVPN을 수동으로 시작하고 서버에서 연결이 거의 즉시 닫혔다고 보고하는 것을 확인했습니다. 이는 방화벽의 DPI 결과라고 가정합니다)
  3. OpenVPN에 액세스하고 DPI를 회피하기 위해 포트 443에서 실행되는 STunnel. 이는 가장 성공적인 방법이며 연결이 강제로 종료되기 전 ~10-20초 동안 VPN을 통한 연결 및 인터넷 액세스를 허용합니다.

제가 시도할 수 있는 다른 것이 있나요?

답변1

일정 시간이 지난 후 연결이 끊어지면 초당 바이트 수 제한 유형을 나타내는 경우가 있습니다. VPN 연결 속도를 늦추는 것이 효과가 있는지 확인해 보세요. 또한 UDP용으로 OpenVPN을 구성한 경우 TCP를 사용해 보세요(443 UDP는 차단될 수 있지만 443 TCP는 감지되지 않을 수 있습니다).

SSL을 사용하는 잘 알려진 사이트를 방문하여 인증서를 확인하세요. 그런 다음 집에서도 똑같이하십시오. 일치하지 않으면 귀하의 위치는 투명한 HTTPS SSL 프록시를 사용하고 있으며 실제로 HTTPS 트래픽을 볼 수 있습니다.

포트 443이 아닌 것이 그렇게 자세히 감시되지 않을 수도 있습니다. 22를 시도해 보세요.

어리석게 들릴 수도 있지만 포트 80을 통해 시도해보고 결과를 확인하십시오. 또한 트래픽이 HTTP 요청처럼 보이도록 사용자와 VPS 사이에 HTTP 터널을 설정해 볼 수도 있습니다.

기분이 이상하다면 시도해보십시오.요오드.

답변2

나는 stunnel 메소드가 왜 그렇게 행동하는지 알 것 같아요. stunnel 서버에 대해 "정적 경로"를 설정하기 때문입니다. 설명하겠습니다. openvpn 서버에 연결하면 라우팅 테이블이 변경되고 openvpn 패킷을 제외한 모든 패킷이 VPN을 통해 라우팅됩니다. 실제로 openvpn은 서버 IP 주소에 대한 경로를 추가합니다. 그러나 stunnel을 사용하여 openvpn 서버에 연결하면 openvpn을 루프백 인터페이스에 연결하고 VPN 외부에 서버로 연결되는 경로가 없으므로 stunnel 패킷은 서버로 이동하고 VPN으로 이동하고 VPN 패킷은 이동합니다. 깜짝 놀라게 :)

따라서 VPN(홈 라우터) 외부로 나가는 경로를 서버 IP에 추가해야 합니다.

그리고 메소드 포트 443의 문제에 대해서는 방화벽이 SPI 또는 DPI를 사용하고 https(ssl) 패킷에서 다른 openvpn 패킷을 쉽게 만들 수 있다고 말하고 싶습니다. 따라서 가장 좋은 방법은 stunnel을 사용하는 것입니다. 또는 방화벽이 SSL 패킷을 차단하는 경우 obfsproxy 또는 fteproxy를 사용하여 이를 우회하는 것이 좋습니다.

(그 게시물은 오래되었지만 몇 주 동안 같은 문제에 대한 답변을 찾고 있었기 때문에 이에 대해 배운 내용을 공유하고 싶었습니다.)

답변3

Reza Askari의 답변은 정확히 세 번째 질문에 대한 답변이었습니다. 이것은 내 Linux 컴퓨터와 Android 모두에서 발생했습니다.

컴퓨터에서 다음을 통해 OpenVPN에 연결하기 전에

sudo openvpn --config configFile.ovpn

OpenVPN 터널에서 stunnel 서버를 제거하는 규칙을 추가해야 합니다.

sudo /sbin/ip route add stunnel_ip via default_gateway_ip

그런 다음 OpenVPN 서버에 연결하세요. 완료되면 다음 방법으로 해당 규칙을 제거할 수 있습니다.

sudo /sbin/ip route del stunnel_ip

잊지 않도록 작업을 더 쉽게 하려면 규칙을 추가하고 OpenVPN을 실행하는 쉘 스크립트를 생성하십시오. OpenVPN이 종료되면 규칙이 삭제됩니다.

sudo /sbin/ip route add stunnel_ip via default_gateway_ip

sudo openvpn --config configFile.ovpn

sudo /sbin/ip route del stunnel_ip

Android에서는 "Arne Schwabe"의 "Android용 OpenVPN" 클라이언트와 "Balint Kovacs"의 "SSLDroid"를 사용하세요.

그런 다음 OpenVPN 클라이언트에서 stunnel을 통과하는 VPN 프로필에서 "SSLDroid"를 제외합니다.

나는 Reza의 답변이나 의견에 찬성표를 던지고 싶었지만 이 평판 점수 규칙으로 인해 방해를 받았습니다.

답변4

LawrenceC의 답변 외에도 느린 로리스 및 해당 네트워크에서 발생하는 기타 "낮고 느린" DDoS 공격에 대한 발신 DDoS 보호는 일정 시간이 지나면 세션을 강제 종료한다는 점을 추가하고 싶습니다.

앞에서 언급한 것처럼 트래픽 양 제한으로 인해 발생할 수도 있지만 이러한 제한이 있는 데에는 또 다른 이유가 있습니다. 장치당 대역폭을 제한하는 것은 오늘날(2021) 기술에서는 사소한 일이며 더 이상 세션 시간 제한을 사용하여 이를 시행하지 않습니다. 그러나 나가는 DDoS 보호는 본질적으로 산발적인 프로토콜을 사용하는 지속적인 데이터 스트림을 보내는 세션을 종료할 수도 있습니다. 특히 다음과 같은 경우에는 더욱 그렇습니다. 트래픽에는 합법적인 HTTPS 세션의 동작과 일치하기에는 너무 균일하거나 너무 단편화된 패킷이 포함되어 있습니다(많은 플러드 유형 DDoS 공격이 이와 같습니다).

상태 저장 방화벽은 최근 몇 년 동안 많은 발전을 이루었으며 방금 나열한 DDoS 보호뿐만 아니라 데이터 유출을 방지하는 맥락에서 이러한 정확한 동작을 방지하는 것이 의제였습니다.

오늘날 잘 구축된 방화벽에 대해 이 목표를 달성하려면 사용할 구성에 대한 조언 이상의 것이 필요합니다.

관련 정보