Postfix是目前流行的一套邮件传输代理软件(MTA),其作者Wietst Venema最初开发这套软件时就对总体设计、扩展能力、可用性及系统安全等方面进行了充分的考虑。由于Postfix在稳定、效率、安全和可用性上的优势,使得很多大型的邮件服务提供商都从原有的MTA软件向Postfix过度,而新仅诞生的邮件产品也大多采用了Postfix。网易、Tom和新浪都将原有的Qmail更换为Postfix,可见Postfix在大规模邮件系统中有比较普遍的应用,当然,Postfix也完全适用设计中小型的邮件系统,因为Postfix在保证了效率、安全、扩展等方面优势的同时,还具有配置简单的特点。
Postfix与其他MTA的对比
在众多MTA软件中,最有影响的应该是Sendmail、Qmail和Postfix。Sendmail是最古老的MTA之一(由于辰逸加入的晚,Sendmail好像只配置过一次~~~)也拥有一批固定的使用者;Qmail是新生代的代表,其特点是速度快、体积小,并且容易配置安装。Postfix起源于1996年,它采用模块化设计,使用了大量优秀的技术,已达到安全高效的目的。Postfix发展到现在已经成为功能非常丰富、扩展性和安全性非常强的优秀MTA软件。
1、Sendmail
MTA软件的很多现金功能都是在Sendmail上最先实现的。但Sendmail也有典型的历史问题,主要是整个程序没有实现良好的模块化,运行时需要SID权限,以及配置文件复杂难懂,这些是阻碍Sendmail更好普及应用的一些客观问题。
2、Qmail
Qmail是新生代的MTA代表,实现了模块化设计,避免了SID问题,基本功能齐全,配置较Sendmail简单,而且用户也很广泛。但Qmail最近几年的开发工作基本停止,补丁程序也相对零乱,这些都是长期使用Qmail的用户邮件服务提供商不得不认真考虑的问题。另外,Qmail的扩展性并不是很好,经常需要打补丁来完成功能的扩展。
3、Postfix
Postfix在设计上可以说是最为有没的,其实现了良好的模块化,邮件的处理流程是通过调用各个功能模块来完成,在效率、功能、可用性、扩展及安全等方面都考虑的比较充分。
Postfix部署准备(LAMP整合安装这里省略。本次部署基于CentOS 6.2 Web系统集成与安全)另外。整个编译部署过程十分漫长,那么如果没有耐心。基本上没必要继续参看本文,对于yum直接安装的案例在互联网中大有人做,如果你觉得make 三部曲能带给你快感。同时你和我一样。喜欢centos 那么你可以联系我。一起探讨,最后本文可能会写后二和三。同时我可能会在后面修改本文。postfix个人认为不是找找资料对着做做就能整合的。单纯的postfix 感觉也没什么用。不如找个webmail装在windows server上。起码不用懂脑筋了!
QQ交流群41405569
首先安装DNS,实现解析[我采用的yum,但省去了chroot的安装]
[root@itchenyi yum.repos.d]# yum install bind-9*
BIND的主配置文件内容如下:
[root@mail ~]# cat /etc/named.conf | grep -v "^/" options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; }; zone "itchenyi.com" IN { type master; file "itchenyi.com.zone"; }; zone "24.168.192.in-addr.arpa" IN { type master; file "192.168.24.zone"; allow-update { none; }; };
BIND的区域解析文件如下[注:没有安装chroot]:
[root@mail ~]# cat /var/named/itchenyi.com.zone $TTL 86400 @ IN SOA itchenyi.com. root ( 0 1D 1H 1W 3H ) @ IN NS ns.itchenyi.com. ns IN A 192.168.24.220 mail IN A 192.168.24.220 pop3 IN CNAME mail smtp IN CNAME mail @ IN MX 10 mail
BIND的反向解析区域文件如下:
[root@mail ~]# cat /var/named/192.168.24.zone $TTL 86400 @ IN SOA 24.168.192.in-addr.arpa. root ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ IN NS ns.itchenyi.com. 220 IN PTR mail.itchenyi.com. @ IN MX 5 mail.itchenyi.com. 220 IN PTR www.itchenyi.com.
使用nslookup进行测试[如果你没有这个命令请装 bind-util]
[root@itchenyi ~]# service named restart Stopping named: . [ OK ] Starting named: [ OK ] [root@itchenyi ~]# nslookup pop3.itchenyi.com [root@itchenyi ~]# nslookup mail.itchenyi.com [root@itchenyi ~]# dig -t mx itchenyi.com
编译postfix时把sasl验证改为dovecot。并且使用自动安装方式,省去交互式安装需要手动按回车的麻烦,我这里是安照默认安装的路径。
[root@mail yum.repos.d]# yum install openssl openssl-devel db* #postfix会依赖这些包,yum直接弄掉~
添加库搜索路径 | 添加用户和组
[root@mail postfix]# groupadd -g 1200 postdrop [root@mail postfix]# groupadd -g 1000 postfix [root@mail postfix]#useradd -M -u 1000 -g postfix -G postdrop -s /sbin/nologin postfix [root@mail yum.repos.d]# echo "/software/mysql/lib/mysql/" >> /etc/ld.so.conf && ldconfig -v [root@mail postfix]# tar zxf postfix-2.8.2.tar.gz [root@mail postfix]# cd postfix-2.8.2 [root@mail postfix-2.8.0]# chmod 755 ./postfix-install [root@mail postfix-2.8.0]# ln -sv /software/mysql/lib/mysql/ /usr/lib/mysql "/usr/lib/mysql/mysql" -> "/software/mysql/lib/mysql/" [root@mail postfix-2.8.0]# ln -sv /software/mysql/include/mysql/ /usr/include/mysql "/usr/include/mysql" -> "/software/mysql/include/mysql/"
开始弄postfix:
[root@mail postfix]# tar zxf postfix-2.8.1.tar.gz [root@mail postfix]# cd postfix-2.8.1 [root@mail postfix-2.8.1]# make makefiles CCARGS='-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\" -DUSE_TLS -I/usr/include' AUXLIBS='-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib -lssl -lcrypto' [root@mail postfix-2.8.1]# make [root@mail postfix-2.8.1]# ./postfix-install -non-interactive install_root=/ tempdir=/tmp config_directory=/etc/postfix command_directory=/usr/sbin/ daemon_directory=/software/postfix data_directory=/var/lib/postfix html_directory=no mail_owner=postfix mailq_path=/usr/bin/mailq manpage_directory=/usr/local/man newaliases_path=/usr/bin/newaliases queue_directory=/var/spool/postfix readme_directory=no sendmail_path=/usr/sbin/sendmail setgia_group=postdrop
生成别名二进制文件,这是个重要的步骤,不做会导致postfix工作效率极低:
[root@mail postfix-2.8.1]# newaliases
[root@chenyi postfix-2.8.2]# postconf -m | grep mysql #你必须确保你的结果里有mysql,否则你得重新来过! mysql
修改postfix配置文件
[root@mail postfix-2.8.1]# vi /etc/postfix/main.cf #下面是你需要修改的
76 myhostname = mail.itchenyi.com #指定运行postfix邮件系统的主机的主机名,默认情况下,其值被设定为本地机器名
83 mydomain = itchenyi.com #指定你的域名
99 myorigin = $mydomain #指明发件人所在的域名
113 inet_interfaces = all #指定postfix系统监听的网络接口
162 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
163 mail.$mydomain, www.$mydomain, ftp.$mydomain #指定postfix接收邮件时收件人的域名,即你的postfix系统要接收到哪个域名的邮件
260 mynetworks = 192.168.24.0/28, 127.0.0.0/8
启动postfix
[root@chenyi postfix-2.8.2]# postfix start postfix/postfix-script: starting the Postfix mail system [root@chenyi postfix-2.8.2]# useradd chenyi1 && echo "123456" | passwd --stdin chenyi1 [root@chenyi postfix-2.8.2]# useradd chenyi2 && echo "123456" | passwd --stdin chenyi1
到这里就可以用telnet测试一下了:
[root@chenyi postfix-2.8.2]# telnet mail.itchenyi.com 25 Trying 192.168.24.220... Connected to mail.itchenyi.com. Escape character is '^]'. 220 mail.itchenyi.com ESMTP Postfix ehlo mail.itchenyi.com 250-mail.itchenyi.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN mail from:chenyi1@itchenyi.com 250 2.1.0 Ok rcpt to:chenyi2@itchenyi.com 250 2.1.5 Ok data 354 End data with <CR><LF>.<CR><LF> chenyi mail test . 250 2.0.0 Ok: queued as A8E8D1A0331 quit 221 2.0.0 Bye Connection closed by foreign host.
切换用户收收邮件~~
[root@chenyi ~]# su - chenyi2 [chenyi2@chenyi ~]$ mail #该命令属于mailx包 Heirloom Mail version 12.4 7/29/08. Type ? for help. "/var/spool/mail/chenyi2": 1 message 1 new >N 1 chenyi1@itchenyi.com Sat Mar 2 03:36 13/503 & 1 Message 1: From chenyi1@itchenyi.com Sat Mar 2 03:36:34 2013 Return-Path: <chenyi1@itchenyi.com> X-Original-To: chenyi2@itchenyi.com Delivered-To: chenyi2@itchenyi.com Date: Sat, 2 Mar 2013 03:36:05 +0800 (CST) From: chenyi1@itchenyi.com Status: R chenyi mail test & q Held 1 message in /var/spool/mail/chenyi2
安装dovecot
[root@chenyi postfix]# tar zxf dovecot-1.1.4.tar.gz [root@chenyi postfix]# useradd -M -s /sbin/nologin dovecot [root@chenyi postfix]# cd dovecot-1.1.4 [root@chenyi dovecot-1.1.4]# ./configure --prefix=/software/dovecot --sysconfdir=/etc --with-mysql=/software/mysql/lib --with-sql [root@chenyi dovecot-1.1.4]# make && make install [root@chenyi dovecot-1.1.4]# cp /etc/dovecot-example.conf /etc/dovecot.conf [root@chenyi dovecot-1.1.4]# vi /etc/dovecot.conf 23 protocols = pop3 imap 47 disable_plaintext_auth = no 87 ssl_disable = yes 208 mail_location = maildir:~/Maildir
再次修改main.cf
[root@chenyi dovecot-1.1.4]# vi /etc/postfix/main.cf 415 home_mailbox = Maildir/
[root@chenyi dovecot-1.1.4]# vi /etc/pam.d/dovecot 1 auth required pam_nologin.so 2 auth include system-auth 3 account include system-auth 4 session include system-auth
启动dovecot
[root@chenyi dovecot-1.1.4]# /software/dovecot/sbin/dovecot -c /etc/dovecot.conf [root@chenyi dovecot-1.1.4]# echo "/software/dovecot/sbin/dovecot -c /etc/dovecot.conf" >> /etc/rc.local
查看查看端口
[root@chenyi dovecot-1.1.4]# /software/dovecot/sbin/dovecot -c /etc/dovecot.conf [root@chenyi dovecot-1.1.4]# netstat -pant | grep 110 #143你自己测把。。。。 tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 20068/dovecot
测试测试
[root@chenyi dovecot-1.1.4]# telnet mail.itchenyi.com 110 Trying 192.168.24.220... Connected to mail.itchenyi.com. Escape character is '^]'. +OK Dovecot ready. user chenyi1 +OK pass 123 +OK Logged in. quit +OK Logging out. Connection closed by foreign host.
安装个webmail试试[如果对你自己充满了信心,请略过这里]
[root@chenyi postfix]# tar zxf squirrelmail-webmail-1.4.22.tar.gz [root@chenyi postfix]# mv squirrelmail-webmail-1.4.22 /software/apache2/htdocs/webmail [root@chenyi postfix]# cd /software/apache2/htdocs/webmail/ [root@chenyi webmail]# mkdir -p attach data/ [root@chenyi webmail]# chown -R daemon:daemon attach/ data/ [root@chenyi webmail]# chmod 730 attach/ [root@chenyi webmail]# cp config/config_default.php config/config.php 118 $domain = 'itchenyi.com'; 146 $smtpServerAddress = 'localhost'; 151 $smtpPort = 25; 210 $imapPort = 143; 231 $imap_server_type = 'dovecot'; 499 $data_dir = '/software/apache2/htdocs/webmail/data/'; 517 $attachment_dir = '/software/apache2/htdocs/webmail/attach/';
重启apache服务
[root@chenyi webmail]# /software/apache2/bin/apachectl stop [root@chenyi webmail]# /software/apache2/bin/apachectl start
访问该网站
登录chenyi2 收到了邮件(收发过程省略)