18.5.11.1 MySQL Cluster의 보안 및 네트워크 문제
이 섹션에서는 MySQL Cluster에 대한 기본적인 네트워크 보안 문제에 대해 설명합니다. MySQL Cluster의 "출하시 상태"는 안전하지 않다는 것을 기억하는 것은 매우 중요합니다. 사용자와 네트워크 관리자는 네트워크 클러스터가 위험에 노출 될 가능성이 없도록 적절한 단계를 수행해야합니다.
클러스터의 통신 프로토콜은 기본적으로 보안이 아닌 클러스터 노드 간의 통신은 암호화와 같은 보안 대책이 사용되지 않습니다. 네트워크 속도 및 대기 시간에 따라 클러스터의 효율성에 직접적인 영향을 받기 때문에, 노드 간 네트워크 통신에 SSL 및 기타 암호화는 사실상 통신 속도가 저하되므로 이러한 방식을 채택 할 추천하지 않습니다.
MySQL Cluster에 대한 API 노드의 액세스를 제어 할 때 인증이 사용되지 않는 것도 사실입니다. 암호화와 마찬가지로 자격 요건을 부과 오버 헤드로 인해 클러스터의 성능에 영향을 줄 수 있습니다.
또한 클러스터에 액세스 할 때 다음 중 대한 소스 IP 주소의 체크도 실행되지 않습니다.
config.ini
파일의 빈[mysqld]
또는[api]
섹션에 의해 창조 된 「슬롯」를 사용하는 SQL 노드 또는 API 노드즉,
config.ini
파일에 빈[mysqld]
또는[api]
섹션이있는 경우, 관리 서버의 호스트 이름 (또는 IP 주소)와 포트를 인식하고있는 어떤 API 노드 (SQL 노드 포함) 그렇지만, 제약없이 클러스터에 연결하여 데이터에 액세스 할 수 있습니다. (이것과 관련된 문제에 대한 자세한 내용은 섹션 18.5.11.2 "MySQL Cluster와 MySQL 권한" 을 참조하십시오.)참고config.ini
파일의 모든[mysqld]
및[api]
섹션에HostName
매개 변수를 지정하면 클러스터에 SQL 노드 및 API 노드의 액세스에 대해 어느 정도 제어 할 수 있습니다. 그러나 이것은 지금까지 사용되지 않은 호스트에서 클러스터 API 노드를 연결하는 경우 해당 호스트 이름을 포함[api]
섹션을config.ini
파일에 추가해야하는 것을 의미합니다.자세한 내용은
HostName
매개 변수에 대한 이 장의 다른 곳 에서 설명하고 있습니다. API 노드에서HostName
을 사용하는 구성 예, 섹션 18.3.1 "MySQL Cluster의 간이 테스트 설치" 를 참조하십시오.모든 ndb_mgm 클라이언트
즉, 관리 서버의 호스트 이름 (또는 IP 주소)와 포트 (표준 포트가 아닌 경우)가 지정된 모든 클러스터 관리 클라이언트가 클러스터에 연결하여 모든 관리 클라이언트 명령을 실행할 수 있습니다. 여기에는
ALL STOP
이나SHUTDOWN
등의 명령이 포함됩니다.
이러한 이유로 네트워크 수준에서 클러스터를 보호해야합니다. 가장 안전한 클러스터의 네트워크 구성은 클러스터 노드 사이의 연결을 다른 네트워크 통신에서 분리하는 구성입니다. 이것은 다음 방법 중 하나를 통해 얻을 수 있습니다.
어떤 공용 네트워크에서 물리적으로 분리 된 네트워크에서 클러스터 노드를 유지합니다. 이 옵션은 신뢰성이 높습니다 만, 구현 비용도 가장 높습니다.
그렇다면 이처럼 물리적으로 분리 된 네트워크를 사용하여 MySQL Cluster 설정을 보여줍니다.
이 설정은 클러스터 관리 서버 및 데이터 노드 중 하나의 비공개 (실선으로 된 사각형)와 SQL 노드가 존재하는 하나의 공용 (점선 사각형)의 2 개의 네트워크가 있습니다. (기가비트 스위치는 최고의 성능을 제공하기 때문에이를 사용하여 연결된 관리 노드와 데이터 노드를 보여줍니다.) 어떤 네트워크도 하드웨어 방화벽 (네트워크 기반 방화벽이라는 것도 있습니다 )에 의해 외부로부터 보호되고 있습니다.
SQL 노드에서 패킷 전송이 허용되지 않으면 패킷은 SQL 노드를 통과하지 않고 네트워크 외부에서 클러스터 관리 노드 또는 데이터 노드에 도달 할 수없는 (어떤 클러스터 내부 통신도 외부에 도달 할 수없는) 때문에 이 네트워크가 가장 안전합니다. 이것은 당연히 모든 SQL 노드를 해킹 시도에 대해 보안해야한다는 것을 의미합니다.
중요잠재적 인 보안 취약점에 대해서는 SQL 노드와 다른 MySQL 서버 사이에 차이는 없습니다. MySQL 서버를 보호하는 데 사용할 수있는 기술 내용은 섹션 6.1.3 "공격자에 대한 MySQL의 안전한 상태 유지" 를 참조하십시오.
하나 이상의 소프트웨어 방화벽 (호스트 기반 방화벽이라는 것도 있습니다)를 사용하여 액세스 할 필요가없는 네트워크 부분에서 클러스터까지 통과하는 패킷을 제어 할 수 있습니다. 이 유형의 설정은 그게 없으면 로컬 네트워크 외부에서 접근 할 수있게 할 수있는 클러스터의 모든 호스트에 소프트웨어 방화벽을 설치해야합니다.
호스트 기반 옵션은 구현 비용이 가장 낮은이지만 보호를 제공하는 소프트웨어에 전적으로 의존하고 있기 때문에 안전한 상태를 유지하는 것이 가장 어렵습니다.
다음은 MySQL Cluster에 대한 이런 종류의 네트워크 설정의 예를 보여줍니다.
이 유형의 네트워크 설정을 사용하는 것은 MySQL Cluster 호스트의 두 영역이 존재하는 것을 의미합니다. 각 클러스터 호스트는 클러스터의 다른 모든 컴퓨터와 통신 할 수 있지만, SQL 노드를 호스팅하는 컴퓨터 (점선 사각형) 만 외부와의 연결을 허용 할 데이터 노드 및 관리 노드를 포함하는 영역의 머신 (실선으로 된 사각형)는 클러스터에 포함되지 않는 모든 시스템에서 분리해야합니다. 클러스터를 사용하는 응용 프로그램과 해당 응용 프로그램의 사용자는 관리 노드와 데이터 노드 호스트에 직접 액세스를 허용하지 마십시오.
이것을 실현하려면 각 클러스터 호스트 컴퓨터에서 실행되는 노드의 유형에 따라 다음 표에 나열된 하나 이상의 유형에 트래픽을 제한하는 소프트웨어 방화벽을 설정해야합니다.
액세스되는 노드의 유형 허용 트래픽 SQL 노드 또는 API 노드 그것은 관리 노드 또는 데이터 노드의 IP 주소 (TCP 또는 UDP 포트를 사용하여) 발신되고 있습니다.
그것은 클러스터가 존재하고 응용 프로그램에서 사용되는 포트에있는 네트워크 내에서 발생하고 있습니다.
데이터 노드 또는 관리 노드 그것은 관리 노드 또는 데이터 노드의 IP 주소 (TCP 또는 UDP 포트를 사용하여) 발신되고 있습니다.
그것은 SQL 노드 또는 API 노드의 IP 주소에서 발생하고 있습니다.
특정 노드 유형의 표에 나타난 다른 트래픽은 거부되어야합니다.
방화벽 구성 사양은 방화벽 응용 프로그램마다 다르므로이 문서의 범위를 벗어납니다. iptables는 매우 일반적이고, 안정적인 방화벽 응용 프로그램이기 때문에 많은 경우에 구성을보다 쉽게하기 위해 프런트 엔드로 APF 함께 사용됩니다. 이 유형 또는 다음 항목에서 설명하는 "혼합"유형의 MySQL Cluster 네트워크 설정을 구현하도록 선택한 경우 채용하는 소프트웨어 방화벽에 대한 문서를 볼 수 있습니다 (해야한다).
하드웨어와 소프트웨어를 모두 사용하여 (즉, 네트워크 기반 및 호스트 기반의 두 방화벽을 사용하여) 클러스터를 보호하는 것으로, 처음 두 가지 방법을 조합 한 것을 채용 할 수 합니다. 이것은 보안 수준과 비용 측면에서 처음 두 제도의 중간에 위치하는 것입니다. 이 유형의 네트워크 설정은 클러스터가 하드웨어 방화벽 뒤에 배치되지만 들어오는 패킷은 SQL 노드에 도달하기 위해 모든 클러스터 호스트에 연결된 라우터를 통과하도록 허용됩니다.
다음 하드웨어와 소프트웨어 모두 방화벽을 함께 사용함으로써 실현할 수 MySQL Cluster 클러스터의 네트워크 배치의 예를 보여줍니다.
이 경우 SQL 노드 및 API 노드로 트래픽을 제외한 모든 외부 트래픽을 거부하고 응용 프로그램에서 필요로하는 포트에서만 해당 노드로 트래픽을 허용하도록 하드웨어 방화벽 규칙을 설정할 수 합니다.
어떤 네트워크 구성을 사용하는 경우에도 클러스터의 보안을 유지한다는 관점에서 목표는 동일하다는 것을 잊지 마십시오. 즉, 클러스터 노드간에 가장 효율적인 통신을 확보하면서 불필요한 트래픽이 클러스터에 도달하는 것을 방해합니다.
MySQL Cluster는 노드 간 통신을 위해 다수의 포트를 열어야하기 때문에 권장되는 옵션은 분리 된 네트워크를 사용하는 것입니다. 이것은 불필요한 트래픽이 클러스터에 도달하는 것을 막기위한 가장 간단한 방법입니다.
원격 (즉, 로컬 네트워크 외부에서) MySQL Cluster를 관리하는 경우이를 권장되는 방법은 ssh 나 다른 보안 로그인 쉘을 사용하여 SQL 노드 호스트에 액세스 할 수 있습니다. 그러면이 호스트에서 관리 클라이언트를 실행하여 클러스터 자체의 로컬 네트워크 내에서 관리 서버에 안전하게 액세스 할 수 있습니다.
ndb_mgm를 사용하여 클러스터가 실행되는 로컬 네트워크 외부에서 직접 클러스터를 관리하는 것은 이론적으로 가능하지만 권장되지 않습니다. 관리 클라이언트와 관리 서버 간의 인증 및 암호화되지 않기 때문에,이 클러스터를 관리하는 매우 안전하지 않은 방법이며, 조만간 거의 확실하게 위험에 노출됩니다.