1. KumoMTA의 발송 성능 (하루 발송량) KumoMTA는 Rust 언어의 비동기(Asynchronous) 처리와 멀티스레딩 아키텍처를 극한으로 활용하여 단일 노드(Single Node)에서도 상용급 이상의 성능을 냅니다. 시간당 발송량: 적절히 튜닝된 단일 서버 환경에서 시간당 100만 통 ~ 500만 통(1M ~ 5M msgs/hour) 처리가 가능하도록 설계되었습니다. 하루 발송량 (24시간 기준): 이를 24시간으로 환산하면 하루 2,400만 통에서 1억 2천만 통 이상 의 발송량을 단일 서버에서 소화할 수 있습니다. 성능 변수: 실제 도달률은 서버의 물리적 스펙(NVMe SSD I/O, 메모리, CPU)뿐만 아니라, 수신 측 ISP(Google, Microsoft 등)가 허용하는 도메인 평판(Reputation) 및 Throttling 제약에 따라 결정됩니다. 2. FreeBSD에서 KumoMTA 설치 방법 (Source Build) 중요 참고 사항: KumoMTA는 공식적으로 Linux(Ubuntu, Debian, RHEL 등) 환경만을 타겟으로 패키지(RPM, DEB)를 배포합니다. FreeBSD용 공식 pkg 바이너리는 제공되지 않으므로, 반드시 Rust 패키지 관리자인 Cargo를 이용하여 소스 코드에서 직접 빌드 해야 합니다. 누락되는 구성이 없도록 종속성 설치부터 서비스 등록까지 전체 과정을 스크립트 형태로 제공해 드립니다. Step 1: 필수 빌드 도구 및 종속성 패키지 설치 소스 빌드에 필요한 Rust 컴파일러와 C/C++ 빌드 툴체인(CMake, Gmake) 및 라이브러리를 설치합니다. Bash # 패키지 매니저 업데이트 및 필수 패키지 설치 pkg update pkg install -y git rust cargo cmake gmake pkgconf openssl sqlite3 pcre2 lua54 zstd Step 2: 전용 데몬 계정 생성 보안을 위해 KumoMTA를 실행할 전용 시스템 계정( kumod )을 생성합니다. Bash # kumod 그룹 및 사용자 생성 (로그인 불가 계정) pw groupadd kumod pw useradd kumod -g kumod -c "KumoMTA Daemon User" -d /nonexistent -s /usr/sbin/nologin Step 3: 소스 코드 다운로드 및 컴파일 GitHub에서 최신 소스를 클론하고 릴리스 모드로 빌드합니다. (이 과정은 시스템 사양에 따라 수십 분이 소요될 수 있습니다.) Bash # 소스 클론 및 디렉터리 이동 git clone https://github.com/KumoCorp/kumomta.git cd kumomta # Rust 릴리스 모드 빌드 cargo build --release # 빌드된 바이너리들을 시스템 실행 경로로 복사 cp target/release/kumod /usr/local/bin/ cp target/release/kumo-tsa /usr/local/bin/ cp target/release/kumomta-* /usr/local/bin/ chmod +x /usr/local/bin/kumo* Step 4: 환경 설정 디렉터리 및 Lua 설정 파일 생성 KumoMTA는 설정을 위해 Lua 스크립트를 사용합니다. 가장 기본적인 ESMTP 리스너 및 릴레이 환경을 구성합니다. Bash # 설정 및 스풀 디렉터리 생성 mkdir -p /usr/local/etc/kumomta mkdir -p /var/spool/kumomta chown -R kumod:kumod /usr/local/etc/kumomta /var/spool/kumomta /usr/local/etc/kumomta/init.lua 파일 작성 (전체 소스): Lua local kumo = require 'kumo' kumo.on('init', function() -- 기본 로컬 바인딩 설정 kumo.configure_local_binding { name = 'default', } -- SMTP 수신 포트 및 릴레이 허용 IP (로컬호스트 허용) kumo.start_esmtp_listener { listen = '0.0.0.0:25', relay_hosts = { '127.0.0.1' }, } -- 상태 확인 및 관리를 위한 HTTP API 리스너 kumo.start_http_listener { listen = '127.0.0.1:8000', allowed_hosts = { '127.0.0.1/32' }, } end) Step 5: FreeBSD rc.d 서비스 시작 스크립트 작성 FreeBSD의 부팅 시 자동 시작 및 백그라운드 데몬화( daemon 유틸리티 사용)를 위해 rc.d 스크립트를 작성합니다. /usr/local/etc/rc.d/kumomta 파일 작성 (전체 소스): Bash #!/bin/sh # # PROVIDE: kumomta # REQUIRE: networking syslog # KEYWORD: shutdown # # Add the following lines to /etc/rc.conf to enable kumomta: # kumomta_enable="YES" . /etc/rc.subr name="kumomta" rcvar="kumomta_enable" load_rc_config $name # 기본값 설정 : ${kumomta_enable:="NO"} : ${kumomta_user:="kumod"} : ${kumomta_group:="kumod"} # pid 및 실행 데몬 설정 pidfile="/var/run/kumod.pid" command="/usr/sbin/daemon" procname="/usr/local/bin/kumod" # daemon 옵션: -P (pid 저장), -r (크래시 시 자동 재시작), -f (포그라운드 프로세스를 백그라운드로 전환) command_args="-P ${pidfile} -r -f ${procname} --policy /usr/local/etc/kumomta/init.lua --user ${kumomta_user}" start_precmd="kumomta_prestart" kumomta_prestart() { # 스풀 및 pid 디렉터리 권한 확인 if [ ! -d "/var/spool/kumomta" ]; then install -d -o ${kumomta_user} -g ${kumomta_group} /var/spool/kumomta fi } run_rc_command "$1" Step 6: 권한 부여 및 서비스 시작 마지막으로 스크립트에 실행 권한을 부여하고 서비스를 가동합니다. Bash # 실행 권한 부여 chmod +x /usr/local/etc/rc.d/kumomta # rc.conf에 서비스 활성화 등록 sysrc kumomta_enable="YES" # KumoMTA 서비스 시작 service kumomta start # 정상 구동 확인 (TCP 25번 및 8000번 포트 LISTEN 상태 확인) sockstat -4 -l | grep kumo 위의 절차를 통해 리눅스 표준 패키지가 없는 FreeBSD 환경에서도 KumoMTA 데몬을 완벽하게 컴파일하고 시스템 서비스로 통제할 수 있습니다.