6.12. RHEL 시스템 역할을 사용하여 IPsec VPN 연결 구성


VPN(Virtual Private Network)을 사용하여 인터넷과 같이 신뢰할 수 없는 네트워크를 통해 안전하고 암호화된 터널을 설정할 수 있습니다. 이러한 터널은 전송 중 데이터의 기밀성과 무결성을 보장합니다. 일반적인 사용 사례에는 지사 사무실을 본사에 연결하는 것이 포함됩니다.

vpn RHEL 시스템 역할을 사용하면 Libreswan IPsec VPN 구성 생성 프로세스를 자동화할 수 있습니다.

참고

vpn RHEL 시스템 역할은 PSK(사전 공유 키) 또는 인증서를 사용하여 피어를 서로 인증하는 VPN 구성만 생성할 수 있습니다.

호스트 간 VPN은 두 장치 간에 직접, 보안 및 암호화된 연결을 설정하여 애플리케이션과 인터넷과 같은 비보안 네트워크를 통해 안전하게 통신할 수 있습니다.

인증을 위해 PSK(사전 공유 키)는 두 피어에만 알려진 공유 시크릿을 사용하는 간단한 방법입니다. 이 접근 방식은 쉽게 배포가 가능한 우선 순위인 기본 설정에 적합합니다. 그러나 키를 엄격하게 기밀로 유지해야 합니다. 키에 대한 액세스 권한이 있는 공격자는 연결을 손상시킬 수 있습니다.

vpn RHEL 시스템 역할을 사용하면 PSK 인증을 사용하여 IPsec 호스트 간 연결 생성 프로세스를 자동화할 수 있습니다. 기본적으로 이 역할은 터널 기반 VPN을 생성합니다.

사전 요구 사항

프로세스

  1. 다음 콘텐츠를 사용하여 플레이북 파일(예: ~/playbook.yml )을 생성합니다.

    ---
    - name: Configuring VPN
      hosts: managed-node-01.example.com, managed-node-02.example.com
      tasks:
        - name: IPsec VPN with PSK authentication
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.vpn
          vars:
            vpn_connections:
              - hosts:
                  managed-node-01.example.com:
                  managed-node-02.example.com:
                auth_method: psk
                auto: start
            vpn_manage_firewall: true
            vpn_manage_selinux: true
    Copy to Clipboard Toggle word wrap

    예제 플레이북에 지정된 설정은 다음과 같습니다.

    호스트: &lt ;list>

    VPN을 구성하려는 피어를 사용하여 YAML 사전을 정의합니다. 항목이 Ansible 관리형 노드가 아닌 경우 hostname 매개변수에서 FQDN(정규화된 도메인 이름) 또는 IP 주소를 지정해야 합니다. 예를 들면 다음과 같습니다.

              ...
              - hosts:
                  ...
                  external-host.example.com:
                    hostname: 192.0.2.1
    Copy to Clipboard Toggle word wrap

    역할은 각 관리 노드에서 VPN 연결을 구성합니다. 연결 이름은 < peer_A> -to- <peer_B >입니다(예: managed-node-01.example.com-to-managed-node-02.example.com ). 역할은 외부(관리되지 않음) 노드에 Libreswan을 구성할 수 없습니다. 이러한 피어에 구성을 수동으로 생성해야 합니다.

    auth_method: psk
    피어 간 PSK 인증을 활성화합니다. 역할은 제어 노드에서 openssl 을 사용하여 PSK를 생성합니다.
    auto: &lt ;startup_method>
    연결의 시작 메서드를 지정합니다. 유효한 값은 add,ondemand,startignore 입니다. 자세한 내용은 Libreswan이 설치된 시스템의 ipsec.conf(5) 도움말 페이지를 참조하십시오. 이 변수의 기본값은 null이며 자동 시작 작업이 없음을 의미합니다.
    vpn_manage_firewall: true
    역할이 관리 노드의 firewalld 서비스에서 필요한 포트를 열도록 정의합니다.
    vpn_manage_selinux: true
    역할이 IPsec 포트에 필요한 SELinux 포트 유형을 설정하도록 정의합니다.

    플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의 /usr/share/ansible/roles/rhel-system-roles.vpn/README.md 파일을 참조하십시오.

  2. 플레이북 구문을 확인합니다.

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.

  3. Playbook을 실행합니다.

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

