当前位置:操作系统 > Unix/Linux >>

Postfix+Cyrus-SASL+Cyrus-IMAPD+PgSQLHOWTO

Postfix + Cyrus-SASL + Cyrus-IMAPD + PgSQL HOWTO

  (Under FreeBSD,PowerPlane原创)

  [附言]

  引用:

  作者:PowerPlane

  该附言或许不成其为什么许可证,但还是希望您尊重作者的愿望。

  如果您发现有什么错误,请及时通知我,我将尽快作出修改。如果您在网上转载,那将是免费,但希望您附上本附言,并且注明出处的链接。如果您要把它用印刷物形式出版,请通过www.cnfug.org跟本人接洽。

  您在以本文作为根据配置电脑的时候,若出现任何故障,后果自负,与本作者无关。

  目标:

  -------------------------------------

  引用:

  本文的目的是在于说明如何在FreeBSD的环境下面搭建一个邮件系统。这个邮件系统支持虚拟用户,提供IMAP服务,可以成为构成WebMail系统的基础。

  支持IMAP服务的Webmail有著名的IMP和SquirrelMail等等。

  本文虽然是用PgSQL作为后台数据库,但是仍然对使用MySQL,LDAP数据库的作为后台的类似邮件系统有启发作用。如果仔细阅读本文,一定会有所收货的。使用其他后台数据库的话,要修改的地方有两处:pam服务和main.cf的virtual_mailbox_maps项。

  本文所有的调试是在FreeBSD-4.8 release上通过的,也对FreeBSD-5作了额外的说明,主要的差异是集中在pam服务的配置不同而已,希望能有所帮助。

  Linux的用户也能可以参考本文的配置,您只需要留意路径和pam服务的配置。pam服务配置跟FreeBSD-5类似。

  零、阅读准备:

  -------------------------------------

  1)阅读本文需要一定基础,我假设你已经清楚以下的东西:

  邮件系统的基本原理,邮件系统的相关协议的作用,例如smtp,pop3,imap。

  2)什么是SASL:

  SASL的英文全称是Simple Authentication and Security Layer,简单验证和安全层。

  SMTP协议并没有提供用户验证功能,很容易匿名中转邮件。即使限制了可以转发的网段,也不安全。他的定义是: a method for adding authentication support to connection-based protocols,为基于连接的协议提供认证功能。

  3)软件的角色:

  引用:

  Postfix:充当MTA,就是smtpd,作为邮件转发用。

  Cyrus-SASL:分成两部分

  a)Cyrus项目的SASL lib,Postfix使用SASL需要用到的lib。

  b)Cyrus-saslauthd,一个SASL的验证后台程序。

  Cyrus-IMAPD:

  提供IMAP服务,提供邮件读取和管理邮箱的作用。

  cyradm:

  这个不是一个独立的软件,安装Cyrus-IMAP的时候会自动安装上去的。它的作用是创建和管理邮箱。

  PgSQL:后台数据库,存放用户的密码等等。

  总的来讲,Postfix充当转送邮件的服务;Cyrus-IMAP充当提供邮件读取、管理的服务;SASL使用验证服务。

  4、Cyrus-SASL和Cyrus-IMAPD不是同一样东西

  就跟Microsoft Visual C++和Microsoft Office不是同一个东西一样

  一、本系统的工作原理和结构:

  -------------------------------------

  注意是本系统。实现一个邮件系统有很多种方式,即使你用的都是跟本系统完全一样的软件,也有不同的实现方式。

  本系统的邮件主机是:

  f4.room

  f4是因为fbsd-4,域为room:是因为电脑放在房间里头。您要看不顺眼,就把本文的f4.room都换成example.com算了。

  I、Postfix的担任的工作的部分:

  1、这个是投递邮件的时候的用户验证的部分:

  代码:

  |------------------------|

  | Postfix |

  | |

  | |-------------| |

  |-| Cy-SASL-lib |--------|

  | |

  |-------------|

  |

  |

  |--------------|

  | Cy-saslauthd |

  |--------------|

  |

  |

  |-------|

  | PAM |

  |-------|

  |

  |

  |-----------------------|

  | PostgreSQL |

  |-----------------------|

  图例说明:

  当有程序访问smtp服务(TCP端口25)的时候,Postfix会给出220 ESMTP的回应,提示是要验证的smtp服务。密码和用户名提交给Postfix以后,Postfix会把密码和用户名通过调用Cy-SASL lib提交给一个后台验证程序:Cy-saslauthd。Cy-saslauthd会调用PAM模块进行验证。PAM模块会调用名为smtp的PAM服务名进行验证。在本系统中,PAM服务是调用pam_pgsql访问PostgreSQL进行验证的。然后结果再Return回去。

  2、邮件转送:

  分成三种情况:

  1)如果邮件是给非本域用户的,例如是21cn.com的,马上就转发过去了。

  2)如果邮件是给本域虚拟用户的,Postfix要访问PgSQL,来看看本域是否有这个虚拟用户。有就转发到他的虚拟邮箱,没有就把邮件defered掉。(什么是defered?待查,估计是砍掉的意思)

  Postfix <--> PostgreSQL

  3)如果是本域的本地用户,就转发到本地用户的邮箱,就是/var/mail/username那里。

  Postfix <--> /etc/passwd

  II、Cyrus-IMAP担任的工作部分

  1、邮件的获取:

  Cyrus-IMAPD有他自己的一套管理邮件的方法,不是用传统的unix邮箱方法(/var/mail/username),但是邮箱的读取十分高效。当Postfix获得目的地是本域的虚拟用户的时候,我们设置Postfix内置支持的一个功能:调用Cyrus-IMAP的一个程序,将邮件 “拿”过来放到由Cyrus-IMAPD管理的邮箱里头。

  2、用户的验证。

  当用户要读取自己的邮件的时候,要通过IMAP服务。本系统配置了Cyrus-IMAP通过Cyrus-saslauthd进行验证。其原理大概同Postfix验证用户的原理一样。

  代码:

  |------------------------|

  | Cyrus-IMAPD |

  | |

  | |-------------| |

  |-| Cy-SASL-lib |--------|

  | |

  |-------------|

  |

  |

  |--------------|

  | Cy-saslauthd |

  |--------------|

  |

  |

  |-------|

  | PAM |

  |-------|

  |

  |

  |-----------------------|

  | PostgreSQL |

  |-----------------------|

  III、PgSQL存储的数据

  现在把PgSQL存储的数据再总结一下。

  PgSQL主要存储两部分数据:

  1)虚拟用户的用户名和密码。这部分是提供验证用,从saslauthd通过PAM服务访问。

  代码:

  ID | usr | pass | expired | newtok

  ----+-------+-------+---------+--------

  1 | test1 | pass1 | f | f

  2 | test2 | pass2 | f | f

  2)用户的地址和对应的信箱。这部分是Postfix访问的,从中获得邮件地址和邮箱的映射关系,然后根据邮件地址转发到相应的邮箱。

  代码:

  ID | addr | box

  ----+----------------+------------

  1 | test1@f4.room | test1

  2 | test2@f4.room | test2

  在本系统中,实际上是两个表,为了方便大家看,就将他拆分成两个表。

  其实使用两个表来存储这些数据的做法从安全角度是可取的。我们比如说我们分别建立两个数据库用户:postfix和saslauthd,他们只是对自己可以访问的表有读权限。另外我们再建立一个视图,把两个表关联起来,超级用户对这个视图有读取使用的权限,来进行管理。

  本文为了方便调试,只是建立一个表。

  二、安装软件

  -------------------------------------

  请务必使用port来安装,因为这不仅影响到你编译成功率,更影响到以后的配置。因为你直接下载源码包编译安装的路径可能不一样

  引用:

  0.PostgreSQL

  路径/usr/ports/databases/postgresql7

  make install

  注意,这个路径下的是pgsql 7.3

  1.Postfix:

  路径 /usr/ports/mail/postfix

  make install,然后会出现一个编译选项的菜单,选择Cyrus-SASL2和PgSQL的支持。PgSQL的支持可能有两种,一个是7.3,一个是7.2,请根据的PgSQL服务器选择。

  2.Cyrus-SASL2:

  由于上面安装Postfix的时候,选择了Cyrus-SASL2支持,编译Postfix的时候,会自动下载Cyrus-SASL2进行编译安装,所以Cyrus-SASL2不需要安装。

 
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,