2009年(48)
分类: LINUX
2009-09-17 11:41:04
2、postfix --mta 邮件系统核心
3、courier-authlib--一个为courier-imap,maildrop,sasl2 提供用户信息的后台进程序
4、courier-imap --提供pop3,pop3s,imap,imaps 服务的程序
5、amavisd-new --提供内容过滤
6、clamav -- 著名的杀毒软件
7、extmail --一个著名的webmail程序
8、extman --与extmail集成的后台管理程序
9、slockd --一个基于smtp阶段的反垃圾邮件程序
10、 vhmgr --由本文作者编写,用于管理apache,ftp,mysql 的虚拟主机管理程序。
1、系统安装包
基本库、开发库、开发工具
2、配置yum,在本文中使用的是网通线路,所以选择了 作为安装镜像。
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# wget CentOS-Base.repo.ta139
[root@localhost yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak
[root@localhost yum.repos.d]# mv CentOS-Base.repo.ta139 CentOS-Base.repo
apache(web服务) 、mysql(数据库)、php(非必需)
[root@localhost ~]# yum -y install httpd httpd-devel mysql mysql-devel mysql-server php php-xml php-cli php-pdo php-mbstring php-mcrypt php-gd php-common php-devel php-mysql
修改启动配置并启动
[root@localhost ~]# chkconfig --level 345 mysqld on
[root@localhost ~]# chkconfig --level 345 httpd on
[root@localhost ~]# service mysqld start
[root@localhost ~]# service httpd start
注意:可以选择自己需要的版本
[root@localhost ~]# wget
[root@localhost ~]# tar xjf phpMyAdmin-
[root@localhost ~]# mv phpMyAdmin-
[root@localhost phpmyadmin]# cp config.sample.inc.php config.inc.php
编辑config.inc.php 改为下面,字符串是任意的。
$cfg['blowfish_secret'] = 'skssiwksksie'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
进入phpmyadmin 请马上修改mysql root 用户的密码。
将extmail/extman/slockd 上传到服务器,可以使用ftp/winscp 上传
[root@localhost ~]# tar zxf extman-
[root@localhost ~]# cd extman-
[root@localhost docs]# mysql -uroot -p
Enter password:
[root@localhost docs]# mysql -uroot -p
Enter password:
如何使用了phpmyadmin改了root 密码,记得输入密码,如果密码为空,请按回车。
下面我们将采用rpm 的方式安装软件
/usr/src/redhat/SPEC spec 文件夹,通常是rpm文件夹
/usr/src/redhat/RPMS 是生成rpm 的文件,下面还有i368,i486 等子文件夹,一般我们用i386 架构
/usr/src/redhat/SOURCE 源文件文件夹
为了安装时切换目录的方便,我们将目录存放到一个shell变量里。
[root@localhost ~]# export RPMS=/usr/src/redhat/RPMS
[root@localhost ~]# export SOURCE=/usr/src/redhat/SOURCES
[root@localhost ~]# export SPEC=/usr/src/redhat/SPECS
在下面安装过程中,大家要记住cd $RPMS 与cd /usr/src/redhat/RPMS 的目的是一样的,只是shell变量的替换。
一个为courier-imap,maildrop,sasl2 提供用户信息的后台进程序
[root@localhost ~]# yum -y install postgresql-devel expect libtool-ltdl-devel
[root@localhost ~]# wget
[root@localhost ~]# tar xjf courier-authlib-0.61.0.tar.bz2
[root@localhost ~]# cd courier-authlib-0.61.0
[root@localhost courier-authlib-0.61.0]# cp courier-authlib.spec $SPEC
[root@localhost courier-authlib-0.61.0]# cd ..
[root@localhost ~]# cp courier-authlib-0.61.0.tar.bz2 $SOURCE
[root@localhost ~]# cd $SPEC
[root@localhost SPECS]# rpmbuild -bb courier-authlib.spec (创建rpm文件)
[root@localhost SPECS]# cd $RPMS/i386
[root@localhost i386]# rpm -ivh courier-authlib-0.61.0-1.i386.rpm
[root@localhost i386]# rpm -ivh courier-authlib-devel-0.61.0-1.i386.rpm
[root@localhost i386]# rpm -ivh courier-authlib-mysql-0.61.0-1.i386.rpm
[root@localhost i386]# cd /etc/authlib/
[root@localhost authlib]# mv authdaemonrc authdaemonrc.bak
[root@localhost authlib]# vim authdaemonrc
输入下面的内容:
authmodulelist="authmysql"
authmodulelistorig="authmysql"
daemons=10
authdaemonvar=/var/spool/authdaemon
DEBUG_LOGIN=2
DEFAULTOPTIONS="wbnodsn=1"
LOGGEROPTS=""
D、配置authmysqlrc
[root@localhost authlib]# mv authmysqlrc authmysqlrc.bak
[root@localhost authlib]# vim authmysqlrc
输入下面的内容:
MYSQL_SERVER localhost
MYSQL_USERNAME extmail
MYSQL_PASSWORD extmail
MYSQL_PORT 0
MYSQL_SOCKET /var/lib/mysql/mysql.sock
MYSQL_OPT 0
MYSQL_DATABASE extmail
MYSQL_SELECT_CLAUSE SELECT username,password,"",uidnumber,gidnumber,\
CONCAT('/home/data/domains/',homedir), \
CONCAT('/home/data/domains/',maildir), \
quota, \
name \
FROM mailbox \
WHERE username = '$(local_part)@$(domain)'
[root@localhost ~]# service courier-authlib start
Starting Courier authentication services: authdaemond
[root@localhost ~]# chmod 777 /var/spool/authdaemon/
-提供pop3,pop3s,imap,imaps 服务的程序【MUA】
由于courier-imap 不能用root身份生成rpm那么我们新建一个普通用户,并创建一个rpm环境
[root@localhost ~]# useradd yiyou
软件包依懒需要安装openldap-server,rpm创建完成后可以删除
[root@localhost ~]# yum -y install openldap-servers
[root@localhost ~]# su - yiyou
[yiyou@localhost ~]$ mkdir -p rpm/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
[yiyou@localhost ~]$ vim ~/.rpmmacros
输入内容:
%_topdir /home/yiyou/rpm
[yiyou@localhost ~]$ wget
[yiyou@localhost ~]$ cp courier-imap-
[yiyou@localhost ~]$ tar xjf courier-imap-
[yiyou@localhost ~]$ cd courier-imap-
[yiyou@localhost courier-imap-
[yiyou@localhost courier-imap-
编辑courier-imap.spec 将下面的内容:
%if %suse_version
BuildPreReq: rpm >=
%else
BuildPreReq: rpm >=
%endif
改为:
%if %suse_version
BuildPreReq: rpm >=
%else
BuildPreReq: rpm >=
%endif
创建rpm
[yiyou@localhost SPECS]$ rpmbuild -bb courier-imap.spec
完成rpm后,输入exit退出当前用户。
[root@localhost ~]# rpm -ivh /home/yiyou/rpm/RPMS/i386/courier-imap-
[root@localhost ~]# service courier-imap start
Simple Authentication Security Layer
[root@localhost ~]# wget ftp://194.199.20.114/linux/fedora/updates/8/SRPMS/cyrus-sasl-
[root@localhost ~]# rpm -ivh cyrus-sasl-
[root@localhost ~]# cd $SPEC
编辑cyrus-sasl.spec 将下面:
# Bundling copy of Berkeley DB, for sasldb support.
topdir=`pwd`
pushd db-%{db_version}/build_unix
../dist/configure \
--with-mutex=UNIX/fcntl --disable-shared --enable-static --with-pic \
--with-uniquename=_cyrus_sasl_sasldb_rh \
--prefix=${topdir}/db-instroot \
--includedir=${topdir}/db-instroot/include \
--libdir=${topdir}/db-instroot/lib
改为:
# Bundling copy of Berkeley DB, for sasldb support.
topdir=`pwd`
pushd db-%{db_version}/build_unix
../dist/configure \
--with-mutex=UNIX/fcntl --disable-shared --enable-static --with-pic \
--with-uniquename=_cyrus_sasl_sasldb_rh \
--prefix=${topdir}/db-instroot \
--includedir=${topdir}/db-instroot/include \
--libdir=${topdir}/db-instroot/lib \
--with-authdaemond=/var/spool/authdaemon
[root@localhost SPECS]# rpmbuild -bb cyrus-sasl.spec
[root@localhost RPMS]# cd $RPMS/i386
[root@localhost i386]# rpm -e --nodeps cyrus-sasl-devel cyrus-sasl-plain cyrus-sasl cyrus-sasl-lib (如果这些包存在)
[root@localhost i386]# rpm -ihv cyrus-sasl-lib-
[root@localhost i386]# rpm -ihv cyrus-sasl-
[root@localhost i386]# rpm -ihv cyrus-sasl-plain-
创建/usr/lib/sasl2/smtpd.conf 文件,输入下面的内容:
pwcheck_method:authdaemond
log_level:3
mech_list:PLAIN LOGIN
authdaemond_path:/var/spool/authdaemon/socket
mta 邮件系统核心
[root@localhost i386]# cd
[root@localhost ~]# wget
[root@localhost ~]# rpm -ivh postfix-
[root@localhost ~]# cd $SPEC
编辑postfix.spec 修改下面的选项
%define distribution rhel-5.0
%define with_mysql_redhat 1
%define with_sasl 2
%define with_vda 1
[root@localhost SPECS]# rpmbuild -bb postfix.spec
[root@localhost RPMS]# cd $RPMS/i386
[root@localhost i386]# rpm -ivh postfix-
[root@localhost i386]# alternatives --config mta (选择2,postfix)
[root@localhost i386]# rpm -e sendmail
[root@localhost i386]# cd /usr/sbin/
[root@localhost sbin]# mv sendmail sendmail.bak
[root@localhost sbin]# newaliases
[root@localhost sbin]# ln -s sendmail.postfix sendmail
[root@localhost ~]# cd /etc/postfix/
[root@localhost postfix]# mv main.cf main.cf.bak
[root@localhost postfix]# vim main.cf
输入下面的内容:
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 550
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = /usr/share/doc/postfix-
manpage_directory = /usr/share/man
sample_directory = /etc/postfix
readme_directory = /usr/share/doc/postfix-
alias_database = hash:/etc/postfix/aliases
alias_maps = hash:/etc/postfix/aliases
myhostname = mail.yiyou.org
mydomain = yiyou.org
mydestination = $myhostname
smtpd_banner = yiyou.org ESMTP Mail System
message_size_limit = 14680064
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_base = /home/data/domains
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_limit_maps.cf
virtual_transport = maildrop:
maildrop_destination_recipient_limit = 1
#sasl
smtpd_sasl_auth_enable = yes
smtpd_sasl2_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_unauth_pipelining,
reject_invalid_hostname
复制extman/docs 目录的cf 文件到/etc/postfix
[root@localhost postfix]# cp /root/extman-
因为配置文件的用户、密码与数据库时一样,所以不用修改。
[root@localhost postfix]# service postfix start
MDA邮件系统核心
[root@localhost postfix]# cd
[root@localhost ~]# wget
[root@localhost ~]# cp maildrop-
[root@localhost ~]# tar xjf maildrop-
[root@localhost ~]# cd maildrop-
[root@localhost maildrop-
[root@localhost maildrop-
编辑maildrop.spec 把下面:
BuildRequires: /usr/include/fam.h gdbm-devel pcre-devel
改为:
BuildRequires: gdbm-devel pcre-devel
把下面:
%configure --with-devel --enable-userdb --enable-maildirquota \
--enable-syslog=1 --enable-trusted-users='root mail daemon postmaster qmaild mmdf' \
--enable-restrict-trusted=0 \
--enable-sendmail=/usr/sbin/sendmail
改为:
%configure --with-devel --enable-userdb --enable-maildirquota \
--enable-syslog=1 --enable-trusted-users='root mail daemon postmaster qmaild mmdf' \
--enable-restrict-trusted=0 --enable-sendmail=/usr/sbin/sendmail \
--enable-authlib
[root@localhost SPECS]# yum -y install pcre-devel
[root@localhost SPECS]# rpmbuild -bb maildrop.spec
[root@localhost SPECS]# cd $RPMS/i386
[root@localhost i386]# rpm -ivh maildrop-
[root@localhost i386]# cd
[root@localhost ~]# groupadd -g 1000 vgroup
[root@localhost ~]# useradd -g 1000 -u 1000 -s /sbin/nologin -d /dev/null vuser
编辑/etc/postfix/master.cf ,加入下面的内容:
maildrop unix - n n - - pipe
flags=DRhu user=vuser argv=/usr/bin/maildrop -d ${user}@${nexthop} ${recipient} ${user} ${extension} ${nexthop}
[root@localhost ~]# mkdir -p /home/data/domains/extmail.org/postmaster
[root@localhost ~]# maildirmake /home/data/domains/extmail.org/postmaster/Maildir
[root@localhost ~]# chown -R vuser:vgroup /home/data/domains/
[root@localhost ~]# echo "test" | maildrop -V 10 -d postmaster@extmail.org
maildrop: authlib: groupid=1000
maildrop: authlib: userid=1000
maildrop: authlib: logname=postmaster@extmail.org, home=/home/data/domains/extmail.org/postmaster, mail=/home/data/domains/extmail.org/postmaster/Maildir/
maildrop: Changing to /home/data/domains/extmail.org/postmaster
Message start at 0 bytes, envelope sender=postmaster@extmail.org
maildrop: Attempting .mailfilter
maildrop: Delivery complete.
出现上以信息说明authlib,maildrop 工作正常
postconf –n 测试配置内容是否有问题?
[root@localhost ~]# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK Hello there.
user postmaster@extmail.org
+OK Password required.
pass extmail
+OK logged in.
list
+OK POP3 clients that break here, they violate STD53.
1 6
.
retr 1
+OK 6 octets follow.
test
.
quit
+OK Bye-bye.
Connection closed by foreign host.
[root@localhost ~]# perl -MMIME::Base64 -e 'print encode_base64("postmaster\@extmail.org");'
cG9zdG1hc3RlckBleHRtYWlsLm9yZw==
[root@localhost ~]# perl -MMIME::Base64 -e 'print encode_base64("extmail");'
ZXh0bWFpbA==
[root@localhost ~]# service postfix restart (重启一下)
[root@localhost ~]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 yiyou.org ESMTP Mail System
ehlo test.com
250-mail.yiyou.org
250-PIPELINING
250-SIZE 14680064
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
auth login
334 VXNlcm5hbWU6
cG9zdG1hc3RlckBleHRtYWlsLm9yZw==
334 UGFzc3dvcmQ6
ZXh0bWFpbA==
235
quit
221
Connection closed by foreign host