1

我想通过电子邮件从人/设备收集某些信息。这些电子邮件永远不会发送给任何人,而只是在服务器上处理。收到的电子邮件将被处理 - 一些只是丢弃,大部分存储(在数据库中),附件可能会或可能不会存储(但从不执行),具体取决于某些条件。

我已经为此使用现有的 MTA 软件进行了调查,并得出结论,它会是矫枉过正的,并且会产生远远超出此目的所需的复杂性。

如果我要编写自己的 MTA 软件,我将需要实现相当有限的功能子集——实际上足以接收电子邮件,而无需发送任何内容。我会尽量减少实际的 MTA 软件,以尽量减少维护量。因此,在 MTA 软件收到一封电子邮件后,它会将其(全部)传递给执行处理的第二个软件。

电子邮件只是简单地存储,仅由发件人和他们明确允许的任何其他人在 Web UI 中检索。某些附件将被存储,但永远不会在服务器上执行,并且只能由原始电子邮件的发件人和他们指定的其他人访问。

我对网络安全领域知之甚少 - 使用如此有限的服务器,我是否开辟了一条潜在的途径?我想这个问题的答案总是肯定的——但我是否比使用维护良好、安全但功能齐全的 MTA 软件(如 Postfix)更不安全?

如果我不够具体或不够清楚,请告诉我,谢谢!

(服务器将是 Linux,可能是 Ubuntu。最有可能在 Mono 下用 C# 编写的软件,可能是 Python 或混合(C# 服务器,Python 处理))

@ S. Lott 我在过去 3 天里一直在探索使用现有软件的选项,似乎我最好的解决方案是 Postfix > Procmail > 我自己的处理。Postfix 是一个完整的 MTA 解决方案,它需要大量配置才能接近我想要的 - 复杂性主要是配置问题,让 3rd 方软件协同工作听我的吩咐。我敢肯定,一个精通配置邮件服务器和管理 nix 服务器的人通常会更轻松,但我认为自定义解决方案不会是一个巨大的项目——我唯一真正关心的是安全性。

同样关于矫枉过正 - 我需要 Postfix 所做的一个非常有限的子集,而且我正在查看的大多数配置都试图禁用某些行为。在许多方面,我更喜欢使用成熟、稳定的 Postfix,而不是我自己的解决方案,但我觉得已经投入的时间本可以更有效地用于专门为该任务编写一些东西。

4

3 回答 3

2

我觉得问题不大。我会把 MTA 放在一个有严格防火墙的DMZ中。例如,数据库将位于另一个盒子上的 DMZ 之外。

无论您使用的是商业邮件服务器还是定制的邮件服务器,DMZ 的使用都是一种很好的做法。如果定制是更实际的选择,那么您将走在正确的道路上

于 2009-09-21T10:15:34.403 回答
1

除非您有编写服务器软件的经验,否则我会简单地使用 Postfix 作为 MTA,并使用它提供的任何接口处理消息(而不是让它通过 SMTP 将邮件转发到您的应用程序。

我会避免编写新的自定义 MTA,这只是您必须实施和保护的另一层。

不要低估:

1- 安全性的复杂性,特别是如果您没有经历过该领域的攻击。

2- 您的系统可能的寿命。现在看来可能不值得攻击,但如果让它保持 10 年...?

于 2009-10-21T11:23:32.010 回答
1

如果我可以假设您收集的数据不敏感,因此不需要加密/隐私,我认为编写自己的服务器的风险很小,特别是如果您遵循 PaulG 的建议将服务器放置在有防火墙的 DMZ 中。

根据您的描述,我不认为您的服务器是 MTA;相反,它是一个使用 SMTP 的文件传输服务器。让我们看一个假设的会议并讨论一些问题:

[Client connects to your server]
< 220 Welcome message from your.server.com
> HELO someclient.com
< 250 your.server.com
> MAIL From: address@ignored.com
< 250 OK
> RCPT To: another_address@also_ignored.com
< 250 OK
> DATA
< 254 End data with <CR><LF>.<CR><LF>
> client sends data here
> .
< 250 OK
> QUIT
< 221 Bye
[Close connection]

需要考虑的事情:

  • 安全是一个问题吗?(您需要防范垃圾邮件吗?您需要验证客户、发件人还是收件人?)如果答案是“否”,您可以忽略后面的所有内容HELOMAILRCPT无条件发送 250 响应。

  • DATA您可以将和之间的所有内容转储.到文件中进行处理。您可能想要限制大小,如果数据是纯文本的,处理会更容易:不是MIME - 或Base64 -编码,没有附件。

  • 您的服务器将需要异常处理:它应该优雅地响应超时、协议错误和过早断开连接。

  • 如果您控制消息内容,则可以通过将您的数据放在某种类型的 BEGIN 和 END 行之间并附加一个salted hash来执行简单的身份验证和验证。处理日期时,忽略 BEGIN/END 行之外的所有内容并验证哈希。

  • 最后,我什至要说 postfix 实际上可能会引入比它解决的更多的安全问题。凭借其所有功能和灵活性,您确实需要了解如何正确配置它,而错误配置可能会将您的服务器变成垃圾邮件的中继站。

祝你好运 - 请告诉我们您选择哪种解决方案!

于 2009-10-21T12:28:56.837 回答