RHEL5.4 Postfix 邮件系统的安装
第一篇 邮件系统简介邮件系统组成部分: MTA MSA ,MUA,MDA,MAA1 MUA :是Mial User Agent 的简称 ,是邮件系统的客户端程序,它提供了阅读,发送和接受电子邮件
第一篇 邮件系统简介
邮件系统组成部分: MTA MSA ,MUA,MDA,MAA
1 MUA :是Mial User Agent 的简称 ,是邮件系统的客户端程序,它提供了阅读,发送和接受电子邮件的用户接口,如:linux 中的Mail ,Windowns 中的Foxmail ,Outlook 等
2 MSA :是Mail Submmission Agent的简称。是邮件提交代理,负责消息有MTA 发送之前必须完成所有准备工作和错误检测,MSA 是在MUA 和MTA 之间插入了一个头脑清醒的检测员,对所有的主机名,从MUA 得到的头信息等信息进行检测
3 MTA:是Mail Transfer Agent 的简称,邮件转发代理,负责邮件的存储和转发;监视用户的代理请求,根据电子邮件的目标地址找出对应的电子邮件服务器,并将信件在服务器之间传输并且将接受到的邮件进行缓冲。Linux 下有sendmail .Postfix,qmail 等
4 MDA :是Mail Ddlivery Agent 的简称。邮件投递代理,从MTA 接受邮件并进行适当的本地投递,可以投递一个本地用户,一个邮件列表,一个文件或者是一个程序
5 MAA :是Mail Access Agent。邮件访问代理,用于将用户连接到系统邮件库,使用POP 或者Imap 协议收取邮件。Linux 下常用的MAA 有,Cyrus-IMAP,COURIER-IMAP 等邮件中继,当邮件的目的传输是一旦源地址和目的地址都不是本地系统,那么本地系统就是邮件中继站(即是中转站)
6 邮件交换过程如下图
第二篇 Postfix 的安装
邮件系统的逻辑结构
,注:配置postfix 系统时需要在DNS 服务器中配置邮件服务器MX 记录 需要的软件包
mysql-5.5.4-m3.tar.gz
openssl-1.0.0b.tar.tar
pcre-8.10.zip
perl-5.12.2.tar.gz
php-5.2.14.tar.bz2
postfix-2.7.1.tar.gz
Unix-Syslog-1.1.tar.gz.gz
zlib-1.2.5.tar.gz
extman-1.1.tar.gz
extmail-1.2.tar.gz
DBD-mysql-4.018.tar.gz.gz
db-4.8.26.tar.gz
cyrus-sasl-2.1.23.tar.gz
courier-imap-4.8.1.tar.bz2
courier-authlib-0.63.0.tar.bz2
courier-analog-0.16.tar.bz2
clamav-0.96.5.tar.gz
maildrop-2.5.2.tar.bz
Mail-SpamAssassin-3.3.1.tar.gz
GD-2.45.tar.gz.gz
第二. 安装mysql
1 添加mysql 用户
#groupadd mysql
#useradd –g mysql –s /bin/false –M mysql
2 编译安装mysql
#tar xvf mysql-5.5.4-m3.tar.gz
#cd mysql-5.5.4-m3
# ./configure
--prefix=/usr/local/mysql
--enable-thread-safe-client
,--enable-local-infile
--with-charset=gbk
--with-extra-charset=all
--with-low-memory
#make && make install
#cp support-files/my-medium.cnf /etc/my.cnf
#cd /usr/local/mysql
#chown –R mysql.mysql .
#bin/mysql_install_db –user=mysql
#chown –R root .
#chown –R mysql var
#bin/mysqld_safe –user=mysql &
#cd /root/postfix/mysql-5.5.4-m3
#cp support/mysql.server /etc/rc.d/init.d/mysqld
#chmod 700 /etc/rc.d/init.d/mysqld
3 把mysql 加入到自动启动队列
#chkconfig –add mysqld
#chkconfig mysqld on
4 测试mysql
#/usr/local/mysql/bin/mysqladmin ping
mysqld is alive
#/usr/local/mysql/bin/mysqladmin version
#/usr/local/mysql/bin/mysql
5 添加root 用户的密码
#/usr/local/mysql/bin/mysqladmin –uroot –p “Oldpassword” password “newpassword”
注:此时的mysql 的root 用户的密码为空
6 配置mysql 的库文件搜索路径
#echo “/usr/local/mysql/lib/mysql” >>/etc/ld.so.conf
#ldconfig –v
注:一定要执行ldconfig –v 不然当前不会去指定的mysql 的库文件中查找mysql 的库文件
7 把/usr/local/mysql/bin 添加到环境变量PATH 中
#vim /etc/profile
PATH=$PATH:/usr/local/mysql/bin
Export PATH
并执行
#source /etc/profile
,第三 安装openssl ,在解压安装openssl 时一定要配置好当前的系统时间,否则,在 解压是和安装时会报错
1 安装openssl
# openssl-1.0.0b.tar.tar
#cd openssl-1.0.0b
#./configure shared zlib
#make
#make test
#make install
2 删除系统中的openssl 文件
# mv /usr/bin/openssl /usr/bin/openssl.OFF
# mv /usr/include/openssl /usr/include/openssl.OFF
# rm /usr/lib/libssl.so
3 创建新编译的openssl 文件
# ln -sv /usr/local/ssl/bin/openssl /usr/bin/openssl
# ln -sv /usr/local/ssl/include/openssl /usr/include/openssl
#ln –sv /usr/local/ssl/lib/libssl.so.1.0.0 /usr/lib/libssl.so
4 配置openssl 库文件搜索路径
#echo “/usr/local/ssl/lib” /etc/ld.so.conf
#ldconfig –v
5 检测openssl 的版本
#openssl version
OpenSSL 1.0.0b 16 Nov 2010
第四 安装cyrus-sasl
1 安装cyrus-sasl
#tar xvf cyrus-sasl-2.1.23.tar.gz
#cd cyrus-sasl-2.1.23
# ./configure --prefix=/usr/local/sasl2 (注意使用续行符)
--disable-gssapi
--disable-anon
--disable-sample
--disable-digest
--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=/usr/local/courier-authlib/var/spool/authdaemon/socket
#make
#make install
2 关闭系统自带的sasl
#mv /usr/lib/libsasl2.a /usr/lib/libsasl2.a.OFF
#mv /usr/lib/libsasl2.so.2.0.22 /usr/lib/libsasl2.so.2.0.22.OFF
#mv /usr/lib/sasl2 /usr/lib/sasl2.OFF
#rm /usr/lib/libsasl2.so
#rm /usr/lib/libsasl2.so.2
3 重新创建新编译的sasl 库文件
#ln –sv /usr/local/sasl2/lib/* /usr/lib
Postfix2.3 以后的版本会分别在/usr/local/lib 和/usr/local/include 中搜索sasl 的库文件及其头文件,因此需要将其连接至此
#ln –sv /usr/local/sasl2/lib/* /usr/local/lib
#ln –sv /usr/local/sasl2/include/sasl/* /usr/local/include
4 创建运行时需要的目录并调试启动
# mkdir -pv /var/state/saslauthd
# /usr/local/sasl2/sbin/saslauthd -a shadow pam -d
5 启动并测试
#/usr/local/sasl2/sbin/saslauthd –a shadow pam
#/usr/local/sasl2/sbin/testsaslauthd –u root –p root用户密码
6 添加配之文件搜索路径
#echo “/usr/local/sasl2/lib" >> /etc/ld.so.conf
# echo "/usr/local/sasl2/lib/sasl2" >> /etc/ld.so.conf
# ldconfig –v 注:一定要执行该命令,否则不会生效,除非是重启系统
7 添加开机自动启动
#echo “/usr/local/sasl2/sbin/saslauthd -a shadow pam ” >>/etc/rc.local
,第五 安装BerkeleyDB
1 解压并安装
#tar xvf DBD-mysql-4.018.tar.gz.gz
#cd DBD-mysql-4.018/dist
#./configure --prefix=/usr/local/BerkeleyDB
#make
#make install
2 修改相应的头文件
#mv /usr/include/db4 /usr/include/db4.OFF
# rm /usr/include/db_cxx.h
#rm /usr/include/db.h
#rm /usr/include/db_185.h
# ln -sv /usr/local/BerkeleyDB/include /usr/include/db4
# ln -sv /usr/local/BerkeleyDB/include/db.h /usr/include/db.h
# ln -sv /usr/local/BerkeleyDB/include/db_cxx.h /usr/include/db_cxx.h
3 配置库文件搜索路径
#echo “/usr/local/BerkeleyDB/lib “ >>/etc/ld.so.conf
#ldconfig –v
第六 安装httpd
1 安装httpd
#tar xfv httpd-2.2.17.tar.gz.gz
#cd httpd-2.2.17
#./configure
--prefix=/usr/local/apache
--enable-so
--enable-ssl
--with-ssl=/usr/local/ssl
--enable-track-vars
--enable-rewrite
--with-zlib
--enable-mods-shared=most
--enable-suexec (后面extmail 切换”运行时用户”时要用到)
--with-suexec-caller=daemon
#make
#make install
2 配置开机启动
#echo “/usr/local/apache/bin/apachectl start”>>/etc/rc.local
第七,安装php
,1 安装php-5.2.14.tar.bz2
#tar xvf php-5.2.14.tar.bz2
#cd php-5.2.14
#./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs
--with-mysql=/usr/local/mysql
-with-mysqli=/usr/local/mysql/bin/mysql_config
--with-libxml-dir
--with-png-dir
--with-jpeg-dir
--with-zlib
--with-freetype -dir
--with-gd-dir
--enable-mbstring=all
#make
#make install
2 配置php 的配置文件
#cp php.ini-dist /usr/local/php/lib/php.ini
3 整合php 和apahce ,且apache 支持php
#cd /usr/local/apache/conf
#vim httpd.conf
并找到AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz 并在其后添加一下两行 AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
4 找到DirectoryIndex index.html
修改为:
DirectoryIndex index.php index.html
5 验证apache 是否能够正常支持配php 文件
在/usr/local/apache/htdocs 中创建
#vim Test.php
Phpinfo();
?>
6 重启apache
#/usr/local/apache/bin/apachectl stop
#/usr/local/apache/bin/apachectl start
7 访问http ://IP/Test.php能够正常显示php 的版本号及其配置信息
,8 将网站根目录指定到/var/www:
找到DocumentRoot “/usr/local/apache/htdocs”
修改为:DocumentRoot “/var/www”(后文中我们还会注释掉此行,以启用虚拟主机)
找到
修改为:
第八 安装postfix
1 创建postfix 和postdrop 用户
#groupadd –g 2525 postfix
#useradd –g postfix –u 2525 –s /sbin/nologin –M postfix
#groupadd –g 2526 postdrop
#useradd –g postdrop –u 2526 –s /bin/false –M postdrop
2 安装postfix-2.7.1
#tar xvf postfix-2.7.1.tar.gz
#cd postfix-2.7.1
#make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/sasl2/include/sasl -I/usr/local/BerkeleyDB/include -DUSE_TLS -I/usr/local/ssl/include/openssl ' 'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm -L/usr/local/sasl2/lib -lsasl2 -L/usr/local/BerkeleyDB/lib -L/usr/local/ssl/lib -lssl -lcrypto'
#make
#make install
按照以下的提示输入相关的路径
daemon_directory: [/usr/local/postfix/libexec]
data_directory: [/usr/local/postfix/lib]
html_directory: [/var/www/postfix_html]
mail_owner: [postfix]
mailq_path: [/usr/bin/mailq]
manpage_directory: [/usr/local/postfix/man]
newaliases_path: [/usr/bin/newaliases]
queue_directory: [/var/spool/postfix]
readme_directory: [no]
sendmail_path: [/usr/sbin/sendmail]
setgid_group: [postdrop]
,3 生成别名二进制文件,此步能够提高postfix 的效率,如果不生成二进制文 件。Postfix 的效率比较低下
#newaliases
4 配置postfix ,并启动,测试postfix 并进行发言
#cd /etc/postfix/
#vim main.cf
myhostname = mail.frank.net
mydomain = frank.net
myorigin = frank.net
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.18.0/24, 127.0.0.0/8
说明:
myorigin 参数用来指明发件人所在的域名;
mydestination 参数指定postfix 接收邮件时收件人的域名,即您的postfix 系统要接收到哪个
域名的邮件;
myhostname 参数指定运行postfix 邮件系统的主机的主机名,默认情况下,其值被设定为本
地机器名;
mydomain 参数指定您的域名,默认情况下,postfix 将myhostname 的第一部分删除而作为
mydomain 的值;
mynetworks 参数指定你所在的网络的网络地址,postfix 系统根据其值来区别用户是远程的
还是本地的,如果是本地网络用户则允许其访问;
inet_interfaces 参数指定postfix 系统监听的网络接口;
当然在上面的myorigin=frank.net 同时也可以用$mydomain 来代替frank.net
在配置或者修改postfix 配置文件是,必须重新启动postfix 或者reload ,配置才能生效,
但是如果是修改inet_interfaces,则需要重新启动postfix
如果一个参数的值有多个,可以将它们放在不同的行中,只需要在其后的每个行前多置一个
空格即可;postfix 会把第一个字符为空格或tab 的文本行视为上一行的延续
5 启动postfix
#/usr/local/postfix/sbin/postfix start
6 连接postfix ,并验证postfix 是否正常启动
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 mail.frank.net ESMTP Postfix
,ehlo mail.frank.net
250-mail.frank.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:root@frank.net
250 2.1.0 Ok
rcpt to:RedHat@frank.net
250 2.1.5 Ok
data
354 End data with
subject:test!
test!!!
. 250 2.0.0 Ok: queued as AB94A1A561
quit
221 2.0.0 Bye
Connection closed by foreign host.
7 切换到redhat ,查看是否收到email 切换到redhat 用户进行收信: # su - redhat
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/redhat": 1 message 1 new
>N 1 root@frank.net Wed Sep 8 22:40 16/566 "test!"
&
第九 为postfix 开启基于cyrus-sasl 的认证
1 确认postfix 是否支持cyrus 风格的sasl 的认证,
#/usr/local/postfix/sbin/postconf –a
cyrus
dovecot
如果出现上面的信息,说明postfix 支持cyrus 认证