RHEL5.4 Postfix 郵件系統(tǒng)的安裝
第一篇 郵件系統(tǒng)簡介郵件系統(tǒng)組成部分: MTA MSA ,MUA,MDA,MAA1 MUA :是Mial User Agent 的簡稱 ,是郵件系統(tǒng)的客戶端程序,它提供了閱讀,發(fā)送和接受電子郵件
第一篇 郵件系統(tǒng)簡介
郵件系統(tǒng)組成部分: MTA MSA ,MUA,MDA,MAA
1 MUA :是Mial User Agent 的簡稱 ,是郵件系統(tǒng)的客戶端程序,它提供了閱讀,發(fā)送和接受電子郵件的用戶接口,如:linux 中的Mail ,Windowns 中的Foxmail ,Outlook 等
2 MSA :是Mail Submmission Agent的簡稱。是郵件提交代理,負(fù)責(zé)消息有MTA 發(fā)送之前必須完成所有準(zhǔn)備工作和錯誤檢測,MSA 是在MUA 和MTA 之間插入了一個頭腦清醒的檢測員,對所有的主機(jī)名,從MUA 得到的頭信息等信息進(jìn)行檢測
3 MTA:是Mail Transfer Agent 的簡稱,郵件轉(zhuǎn)發(fā)代理,負(fù)責(zé)郵件的存儲和轉(zhuǎn)發(fā);監(jiān)視用戶的代理請求,根據(jù)電子郵件的目標(biāo)地址找出對應(yīng)的電子郵件服務(wù)器,并將信件在服務(wù)器之間傳輸并且將接受到的郵件進(jìn)行緩沖。Linux 下有sendmail .Postfix,qmail 等
4 MDA :是Mail Ddlivery Agent 的簡稱。郵件投遞代理,從MTA 接受郵件并進(jìn)行適當(dāng)?shù)谋镜赝哆f,可以投遞一個本地用戶,一個郵件列表,一個文件或者是一個程序
5 MAA :是Mail Access Agent。郵件訪問代理,用于將用戶連接到系統(tǒng)郵件庫,使用POP 或者Imap 協(xié)議收取郵件。Linux 下常用的MAA 有,Cyrus-IMAP,COURIER-IMAP 等郵件中繼,當(dāng)郵件的目的傳輸是一旦源地址和目的地址都不是本地系統(tǒng),那么本地系統(tǒng)就是郵件中繼站(即是中轉(zhuǎn)站)
6 郵件交換過程如下圖
第二篇 Postfix 的安裝
郵件系統(tǒng)的邏輯結(jié)構(gòu)
,注:配置postfix 系統(tǒng)時需要在DNS 服務(wù)器中配置郵件服務(wù)器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
注:一定要執(zhí)行l(wèi)dconfig –v 不然當(dāng)前不會去指定的mysql 的庫文件中查找mysql 的庫文件
7 把/usr/local/mysql/bin 添加到環(huán)境變量PATH 中
#vim /etc/profile
PATH=$PATH:/usr/local/mysql/bin
Export PATH
并執(zhí)行
#source /etc/profile
,第三 安裝openssl ,在解壓安裝openssl 時一定要配置好當(dāng)前的系統(tǒng)時間,否則,在 解壓是和安裝時會報錯
1 安裝openssl
# openssl-1.0.0b.tar.tar
#cd openssl-1.0.0b
#./configure shared zlib
#make
#make test
#make install
2 刪除系統(tǒng)中的openssl 文件
# mv /usr/bin/openssl /usr/bin/openssl.OFF
# mv /usr/include/openssl /usr/include/openssl.OFF
# rm /usr/lib/libssl.so
3 創(chuàng)建新編譯的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 (注意使用續(xù)行符)
--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 關(guān)閉系統(tǒng)自帶的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 重新創(chuàng)建新編譯的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 創(chuàng)建運行時需要的目錄并調(diào)試啟動
# 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 注:一定要執(zhí)行該命令,否則不會生效,除非是重啟系統(tǒng)
7 添加開機(jī)自動啟動
#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 修改相應(yīng)的頭文件
#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 配置開機(jī)啟動
#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 中創(chuàng)建
#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 將網(wǎng)站根目錄指定到/var/www:
找到DocumentRoot “/usr/local/apache/htdocs”
修改為:DocumentRoot “/var/www”(后文中我們還會注釋掉此行,以啟用虛擬主機(jī))
找到
修改為:
第八 安裝postfix
1 創(chuàng)建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
按照以下的提示輸入相關(guān)的路徑
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 生成別名二進(jìn)制文件,此步能夠提高postfix 的效率,如果不生成二進(jìn)制文 件。Postfix 的效率比較低下
#newaliases
4 配置postfix ,并啟動,測試postfix 并進(jìn)行發(fā)言
#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 參數(shù)用來指明發(fā)件人所在的域名;
mydestination 參數(shù)指定postfix 接收郵件時收件人的域名,即您的postfix 系統(tǒng)要接收到哪個
域名的郵件;
myhostname 參數(shù)指定運行postfix 郵件系統(tǒng)的主機(jī)的主機(jī)名,默認(rèn)情況下,其值被設(shè)定為本
地機(jī)器名;
mydomain 參數(shù)指定您的域名,默認(rèn)情況下,postfix 將myhostname 的第一部分刪除而作為
mydomain 的值;
mynetworks 參數(shù)指定你所在的網(wǎng)絡(luò)的網(wǎng)絡(luò)地址,postfix 系統(tǒng)根據(jù)其值來區(qū)別用戶是遠(yuǎn)程的
還是本地的,如果是本地網(wǎng)絡(luò)用戶則允許其訪問;
inet_interfaces 參數(shù)指定postfix 系統(tǒng)監(jiān)聽的網(wǎng)絡(luò)接口;
當(dāng)然在上面的myorigin=frank.net 同時也可以用$mydomain 來代替frank.net
在配置或者修改postfix 配置文件是,必須重新啟動postfix 或者reload ,配置才能生效,
但是如果是修改inet_interfaces,則需要重新啟動postfix
如果一個參數(shù)的值有多個,可以將它們放在不同的行中,只需要在其后的每個行前多置一個
空格即可;postfix 會把第一個字符為空格或tab 的文本行視為上一行的延續(xù)
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 用戶進(jìn)行收信: # 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 的認(rèn)證
1 確認(rèn)postfix 是否支持cyrus 風(fēng)格的sasl 的認(rèn)證,
#/usr/local/postfix/sbin/postconf –a
cyrus
dovecot
如果出現(xiàn)上面的信息,說明postfix 支持cyrus 認(rèn)證