728x90
반응형

라이브 방송은 현대 미디어 환경에서 필수적인 도구로 자리 잡았습니다. 하지만 보안이 보장되지 않는 RTMP 프로토콜을 사용하는 경우, 시청자와 송출자 간의 데이터가 공격에 노출될 위험이 있습니다. 이를 해결하기 위해 Nginx와 HTTPS를 결합하여 RTMP 스트리밍을 안전하게 구현하는 방법을 소개합니다.


RTMP와 HTTPS 개요

RTMP (Real-Time Messaging Protocol)

RTMP는 Adobe에서 개발한 멀티미디어 전송 프로토콜로, 실시간 스트리밍에 최적화되어 있습니다.

특징:

  • 낮은 지연 시간.
  • 실시간 오디오 및 비디오 스트리밍 지원.
  • OBS Studio와 같은 송출 소프트웨어에서 기본적으로 지원.

HTTPS (HyperText Transfer Protocol Secure)

HTTPS는 웹 트래픽을 암호화하여 전송하는 보안 프로토콜입니다. HTTPS를 사용하면 다음과 같은 이점이 있습니다:

  • 데이터 보안 강화.
  • 중간자 공격 방지.
  • 신뢰할 수 있는 사용자 경험 제공.

환경 설정 준비

필요 소프트웨어 및 도구

  1. Nginx: HTTP 및 Reverse Proxy 서버.
  2. Nginx-RTMP 모듈: RTMP 스트리밍 지원을 위한 모듈.
  3. Let's Encrypt 또는 Self-Signed SSL: SSL 인증서를 이용한 HTTPS 구성.
  4. OBS Studio: 송출용 방송 소프트웨어.
  5. HLS 플레이어: 스트리밍 재생 확인용.

로컬 환경 요구 사항

  • 운영 체제: Ubuntu 20.04 또는 CentOS 8.
  • 최소 사양: 2GB RAM, 20GB 디스크 공간.
  • 텍스트 편집기: vim, nano, 또는 VSCode.

로컬 환경에서 Nginx-RTMP 서버 설정

1. Nginx 설치 및 RTMP 모듈 빌드

이 섹션에서는 Nginx를 설치하고 RTMP 모듈을 빌드하는 방법을 다룹니다. 아래 명령어를 로컬 환경의 터미널(명령줄)에서 실행합니다:

  1. 터미널 실행:
  2. 명령어 입력:
sudo apt update
sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
wget http://nginx.org/download/nginx-1.21.4.tar.gz
tar -zxvf nginx-1.21.4.tar.gz
cd nginx-1.21.4
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
unzip master.zip
./configure --add-module=./nginx-rtmp-module-master --with-http_ssl_module
make
sudo make install

성공 메시지가 출력되면 다음 단계로 이동하세요.

 

2. Nginx-RTMP 설정 파일 구성

설정 파일 열기:

  • Windows 환경에서는 VSCode 또는 메모장으로 열어 수정.
sudo nano /usr/local/nginx/conf/nginx.conf

 

설정 파일에 다음 내용을 추가:

worker_processes  1;

events {
    worker_connections  1024;
}

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            record off;
        }
    }
}

http {
    server {
        listen 80;

        location / {
            root html;
            index index.html;
        }
    }
}

 

설정 파일 저장 및 닫기:

  • Ctrl + O (저장) → Enter → Ctrl + X (닫기).

Nginx 실행:

sudo /usr/local/nginx/sbin/nginx

HTTPS 설정

1. Self-Signed SSL 인증서 생성

  1. 터미널에서 다음 명령어를 실행하여 인증서를 생성합니다:
    openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfsigned.key -out selfsigned.crt
    
  2. 생성된 인증서를 /usr/local/nginx/conf 디렉토리로 이동:
    sudo mv selfsigned.key selfsigned.crt /usr/local/nginx/conf/
    

2. Nginx에 HTTPS 적용

설정 파일 열기:

sudo nano /usr/local/nginx/conf/nginx.conf

 

다음 내용을 추가 또는 수정:

http {
    server {
        listen 443 ssl;
        server_name localhost;

        ssl_certificate /usr/local/nginx/conf/selfsigned.crt;
        ssl_certificate_key /usr/local/nginx/conf/selfsigned.key;

        location / {
            root html;
            index index.html;
        }

        location /live {
            proxy_pass http://localhost:1935;
        }
    }

    server {
        listen 80;
        server_name localhost;
        return 301 https://$host$request_uri;
    }
}

 

저장 및 닫기:

  • Ctrl + O (저장) → Enter → Ctrl + X (닫기).

Nginx 재시작:

sudo /usr/local/nginx/sbin/nginx -s reload

라이브 방송 테스트

1. OBS Studio 설정

  1. OBS Studio를 실행하고, 설정(Settings) → **스트림(Stream)**으로 이동합니다.
  2. 다음과 같이 설정:
    • 스트림 유형: Custom Streaming Server.
    • URL: rtmp://localhost/live.
    • 스트림 키: 원하는 값을 입력 (예: test-stream).
  3. 설정 저장 후 방송 시작 버튼을 클릭하여 스트림을 시작합니다.

2. HLS 스트리밍 확인

  1. 설정 파일 열기:
    sudo nano /usr/local/nginx/conf/nginx.conf
    
  2. 다음 내용을 추가:
    rtmp {
        server {
            listen 1935;
            chunk_size 4096;
    
            application live {
                live on;
                record off;
    
                hls on;
                hls_path /tmp/hls;
                hls_fragment 2;
            }
        }
    }
    
    http {
        server {
            listen 8080;
    
            location /hls {
                types {
                    application/vnd.apple.mpegurl m3u8;
                    video/mp2t ts;
                }
                root /tmp;
            }
        }
    }
    
  3. 저장 후 Nginx 재시작:
    sudo /usr/local/nginx/sbin/nginx -s reload
    
  4. 브라우저에서 https://localhost/hls/stream.m3u8를 열어 스트리밍을 확인합니다.

보안 강화 및 최적화

  1. RTMP 접근 제한
    • IP 화이트리스트를 설정하여 특정 IP만 스트림을 송출하도록 제한합니다:
    application live {
        live on;
        allow publish 192.168.1.0/24;
        deny publish all;
    }
    
  2. HTTPS 성능 최적화
    • HTTP/2 및 Gzip 압축 활성화:
    http {
        server {
            listen 443 ssl http2;
            gzip on;
            gzip_types text/plain application/json;
        }
    }
    

결론

HTTPS를 통해 RTMP 스트리밍을 안전하게 보호하면 데이터의 무결성을 보장할 뿐만 아니라 사용자 신뢰도를 높일 수 있습니다. 이 가이드에서 다룬 단계를 따라 보안과 성능을 겸비한 스트리밍 서버를 구축해 보세요.

로컬 환경에서 실습한 경험을 바탕으로 더 많은 스트리밍 옵션을 탐구하고, 확장 가능한 배포 전략을 설계할 수도 있습니다.

728x90
반응형

+ Recent posts