我是靠谱客的博主 秀丽机器猫,这篇文章主要介绍NGINX配置邮件代理服务器NGINX配置邮件代理服务器,现在分享给大家,希望可以做个参考。

NGINX配置邮件代理服务器

 

本文将说明如何将NGINX Plus或NGINX开源配置为邮件服务器或外部邮件服务的代理。

 

介绍

NGINX可以将IMAP,POP3和SMTP协议代理到承载邮件帐户的上游邮件服务器之一,因此可以用作电子邮件客户端的单个端点。这可能带来许多好处,例如:

  • 轻松扩展邮件服务器的数量
  • 根据不同的规则选择邮件服务器,例如,根据客户的IP地址选择最近的服务器
  • 在邮件服务器之间分配负载

 

先决条件

  • NGINX Plus(已包含代理电子邮件流量所必需的Mail模块)或NGINX开源使用--with-mail用于电子邮件代理功能的--with-mail_ssl_module参数和用于SSL / TLS支持的参数编译了Mail模块:

    复制代码
    1
    2
    $ ./configure --with-mail --with-mail_ssl_module --with-openssl = [ DIR ] /openssl-1.1.1
  • IMAP,POP3和/或SMTP邮件服务器或外部邮件服务

 

配置SMTP / IMAP / POP3邮件代理服务器

