능동형과 수동형 중 보안에 더 적합한 모드는 무엇입니까?

능동형과 수동형 중 보안에 더 적합한 모드는 무엇입니까?

저는 FTP 모드의 활성 및 수동 유형에 대해 조사 중이었고 현재 시나리오에 대한 몇 가지 질문으로 인해 다소 혼란스러워졌습니다.

대본: 나는 조직에서 사용할 클라이언트로 Android 장치를 가지고 있으며 조직은 서버의 보안이나 데이터 또는 기타 다른 것에 대해 매우 우려하고 있습니다. 좋은 예는 은행 서버입니다.

이제 그들은 1000-1500개의 안드로이드 장치를 가질 수 있습니다. 각 장치는 다운로드 항목 목록을 가져오고 각 장치는 목록을 하나씩 반복하여 해당 항목을 다운로드하고 각 항목에 대한 새 연결을 생성합니다.

이제 위에서 언급한 FTP 사용 사례에서 보안과 장치 수에 대한 우려를 살펴보겠습니다. 다음 질문이 있습니다.

활성 모드: 제가 이해한 바에 따르면, 클라이언트 안드로이드 장치가 명령과 데이터 연결을 모두 시작하기 때문에 서버에서 여러 포트를 여는 것에 대한 조직의 우려를 처리하는 활성 모드를 사용해야 한다고 생각합니다. 반면에 서버는 활성 모드의 단일 포트에서 1000-1500개의 장치를 보내기 위해 데이터 채널을 보내거나 열 수 있습니까? 실패하진 않겠지?

패시브 모드: 패시브 모드에 대해 생각한다면 보안이 무거운 조직에서 여러 포트를 여는 것에 대한 우려를 찾아야 합니다. 그리고 최악의 경우 1000-1500개의 안드로이드 기기에 대해 패시브 모드를 위해 얼마나 많은 포트를 열어야 할까요? 파일을 다운로드하는 시나리오는 위에 언급되어 있습니다.

답변1

FTP는 1개의 제어 TCP 연결과 하나 이상의 데이터 연결을 사용하고 있습니다.

제어 연결은 클라이언트와 서버 간에 수행할 작업과 수행 중인 작업에 대한 메시지를 전송하는 데 사용됩니다. 데이터 연결은 데이터를 전송하는 데 사용됩니다. 본질적으로: 클라이언트는 제어 연결에 대해 서버에 알려줍니다. 해당 파일을 주면 서버는 파일의 바이트를 데이터 연결로 보냅니다.

귀하의 질문은 보안과 관련되어 있으므로 여기에서 좀 더 자세히 살펴보겠습니다. TCP 연결은 클라이언트가 TCP SYN을 서버에 보내는 방식으로 "열립니다". 이러한 SYN은 일반적으로 방화벽 규칙의 대상입니다. 예: <ALL_IPS_IN_THE_INTERNET>이 포트 21에서 <MY_FTP_SERVER>에 연결하도록 허용합니다.

FTP 활성 모드는 클라이언트가 제어 연결을 열고 서버가 데이터 연결을 열어야 하는 IP 및 PORT를 서버에 알려주는 경우입니다.

FTP 패시브 모드는 클라이언트가 제어 연결을 열고 서버는 클라이언트가 데이터 연결을 열어야 하는 IP 및 PORT를 클라이언트에게 알려줍니다.

FTP 활성 모드는 클라이언트가 여러 클라이언트 간에 하나의 단일 공용 IP 주소를 공유하는 NAT 라우터 뒤에 있는 경우 문제가 됩니다. 클라이언트는 자신의 개인 IP 주소만 알고 있으며, 라우터의 공용 IP를 알아내서 FTP 서버로 보낼 수 있다고 하더라도 서버가 해당 IP에 연결을 시도하면 많은 클라이언트와 함께 요청이 라우터에 도착하게 됩니다. 뒤에 있으며 어떤 클라이언트에게 SYN을 전달해야 하는지 알 수 없습니다.

이 문제에 대한 해결책은 심층 패킷 검사(Deep Packet Inspection)입니다. 라우터는 제어 연결이 포트 21로 가는 것을 인식하여 연결을 조사하고 클라이언트가 서버에 데이터 연결을 열어야 하는 포트를 알려면 라우터는 해당 연결에 대한 임시 포트 전달을 추가합니다. FTP 서버의 패키지용 포트입니다. 제어 연결이 닫히면 라우터는 포트 전달을 비활성화합니다.

보안에 신경 쓰지 않는 한 그것은 훌륭하고 좋습니다. 즉, 그것은 나쁘다는 의미입니다. 민감한 데이터를 인증하거나 전송할 때는 항상 암호화를 사용하십시오.

암호화하면 라우터는 더 이상 제어 연결에 정점을 찍을 수 없으므로 활성 모드에서 FTP 클라이언트에 대한 동적 포트 전달을 생성할 수 없습니다.

이 문제는 FTP 수동 모드로 해결됩니다. 두 연결이 모두 클라이언트에 의해 열리기 때문입니다.

그러나 이는 클라이언트가 아닌 서버 방화벽 관리자에게 또 다른 문제를 야기합니다. 클라이언트가 수동 모드에서 연결하는 포트는 다소 무작위이므로 결과 방화벽 규칙은 다음과 같습니다. <ALL_IPS_IN_THE_INTERNET>이 포트 21 및 포트 1024-65535에서 <MY_FTP_SERVER>에 연결하도록 허용합니다. 적절한 FTP 서버 데몬이 있으면 데이터 연결에 사용되는 포트 범위를 구성하여 방화벽을 좀 더 좋게 만들 수 있습니다. <ALL_IPS_IN_THE_INTERNET>이 포트 21과 포트 20000~21500에서 <MY_FTP_SERVER>에 연결하도록 허용합니다. 1500개의 동시 데이터 연결을 제공합니다.

그렇게 할 수는 있지만 나는 그렇게 하지 않는 것을 추천합니다. FTP에 대한 더 나은 대안이 있습니다: HTTP.

  • HTTP는 실제 단점이 없는 축복인 제어 및 데이터 연결을 사용하지 않습니다.
  • HTTP는 보안 장치/방화벽/웹 응용 프로그램 방화벽/...에서 잘 지원됩니다. - 이러한 제품은 클라이언트 SSL 연결을 중간에 배치하고 HTTPS에서 콘텐츠 필터링을 수행할 수도 있습니다.
  • 대부분의 HTTP 서버는 디렉토리 목록을 서버로 구성할 수 있습니다.
  • 모든 HTTP 서버는 다운로드를 지원하며 대부분은 재개됩니다.
  • HTTP 클라이언트 라이브러리는 이미 Android 및 iPhone 장치에서 사용할 수 있습니다.

그래서 다음과 같이 클라이언트를 구현하겠습니다.

  1. 다운로드할 수 있는 모든 파일을 나열하도록 구성된 URL의 디렉터리 목록을 가져옵니다.
  2. 파일 다운로드

HTTP는 업로드 및 실패한 업로드 재개도 지원합니다.

FTP는 사악하기 때문에 여기서 HTTP를 성공적으로 발표할 수 있었으면 좋겠습니다.

편집: vsftpd의 PASV 모드 동작에서 최대 연결을 표시하는 멋진 게시물에 대한 링크를 추가하고 있습니다.https://serverfault.com/questions/563582/connections-number-of-vsftp-in-passive-mode

관련 정보