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

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 认证

标签: