公开IMAP服务器到Internet:DMZ或端口转发?

我们目前已将所有电子邮件存储在内部networking中的Dovecot IMAP服务器上。 networking上的客户端机器能够连接并访问他们的电子邮件。

现在我们希望允许某些用户使用IMAP从外部连接和查看他们的电子邮件。 我们目前有一个防火墙/路由器与一个专用(未使用的)DMZ端口。 我看到它的方式有两种select:

  1. 在路由器上设置端口转发,将端口585或993上的任何IMAP请求转发给服务器; 服务器可以validation用户。
  2. 反向代理IMAP服务器连接到路由器的DMZ; 这反过来可以将IMAP请求转发到内部networking上的服务器(在这种情况下可以selectvalidation用户名)。

有没有人对这两种方法的优点提出任何build议/意见?

我发现很难想象在三脚防火墙的DMZ中增加一个额外的反向代理的好处,因为它无论如何都是有效地进行端口转发的。 …或者我错过了什么?

将IMAP从Internet端口转发到LAN意味着添加一个非常有select性的转发规则。 在服务器端没有像dynamic端口分配这样的丑事(就像使用FTP或MSRPC协议那样)。 在我看来,对局域网的接触是微乎其微的。 你依靠你的IMAP服务器上的IP协议栈,不要做任何愚蠢的事情(因为你主动向服务器提供入站IP访问),而你依靠IMAP服务器软件本身不要做任何愚蠢的事情。

在DMZ场景中,您描述的是限制IMAP服务器与Internet的直接IP连接,并且限制了IMAP服务器执行某些愚蠢行为的风险程度。 您正在通过与IMAP代理服务器之间的直接IP连接与IMAP服务器直接build立IP连接的风险,而您依靠IMAP代理服务器软件不会做任何愚蠢的事情。 在这种情况下,IMAP服务器中的漏洞仍然有可能通过IMAP代理被利用,具体取决于IMAP代理的“有状态”以及多less“完整性检查”。

在我看来,非军事区的方法是增加移动部件和复杂性,而不增加太多真正的安全性。 我认为你可以更好地服务于端口转发到局域网,并使用你在DMZ / IMAP代理方法上花费的精力,确保你已经有了IMAP服务器的良好日志logging,密码/locking策略抵制暴力破解密码,以及一个告警机制,让你知道你是否看到意外的IMAP服务器stream量(“从未见过”的分析)。

我遇到了一个类似的问题,我通过在我的身份validation数据库中添加一列“allow_remote_login”来解决这个问题,然后我更改了sql命令来validation用户:

SELECT email as user, password FROM users WHERE email='%u' AND (allow_remote OR %a != 144); 

在dovecot.conf中,我将listen行改为列表到端口143和144; 其中144是外部端口转发指向的那个:

 listen = *:143 [::]:143 *:144 [::]:144