검증

  • 연결이 성공적으로 시작되었는지 확인합니다. 예를 들면 다음과 같습니다.

    # ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "managed-node-01.example.com-to-managed-node-02.example.com"'
    ...
    006 #3: "managed-node-01.example.com-to-managed-node-02.example.com", type=ESP, add_time=1741857153, inBytes=38622, outBytes=324626, maxBytes=2^63B, id='@managed-node-02.example.com'
    Copy to Clipboard Toggle word wrap

    이 명령은 VPN 연결이 활성화된 경우에만 성공합니다. 플레이북의 auto 변수를 start 이외의 값으로 설정하는 경우 먼저 관리 노드에서 연결을 수동으로 활성화해야 할 수 있습니다.

호스트 간 VPN은 두 장치 간에 직접, 보안 및 암호화된 연결을 설정하여 애플리케이션과 인터넷과 같은 비보안 네트워크를 통해 안전하게 통신할 수 있습니다.

인증을 위해 PSK(사전 공유 키)는 두 피어에만 알려진 공유 시크릿을 사용하는 간단한 방법입니다. 이 접근 방식은 쉽게 배포가 가능한 우선 순위인 기본 설정에 적합합니다. 그러나 키를 엄격하게 기밀로 유지해야 합니다. 키에 대한 액세스 권한이 있는 공격자는 연결을 손상시킬 수 있습니다.

예를 들어, 인터셉트 또는 중단되는 제어 메시지의 위험을 최소화하여 보안을 강화하기 위해 데이터 트래픽과 제어 트래픽에 대해 별도의 연결을 구성할 수 있습니다. vpn RHEL 시스템 역할을 사용하면 별도의 데이터 및 컨트롤 플레인 및 PSK 인증을 사용하여 IPsec 호스트 간 연결 생성 프로세스를 자동화할 수 있습니다.

사전 요구 사항

프로세스

  1. 다음 콘텐츠를 사용하여 플레이북 파일(예: ~/playbook.yml )을 생성합니다.

    ---
    - name: Configuring VPN
      hosts: managed-node-01.example.com, managed-node-02.example.com
      tasks:
        - name: IPsec VPN with PSK authentication
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.vpn
          vars:
            vpn_connections:
              - name: control_plane_vpn
                hosts:
                  managed-node-01.example.com:
                    hostname: 203.0.113.1  # IP address for the control plane
                  managed-node-02.example.com:
                    hostname: 198.51.100.2 # IP address for the control plane
                auth_method: psk
                auto: start
              - name: data_plane_vpn
                hosts:
                  managed-node-01.example.com:
                    hostname: 10.0.0.1   # IP address for the data plane
                  managed-node-02.example.com:
                    hostname: 172.16.0.2 # IP address for the data plane
                auth_method: psk
                auto: start
            vpn_manage_firewall: true
            vpn_manage_selinux: true
    Copy to Clipboard Toggle word wrap

    예제 플레이북에 지정된 설정은 다음과 같습니다.

    호스트: &lt ;list>

    VPN을 구성하려는 호스트를 사용하여 YAML 사전을 정의합니다. 연결 이름은 < name> - <IP_address_A> -to- <IP_address_B >입니다(예: control_plane_vpn-203.0.113.1-to-198.51.100.2 ).

    역할은 각 관리 노드에서 VPN 연결을 구성합니다. 역할은 외부(관리되지 않음) 노드에 Libreswan을 구성할 수 없습니다. 이러한 호스트에 구성을 수동으로 생성해야 합니다.

    auth_method: psk
    호스트 간 PSK 인증을 활성화합니다. 역할은 제어 노드에서 openssl 을 사용하여 사전 공유 키를 생성합니다.
    auto: &lt ;startup_method>
    연결의 시작 메서드를 지정합니다. 유효한 값은 add,ondemand,startignore 입니다. 자세한 내용은 Libreswan이 설치된 시스템의 ipsec.conf(5) 도움말 페이지를 참조하십시오. 이 변수의 기본값은 null이며 자동 시작 작업이 없음을 의미합니다.
    vpn_manage_firewall: true
    역할이 관리 노드의 firewalld 서비스에서 필요한 포트를 열도록 정의합니다.
    vpn_manage_selinux: true
    역할이 IPsec 포트에 필요한 SELinux 포트 유형을 설정하도록 정의합니다.

    플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의 /usr/share/ansible/roles/rhel-system-roles.vpn/README.md 파일을 참조하십시오.

  2. 플레이북 구문을 확인합니다.

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.

  3. Playbook을 실행합니다.

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

