SELinux 환경에서 NGINX Management Suite 구성

NGINX Management Suite 배포를 보안하기 위해 제공된 NGINX Management Suite SELinux 정책을 로드하는 방법을 알아보세요.

목차

1. 개요
2. NGINX Management Suite 정책 설치
 2-1. SELinux 정책 불러오기 및 기본 레이블 설정
3. SELinux 구문에 포트 추가
4. SELinux 구문에서 포트 제거
5. NGINX Agent용 SELinux 활성화
 5-1. NGINX Agent SELinux 구문에 포트 추가

1. 개요

NGINX Management Suite 작업을 보안하기 위해 패키지에 포함된 선택적 정책 모듈을 사용할 수 있습니다. 이 정책은 최소 권한의 원칙을 따르는 유연한 의무적 접근 제어를 통해 작업을 보호합니다.

정책의 범위는 NGINX Management Suite가 기본 구성을 지원하기 위해 수행해야 하는 모든 작업을 허용합니다. 이는 기본 Unix 소켓과 TCP를 대체로 하는 프로세스 간 통신을 포함합니다. 다른 변경 사항은 애플리케이션이 작동하도록 기본 정책을 수동으로 조정해야 할 수 있습니다.

주의:

첨부된 SELinux 정책 모듈은 선택 사항입니다. 따라서 SELinux가 활성화된 시스템에서도 설치 중에 자동으로 로드되지 않습니다. 다음 단계에 설명된대로 정책 모듈을 수동으로 로드해야 합니다.

이 튜토리얼을 완료하려면 다음의 사전 준비 단계를 수행해야 합니다.

1. 시스템에서 SELinux를 활성화하세요.
2. 다음 도구들을 설치하세요: load_policy, semodule, restorecon
3. 모듈 파일이 있는 상태에서 NGINX Management Suite를 설치하세요.

주의:

SELinux는 허용 모드(permissive mode)로 구성할 수 있습니다. 허용 모드에서는 정책 위반 사항이 강제로 적용되는 대신 로그에 기록됩니다. SELinux 구성이 어떤 모드를 사용하는지 확인하세요.

2. NGINX Management Suite 정책 설치

설치 프로그램은 SELinux 정책 파일을 다음 위치에 배치합니다.

  • /usr/share/selinux/packages/nms.pp – 로드 가능한 이진 정책 모듈
  • /usr/share/selinux/devel/include/contrib/nms.if – 인터페이스 정의 파일
  • /usr/share/man/man8/nms_selinux.8.gz – 정책 매뉴얼 페이지

이러한 파일들과 상호 작용하여 정책에 대해 알아볼 수 있습니다. 정책을 불러오는 방법에 대한 단계는 다음 섹션을 참조하세요.

2-1. SELinux 정책 불러오기 및 기본 레이블 설정

NGINX Management Suite와 함께 제공되는 정책을 사용하려면 다음 단계를 수행하세요.

1. NGINX Management Suite 정책을 로드하세요.

sudo semodule -n -i /usr/share/selinux/packages/nms.pp
sudo /usr/sbin/load_policy

2. NGINX Management Suite와 관련된 파일 및 디렉토리에 대한 기본 레이블을 복원하려면 다음 명령을 실행하세요.

sudo restorecon -F -R /usr/bin/nms-core
sudo restorecon -F -R /usr/bin/nms-dpm
sudo restorecon -F -R /usr/bin/nms-ingestion
sudo restorecon -F -R /usr/bin/nms-integrations
sudo restorecon -F -R /usr/lib/systemd/system/nms.service
sudo restorecon -F -R /usr/lib/systemd/system/nms-core.service
sudo restorecon -F -R /usr/lib/systemd/system/nms-dpm.service
sudo restorecon -F -R /usr/lib/systemd/system/nms-ingestion.service
sudo restorecon -F -R /usr/lib/systemd/system/nms-integrations.service
sudo restorecon -F -R /var/lib/nms/modules/manager.json
sudo restorecon -F -R /var/lib/nms/modules.json
sudo restorecon -F -R /var/lib/nms/streaming
sudo restorecon -F -R /var/lib/nms
sudo restorecon -F -R /var/lib/nms/dqlite
sudo restorecon -F -R /var/run/nms
sudo restorecon -F -R /var/lib/nms/modules
sudo restorecon -F -R /var/log/nms

3. API Connectivity Manager를 설치한 경우, 다음 파일 및 디렉토리에 대한 기본 레이블을 복원하려면 다음 추가 명령을 실행하세요.

