论坛首页 编程语言技术论坛

SPSmtpGate: SMTP 反垃圾邮件网关

浏览 2328 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-04-16   最后修改:2009-04-18
C++
SPSmtpGate 是一个反垃圾邮件网关,支持 Sendmail 8 的 Milter 协议,采用透明 smtp proxy 的模式。Milter 协议由 Sendmail 公司提出,在 Sendmail 和 Postfix 中都有实现。目前开源的 Milter 模块非常丰富,如果搭配的好,这些 milter 可以有效地拦截垃圾邮件。借助于 SPSmtpGate ,SendMail/Postfix 之外的其他 MTA 也可以方便地利用这些 Milter 模块。

http://code.google.com/p/spsmtpgate/
http://spsmtpgate.googlecode.com/files/spsmtpgate-0.1.src.tar.gz

SPSmtpGate 部署在 Internet 和本地 MTA 之间。系统结构如下图所示。


                        ---------------   
                        |             |
                        |   Milter    |
                        |             |
                        ---------------   
                              /|\
                               |
                               |
  -------------         ---------------          -------------
  |           |         |             |          |           |
  | Internet  |  -----> | SPSmtpGate  |  ----->  | Local MTA |
  |           |         |             |          |           |
  -------------         ---------------          -------------



由于采用了透明 proxy 的模式,对于原有的系统影响非常小,只需要修改少量的配置。
如果 SPSmtpGate 和 Local MTA 部署在同一台机器,那么修改 Local MTA 的配置,使得它使用 25 之外的端口,比如 2025 端口;然后由 SPSmtpGate 来接管 25 端口,同时修改 SPSmtpGate 的配置文件,把 Local MTA 作为 backend 。

SPSmtpGate 使用的配置文件
[Server]                  ; spsmtpgate 的一些控制参数
MaxConnections = 1024     ; 最大并发连接数
SocketTimeout = 600       ; 和 internet 上其他主机通信的超时时间
MaxThreads = 128          ; 最多使用的线程数
MaxReqQueueSize = 128     ; 最大的队列长度

[Backend]                    ; 后端 MTA 的相关信息
ConnectTimeout = 5           ; 连接超时时间
ConnectRetry = 3             ; 连接重试次数
SocketTimeout = 10           ; socket 通信超时时间
ServerCount = 1              ; 有多少台后端 MTA 可用
Server0 = 127.0.0.1:2025 10  ; 第一台可用的后端 MTA 

[MailFilter]                 ; milter 模块的相关信息
Filter0 = "S=inet:1111@127.0.0.1, T=C:5s;S:10s;R:10s;E:1m"


通常需要修改 [Backend] 和 [MailFilter] 这两个配置节。
1)首先修改 Server0 这里的内容,指向具体的 MTA 主机和端口
2)其次修改 MailFilter 的内容,指向具体的 Milter 模块。Milter 的配置内容采用 Sendmail 的格式。

S=inet:1111@127.0.0.1, F=T, T=C:5s;S:10s;R:10s;E:1m

S= 表示 Milter 的连接端口,可以使用 local:/var/run/f1.sock 或者 inet:1111@127.0.0.1 的方式。

F= 表示应用以下哪个标志:
R 	如果过滤器不可用,那么拒绝连接。
T 	如果过滤器不可用,那么使连接临时失效。

通过为 T= 指定一个值,可以覆盖缺省超时值。等式 T= 使用以下字段:

C 	连接到过滤器的超时值
S 	将信息从 MTA 发送到过滤器的超时值。
R 	从过滤器读取应答的超时值。
E 	向过滤器发送消息结束通知与等待最终确认之间的总超时值。
如以上示例中所示,每个超时之间的分隔符是分号(;),每个等式之间的分隔符是逗号(,)。
缺省的超时值如下:

T=C:0m;S:10s;R:10s;E:5m

其中 s 代表秒,m 代表分钟。

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics