Postfix 电子邮件系统精要.docx
- 文档编号:11146321
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:62
- 大小:379.91KB
Postfix 电子邮件系统精要.docx
《Postfix 电子邮件系统精要.docx》由会员分享,可在线阅读,更多相关《Postfix 电子邮件系统精要.docx(62页珍藏版)》请在冰点文库上搜索。
Postfix电子邮件系统精要
Postfix电子邮件系统精要配置一个postfix邮件系统,远比我先前的想象复杂。
这次共配置2个postfix系统,花了不少精力,其间也经历不少麻烦,还好,最后都做成了!
在配置过程中,参考了《postfix权威指南》和网上其他人写的文章,但在实际的配置中,完全按照这些文档还是不易顺利完成。
现在此行文披露我做这个事情的全部过程,希望对大家的工作有所帮助。
◆运行环境
操作系统是centos5,其下载地址为www.centos.org,它是redhatas5最佳的替代品(原因:
开源且免费下载);postfix使用的版本是postfix-2.2.10.tar.gz,postfix(www.postfix.org)当前的稳定版本是2.4,由于2.4不支持SASL,所以我选了老一点的版本。
其他所需的软件在下表列出:
名称
用途
下载地址
Apache(httpd-2.2.0)
Web方式管理邮件
www.apache.org
Php(php-5.2.3)
Php解释器,与apache一起使用
www.php.org
Mysql(mysql-5.0.41)
用数据库存储用户信息
Postfixadmin(postfix-2.1.0)
邮件帐号后台web管理工具
SASL(cyrus-sasl-2.1.21.tar.gz)
验证方法
http:
//ftp.andrew.cmu.edu/pub/cyrus-mail/
Authlib(courier-authlib-0.59.3.tar.bz2)
与SASL一起做验证
http:
//www.courier-mta.org/download.php
Postfix
邮件系统主程序
http:
//www.postfix.org
Courier-imap(courier-imap-4.1.3.tar.bz2)
Pop3及IMAP服务
http:
//www.courier-mta.org/
Perl(perl-5.8.8)
解释器
http:
//www.cpan.org
Maildrop(maildrop-2.0.4.tar.bz2)
邮件投递代理,直观的讲就是把收到的邮件转发到用户的邮箱目录
http:
//www.courier-mta.org/
Clamav(clamav-0.91.2.tar.gz)
杀毒软件
http:
//www.clamav.org/
amavisd-new(amavisd-new-2.5.2.tar.gz)
扫描邮件病毒
http:
//www.ijs.si/software/amavisd
Spamassassin(SpamAssassin3.2.3)
防垃圾邮件
http:
//spamassassin.apache.org/
Pcre(pcre-7.2.tar.bz2)
安装Imap需要--Perl兼容正则表达式
http:
//www.pcre.org
Extmail(extmail-1.0.1.tar.gz)
webmail
http:
//www.extmail.org
◆准备工作
1、下载所需的软件:
照上面给出的地址找到下载URL,然后用wget下载。
由于服务器一般不安装xwindow这样的桌面环境,那怎样知道下载文件的url呢?
用windows呢,通过securecrt这样的ssh工具连接和管理远程linux服务器,这样就很容易办到了。
在实际的工作中,我习惯把文件下载到/root目录,原因是普通用户看不见我下载的东西。
图1
2、清理系统:
不管你喜不喜欢,安装系统时sendmail这个邮件服务软件已经安装上去了,可是一山不容二虎,既然我们选定了功能强大的postfix,那么sendmail就一边歇着吧。
运行命令rpm-e-nodepssendmail就达到这个目的了。
第2个需要卸载的软件是SASL,为什么要卸载它呢?
因为系统自带的版本不太容易与authlib正常配合,所以需要把它删除掉。
第3个要删除的是perl.本打算用系统自带的perl,可是在执行命令perl-MCPAN-e shell时居然出现"segmentfault",导致很多功能不能使用,看来也只好删了重装一个。
下面总结一下这个过程:
1、SASL
(1)列出包
rpm-qa|grepsasl
cyrus-sasl-2.1.19-5.EL4
cyrus-sasl-gssapi-2.1.19-5.EL4
cyrus-sasl-devel-2.1.19-5.EL4
cyrus-sasl-ntlm-2.1.19-5.EL4
cyrus-sasl-md5-2.1.19-5.EL4
cyrus-sasl-sql-2.1.19-5.EL4
cyrus-sasl-plain-2.1.19-5.EL4
(2)删除包
rpm–e–nodepscyrus-sasl-2.1.19-5.EL4cyrus-sasl-gssapi-2.1.19-5.EL4cyrus-sasl-devel-2.1.19-5.EL4//把上面查查来的全部列在这后面全卸载掉。
nodeps前面是两”-“!
然后进目录/usr/lib查一下ls–al/usr/lib|grepsasl应该没有目录sasl及sasl2了。
2、Perl
(1)列出包
rpm-qa|grepperl
perl-DateManip-5.42a-3
perl-XML-Encoding-1.01-26
perl-LDAP-0.31-5
perl-XML-LibXML-Common-0.13-7
groff-perl-1.18.1.1-3
openssl-perl-0.9.7a-43.1
…………(省略若干)
perl-suidperl-5.8.5-12.1.1
(2)删除包
rpm–e–nodepsperl-DateManip-5.42a-3//照上面的例子删除所以的包。
由于包太多,用一个//rpm命令后面带的参数太长,建议一个一个收拾。
执行完删除命令后,再运行命令perl–v,如果出现“-bash:
perl:
commandnotfound”则表明已经把perl清理掉了。
3、创建邮件系统运行时所需的用户和组:
创建用户和组绝不仅仅是为了练习userad和groupadd这两个命令,因为安全方面的原因,一些软件不能以root用户来运行,甚至在安装过程中,如果没有为该软件预先创建用户,安装将不能进行下去,因此,我们在这里先创建这些运行postfix系统所需的用户和组。
对centos或redhat等发行版而言,用命令useradd创建用户时也就创建了一个同名的组,而另外一些linux发行版(如debian)或unix(如solaris10),创建用户时并不会同时创建同名的组,这需要手动执行命令单独创建所需的组。
下面我用表格的方式列出postfix系统所需要创建的用户及组的情况:
用户名
组名
作用
备注
mysql
Mysql
数据库mysql运行用户
vmail
Vmail
Postfix虚拟邮件帐号所使用的用户及组
uid,gid:
1001,1001
postfix
Postfix
Postfix主程序使用的帐号和组
Postdrop
Postfixsetgid_group
setgid_group=postdrop
amavis
Amavis
邮件扫描
clamav
Clamav
病毒扫描
这里有2个值得注意的地方,它们是vmail用户、组及postdrop组。
在postfix邮件系统中,有好几个程序是以vmail来运行的(这些情况将在后面逐个说明);postdrop这个组,我看了很多人写的文档,无一例外的都有创建这个组的操作,但没有任何人说明这个组是干什么用的,给人很突兀的感觉,因此我在这里特别把它列出来了-它的作用是setgid_group-在postfix的主配置文件main.cf里标明了的。
[root@mail~]#greppostdrop/etc/postfix/main.cf
setgid_group=postdrop
◆安装apache,mysql和php
1、apache
tarzxvfhttpd-2.2.0.tar.gz
cdhttpd-2.2.0
./configure-prefix=/usr/local/apache-enable-so//选项prefix,enanle前面是两个"-"
make
makeinstall
上述步骤执行完毕后,将生成目录/usr/local/apache,进入这个目录检查一下,看相关的文件和目录是否存在?
下图是一个正确安装apache后的目录结构:
图2
执行命令/usr/local/apache/bin/httpd-l检查编译进来的模块有哪些。
最主要的是mod_so模块。
即下面最后一个mod_so.c。
这样做的目的是为了以模块方式加载php.现在我们先不忙着配置apache,等到后面再做这个工作。
2、mysql
tarzxvfmysql-5.0.41.tar.gz
cdmysql-5.0.41
./configure-prefix=/usr/local/mysql
make,makeinstall //安装完成
useraddmysql
cpsupport-files/my-f /etc/f
cd/usr/local/mysql
/usr/local/mysql/bin/mysql_install_db --user=mysql//初始化数据库
chown-Rroot.
chown-Rmysqlvar
chgrp-Rmysql.
3、php
cd //进/roor目录
tarzxvfphp-5.2.3.tar.gz
cdphp-5.2.3
./configure-prefix=/usr/local/php-with-apsx2=/usr/local/apache/bin/apxs-with-mysql=/usr/local/mysql //如果不先安装mysql,这一步将不能进行下去
make;makeinstall
cp php.ini-dist/usr/local/php/lib/php.ini
在配置过程中,除了指定安装目录外,还有-with-apxs2和-with-mysql这两个选项。
-with-apxs2的作用是与apache的工具apxs配合,产生模块文件到目录/usr/local/apache/modules/,同时在apache的配置文件中写入一行"LoadModulephp5_module modules/libphp5.so";
[root@myestmodules]#ll
total12212
-rw-r--r--1rootroot8873Jul3014:
55httpd.exp
-rwxr-xr-x1rootroot12473318Jul3109:
29libphp5.so
选项-with-mysql的作用非常重要,如果不加这个,以后在使用web管理工具postfixadmin时将出现不能连接数据库的错误。
接着我们需要把php与apache整合在一起,这个过程很简单,由于在安装php时已经完成了一部分工作,接下来只要在apache的配置文件httpd.conf加上"AddTypeapplication/x-httpd-php.php"这么一行就行了(注意:
.php前面有一个空格)。
在目录/usr/local/apache/htdocs下创建一个最简单的php测试文件,其内容为:
vitest.php
phpinfo();
?
>
检查一下apache配置文件是否正确(/usr/local/apache/bin/apachectl-t),输出"SyntaxOK"后就可以启动apache服务(/usr/local/apache/bin/apachectlstart)。
在别的机器的浏览器输入我们配置的这个服务器的url,正常的话,将得到类似下图的页面:
图3
上面几个软件的安装相对来说还是比较容易操作的,这里我全是用GNU源码定制安装,这相对于2进制包的安装方式而已,有几个好处:
①软件的相互依赖性较小(安装过rpm包的人对这个应该有深刻的认识)。
②跨平台。
这样的安装方式适用各种unix/linux系统。
③维护方便。
使用了选项-prefix指定安装目录,所有的文件目录都集中在这个安装目录里,维护起来非常方便。
因此,在这里强烈推荐大家适用GNU源码方式安装。
◆安装和配置SASL、Authlib
最好先安装courier-authlib。
为什么呢?
因为后面配置SASL验证smtp时需要authlib的socket路径。
1、安装和配置courier-authlib
1)安装
tarjxvfcourier-authlib-0.59.3.tar.bz2
cdcourier-authlib-0.59.3
./configure--with-redhat--with-authmysql=yes--with-mailuser=vmail\--with-mailgroup=vmail--with-mysql-libs=/usr/local/mysql/lib/mysql\--with-mysql-includes=/usr/local/mysql/include/mysql\
--prifix=/usr/local/authlib--without-stdheaderdir
make
makeinstall
makeinstall-configure
一般情况下,anthlib的安装应该是容易完成的。
安装完成后,我们先找出配置文件中authdaemonvar的设置,这个值是干什么用的呢?
它是后面SASL验证SMTP所必须的,因此需要先把它找出来,以便后面的配置能够准确无误。
关于这个问题的教训,在配置sasl的时候再做说明。
在我的安装中,authdaemonvar的设置如下:
[root@mail~]#grep"authdaemonvar"/usr/local/authlib/etc/authlib/authdaemonrc
##NAME:
authdaemonvar:
2
#authdaemonvarishere,butisnotuseddirectlybyauthdaemond.It's
authdaemonvar=/usr/local/authlib/var/spool/authdaemon
(2)配置authlib.在目录/usr/local/authlib/etc/authlib中,修改文件authdaemonrc及authmysqlrc。
vi/usr/local/authlib/etc/authlib/authdaemonrc
authmodulelist="authmysql"
authmodulelistorig="authmysql"
DEBUG_LOGIN=2
修改上面3项,其他的项保持不便。
这个修改前2行表示用mysql认证模块;把DEBUG_LOGIN的值有默认的“0”改成“2”的用意是运行postfix时有更多的信息输出,通过生成的日志以帮助排错。
vi/usr/local/authlib/etc/authlib/authmysqlrc
MYSQL_SERVERlocalhost
MYSQL_USERNAMEpostfix
MYSQL_PASSWORDpostfix
MYSQL_DATABASEpostfix
MYSQL_SOCKET/tmp/mysql.sock
MYSQL_USER_TABLEmailbox
#MYSQL_CRYPT_PWFIELDpassword
MYSQL_CLEAR_PWFIELDpassword
DEFAULT_DOMAIN
MYSQL_UID_FIELD'1001'
MYSQL_GID_FIELD'1001'
MYSQL_LOGIN_FIELDusername
MYSQL_HOME_FIELD'/var/mailbox/'
MYSQL_NAME_FIELDname
MYSQL_MAILDIR_FIELDmaildir
MYSQL_QUOTA_FIELDconcat(quota,’S’)
MYSQL_WHERE_CLAUSEactive='1'
照上面的格式修改,这是比较容易出错的地方,要特别小心。
我曾经把MYSQL_USER_TABLEmailbox这一项的mailbox写成mailbov导致sasl验证一直没法通过!
特别注意MYSQL_UID_FIELD和MYSQL_GID_FIELD字段的值,这里是‘1001’,也可以是其它的,但一定要与vmail用户及组相一致(idvmail可以得出这2者的值)
2、安装和配置SASL.
(1)安装
tarzxvfcyrus-sasl-2.1.21.tar.gz
cdcyrus-sasl-2.1.21
./configure --disable-anon-enable-plain--enable-login --enable-sql--with-mysql=/usr/local/mysql --with-mysql-includes=/usr/local/mysql/include/mysql --with-mysql-libs=/usr/local/mysql/lib/mysql --with-authdaemond
make
makeinstall
如果在编译过程(make)出现错误,如“client.c:
64:
error:
staticdeclarationof'global_callbacks'followsnon-staticdeclarationsaslint.h:
112…”,需要加一个补丁程序,然后再执行编译过程。
用vi在当前位置创建补丁文件,起名为sasl.patch,其内容包括:
---cyrus-sasl-2.1.20/lib/client.c~2003-11-1111:
26:
06.000000000-0500
+++cyrus-sasl-2.1.20/lib/client.c2005-05-3122:
34:
14.000000000-0400
@@-61,7+61,7@@
staticcmech_list_t*cmechlist;/*globalvarwhichholdsthelist*/
-staticsasl_global_callbacks_tglobal_callbacks;
+sasl_global_callbacks_tglobal_callbacks;
staticint_sasl_client_active=0;
ln-s/usr/local/lib/sasl2/usr/lib/sasl2 //sasl的安装目录是/usr/local/lib/sasl
echo"/usr/local/lib">>/etc/ld.so.conf //指定动态连接库的位置
ldconfig //共享动态链接库生效
(2) 配置
创建文件/usr/local/lib/sasl2/smtpd.conf,并加入如下内容:
pwcheck_method:
authdaemond
mech_list:
PLAINLOGIN
log_level:
3
authdaemond_path:
/usr/local/authlib/var/spool/authdaemon/socket
最后一行authdaemond_paeth的设置来自anthlib的配置文件authlibdaemonrc,千万不要把这个弄错了,我当初的smtp验证一直通不过就是由于这个原因。
通过查看进程也可以知道这个路径(前提是authlib正常运行了),如下图所示:
图4
Sasl2需要使用文件/usr/local/authlib/var/spool/authdaemon/socket,但默认情况下,其属性是744,需要把它加上执行权限,以便文件属组(主)而外的其它用户可以执行。
运行命令
chmod+x/usr/local/authlib/var/spool/authdaemon
即可,如果不这样处理,smtp验证无一例外会失败的。
那么这里所说的其它用户是什么用户呢?
答:
postfix。
◆安装和配置postfixadmin
Postfixadmin是postfix邮件系统的web管理工具,有了这个工具,管理和维护用户帐号就方便多了。
假如不用工具,就需要手动修改数据库,谁愿意这样做?
安装postfixadmin比较简单,解压包postfix-2.2.11.tar.gz,然后把它移动到某个目录下,其过程如下:
cd/root
tarzxvfpostfixadmin-2.2.11.tar.gz
mvpostfixadmin-2.2.11/var/www/postfixadmin
现在postfixadmin的目录是/var/www/postfixadmin,为了能够让它按照我们的意愿工作,需要用命令chown-Rvmail:
vmail/var/www/postfixadmin更改属主。
这样,postfixadmin的安装就算完成了。
接着我们来配置它,这个过程要复杂一点,我在这里分几步进行。
(1)修改相关的配置文件。
Postfixadmin第一个需要修改配置文件是config.inc.php,但事实上却没有这个文件,不要紧,把config.inc.php.sample搬过来就是了(cpconfig.inc.php.sampleconfig.ini.php),再来看一下目录结构:
[root@mailserv2postfixadmin]#pwd
/mail/www/postfixadmin
[root@mailserv2postfixadmin]ll
total236
drwxr-xr-x2vmailvmail4096Sep1616:
06ADDITIONS
drwxr-xr-x2vmailvmail 4096Sep1619:
31admin
-rw-r--r--1vmailvmail1195
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Postfix 电子邮件系统精要 电子邮件 系统 精要