NGINX配置邮件代理服务器

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

介绍

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

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

先决条件

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

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

  • IMAP,POP3和/或SMTP邮件服务器或外部邮件服务

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

在NGINX配置文件中:

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

    邮件 { #... 
    }
    

  2. 使用server_name指令指定邮件服务器的名称:

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

  3. 使用auth_http指令指定HTTP认证服务器。身份验证服务器将对电子邮件客户端进行身份验证,选择上游服务器进行电子邮件处理,并报告错误。请参阅为邮件代理设置身份验证。

    邮件 { server_name  mail.example.com ; auth_http    本地主机:9000 /cgi-bin/nginxauth.cgi ; #... 
    }
    

  4. 或者,通过指定proxy_pass_error_message指令来指定是否从认证服务器通知用户错误。当邮箱内存不足时,这可能很方便:

    邮件 { 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指令:
    服务器 { 收听    25 ; 协议  smtp ; smtp_auth  登录 普通 cram-md5 ;
    } 服务器 { 监听    110 ; 协议  pop3 ; pop3_auth  普通 apop  cram-md5 ;
    }服务器 { 监听   143 ; 协议 imap ;
    }
    

设置邮件代理的身份验证

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

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

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

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

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

    $ nginx -V
    配置参数:... with--mail_ssl_module
    

  2. 确保已获取服务器证书和私钥,并将它们放在服务器上。可以从可信证书颁发机构(CA)获得证书,也可以使用SSL库(例如OpenSSL)生成证书。

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

    ssl  on ;
    

    要么

    STARTTLS  上;
    

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

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

  5. 您可以通过ssl_protocolsssl_ciphers指令仅使用SSL / TLS的强版本和密码,也可以设置自己喜欢的协议和密码:

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

为邮件代理优化SSL / TLS

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

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

    worker_processes  自动;
    邮件 { #... 
    }
    

  2. 使用以下ssl_session_cache指令启用共享会话缓存并禁用内置会话缓存:

    worker_processes  自动;邮件 { #... ssl_session_cache  shared:SSL:10m ; #... 
    }
    

  3. (可选)您可以5使用以下ssl_session_timeout指令来延长会话生存时间(默认情况下为分钟):

    worker_processes  自动;邮件 { #... ssl_session_cache    shared:SSL:10m ; ssl_session_timeout  10m ; #... 
    }
    

完整的例子

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配置邮件代理服务器相关推荐

  1. nginx配置使用笔记:三

    什么是remote_addr remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你 的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web ...

  2. Nginx(四):Nginx配置实战

    相关阅读: Nginx(一):Nginx原理概述 与 安装步骤详解 Nginx(二):反向代理原理 与 配置文件详解 Nginx(三):负载均衡策略 与 Nginx静态服务器 Nginx(四):Ngi ...

  3. Nginx server之Nginx作为反向代理服务器

    2019独角兽企业重金招聘Python工程师标准>>> 一:Nginx介绍 1.Nginx简介:nginx [engine x]是一个俄罗斯人编写的HTTP和反向代理服务器,另外它也 ...

  4. nginx 配置详解_Nginx 配置详解

    序言 Nginx是lgor Sysoev为俄罗斯访问量第二的http://rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作为HT ...

  5. Nginx配置详解/代理服务的配置说明

    Nginx配置详解 序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作 ...

  6. 【Nginx系列】Nginx配置使用与工作原理

    热门系列: [Linux系列]Linux实践(一):linux常用命令 程序人生,精彩抢先看 目录 1.Nginx介绍 1.1 什么是Nginx? 1.2 Nginx能做什么 1.3 为什么要选择用N ...

  7. nginx配置与应用

    Nginx 初识nginx 介绍Nginx Nginx安装 配置文件 启动Nginx Nginx配置文件 日志格式 网站配置 server配置网站 虚拟化主机 nginx日志 切割日志 nginx模块 ...

  8. Nginx 配置参数详解

    序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作为HTTP服务器,也 ...

  9. 前后端分离nginx配置,同时解决跨域问题

    背景 现在,web开发的前后端分离技术越来越火爆,由于最近的公司官网使用了前后端分离的方案,这里就来记录一下前后端分离的项目部署.这里我们使用的前端框架是Vue.js,后台使用Laravel7提供数据 ...

最新文章

  1. flask 常见关系模板代码
  2. RTC是DS1339,驱动采用的是rtc-ds1307.c
  3. hdu 6851 Vacation(思维+贪心)
  4. 自己搭建的邮件系统不能发往gmail、hotmail等问题解决
  5. 有法院被执行人记录还能贷款吗?
  6. MySQL中left join、right join与inner join的区别
  7. 七、MySQL DDL数据定义语言 学习笔记(库和表的创建、修改、删除详解 + 强化复习)
  8. mysql数据库支持emoji表情的详解
  9. python 机器学习_基于 Python 语言的机器学习工具Sklearn
  10. SQL 数据库 函数
  11. 【优化算法】Tent混沌映射的粒子群算法【含Matlab源码 940期】
  12. Axure RP9教程 入门讲解
  13. 爱普生R230打印机两个红灯交替闪怎么回事?
  14. log4j-XML文件配置
  15. QSV格式转换MP4应该使用哪个视频格式转换器
  16. C#实现时间戳与标准时间的互转学习通http://www.bdgxy.com/
  17. 材料模拟计算超算云平台上线,发布会推出两项优惠政策
  18. 最快下载微软必应Bing搜索背景图片的方法
  19. JS内存问题:栈和堆
  20. 前端逼死强迫症之css续集

热门文章

  1. Microsoft Enterprise Library 5.0 系列(五) Data Access Application Block
  2. 为什么我做数据库类的程序要用代码生成器,而且是前前后后,反反复复 [转]...
  3. 如何在手机上安装Ubuntu Touch 13.10
  4. linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 )...
  5. 有关linux用户和用户组管理的知识详解
  6. UIView的一些基本方法 init、loadView、viewDidLoad、viewDidUnload、dealloc
  7. Magento 页面中加入CMS static block
  8. C++ concurrency::task实现异步编程(Windows)
  9. 搜索回溯——N皇后(hdu2553)
  10. LeetCode 581. Shortest Unsorted Continuous Subarray