使用Postfix,Courier,MySQL和SquirrelMail的虚拟用户和域(CentOS 5.3 x86_64)
版本1.0
作者:Falko Timme
本教程由Falko Timme提供的版权所有(c)2009。 它来自Christoph Haas的教程,您可以在http://workaround.org找到。 您可以根据知识共享许可2.5或更高版本免费使用本教程。
本文档介绍如何安装基于虚拟用户和域的Postfix邮件服务器,即MySQL数据库中的用户和域。 我还将展示Courier(Courier-POP3,Courier-IMAP)的安装和配置,以便Courier可以针对Postfix使用的相同的MySQL数据库进行身份验证。
所得到的Postfix服务器能够使用SMTP-AUTH和TLS和配额 (默认情况下,配额不会内置到Postfix中),我将显示如何适当修补Postfix。 密码以加密形式存储在数据库中(我发现大多数文档都是处理明文密码,这是一个安全风险)。 除此之外,本教程还介绍了Amavisd , SpamAssassin和ClamAV的安装 ,以便电子邮件扫描垃圾邮件和病毒。 我还将展示如何将SquirrelMail安装为Webmail界面,以便用户可以读取和发送电子邮件并更改密码。
这种“虚拟”设置(MySQL数据库中的虚拟用户和域)的优点是,它比基于“真实”系统用户的设置性能要好得多。 通过此虚拟设置,您的邮件服务器可以处理数千个域和用户。 此外,更容易管理,因为您只需在添加新用户/域或编辑现有的MySQL数据库时处理MySQL数据库。 没有更多的postmap命令来创建数据库文件,不需要再重新加载Postfix等。对于MySQL数据库的管理,您可以使用基于Web的工具,如phpMyAdmin,它也将安装在这个howto中。 第三个优点是用户使用电子邮件地址作为用户名(而不是用户名+电子邮件地址),这更容易理解和记住。
这是一个实践指南; 它不包括理论背景。 他们在网络上的许多其他文档中被处理。
本文档不附带任何形式的保证! 我想说,这不是设立这样一个制度的唯一办法。 实现这一目标有很多方法,但这是我所采取的方式。 我不会保证这将为您工作!
1初步说明
本教程基于CentOS 5.3 x86_64,因此您应该在继续本教程之前设置一个基本的CentOS 5.3服务器安装(例如, 完美服务器 - CentOS 5.3 x86_64的前6章)。 系统应该有一个静态IP地址。 我在本教程中使用192.168.0.100
作为我的IP地址,将server1.example.com
用作主机名。
您应该确保防火墙已关闭(至少现在),并且SELinux已禁用 (这很重要!)。
我在x86_64系统上测试了这个设置。 对于i386系统,设置应该相似或甚至相同,但是我没有测试。
2安装一些软件
首先我们更新系统上现有的软件包:
yum update
现在我们安装一些我们以后需要的软件:
yum groupinstall 'Development Tools'
yum groupinstall 'Development Libraries'
3安装Apache,MySQL,phpMyAdmin
首先,我们在CentOS系统上启用了RPMforge存储库 ,因为本教程中将要安装的许多软件包在官方CentOS 5.3存储库中不可用:
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
之后,我们可以使用一个命令来安装所需的软件包(包括构建Courier-IMAP所需的软件包):
yum install ntp httpd mysql-server php php-mysql php-mbstring rpm-build gcc mysql-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel phpmyadmin pcre-devel openldap-devel postgresql-devel expect libtool-ltdl-devel openldap-servers libtool gdbm-devel pam-devel gamin-devel
4安装Courier-IMAP,Courier-Authlib和Maildrop
不幸的是,Courier-IMAP,Courier-Authlib和Maildrop没有rpm包,因此我们必须自己构建它们。
RPM包不应该以root身份构建; 如果检测到编译以root用户身份运行,则courier-imap
甚至拒绝编译。 因此,我们现在创建一个正常的用户帐户(在这个例子中为falko
),并给他一个密码:
useradd -m -s /bin/bash falko
passwd falko
稍后我们将需要sudo
命令,以便用户falko
可以编译和安装rpm包。 但首先,我们必须允许falko
使用sudo
来运行所有命令:
跑
visudo
在打开的文件中有一个行根ALL =(ALL)ALL
。 在falko上
添加一条类似的行:
[...] ## Allow root to run any commands anywhere root ALL=(ALL) ALL falko ALL=(ALL) ALL [...] |
现在我们已经准备好构建我们的rpm包了。 首先成为用户falko
:
su falko
接下来我们创建我们的构建环境:
mkdir $HOME/rpm
mkdir $HOME/rpm/SOURCES
mkdir $HOME/rpm/SPECS
mkdir $HOME/rpm/BUILD
mkdir $HOME/rpm/BUILDROOT
mkdir $HOME/rpm/SRPMS
mkdir $HOME/rpm/RPMS
mkdir $HOME/rpm/RPMS/i386
mkdir $HOME/rpm/RPMS/x86_64
echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros
现在我们创建一个下载目录,并从http://www.courier-mta.org/download.php下载源文件:
mkdir $HOME/downloads
cd $HOME/downloads
wget http://prdownloads.sourceforge.net/courier/courier-authlib-0.62.2.tar.bz2
wget http://prdownloads.sourceforge.net/courier/courier-imap-4.4.1.tar.bz2
wget http://prdownloads.sourceforge.net/courier/maildrop-2.0.4.tar.bz2
现在(仍然在$ HOME /下载
)我们可以建立Expressauthlib:
sudo rpmbuild -ta courier-authlib-0.62.2.tar.bz2
在构建过程之后,可以在$ HOME / rpm / RPMS / x86_64
( $ HOME / rpm / RPMS / i386(
如果您在i386系统上))中找到rpm包:
cd $HOME/rpm/RPMS/x86_64
命令
ls -l
显示可用的rpm包:
[falko@server1 x86_64]$ ls -l
total 608
-rw-r--r-- 1 root root 139732 Apr 20 15:25 courier-authlib-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 328468 Apr 20 15:25 courier-authlib-debuginfo-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 35327 Apr 20 15:25 courier-authlib-devel-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 18307 Apr 20 15:25 courier-authlib-ldap-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 14497 Apr 20 15:25 courier-authlib-mysql-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 13711 Apr 20 15:25 courier-authlib-pgsql-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 8361 Apr 20 15:25 courier-authlib-pipe-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 35285 Apr 20 15:25 courier-authlib-userdb-0.62.2-1.x86_64.rpm
[falko@server1 x86_64]$
选择要安装的文件,并安装它们:
sudo rpm -ivh courier-authlib-0.62.2-1.x86_64.rpm
sudo rpm -ivh courier-authlib-devel-0.62.2-1.x86_64.rpm
sudo rpm -ivh courier-authlib-mysql-0.62.2-1.x86_64.rpm
现在我们回到我们的下载
目录:
cd $HOME/downloads
并再次运行rpmbuild
,这次没有sudo
,否则编译将失败,因为它以root身份运行:
rpmbuild -ta courier-imap-4.4.1.tar.bz2
在构建过程之后,可以在$ HOME / rpm / RPMS / x86_64
( $ HOME / rpm / RPMS / i386(
如果您在i386系统上))中找到rpm包:
cd $HOME/rpm/RPMS/x86_64
命令
ls -l
显示可用的rpm包:
[falko@server1 x86_64]$ ls -l
total 1920
-rw-r--r-- 1 root root 139732 Apr 20 15:25 courier-authlib-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 328468 Apr 20 15:25 courier-authlib-debuginfo-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 35327 Apr 20 15:25 courier-authlib-devel-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 18307 Apr 20 15:25 courier-authlib-ldap-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 14497 Apr 20 15:25 courier-authlib-mysql-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 13711 Apr 20 15:25 courier-authlib-pgsql-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 8361 Apr 20 15:25 courier-authlib-pipe-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 35285 Apr 20 15:25 courier-authlib-userdb-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 falko falko 391473 Apr 20 15:37 courier-imap-4.4.1-1.x86_64.rpm
-rw-r--r-- 1 falko falko 939716 Apr 20 15:37 courier-imap-debuginfo-4.4.1-1.x86_64.rpm
[falko@server1 x86_64]$
你可以这样安装courier-imap:
sudo rpm -ivh courier-imap-4.4.1-1.x86_64.rpm
现在我们回到我们的下载
目录:
cd $HOME/downloads
并再次运行rpmbuild
,这次建一个maildrop包:
sudo rpmbuild -ta maildrop-2.0.4.tar.bz2
在构建过程之后,可以在$ HOME / rpm / RPMS / x86_64
( $ HOME / rpm / RPMS / i386(
如果您在i386系统上))中找到rpm包:
cd $HOME/rpm/RPMS/x86_64
命令
ls -l
显示可用的rpm包:
[falko@server1 x86_64]$ ls -l
total 3172
-rw-r--r-- 1 root root 139732 Apr 20 15:25 courier-authlib-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 328468 Apr 20 15:25 courier-authlib-debuginfo-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 35327 Apr 20 15:25 courier-authlib-devel-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 18307 Apr 20 15:25 courier-authlib-ldap-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 14497 Apr 20 15:25 courier-authlib-mysql-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 13711 Apr 20 15:25 courier-authlib-pgsql-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 8361 Apr 20 15:25 courier-authlib-pipe-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 35285 Apr 20 15:25 courier-authlib-userdb-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 falko falko 391473 Apr 20 15:37 courier-imap-4.4.1-1.x86_64.rpm
-rw-r--r-- 1 falko falko 939716 Apr 20 15:37 courier-imap-debuginfo-4.4.1-1.x86_64.rpm
-rw-r--r-- 1 root root 298373 Apr 20 15:47 maildrop-2.0.4-1.x86_64.rpm
-rw-r--r-- 1 root root 767039 Apr 20 15:47 maildrop-debuginfo-2.0.4-1.x86_64.rpm
-rw-r--r-- 1 root root 134030 Apr 20 15:47 maildrop-devel-2.0.4-1.x86_64.rpm
-rw-r--r-- 1 root root 58400 Apr 20 15:47 maildrop-man-2.0.4-1.x86_64.rpm
[falko@server1 x86_64]$
你现在可以这样安装maildrop:
sudo rpm -ivh maildrop-2.0.4-1.x86_64.rpm
编译并安装所有需要的软件包后,您可以通过键入再次成为root
exit
5应用配额补丁到Postfix
我们必须得到Postfix源rpm,用配额补丁进行修补,构建一个新的Postfix rpm包并进行安装。
cd /usr/src
wget http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/5.3/os/SRPMS/postfix-2.3.3-2.1.el5_2.src.rpm
rpm -ivh postfix-2.3.3-2.1.el5_2.src.rpm
最后一个命令将显示一些您可以忽略的警告:
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
cd /usr/src/redhat/SOURCES
wget http://vda.sourceforge.net/VDA/postfix-2.3.3-vda.patch.gz
gunzip postfix-2.3.3-vda.patch.gz
cd /usr/src/redhat/SPECS/
现在我们必须编辑postfix.spec
文件:
vi postfix.spec
更改%将MYSQL 0定义
为%定义MYSQL 1
,将Patch0:postfix-2.3.3-vda.patch添加
到#Patches
节,最后将%patch0 -p1 -b .vda
添加到%setup -q
stanza中:
[...] %define MYSQL 1 [...] # Patches Patch0: postfix-2.3.3-vda.patch Patch1: postfix-2.1.1-config.patch Patch3: postfix-alternatives.patch Patch6: postfix-2.1.1-obsolete.patch Patch7: postfix-2.1.5-aliases.patch Patch8: postfix-large-fs.patch Patch9: postfix-2.2.5-cyrus.patch Patch10: postfix-CVE-2008-2936.patch [...] %setup -q # Apply obligatory patches %patch0 -p1 -b .vda %patch1 -p1 -b .config %patch3 -p1 -b .alternatives %patch6 -p1 -b .obsolete %patch7 -p1 -b .aliases %patch8 -p1 -b .large-fs %patch9 -p1 -b .cyrus %patch10 -p1 -b .CVE-2008-2936 [...] |
然后我们构建我们的新的Postfix rpm包,配额和MySQL支持:
rpmbuild -ba postfix.spec
我们的Postfix rpm包是在/ usr / src / redhat / RPMS / x86_64
(i386系统上的/ usr / src / redhat / RPMS / i386)
中创建的,所以我们去那里:
cd /usr/src/redhat/RPMS/x86_64
命令
ls -l
显示可用包:
[root@server1 x86_64]# ls -l
total 11732
-rw-r--r-- 1 root root 3940163 Apr 20 15:58 postfix-2.3.3-2.1.x86_64.rpm
-rw-r--r-- 1 root root 7999370 Apr 20 15:59 postfix-debuginfo-2.3.3-2.1.x86_64.rpm
-rw-r--r-- 1 root root 49761 Apr 20 15:58 postfix-pflogsumm-2.3.3-2.1.x86_64.rpm
[root@server1 x86_64]#
选择Postfix软件包,安装如下:
rpm -ivh postfix-2.3.3-2.1.x86_64.rpm