Barracuda WAF로 WebSocket(SignalR) 활성화

Barracuda WAF로 WebSocket(SignalR) 활성화

저는 현재 Barracuda 웹 응용 프로그램 방화벽(WAF)을 통해 트래픽이 전달되는 WebSocket을 통해 SignalR을 사용하는 웹 응용 프로그램의 문제를 해결하기 위해 직장에서 머리를 찢고 있습니다. 웹 소켓을 사용하여 엔드포인트 에 연결하려는 모든 시도는 signalr/connect400 잘못된 요청으로 실패합니다. 그런 다음 연결은 작동하지만 우리가 원하는 것이 아닌 WebServer 폴링으로 다시 되돌아갑니다.

요청은 Barracuda 웹 애플리케이션 방화벽으로 전송된 다음 로드 밸런싱된 IIS 웹 서버로 전송됩니다. 우리는 Windows Server 2012R2에서 IIS 8.5를 사용하고 있으며 응용 프로그램은 .Net 4.6.2 웹 응용 프로그램입니다.

동일한 설정(Barracuda WAF를 사용하지 않음)은 문제 없이 작동합니다.

지금까지 나는

이 기사에 따라 WAF에서 웹소켓을 활성화했습니다.https://campus.barracuda.com/product/webapplicationfirewall/doc/49054741/how-to-enable-websocket. 여전히 동일한 400 오류가 발생합니다.

내 IIS 서버에 해당 기능이 활성화되어 있는지 확인했습니다 WebSocket.

Web.Config에서 SignalR 디버깅/추적을 켰습니다.https://docs.microsoft.com/en-us/aspnet/signalr/overview/testing-and-debugging/enabling-signalr-tracing. 이로 인해 로그 파일이 생성되지만 오류가 없음을 나타냅니다.

무엇을 더 확인해야 할지 잘 모르겠습니다.

답변1

그래서 나는 내 문제를 발견했습니다. 실제로 Azure Load Balancer를 통해 WAF로 트래픽을 먼저 보내고 있다는 것을 알게 되었습니다. WAF 액세스 로그의 헤더를 로그아웃하면 헤더 Connection에 값이 없다는 것을 알 수 있습니다. 클라이언트가 Upgrade.

Azure Load Balancer를 사용하는 데 문제가 있는 것 같습니다. 그래서 대신 Azure Application Gateway를 사용하여 조사하겠습니다.

그러나 지금은 WAF가 Connection헤더를 추가하도록 하고, 이 헤더를 내 IIS 서버로 보내도록 헤더 다시 쓰기 규칙을 구성하여 이 작업을 수행할 수 있습니다.

WebSocket의 필수 헤더

Connection: Upgrade Upgrade: websockets

  1. Barracuda WAF 관리 사이트를 엽니다.
  2. 웹사이트로 이동 -> 웹사이트 번역
  3. HTTP 요청 재작성에서 새 재작성 규칙을 추가합니다…

    1. 규칙 이름을 지정합니다.
    2. 시퀀스 번호를 설정합니다.
    3. 작업으로 헤더 다시 쓰기를 선택합니다.
    4. 헤더 이름으로 Connection을 입력합니다.
    5. 모든 값을 대체할 이전 값으로 *를 사용합니다.
    6. Rewrite 값으로 업그레이드를 입력하면 이 값이 대신 전송됩니다.
    7. Header Upgrade eq websocket다시 쓰기 조건으로 사용합니다 . 이제 Upgrade헤더에 값이 포함된 경우에만 규칙이 적용됩니다 websocket.
    8. 추가를 클릭합니다.

이제 애플리케이션을 다시 로드하고 붐을 일으키면 webSockets 전송을 통해 /signalr/connect에 성공적으로 연결되었습니다!

자세한 내용은 내에서 확인할 수 있습니다.블로그 게시물

관련 정보