검증

  • 연결이 성공적으로 시작되었는지 확인합니다. 예를 들면 다음과 같습니다.

    # ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "control_plane_vpn-203.0.113.1-to-198.51.100.2"'
    ...
    006 #3: "control_plane_vpn-203.0.113.1-to-198.51.100.2", type=ESP, add_time=1741860073, inBytes=0, outBytes=0, maxBytes=2^63B, id='198.51.100.2'
    Copy to Clipboard Toggle word wrap

    이 명령은 VPN 연결이 활성화된 경우에만 성공합니다. 플레이북의 auto 변수를 start 이외의 값으로 설정하는 경우 먼저 관리 노드에서 연결을 수동으로 활성화해야 할 수 있습니다.

사이트 간 VPN은 두 개의 개별 네트워크 간에 안전하고 암호화된 터널을 설정하여 인터넷과 같은 안전하지 않은 공용 네트워크에서 원활하게 연결합니다. 예를 들어 분기 사무실의 장치는 마치 모두 동일한 로컬 네트워크의 일부인 것처럼 회사 본사의 리소스에 액세스할 수 있습니다.

인증을 위해 PSK(사전 공유 키)는 두 피어에만 알려진 공유 시크릿을 사용하는 간단한 방법입니다. 이 접근 방식은 쉽게 배포가 가능한 우선 순위인 기본 설정에 적합합니다. 그러나 키를 엄격하게 기밀로 유지해야 합니다. 키에 대한 액세스 권한이 있는 공격자는 연결을 손상시킬 수 있습니다.

vpn RHEL 시스템 역할을 사용하면 PSK 인증을 사용하여 IPsec 사이트 간 연결 생성 프로세스를 자동화할 수 있습니다. 기본적으로 이 역할은 터널 기반 VPN을 생성합니다.

사전 요구 사항

프로세스

  1. 다음 콘텐츠를 사용하여 플레이북 파일(예: ~/playbook.yml )을 생성합니다.

    ---
    - name: Configuring VPN
      hosts: managed-node-01.example.com, managed-node-02.example.com
      tasks:
        - name: IPsec VPN with PSK authentication
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.vpn
          vars:
            vpn_connections:
              - hosts:
                  managed-node-01.example.com:
                    subnets:
                      - 192.0.2.0/24
                  managed-node-02.example.com:
                    subnets:
                      - 198.51.100.0/24
                      - 203.0.113.0/24
                auth_method: psk
                auto: start
            vpn_manage_firewall: true
            vpn_manage_selinux: true
    Copy to Clipboard Toggle word wrap

    예제 플레이북에 지정된 설정은 다음과 같습니다.

    호스트: &lt ;list>

    VPN을 구성하려는 게이트웨이로 YAML 사전을 정의합니다. 항목이 Ansible 관리 노드가 아닌 경우 FQDN(정규화된 도메인 이름) 또는 IP 주소를 hostname 매개변수에 지정해야 합니다. 예를 들면 다음과 같습니다.

              ...
              - hosts:
                  ...
                  external-host.example.com:
                    hostname: 192.0.2.1
    Copy to Clipboard Toggle word wrap

    역할은 각 관리 노드에서 VPN 연결을 구성합니다. 연결 이름은 -to- 입니다 (예: managed-node-01.example.com-to-managed-node-02.example.com ). 역할은 외부(관리되지 않음) 노드에 Libreswan을 구성할 수 없습니다. 이러한 피어에 구성을 수동으로 생성해야 합니다.

    subnets: <yaml_list_of_subnets>
    터널을 통해 연결된 CIDR(Classless inter-domain routing) 형식으로 서브넷을 정의합니다.
    auth_method: psk
    피어 간 PSK 인증을 활성화합니다. 역할은 제어 노드에서 openssl 을 사용하여 PSK를 생성합니다.
    auto: &lt ;startup_method>
    연결의 시작 메서드를 지정합니다. 유효한 값은 add,ondemand,startignore 입니다. 자세한 내용은 Libreswan이 설치된 시스템의 ipsec.conf(5) 도움말 페이지를 참조하십시오. 이 변수의 기본값은 null이며 자동 시작 작업이 없음을 의미합니다.
    vpn_manage_firewall: true
    역할이 관리 노드의 firewalld 서비스에서 필요한 포트를 열도록 정의합니다.
    vpn_manage_selinux: true
    역할이 IPsec 포트에 필요한 SELinux 포트 유형을 설정하도록 정의합니다.

    플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의 /usr/share/ansible/roles/rhel-system-roles.vpn/README.md 파일을 참조하십시오.

  2. 플레이북 구문을 확인합니다.

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.

  3. Playbook을 실행합니다.

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

