UFW는 HTTPS를 통한 특정 포트에 대한 액세스를 거부합니까?

UFW는 HTTPS를 통한 특정 포트에 대한 액세스를 거부합니까?

우리는 IP에서 개발 서버를 실행하고 포트 5000에서 API를 노출하며 nginx는 포트 80에서 수신 대기합니다. 그러나 포트 5000에 HTTPS 요청이 이루어지면 전체 백엔드가 충돌합니다. 따라서 액세스할 때 취약점을 발견했습니다.https://SERVER_IP:5000, HTTPS 요청을 처리할 수 없기 때문에 요청이 중단되고 전체 백엔드가 중지됩니다(따라서 다른 요청에 대해서도 API가 중단됨). 요청이 백엔드에 도달하지 않기를 바랍니다.

저는 UFW에 대해 다음과 같은 규칙을 설정했습니다.

To                         Action      From
--                         ------      ----
8000                       ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere
80                         ALLOW       Anywhere
5000                       ALLOW       Anywhere
443/tcp                    DENY        Anywhere
8000 (v6)                  ALLOW       Anywhere (v6)
22/tcp (v6)                ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
5000 (v6)                  ALLOW       Anywhere (v6)
443/tcp (v6)               DENY        Anywhere (v6)

그러나 사용자가 다음으로 이동하면https://SERVER_IP:5000, 서버가 여전히 충돌합니다. 이는 https 트래픽이 반드시 포트 443이 아닌 포트 5000에서 발생하고 해당 포트가 공개(HTTP 트래픽에만 필요함)이기 때문이라고 생각합니다. 그렇다면 5000의 HTTPS 트래픽이 UFW를 통과하지 못하도록 비활성화할 수 있는 방법이 있습니까? 아니면 nginx로 무언가를 구성해야 합니까?

답변1

아니요, UFW는 그렇게 할 수 없습니다.

TCP 연결의 트래픽이 유효한 HTTP 요청인지 확인하려면 연결을 수락하고 클라이언트가 보내려고 하는 데이터 유형을 살펴봐야 합니다. 즉, 내용 기반 필터링입니다.

UFW는 데이터가 포함되지 않은 TCP 연결의 초기 SYN 패킷에 있는 데이터를 기반으로 결정을 내려야 합니다. 그 시점에서는 고객의 요구 사항이 무엇인지 알 수 없습니다. API에 맞지 않는 URI가 포함된 모든 올바른 형식의 HTTP 요청을 필터링하려면 API 앞에 일종의 HTTP 역방향 프록시가 필요한 것 같습니다.

API의 입력 유효성 검사를 개선할 것을 제안해도 될까요?적어도더 이상 프로덕션에 넣기 전에 임의의 쓰레기를 보내는 데 충돌이 발생하지 않습니까? 그렇지 않으면 귀하의 API가 사소한 서비스 거부 공격( nc your.API.server.example 5000 < /dev/urandomnc your.API.server.example 5000 < War_and_Peace.txt: War_and_Peace.txt가 API에서 제공하는 입력 버퍼보다 ​​절대적으로 큰 것) 에 취약할 가능성이 높습니다 .

관련 정보