NGINX Plus

Mail Proxy 서버로 NGINX 구성하기

IMAP, POP3 및 SMTP 프로토콜의 Proxy로 NGINX 또는 NGINX Plus 를 사용하여 이메일 서비스를 간소화하고 성능을 개선하세요.

이 문서에서는 메일 서버 또는 외부 메일 서비스의 Proxy로 NGINX Plus 또는 NGINX Open Source를 구성하는 방법에 대해 설명합니다.

목차

1. 소개
2. 전제 조건
3. SMTP/IMAP/POP3 메일 Proxy 서버 구성하기
4. 메일 Proxy에 대한 인증 설정하기
5. 메일 Proxy를 위한 SSL/TLS 설정하기
5-1. 메일 Proxy를 위한 SSL/TLS 최적화하기
6. 전체 예제

1. 소개

NGINX는 메일 계정을 호스팅하는 Upstream 메일 서버 중 하나에 IMAP, POP3 및 SMTP 프로토콜을 Proxy할 수 있으므로 이메일 클라이언트를 위한 단일 Endpoint로 사용할 수 있습니다. 이는 다음과 같은 여러 가지 이점을 가져올 수 있습니다.

  • 메일 서버 수를 쉽게 확장할 수 있습니다.
  • 다른 규칙에 따라 메일 서버 선택(예: 클라이언트의 IP 주소를 기준으로 가장 가까운 서버 선택)
  • 메일 서버 간에 Load Balancing

2. 전제 조건

이메일 트래픽을 Proxy하는 데 필요한 Mail 모듈이 이미 포함되어 있는 NGINX Plus 또는 NGINX Open Source는 이메일 Proxy 기능을 위해 --with-mail 매개변수를, SSL/TLS 지원을 위해 --with-mail_ssl_module 매개변수를 사용하여 Mail 모듈을 컴파일했습니다.

$ ./configure --with-mail --with-mail_ssl_module --with-openssl=[DIR]/openssl-1.1.1

IMAP, POP3 및/또는 SMTP 메일 서버 또는 외부 메일 서비스

3. SMTP/IMAP/POP3 메일 Proxy 서버 구성하기

NGINX 구성 파일:

1. 최상위 mail 컨텍스트를 만듭니다(http 컨텍스트와 동일한 Level에서 정의됩니다).

mail {
    #...
}

2. server_name 지시문을 사용하여 mail 서버의 이름을 지정합니다:

mail {
   server_name mail.example.com;
    #...
}

3. auth_http 지시문을 사용하여 HTTP 인증 서버를 지정합니다. 인증 서버는 이메일 클라이언트를 인증하고, 이메일 처리를 위한 Upstream 서버를 선택하며, 오류를 보고합니다. 메일 Proxy에 대한 인증 설정하기를 참조하세요.

mail {
    server_name mail.example.com;
    auth_http   localhost:9000/cgi-bin/nginxauth.cgi;
    #...
}

4. 또는 proxy_pass_error_message 지시문을 지정하여 인증 서버의 오류에 대해 사용자에게 알릴지 여부를 지정합니다. 이 방법은 메일함의 메모리가 부족할 때 유용할 수 있습니다.

mail {
    server_name mail.example.com;
    auth_http   localhost:9000/cgi-bin/nginxauth.cgi;

    proxy_pass_error_message on;
    #...
}

5. server 블록을 사용하여 각 SMTP, IMAP 또는 POP3 서버를 구성합니다. 각 서버에 대해 다음과 같이 지정합니다.

  • listen 지시문으로 지정된 프로토콜에 해당하는 포트 번호를 지정합니다.
    protocol 지시문을 사용하여 프로토콜을 지정합니다 (지정하지 않으면 listen 지시문에 지정된 포트로 자동 감지됩니다).
  • imap_auth, pop3_auth, smtp_auth 지시문을 사용하여 허용되는 인증 방법을 추가했습니다.
server {
    listen    25;
    protocol  smtp;
    smtp_auth login plain cram-md5;
} 

server {
    listen    110;
    protocol  pop3;
    pop3_auth plain apop cram-md5;
}

server {
    listen   143;
    protocol imap;
}

4. 메일 Proxy에 대한 인증 설정하기

클라이언트의 각 POP3/IMAP/SMTP 요청은 먼저 외부 HTTP 인증 서버 또는 인증 스크립트에 의해 인증됩니다. 인증 서버는 NGINX 메일 서버 Proxy에 필수입니다. 인증 서버는 HTTP 프로토콜을 기반으로 하는 NGINX 인증 프로토콜에 따라 직접 생성할 수 있습니다.

인증에 성공하면 인증 서버가 Upstream 서버를 선택하고 요청을 리다이렉션합니다. 이 경우 서버의 응답에는 다음 줄이 포함됩니다.

HTTP/1.0 200 OK
Auth-Status: OK
Auth-Server: <host> # the server name or IP address of the upstream server that will used for mail processing
Auth-Port: <port> # the port of the upstream server

인증에 실패하면 인증 서버에서 오류 메시지를 반환합니다. 이 경우 서버의 응답에는 다음 줄이 포함됩니다.

HTTP/1.0 200 OK
Auth-Status: <message> # an error message to be returned to the client, for example “Invalid login or password”
Auth-Wait: <number> # the number of remaining authentication attempts until the connection is closed

Note: 두 경우 모두 응답에 HTTP/1.0 200 OK가 포함되므로 혼동될 수 있습니다.

인증 서버에 대한 요청 및 응답에 대한 더 많은 예제는 NGINX 참조 문서에서 ngx_mail_auth_http_module을 참조하세요.

5. 메일 Proxy를 위한 SSL/TLS 설정하기

SSL/TLS를 통한 POP3/SMTP/IMAP을 사용하면 클라이언트와 메일 서버 간에 전달되는 데이터를 안전하게 보호할 수 있습니다.

메일 Proxy에 SSL/TLS를 사용하도록 설정합니다.

1. 명령줄에 nginx -V 명령을 입력한 다음 출력에서 with --mail_ssl_module 줄을 찾아 NGINX가 SSL/TLS를 지원하도록 구성되었는지 확인합니다.

$ nginx -V
configure arguments: ... with--mail_ssl_module

2. 서버 인증서와 Private Key를 획득하여 서버에 저장했는지 확인하세요. 인증서는 신뢰할 수 있는 인증 기관(CA)에서 받거나 OpenSSL과 같은 SSL 라이브러리를 사용하여 생성할 수 있습니다.

3. ssl 지시문을 사용하여 메일 Proxy에 SSL/TLS를 사용하도록 설정합니다. 이 지시문이 mail 컨텍스트에 지정되면 모든 메일 Proxy 서버에 대해 SSL/TLS가 사용 설정됩니다. starttls 지시문을 사용하여 STLS 및 STARTTLS를 사용하도록 설정할 수도 있습니다.

ssl on;

또는

starttls on;

4. SSL 인증서 추가: ssl_certificate 지시문을 사용하여 인증서 경로(PEM 형식이어야 합니다)를 지정하고, ssl_certificate_key 지시문에 Private Key 경로를 지정합니다.

mail {
    #...
    ssl_certificate     /etc/ssl/certs/server.crt;
    ssl_certificate_key /etc/ssl/certs/server.key;
}

5. ssl_protocolsssl_cipher 지시문을 사용하여 강력한 SSL/TLS 버전과 암호만 사용하거나 선호하는 프로토콜과 암호를 직접 설정할 수 있습니다.

mail {
    #...
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers   HIGH:!aNULL:!MD5;
}

5-1. 메일 Proxy를 위한 SSL/TLS 최적화하기

이 안내는 NGINX 메일 Proxy를 더 빠르고 안전하게 만드는 데 도움이 됩니다.

1. Worker Process의 수를 mail 컨텍스트와 동일한 수준에서 worker_processes 지시문을 설정한 프로세서 수와 동일하게 설정합니다.

worker_processes auto;
mail {
    #...
}

2. 공유 세션 캐시를 활성화하고 ssl_session_cache 지시문을 사용하여 기본 제공 세션 캐시를 비활성화합니다.

worker_processes auto;

mail {
    #...
    ssl_session_cache shared:SSL:10m;
    #...
}

3. 선택 사항으로, 기본 5분인 세션 수명을 ssl_session_timeout 지시문을 사용하여 늘릴 수 있습니다.

worker_processes auto;

mail {
    #...
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;
    #...
}

6. 전체 예제

worker_processes auto;

mail {
    server_name mail.example.com;
    auth_http   localhost:9000/cgi-bin/nginxauth.cgi;

    proxy_pass_error_message on;

    ssl                 on;
    ssl_certificate     /etc/ssl/certs/server.crt;
    ssl_certificate_key /etc/ssl/certs/server.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;

    server {
        listen     25;
        protocol   smtp;
        smtp_auth  login plain cram-md5;
    }

    server {
        listen    110;
        protocol  pop3;
        pop3_auth plain apop cram-md5;
}

     server {
        listen   143;
        protocol imap;
    }
}

이 예제에서는 세 개의 이메일 Proxy 서버가 있습니다: SMTP, POP3 및 IMAP입니다. 각 서버는 SSL 및 STARTTLS를 지원하도록 구성되어 있습니다. SSL 세션 매개변수는 캐시됩니다.

Proxy 서버는 HTTP 인증 서버를 사용하며, 그 구성은 이 문서에서 다룰 범위를 벗어납니다. 서버의 모든 오류 메시지는 클라이언트로 반환됩니다.