2009-09-21 71 views
1

我想通过电子邮件从人员/设备收集某些信息。这些电子邮件绝不会传递给任何人,而只是在服务器上处理。收到的电子邮件将被处理 - 一些简单地被删除,大部分被存储(在数据库中),根据特定条件,附件可能被存储或不被存储(但从未被执行)。有限功能服务器的安全隐患

我已经使用现有的MTA软件进行了调查,并得出结论认为,这将是矫枉过正,并且创造出的复杂性远高于此目的所必需的。

如果我要写我自己的MTA软件,我需要实现一个相当有限的功能子集 - 字面上足以接收电子邮件,不发送任何。我会尽可能减少实际的MTA软件以减少维护量。因此,在MTA软件收到电子邮件后,它会将其(完整)传递给第二块软件来执行处理。

电子邮件只是简单地存储,由发件人和他们特别允许的任何人在Web UI中检索。某些附件将被存储,但从未在服务器上执行,并且只能由原始电子邮件的发件人和他们提名的其他人访问。

我对网络安全的世界了解甚少 - 有了这样一个有限的服务器,我是否开放了一种潜在的方式?我想这个问题的答案总是肯定的 - 但是我保证安全,安全但功能齐全的MTA软件(如Postfix)的安全性不高?

如果我还没有具体或足够清楚,请让我知道,谢谢!

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

@·洛 我已经花了过去3天探索使用现有软件的选项,似乎我的最佳解决方案是Postfix> Procmail>我自己的处理。 Postfix是一个完整的MTA解决方案,它需要很多配置才能接近我想要的 - 复杂性主要是配置问题,让第三方软件一起工作确实能够实现我的出价。我敢肯定,熟悉配置邮件服务器和管理nix服务器的人通常会有更容易的时间,但正如我所看到的,定制解决方案不会是一个巨大的项目 - 我唯一真正关心的就是安全性。

此外,关于矫枉过正 - 我需要Postfix的一个非常有限的子集,我所看到的大部分配置都试图禁用某些行为。在很多方面,我宁愿使用成熟,稳定的Postfix来处理我自己的解决方案,但是我觉得已经投入的时间本可以用来更有效地编写专门用于该任务的东西。

+1

为什么现有的邮件传输软件“过度杀伤”?使用现有的经过验证的解决方案有什么问题?它会创造什么“复杂性”? – 2009-09-21 10:30:56

+0

我花了3天时间探索使用现有软件的选项,看来我的最佳解决方案是Postfix> Procmail>我自己的处理。Postfix是一个完整的MTA解决方案,它需要很多配置才能接近我想要的 - 复杂性主要是配置问题,让第三方软件一起工作确实能够实现我的出价。我相信有人精通配置邮件服务器和管理nix服务器通常会有更容易的时间,但是正如我所看到的那样,自定义解决方案不会是一个巨大的项目 - 我唯一担心的就是安全性 – Richter 2009-09-21 10:45:51

回答

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: [email protected] 
< 250 OK 
> RCPT To: [email protected]_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线和追加saltedhash执行简单的身份验证和验证。处理日期时,忽略BEGIN/END行之外的所有内容并验证散列值。

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

祝您好运 - 请让我们知道您选择哪种解决方案!

+0

抱歉,延迟在回复 - 回到大学,让我的论文和作业离开地面,这让我大部分时间都没有了。 我从来没有想过这种方式,但基本上是的,我想你可以说我使用SMTP作为文件传输机制。你的最后一点是我对Postfix的最大问题,因为我没有使用它或类似软件的经验,而且它的大量功能和配置让我厌倦了自己去做这件事。 我很欣赏所有的答案 - 他们都非常有帮助,但我会去自己去。 – Richter 2009-11-05 09:38:52

2

我没有看到太多的问题。我会把MTA放在严格防火的DMZ之内。例如,数据库将位于另一个盒子的DMZ之外。

无论您使用的是商业邮件服务器还是定制的邮件服务器,DMZ的这种使用都是很好的做法。如果定制内置是更实际的选择,那么你是正确的路径

1

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

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

不要小看:

1-安全的复杂性,特别是如果你不是在这方面有经验的攻击。

2-可能的系统寿命。现在看起来似乎不值得攻击,但如果它被搁置了10年......怎么办?