INF: 방화벽을 통해 SQL Server와 통신하는 데 필요한 TCP 포트


본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 6.5, 7.0
  • Microsoft SQL Server 2000(모든 버전)

요약

본 문서에서는 방화벽을 통해 SQL Server와 통신하는 데 필요한 최소 TCP/IP 포트에 대해 설명합니다.

추가 정보

SQL Server는 소켓 네트워크 라이브러리를 사용하여 TCP/IP를 통해 통신하는 Winsock 응용 프로그램입니다. SQL Server는 특정 포트에서 들어오는 연결을 수신 대기합니다. SQL Server의 기본 포트는 1433입니다. 포트가 반드시 1433일 필요는 없지만 1433은 SQL Server에 대한 공식 IANA(Internet Assigned Number Authority) 소켓 번호입니다.

클라이언트 응용 프로그램은 클라이언트쪽 네트워크 라이브러리 Dbmssocn.dll을 사용하여 SQL Server와 통신(또는 SQL Server 2000의 경우 Dbnetlib.dll)하고 Microsoft Data Access Components(MDAC) 2.6을 사용하여 다른 클라이언트와 통신합니다.

클라이언트가 TCP/IP 연결을 설정하면 3방향 핸드셰이크가 수행됩니다. 클라이언트는 원본 포트를 열고 기본값이 1433인 대상 포트로 트래픽을 보냅니다. 사용 중인 클라이언트 원본 포트는 임의의 포트이지만 1024보다 큽니다. 기본적으로 응용 프로그램이 아웃바운드 호출에 대해 시스템의 소켓을 요청하면 값 1024와 5000 사이의 포트가 제공됩니다. 자세한 내용은 다음 Microsoft Developer Network(MSDN) 웹 사이트의 "Microsoft Windows 2000 TCP/IP Implementation Details"를 참조하십시오.
그러면 서버(이 경우 SQL Server)는 1433에서 클라이언트가 설정한 포트로 트래픽을 다시 보내 클라이언트와 통신합니다.

이 동작을 관찰할 수 있는 가장 좋은 방법은 Microsoft 네트워크 모니터나 네트워크 탐지 도구를 사용하여 클라이언트-서버 통신을 추적하는 것입니다. 방화벽을 구성하려면 *ANY*에서 1433으로, 1433에서 *ANY*로 트래픽을 허용해야 합니다. 여기서 *ANY*는 1024보다 큰 포트입니다.
    *ANY* -> 1433
    1433 -> *ANY*
Microsoft 네트워크 모니터를 사용하는 방법 외에 TCP/IP Netstat 유틸리티를 사용하여 이 동작을 설명할 수도 있습니다. MS-DOS 명령 창에서 netstat -an을 실행하면 SQL Server에 세 가지 연결이 설정된 것을 보여주는 다음 결과가 생성됩니다. 이 예에서는 157.54.178.42를 SQL Server의 IP 주소로 사용하고 157.54.178.31을 클라이언트의 IP 주소로 사용합니다. 클라이언트가 연 포트는 각각 1746, 1748 및 1750입니다.
    프로토콜   로컬 주소             외부 주소          상태 TCP    157.54.178.42:1433     0.0.0.0:0              LISTENING TCP    157.54.178.42:1433     157.54.178.31:1746     ESTABLISHED TCP    157.54.178.42:1433     157.54.178.31:1748     ESTABLISHED TCP    157.54.178.42:1433     157.54.178.31:1750     ESTABLISHED
방화벽 소프트웨어는 이런 동적 할당이 규칙 사용을 통해 발생하도록 허용해야 합니다. 이렇게 하면 1433 -> *ANY*가 설정되도록 구성할 수 있으며, 이것은 상태 패킷 검사를 통해 syn 다음에 syn/ack를 사용한 후에 응답 포트를 동적으로 엽니다.

SQL Server 클라이언트가 연결에 사용하는 원본 TCP 포트 번호에는 제한이 없습니다. 이로 인해 클라이언트가 사용하지 않는 새로운 동적 포트를 할당할 수 없습니다. 이것은 Winsock 응용 프로그램에 정의되는 TCP/IP 표준이며 SQL Server 클라이언트 통신의 제한은 아닙니다.

또한 SQL Server 2000의 명명된 인스턴스는 기본적으로 동적 대상 포트를 사용합니다. 이 포트는 방화벽을 구성하기 전에 고정 포트로 변경해야 합니다. SQL Server Network 유틸리티를 사용하여 대상 포트를 구성해야 합니다. SQL Server Network 유틸리티를 사용하는 방법에 대한 자세한 내용은 SQL Server Books Online을 참조하십시오.

해당 포트를 고정 포트로 변경하지 않으면 클라이언트 컴퓨터는 임의의 UDP 포트를 열어야 하며, 인스턴스 이름, 인스턴스가 클러스터된 경우 SQL 인스턴스의 버전, 인스턴스가 수신 대기 중인 TCP 포트 번호 및 인스턴스가 사용 중인 명명된 파이프를 보내는 데 서버 UDP 포트 1434가 사용됩니다. 그러나 방화벽에서 포트 번호를 최소화하려는 경우 기본 인스턴스와 명명된 인스턴스에 대해 정적 포트 번호를 선택해야 합니다. 특정 ServerName이나 ServerName 인스턴스 및 특정 포트 번호에 연결하도록 클라이언트 컴퓨터를 구성해야 합니다.

자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
    KR216415 INF: Microsoft Proxy Server를 통해 SQL Server에 액세스하는 방법
    Q148942 How to Capture Network Traffic with Network Monitor
    Q169292 The Basics of Reading TCP/IP Traces
    KR269882 HOWTO: ADO를 사용하여 방화벽 뒤에 있는 SQL Server에 연결하는 방법
 

Posted by 달룡이네집