postfix的安装配置

postfix是何许东西就不详细介绍了,一个存在时间悠久的稳健的邮件服务程序。
它的安装很简单。因为不必要很多最新功能什么的,直接yum或者apt安装就够用。
在ubuntu下:
apt-get install -y postfix

安装过程中,有少许选项,用默认的即可。因为它的功能,完全取决于配置文件。要实现什么功能,直接修改配置文件就行。
postfix的配置,网上有很多介绍,看的我眼花缭乱,最终还是一头雾水。经过几天的琢磨,好歹配置成功,现将一些心得记录如下。
因为用到的功能少,所以,只涉及一个配置文件,/etc/postfix/main.cf。是的,你没看错,玩转postfix就在这一个文件。当然,也是我要求不高。

1,最简单的配置
在main.cf文件中,写下面一句话就可以使用了。
home_mailbox = Maildir/
就这么简单。其它的语句全删掉。当然,事先最好保留一个原始main.cf的备份。
其实,好像不用这句postfix也能正常运转,只是我没有测试。
在这种配置下,只能限于本系统内用户之间发送邮件,也可以本系统内用户给外界发邮件,但不能接收外部发来的邮件。
听起来功能太简单了。但是,作为一个小白来说,能使用就是一个很大的鼓励了。当年(好吧,就是前几天)我对着百度那繁多的搜索结果,配置了好半天都没个结果。当然,不会使用也是一个很大的原因。
现在说下如何使用。在这种配置下,foxmail之类的客户端程序还远远不能使用,只能用操作系统内置的程序如telnet、mailx等来测试。
下面是telnet的使用过程:
# telnet localhost 25
用telnet连接本系统的25端口,就是postfix的服务端口。然后见到
220 mail.example.com ESMTP Postfix
输入 helo localhost
见到 250 mail.example.com
输入 mail from:root (表示这封邮件是root发的。当然这里可以是别的系统用户如tom之类)
见到 250 Ok
输入 rcpt to:tom (表示邮件发送给用户tom,也可以是外部邮箱如222@qq.com)
见到 250 Ok
输入 data (表示后面开始输入邮件内容)
见到 354 End data with. (最后以“单独一行.”结束输入)
输入 hello! (邮件内容)
输入 . (这行只有一个字符.)表示邮件结束
见到 250 Ok: queued as D68E41407D0
输入 quit (退出)
这就是一个邮件发送的过程。如果没出错误信息,就表示邮件已经发出去了。
当时的我不知道邮件是否发出,不断的测试、找错,浪费了好多时间。怎样直观的看收到的邮件呢?
如果是发给系统内用户tom的邮件,到目录/home/tom/Maildir下面的new目录或者cur目录瞧瞧,应该能看到收到的邮件,cat一下可以看到内容。这就说明tom收到了刚发的邮件。
如果是发给外网如222@qq.com的邮件,直接进qq邮箱看是否收到邮件。很多情况下看不到,因为这封邮件被视为垃圾邮件而被放在了垃圾邮件那一栏。我不知道,一直以为没收到邮件,结果走了很多弯路。

2,这个配置能收到外部发来的邮件
在main.cf文件中,写入以下内容
home_mailbox = Maildir/
mydomain = abc.com
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

这样,postfix除了有第1部分的功能外,还成了abc.com的邮件服务器,能收到发给如tom@abc.com的邮件了。前提是域名解析中mx记录指向本机。

3,启用虚拟用户
以上部分只能限于系统内存在的用户,怎样任意添加与系统无关的用户呢?用以下main.cf
home_mailbox = Maildir/
mydomain = abc.com
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

virtual_mailbox_domains = xyz.com, yyy.com
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

这个配置需要事先添加一个用户专门给postfix使用
groupadd -g 5000 vmail
useradd -g vmail -u 5000 -s /sbin/nologin -m vmail

新增的虚拟用户信息就在/etc/postfix/vmailbox文件中。vmailbox文件内容格式如:
admin@xyz.com xyz.com/admin/Maildir/
admin@yyy.com yyy.com/admin/Maildir/

收到的邮件就放在 /home/vmail/xyz.com/admin/Maildir/目录下
文本文件vmailbox不能直接被postfix识别,必须转换成数据库文件。用postfix自带程序转换。
# postmap vmailbox

4,启用用户验证
到了前面的第3部分,任然不能在手机邮件app上发送邮件,好像是因为postfix发信需要用户验证。这也是避免被滥用的措施。
以下main.cf采用了dovecot的sasl验证,需要和dovecot配合使用。dovecot何许玩意?见相关文章。
采用下列配置就可以在手记邮件客户端使用了。
home_mailbox = Maildir/
mydomain = abc.com
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

virtual_mailbox_domains = xyz.com, yyy.com
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

myorigin = $mydomain

#smtp auth (SMTP 认证,借用dovecot的sasl验证)
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = permit_sasl_authenticated permit_auth_destination reject

5,启用传输加密
在配置文件main.cf里增加以下部分,就开始加密传输了。但是目前不知道怎么验证是否是加密传输。
# 系统作为服务端,接收客户端和其他邮件服务器时启用tls
smtpd_use_tls=yes
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

# 服务器作为客户端对外发送邮件启用tls
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtp_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtp_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key

还有更多的功能来不及琢磨,以后有时间再捣鼓吧。

Leave a Reply

Your email address will not be published. Required fields are marked *