在NGINX配置文件中:

  1. 创建一个顶级mail上下文(在与http上下文相同的级别上定义):

    复制代码
    1
    2
    3
    4
    邮件 { #... }
  2. 使用server_name指令指定邮件服务器的名称:

    复制代码
    1
    2
    3
    4
    5
    邮件 { server_name mail.example.com ; #... }
  3. 使用auth_http指令指定HTTP认证服务器。身份验证服务器将对电子邮件客户端进行身份验证,选择上游服务器进行电子邮件处理,并报告错误。请参阅为邮件代理设置身份验证。

    复制代码
    1
    2
    3
    4
    5
    6
    7
    邮件 { server_name mail.example.com ; auth_http 本地主机9000 /cgi-bin/nginxauth.cgi ; #... }
  4. 或者,通过指定proxy_pass_error_message指令来指定是否从认证服务器通知用户错误。当邮箱内存不足时,这可能很方便:

    复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    邮件 { server_name mail.example.com ; auth_http 本地主机9000 /cgi-bin/nginxauth.cgi ; proxy_pass_error_message #... }
  5. 使用这些server块配置每个SMTP,IMAP或POP3服务器。对于每个服务器,请指定:

    • 与带有指令的指定协议相对应的端口号listen
    • 带有指令的协议protocol(如果未指定,将从指令中指定的端口自动检测到listen
    • 允许的身份验证方法imap_authpop3_authsmtp_auth指令:
    复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    服务器 { 收听 25 ; 协议 smtp ; smtp_auth 登录 普通 cram-md5 ; } 服务器 { 监听 110 ; 协议 pop3 ; pop3_auth 普通 apop cram-md5 ; } 服务器 { 监听 143 ; 协议 imap ; }

 

设置邮件代理的身份验证

来自客户端的每个POP3 / IMAP / SMTP请求都将首先在外部HTTP身份验证服务器上或通过身份验证脚本进行身份验证。Nginx邮件服务器代理必须具有验证服务器。您可以根据基于HTTP协议的NGINX身份验证协议自行创建服务器。

如果身份验证成功,则身份验证服务器将选择上游服务器并重定向请求。在这种情况下,来自服务器的响应将包含以下几行:

复制代码
1
2
3
4
5
HTTP / 1.0 200 OK 身份验证状态:确定 Auth-Server:<主机> #将用于邮件处理的上游服务器的服务器名称或IP地址 Auth-Port:<port> #上游服务器的端口

如果身份验证失败,则身份验证服务器将返回错误消息。在这种情况下,来自服务器的响应将包含以下几行:

复制代码
1
2
3
4
HTTP / 1.0 200 OK 身份验证状态:<消息> #返回到客户端的错误消息,例如“无效的登录名或密码”身份 验证等待:<number> #直到连接关闭为止剩余的身份验证尝试次数

请注意,在两种情况下,响应都将包含HTTP / 1.0 200 OK,这可能会造成混淆。

从该验证服务器请求和响应的更多示例,请参阅ngx_mail_auth_http_module在NGINX参考文档。

 

为邮件代理设置SSL / TLS

使用SSL / TLS上的POP3 / SMTP / IMAP,请确保在客户端和邮件服务器之间传递的数据受到保护。

为邮件代理启用SSL / TLS:

  1. 通过在命令行中键入命令,然后在输出中查找该行,确保已为NGINX配置了SSL / TLS支持。nginx -Vwith --mail_ssl_module

    复制代码
    1
    2
    3
    $ nginx -V 配置参数:... with--mail_ssl_module
  2. 确保已获取服务器证书和私钥,并将它们放在服务器上。可以从可信证书颁发机构(CA)获得证书,也可以使用SSL库(例如OpenSSL)生成证书。

  3. 使用ssl指令为邮件代理启用SSL / TLS 。如果在mail上下文中指定了伪指令,则将为所有邮件代理服务器启用SSL / TLS。您还可以使用以下starttls指令启用S​​TLS和STARTTLS :

    复制代码
    1
    2
    ssl on ;

    要么

    复制代码
    1
    2
    STARTTLS ;
  4. 添加SSL证书:使用ssl_certificate指令指定证书的路径(必须采用PEM格式),并在指令中指定私钥的路径ssl_certificate_key

    复制代码
    1
    2
    3
    4
    5
    6
    7
    邮件 { #... ssl_certificate /etc/ssl/certs/server.crt ; ssl_certificate_key /etc/ssl/certs/server.key ; }
  5. 您可以通过ssl_protocolsssl_ciphers指令仅使用SSL / TLS的强版本和密码,也可以设置自己喜欢的协议和密码:

    复制代码
    1
    2
    3
    4
    5
    6
    7
    邮件 { #... ssl_protocols TLSv1 TLSv1.1 TLSv1.2 ; ssl_ciphers HIGH:!aNULL:!MD5 ; }

为邮件代理优化SSL / TLS

这些提示将帮助您使NGINX邮件代理更快,更安全:

  1. 通过将worker_processes指令设置为与mail上下文相同的级别,设置工作进程的数量等于处理器的数量:

    复制代码
    1
    2
    3
    4
    5
    worker_processes 自动; 邮件 { #... }
  2. 使用以下ssl_session_cache指令启用共享会话缓存并禁用内置会话缓存:

    复制代码
    1
    2
    3
    4
    5
    6
    7
    worker_processes 自动; 邮件 { #... ssl_session_cache shared:SSL:10m ; #... }
  3. (可选)您可以5使用以下ssl_session_timeout指令来延长会话生存时间(默认情况下为分钟):

    复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    worker_processes 自动; 邮件 { #... ssl_session_cache shared:SSL:10m ; ssl_session_timeout 10m ; #... }

完整的例子

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
worker_processes 自动; 邮件 { server_name mail.example.com ; auth_http 本地主机9000 /cgi-bin/nginxauth.cgi ; proxy_pass_error_message 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 ; 服务器 { 收听 25 ; 协议 smtp ; smtp_auth 登录 普通 cram-md5 ; } 服务器 { 监听 110 ; 协议 pop3 ; pop3_auth 普通 apop cram-md5 ; } 服务器 { 监听 143 ; 协议 imap ; } }

在此示例中,有三个电子邮件代理服务器:SMTP,POP3和IMAP。每个服务器都配置有SSL和STARTTLS支持。SSL会话参数将被缓存。

代理服务器使用HTTP身份验证服务器-其配置超出了本文的范围。来自服务器的所有错误消息将返回给客户端。

 

最后

以上就是秀丽机器猫最近收集整理的关于NGINX配置邮件代理服务器NGINX配置邮件代理服务器的全部内容,更多相关NGINX配置邮件代理服务器NGINX配置邮件代理服务器内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部