검증

  • 연결이 성공적으로 시작되었는지 확인합니다. 예를 들면 다음과 같습니다.

    # ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "managed-node-01.example.com-to-managed-node-02.example.com"'
    ...
    006 #3: "managed-node-01.example.com-to-managed-node-02.example.com", type=ESP, add_time=1741857153, inBytes=38622, outBytes=324626, maxBytes=2^63B, id='@managed-node-02.example.com'
    Copy to Clipboard Toggle word wrap

    이 명령은 VPN 연결이 활성화된 경우에만 성공합니다. 플레이북의 auto 변수를 start 이외의 값으로 설정하는 경우 먼저 관리 노드에서 연결을 수동으로 활성화해야 할 수 있습니다.

IPsec 메시는 모든 서버가 다른 모든 서버와 안전하고 직접 통신할 수 있는 완전히 상호 연결된 네트워크를 생성합니다. 이는 여러 데이터 센터 또는 클라우드 공급자에 걸쳐 있는 분산 데이터베이스 클러스터 또는 고가용성 환경에 이상적입니다. 각 서버 쌍 간에 직접 암호화된 터널을 설정하면 중앙 병목 현상 없이 보안 통신을 수행할 수 있습니다.

인증의 경우 CA(인증 기관)에서 관리하는 디지털 인증서를 사용하면 안전하고 확장 가능한 솔루션이 제공됩니다. 메시의 각 호스트는 신뢰할 수 있는 CA에서 서명한 인증서를 제공합니다. 이 방법은 강력하고 검증 가능한 인증을 제공하고 사용자 관리를 단순화합니다. CA에서 액세스를 중앙에서 부여하거나 취소할 수 있으며 Libreswan은 인증서 해지 목록(CRL)에 대해 각 인증서를 확인하여 인증서가 목록에 표시되면 액세스를 거부하여 이를 시행합니다.

vpn RHEL 시스템 역할을 사용하면 관리형 노드 간의 인증서 기반 인증을 사용하여 VPN 메시 구성을 자동화할 수 있습니다.

사전 요구 사항

  • 컨트롤 노드와 관리형 노드를 준비했습니다.
  • 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
  • 관리 노드에 연결하는 데 사용하는 계정에는 sudo 권한이 있습니다.
  • 각 관리 노드에 대해 PKCS #12 파일을 준비합니다.

    • 각 파일에는 다음이 포함됩니다.

      • 서버의 개인 키
      • 서버 인증서
      • CA 인증서
      • 필요한 경우 중간 인증서
    • 파일의 이름은 < managed_node_name_as_in_the_inventory > .p12 입니다.
    • 파일은 플레이북과 동일한 디렉터리에 저장됩니다.
    • 서버 인증서에는 다음 필드가 포함되어 있습니다.

      • EKU(Extended Key Usage)는 TLS 웹 서버 인증으로 설정됩니다.
      • CN(일반 이름) 또는 SAN(주체 대체 이름)은 호스트의 FQDN(정규화된 도메인 이름)으로 설정됩니다.
      • X509v3 CRL 배포 지점에는 CRL(Certificate Revocation Lists)에 대한 URL이 포함되어 있습니다.

프로세스

  1. ~/inventory 파일을 편집하고 cert_name 변수를 추가합니다.

    managed-node-01.example.com cert_name=managed-node-01.example.com
    managed-node-02.example.com cert_name=managed-node-02.example.com
    managed-node-03.example.com cert_name=managed-node-03.example.com
    Copy to Clipboard Toggle word wrap

    cert_name 변수를 각 호스트의 인증서에 사용된 CN(일반 이름) 필드 값으로 설정합니다. 일반적으로 CN 필드는 FQDN(정규화된 도메인 이름)으로 설정됩니다.

  2. 중요한 변수를 암호화된 파일에 저장합니다.

    1. 자격 증명 모음을 생성합니다.

      $ ansible-vault create ~/vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
      Copy to Clipboard Toggle word wrap
    2. ansible-vault create 명령이 편집기를 열고 < key > : < value > 형식으로 중요한 데이터를 입력합니다.

      pkcs12_pwd: <password>
      Copy to Clipboard Toggle word wrap
    3. 변경 사항을 저장하고 편집기를 종료합니다. Ansible은 자격 증명 모음의 데이터를 암호화합니다.
  3. 다음 콘텐츠를 사용하여 플레이북 파일(예: ~/playbook.yml )을 생성합니다.

    - name: Configuring VPN
      hosts: managed-node-01.example.com, managed-node-02.example.com, managed-node-03.example.com
      vars_files:
        - ~/vault.yml
      tasks:
        - name: Install LibreSwan
          ansible.builtin.package:
            name: libreswan
            state: present
    
        - name: Identify the path to IPsec NSS database
          ansible.builtin.set_fact:
            nss_db_dir: "{{ '/etc/ipsec.d/' if
              ansible_distribution in ['CentOS', 'RedHat']
              and ansible_distribution_major_version is version('8', '=')
              else '/var/lib/ipsec/nss/' }}"
    
        - name: Locate IPsec NSS database files
          ansible.builtin.find:
            paths: "{{ nss_db_dir }}"
            patterns: "*.db"
          register: db_files
    
        - name: Initialize IPsec NSS database if not initialized
          ansible.builtin.command:
            cmd: ipsec initnss
          when: db_files.matched == 0
    
        - name: Copy PKCS #12 file to the managed node
          ansible.builtin.copy:
            src: "~/{{ inventory_hostname }}.p12"
            dest: "/etc/ipsec.d/{{ inventory_hostname }}.p12"
            mode: 0600
    
        - name: Import PKCS #12 file in IPsec NSS database
          ansible.builtin.shell:
            cmd: 'pk12util -d {{ nss_db_dir }} -i /etc/ipsec.d/{{ inventory_hostname }}.p12 -W "{{ pkcs12_pwd }}"'
    
        - name: Remove PKCS #12 file
          ansible.builtin.file:
            path: "/etc/ipsec.d/{{ inventory_hostname }}.p12"
            state: absent
    
        - name: Opportunistic mesh IPsec VPN with certificate-based authentication
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.vpn
          vars:
            vpn_connections:
              - opportunistic: true
                auth_method: cert
                policies:
                  - policy: private
                    cidr: default
                  - policy: private
                    cidr: 192.0.2.0/24
                  - policy: clear
                    cidr: 192.0.2.1/32
            vpn_manage_firewall: true
            vpn_manage_selinux: true
    Copy to Clipboard Toggle word wrap

    예제 플레이북에 지정된 설정은 다음과 같습니다.

    opportunistic: true
    여러 호스트 간에 opportunistic 메시를 활성화합니다. policies 변수는 암호화해야 하거나 암호화할 수 있는 서브넷 및 호스트 트래픽에 대해 정의하며 그 중 어느 것이 일반 텍스트 연결을 계속 사용해야 하는지 정의합니다.
    auth_method: cert
    인증서 기반 인증을 활성화합니다. 이를 위해서는 인벤토리에서 각 관리 노드 인증서의 닉네임을 지정해야 합니다.
    policies: <list_of_policies>

    YAML 목록 형식으로 Libreswan 정책을 정의합니다.

    기본 정책은 private-or-clear 입니다. 개인 으로 변경하기 위해 위의 플레이북에는 기본 cidr 항목에 대한 따라 정책이 포함되어 있습니다.

    Ansible 제어 노드가 관리형 노드와 동일한 IP 서브넷에 있는 경우 플레이북 실행 중에 SSH 연결이 손실되는 것을 방지하려면 제어 노드의 IP 주소에 대한 명확한 정책을 추가합니다. 예를 들어, Mesh를 192.0.2.0/24 서브넷에 대해 구성하고 제어 노드에서 IP 주소 192.0.2.1 을 사용하는 경우 플레이북에 표시된 대로 192.0.2.1/32 에 대한 명확한 정책이 필요합니다.

    정책에 대한 자세한 내용은 Libreswan이 설치된 시스템의 ipsec.conf(5) 도움말 페이지를 참조하십시오.

    vpn_manage_firewall: true
    역할이 관리 노드의 firewalld 서비스에서 필요한 포트를 열도록 정의합니다.
    vpn_manage_selinux: true
    역할이 IPsec 포트에 필요한 SELinux 포트 유형을 설정하도록 정의합니다.

    플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의 /usr/share/ansible/roles/rhel-system-roles.vpn/README.md 파일을 참조하십시오.

  4. 플레이북 구문을 확인합니다.

    $ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.

  5. Playbook을 실행합니다.

    $ ansible-playbook --ask-vault-pass ~/playbook.yml
    Copy to Clipboard Toggle word wrap

검증

  1. 메시의 노드에서 다른 노드를 ping하여 연결을 활성화합니다.

    [root@managed-node-01]# ping managed-node-02.example.com
    Copy to Clipboard Toggle word wrap
  2. 연결이 활성화되어 있는지 확인합니다.

    [root@managed-node-01]# ipsec trafficstatus
    006 #2: "private#192.0.2.0/24"[1] ...192.0.2.2, type=ESP, add_time=1741938929, inBytes=372408, outBytes=545728, maxBytes=2^63B, id='CN=managed-node-02.example.com'
    Copy to Clipboard Toggle word wrap
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat