CentOS 7에 Murmur(Mumble) 서버 설치 가이드
소개
Mumble은 주로 게이머를 위해 설계된 무료 음성 채팅 애플리케이션입니다. Murmur(서버)는 계층형 채널 트리를 제공하며 고품질의 저지연 음성을 지원합니다. 이 가이드는 CentOS 7에서 Murmur 정적 바이너리 기반 서버를 설치하고 systemd 서비스로 운영하는 방법을 자세히 설명합니다.
중요 용어: Murmur — Mumble의 서버 구성요소. static tarball — 미리 빌드된 정적 실행파일이 포함된 압축파일.
이 문서의 대상 및 전제 조건
- 대상: CentOS 7 기반 서버에 Murmur을 직접 설치·운영하려는 시스템 관리자 또는 엔지니어
- 전제: root 권한 또는 sudo 권한, 기본적인 리눅스 명령어 이해
- 권장: 방화벽(firewalld) 및 systemd 사용 환경
설치 전 고려사항
- 기본 포트: 64738 (TCP/UDP). 다른 포트를 사용하려면 방화벽과 murmur.ini에서 일치시켜야 합니다.
- SELinux: 기본적으로 활성화된 경우 Murmur가 시작되지 않을 수 있습니다. 가능한 해결책은 SELinux를 비활성화하거나 필요한 보안 컨텍스트와 규칙을 추가하는 것입니다(권장: 정책 조정).
- 버전 호환성: Murmur의 정적 빌드 버전과 클라이언트 버전 간 일부 기능 차이가 있을 수 있습니다.
구성 요약
- 방화벽 설정: firewalld 서비스 정의를 추가하고 포트를 허용
- 다운로드: Mumble Wiki 또는 GitHub 릴리즈에서 static Linux server tarball 다운로드
- 추출 및 배치: /usr/local/murmur에 파일 복사
- 사용자/권한: murmur 그룹 및 사용자 생성, 로그 디렉터리 권한 설정
- 설정: /etc/murmur.ini 편집 (pidfile, logfile 등)
- 서비스: systemd 유닛 파일과 tmpfiles 구성 추가
- SELinux: 필요 시 비활성화 또는 정책 적용
방화벽 구성
CentOS 방화벽(firewalld)이 기본 포트 64738의 접근을 막습니다. Murmur에 다른 포트를 사용하려면 값만 변경하세요.
다음 파일을 생성하거나 편집합니다:
sudo vi /etc/firewalld/services/murmur.xml
파일 내용 예시:
Murmur
Mumble Server
murmur 서비스를 추가하고 firewalld를 다시 로드합니다.
sudo firewall-cmd --permanent --add-service=murmur
sudo firewall-cmd --reload
중요: firewalld가 아닌 iptables나 클라우드 제공자 보안 그룹(예: AWS 보안 그룹, 방화벽 규칙)이 있다면 해당 위치에서도 포트를 허용하세요.
Murmur tarball 다운로드
공식 위키나 GitHub 릴리즈 페이지에서 최신 안정화된 Mumble Static Linux Server를 다운로드합니다: http://wiki.mumble.info/wiki/Main_Page
CentOS 7에서 wget을 사용하여 예시 파일을 다운로드합니다. 브라우저에서 직접 링크를 복사하여 wget 뒤에 붙여넣을 수 있습니다.
wget https://github.com/mumble-voip/mumble/releases/download/1.2.13/murmur-static_x86-1.2.13.tar.bz2
다운로드 로그 예시(출력 내용은 환경에 따라 다름):
--2016-02-22 11:40:08-- https://github.com/mumble-voip/mumble/releases/download /1.2.13/murmur-static_x86-1.2.13.tar.bz2
Resolving github.com (github.com)... 192.30.252.131
Connecting to github.com (github.com)|192.30.252.131|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://github-cloud.s3.amazonaws.com/releases/1413319/63ec4c18-b7a2-11e5-87ae-b6a2fa0c4ba0.bz2?... [following]
wget 다운로드 예시 스크린샷
tarball 압축 해제
다운로드한 tar.bz2 파일을 추출합니다.
tar -vxjf ./murmur-static_x86-1.2.13.tar.bz2
만약 다음과 같은 오류가 발생하면 bzip2가 설치되어 있지 않은 것입니다.
tar (child): bzip2: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
해결 방법: bzip2 패키지를 설치하고 다시 시도합니다.
sudo yum install bzip2
설치 후 다시 압축을 풉니다. 정상적으로 추출되면 다음과 같은 파일 목록이 보입니다:
murmur-static_x86-1.2.13/
murmur-static_x86-1.2.13/murmur.x86
murmur-static_x86-1.2.13/LICENSE
... (중략)
파일 배치
정적 빌드 파일을 /usr/local/murmur에 복사합니다.
sudo mkdir /usr/local/murmur
sudo cp -r ./murmur-static_x86-1.2.13/* /usr/local/murmur/
murmur 설정 파일을 /etc에 복사합니다(출처 tarball 버전이 다르면 경로를 확인하세요).
sudo cp ./murmur-static_x86-1.2.9/murmur.ini /etc/murmur.ini
팁: 만약 위 명령에서 버전 번호가 불일치하면, 추출된 디렉터리 이름을 확인하고 실제 존재하는 murmur.ini 파일을 사용하세요.
소유권 및 권한 수정
murmur 전용 그룹과 사용자를 생성하고 로그 디렉터리의 소유권을 할당합니다.
sudo groupadd -r murmur
sudo useradd -r -g murmur -m -d /var/lib/murmur -s /sbin/nologin murmur
로그 디렉터리 생성 및 소유권 설정:
sudo mkdir /var/log/murmur
sudo chown murmur:murmur /var/log/murmur
sudo chmod 0770 /var/log/murmur
중요: /var/run(또는 /run) 하위 디렉터리는 부팅 시 재생성되므로 pid 디렉터리(tmpfiles)를 설정해야 합니다.
Murmur 설정 파일 편집
기본 구성 파일은 /etc/murmur.ini입니다. 편집기로 열어 pidfile과 logfile 위치를 지정하세요.
sudo vi /etc/murmur.ini
다음 두 줄을 추가하거나 수정합니다:
pidfile=/var/run/murmur/murmur.pid
logfile=/var/log/murmur/murmur.log
편집을 마친 뒤 저장하고 종료합니다.
systemd 서비스 생성
systemd로 Murmur를 관리하려면 유닛 파일을 생성합니다.
sudo vi /etc/systemd/system/murmur.service
파일 내용 예시:
[Unit]
Description=Mumble Server (Murmur)
Requires=network-online.target
After=network-online.target mariadb.service time-sync.target
[Service]
User=murmur
Type=forking
PIDFile=/var/run/murmur/murmur.pid
ExecStart=/usr/local/murmur/murmur.x86 -ini /etc/murmur.ini
[Install]
WantedBy=multi-user.target
/tmp 디렉터리 생성 규칙을 systemd tmpfiles로 등록하여 재부팅 후에도 pid 디렉터리가 생성되게 합니다.
sudo vi /etc/tmpfiles.d/murmur.conf
내용:
d /var/run/murmur 775 murmur murmur
생성 및 데몬 리로드:
sudo systemd-tmpfiles --create /etc/tmpfiles.d/murmur.conf
sudo systemctl daemon-reload
sudo systemctl enable murmur.service
SELinux 처리
SELinux가 활성화된 경우 Murmur가 제대로 시작되지 않을 수 있습니다. 선택지는 두 가지입니다:
- (간단하지만 보안상 완화) /etc/sysconfig/selinux 파일에서 SELINUX=disabled로 변경 후 재부팅
sudo vi /etc/sysconfig/selinux
SELINUX=disabled
- (권장) SELinux를 비활성화하지 않고 필요한 정책을 추가하여 서비스에 필요한 권한만 허용
- audit 로그(/var/log/audit/audit.log)를 확인하여 거부 항목을 추출한 뒤 적절한 booleans나 custom module을 생성합니다.
중요: 운영 환경에서는 SELinux를 완전히 비활성화하는 대신 최소 권한 원칙에 따라 정책을 추가하는 것이 안전합니다.
Murmur 서비스 시작
sudo systemctl start murmur.service
sudo systemctl status murmur.service
정상 실행되면 CentOS 서버의 도메인 또는 IP와 포트 64738로 Mumble 클라이언트에서 접속할 수 있습니다.
검증 및 문제 해결 요령
- 포트 열림 확인:
sudo firewall-cmd --list-all
ss -tunlp | grep 64738
- 로그 확인:
sudo tail -n 200 /var/log/murmur/murmur.log
sudo journalctl -u murmur.service -b
권한 문제:
- 파일 및 디렉터리 소유자가 murmur:murmur인지 확인
- PID 디렉터리(/var/run/murmur)가 존재하는지 확인
SELinux 관련 거부가 있으면 audit2why 또는 audit2allow 도구로 원인 분석
대안 및 확장 접근법
- 패키지 설치 대신 소스 빌드: 정적 빌드를 사용하지 않고 최신 기능이나 특정 옵션이 필요하면 소스 빌드 고려(단, 빌드 의존성 관리 필요).
- 컨테이너화: Docker나 Podman으로 Murmur를 컨테이너로 배포하면 호스트 환경 오염을 줄일 수 있음. 그러나 오디오/네트워크 포트 및 퍼시스턴스(데이터베이스·설정) 처리 필요.
- 패키지화된 배포: 배포판별 레포지토리나 서드파티 RPM을 사용하는 방법도 있으나 신뢰성·업데이트 정책을 확인하세요.
보안 하드닝 권장 사항
- 방화벽: Murmur 포트는 필요한 IP 또는 네트워크 범위로만 제한
- TLS: 가능하면 ICE/서버 통신에 TLS를 적용하거나 연결에 암호화를 적용
- 인증: 운영 환경에서는 슈퍼관리자 권한과 서버 권한을 최소화
- 로그 접근: /var/log/murmur 권한을 770으로 유지, 로그 전송(시스템 중앙화)을 도입
운영자 및 역할별 체크리스트
- 시스템 관리자:
- 방화벽 규칙 구성 및 검증
- systemd 유닛과 tmpfiles 구성 적용
- SELinux 정책 검토
- 서비스 운영자:
- 정기적인 로그 모니터링
- 패치 관리 및 백업(설정 파일 및 DB)
- 사용자 권한과 채널 관리
- 보안 담당자:
- 포트 접근 제어, TLS 적용 여부 점검
- 감사 로그 검토 및 이상 징후 탐지
빠른 문제 해결 플로우차트
flowchart TD
A[서버 시작 실패] --> B{systemctl status murmur}
B -->|Unit failed| C[저널 로그 확인: journalctl -u murmur]
B -->|Active running| D[클라이언트 연결 문제]
C --> E{로그에 bzip2, permission, selinux?
}
E -->|permission| F[파일 소유권 및 권한 확인]
E -->|selinux| G[audit 로그 검토 및 정책 적용]
E -->|other| H[포트 및 방화벽 확인]
D --> H
H --> I[포트/방화벽 수정 후 재시도]
언제 이 방법이 실패할 수 있는지
- 사용 중인 CentOS 7 이미지가 systemd 대신 다른 init을 사용하는 경우(드물지만 커스텀 이미지)
- 기본적인 네트워크 정책(클라우드 호스팅의 보안 그룹 등)이 외부 연결을 차단하는 경우
- SELinux를 비활성화할 수 없는 엄격한 보안 정책 하의 환경에서는 추가 정책 작성이 필요
간단한 운영 검증 테스트 케이스
- 서비스 기동: systemctl start murmur.service 후 Active(active) 확인
- 접속 성공: 다른 호스트에서 Mumble 클라이언트로 접속하여 음성 전송 테스트
- 로그 생성: /var/log/murmur/murmur.log에 오류 없이 기록되는지 확인
요약
- Murmur 설치 과정은 방화벽 설정, tarball 다운로드·추출, 전용 사용자 생성, 설정 파일 편집, systemd 서비스 등록, SELinux 처리 등의 단계로 구성됩니다.
- 운영 환경에서는 SELinux 정책 조정, 방화벽 최소 허용, TLS 및 로그 보호 등 보안 하드닝이 중요합니다.
중요: 운영 환경에서 SELinux를 완전히 비활성화하기 전에 보안 요구 사항을 검토하세요.