sudo restorecon -F -R /usr/bin/nms-acm
sudo restorecon -F -R /usr/lib/systemd/system/nms-acm.service
sudo restorecon -F -R /var/lib/nms/modules/acm.json

4. App Delivery Manager를 설치한 경우, 다음 파일 및 디렉토리에 대한 기본 레이블을 복원하려면 다음 추가 명령을 실행하세요.

sudo semodule -n -i /usr/share/selinux/packages/nms-adm.pp
sudo /usr/sbin/load_policy
sudo restorecon -F -R /usr/bin/nms-adm
sudo restorecon -F -R /usr/lib/systemd/system/nms-adm.service
sudo restorecon -F -R /var/lib/nms/modules/adm.json

5. NGINX Management Suite 서비스를 재시작하세요.

sudo systemctl restart nms

3. SELinux 구문에 포트 추가

NGINX Management Suite는 정책 모듈에서 nms_t 컨텍스트를 사용합니다. 다음 예제는 컨텍스트에 새로운 포트를 추가하는 방법을 보여줍니다. 외부 포트를 방화벽 예외 목록에 추가해야 합니다. 기본 정책과 다른 사용자 정의 구성에 대한 책임은 시스템 관리자에게 있습니다.

nms_t 컨텍스트에 TCP 포트 10000과 11000을 추가하려면 다음 명령을 실행하세요.

sudo semanage port -a -t nms_port_t -p tcp 10000
sudo semanage port -a -t nms_port_t -p tcp 11000

이미 포트 컨텍스트를 정의한 경우, -m 옵션을 사용하세요.

sudo semanage port -m -t nms_port_t -p tcp 10000
sudo semanage port -m -t nms_port_t -p tcp 11000

다음 seinfo --portcon 명령을 실행하여 포트가 올바른 레이블을 가지고 있는지 확인하세요.

$ seinfo --portcon=10000

Portcon: 4
   portcon sctp 1024-65535 system_u:object_r:unreserved_port_t:s0
   portcon tcp 10000 system_u:object_r:nms_port_t:s0
   portcon tcp 1024-32767 system_u:object_r:unreserved_port_t:s0
   portcon udp 1024-32767 system_u:object_r:unreserved_port_t:s0

$ seinfo --portcon=11000

Portcon: 4
   portcon sctp 1024-65535 system_u:object_r:unreserved_port_t:s0
   portcon tcp 1024-32767 system_u:object_r:unreserved_port_t:s0
   portcon tcp 11000 system_u:object_r:nms_port_t:s0
   portcon udp 1024-32767 system_u:object_r:unreserved_port_t:s0

4. SELinux 구문에서 포트 제거

NGINX Management Suite를 제거하는 경우 포트를 제거해야 합니다. 이를 위해 다음 명령을 실행하세요.

sudo semanage port -d -t nms_t 10000
sudo semanage port -d -t nms_t 11000

5. NGINX Agent용 SELinux 활성화

NGINX Agent 패키지를 설치할 때 다음 파일이 추가됩니다.

  • /usr/share/selinux/packages/nginx_agent.pp – load 가능한 이진 정책 모듈
  • /usr/share/selinux/devel/include/contrib/nginx_agent.if – 인터페이스 정의 파일
  • /usr/share/man/man8/nginx_agent_selinux.8.gz – 정책 Manual 페이지

NGINX Agent 정책을 로드하려면 다음 명령을 실행하세요.

sudo semodule -n -i /usr/share/selinux/packages/nginx_agent.pp
sudo /usr/sbin/load_policy
sudo restorecon -R /usr/bin/nginx-agent
sudo restorecon -R /var/log/nginx-agent
sudo restorecon -R /etc/nginx-agent

5-1. NGINX Agent에 포트 추가

NGINX Agent를 SELinux와 함께 사용하도록 구성할 수 있습니다. 외부 포트를 방화벽 예외 목록에 추가해야 합니다.

다음 예제는 HTTPD 컨텍스트 외부의 외부 포트를 허용하는 방법을 보여줍니다. NGINX가 이러한 포트에 연결할 수 있도록 설정해야 할 수도 있습니다.

sudo setsebool -P httpd_can_network_connect 1

참조:

SELinux와 함께 NGINX를 사용하는 방법에 대한 자세한 내용은 NGINX STORE의 SELinux 관련 가이드를 참조하세요 .

아래 뉴스레터를 구독하고 NGINX와 NGINX STORE의 최신 정보들을 빠르게 전달 받아보세요.

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required