linux安装postfix笔记[未完]
linux安装postfix笔记
一、有用的链接:
www.postfix.org/ postfix官方网站
postfix.org.cn/ postfix中文网站
www.extmail.org/ 国人的用perl写的webmail程序
www.courier-mta.org/authlib/ Courier Authentication Library(下面会用到的认证的lib)
www.courier-mta.org/imap/ Courier-IMAP(这个似乎是给webmail用的?不过我打算用extmail)
www.squirrelmail.org/ squirre webmail程序官方网站,从这里你可以下载webmail
sourceforge.net/project/showfiles.php?group_id=311
从 这里可以下载程序
www.igenus.org/ 这个是一个基于qmail+vpopmail+mysql的webmail程序,放在这里仅供参考。
参考文章:
在Linux平台上安装基于Postfix、Courier-imap、Extmail的邮件系统 V 0.2.10
基于Linux和Postfix的邮件系统的web mail安装手册(我安装就是参考这里的)
Mail: Virtual Domains and Users with Postfix Admin, Postfix, Courier-IMAP and MySQL.
我的这篇文档,就出自以上3个链接再根据自己的实际情况进行的修改。
二、下载:
postfix-2.2.10.tar.gz
courier-authlib-0.58.tar.bz2
courier-imap-4.1.1.tar.bz2
三、准备工作:
老规矩,先执行 yum update
由于courier-authlib要用到mysql开发包
所以再执行 yum install mysql-devel
#yum install clamav
#yum install spamassassin
在你的mysql数据库新建立mail的数据库和用户
关闭selinux
vi /etc/selinux/config
SELINUX=disabled
reboot -f -n
然后增加用户和用户组:
groupadd -g 12345 postfix
useradd -u 12345 -g 12345 -c postfix -d/dev/null -s/sbin/nologin postfix
groupadd -g 54321 postdrop
四、下面开始了安装:
4-1、编译postfix:
解压缩你的postfix包,然后cd进去
make -f Makefile.init makefiles \
‘CCARGS=-DUSE_SASL_AUTH -DHAS_MYSQL -I/usr/local/mysql/include/mysql -I/usr/include/sasl’ \
‘AUXLIBS=-L/usr/local/mysql/lib/mysql -L/usr/lib/sasl2 -lmysqlclient -lsasl2 -lz -lm’
注:这里的 /usr/local/mysql/include/mysql 和 /usr/local/mysql/lib/mysql 根据你的实际情况更改路径
make && make install
make install后,会有向导提示,一般的你只要选择自己的postfix安装目录(第一个)和中间的一个 html_directory 指定一下就好了,其他的默认一路回车。
4-2、下面编译courier-authlib:
./configure –prefix=/usr/lib/authlib –without-authpam \
–without-authcustom –without-authpgsql –without-authldap \
–without-authuserdb –without-authpwd –without-authshadow \
–without-authvchkpw –with-authmysql \
–with-authdaemonvar=/usr/lib/authlib/var \
–mandir=/usr/lib/man –without-stdheaderdir \
–sysconfdir=/usr/lib/authlib/etc \
–with-redhat
make
make install
make install-migrate
make install-configure
提示:如果在./configure的时候提示configure: error: –with-authmysql specified but no mysqlclient.so,记得执行 yum install mysql-devel
设置authlib的环境变量
vi /etc/profile
在最后加入:
COURIERAUTHCONFIG=/usr/lib/authlib/bin/courierauthconfig
export COURIERAUTHCONFIG
4-3、编译Courier-imap
解压缩,然后cd进入目录
./configure –prefix=/usr/lib/imapd \
–silent –without-authpgsql –without-ipv6 \
–with-redhat –with-authmysql \
–mandir=/usr/lib/man/ –disable-root-check
make
make install
make install-configure
提示:如果在./configure的时候出现了 configure: error: unrecognized option: –prefix=/usr/lib/imapd,别着急,老老实实的把上面的命令手工输入一遍就可以了。
五、下面开始配置:
5-1、配置系统
执行一下命令
ln -s /usr/local/postfix/etc/postfix /etc/postfix
ln -s /usr/local/postfix/usr/libexec/ /usr/libexec/postfix
ln -s /usr/local/postfix/var/spool/postfix/ /var/spool/postfix
mv /etc/aliases /etc/aliases.bak
ln -s /etc/postfix/aliases /etc/aliases
echo ‘root: postfix’>>/etc/postfix/aliases
/usr/bin/newaliases
mv /var/mail /var/mail.bak
mkdir /var/mail
chown -R postfix:postfix /var/mail
mv /etc/postfix/main.cf /etc/postfix/main.cf.bak
vi /etc/postfix/main.cf
vi /etc/postfix/main.cf
然后在main.cf下输入如下内容:
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
html_directory = no
mail_owner = postfix
mailq_path = /usr/bin/mailq
manpage_directory = /usr/local/man
newaliases_path = /usr/bin/newaliases
queue_directory = /var/spool/postfix
readme_directory = no
sample_directory = /etc/postfix
sendmail_path = /usr/sbin/sendmail
setgid_group = postdrop
unknown_local_recipient_reject_code = 550
header_checks = regexp:/etc/postfix/header_checks
#############NEW ADD#####################
#=====================BASE=====================
myhostname = mail.xiangyangroad.com
mydomain = xiangyangroad.com
mydestination = $myhostname
local_recipient_maps =
local_transport = virtual
#=====================MySQL=====================
virtual_alias_maps = mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
virtual_mailbox_base = /
virtual_mailbox_limit = 51200000
virtual_minimum_uid = 125
virtual_transport = virtual
virtual_uid_maps = static:12345
virtual_gid_maps = static:12345
#=====================Quota=====================
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user’s maildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes
#====================SASL=====================
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_delay_reject=yes
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,permit_auth_destination,reject
smtpd_client_restrictions = permit_sasl_authenticated
内容输入完毕,保存。
5-2、下面来进行mysql相关的第一次配置:
在你刚才建立的mail数据库中执行如下sql语句,
创建数据表
postfix使用mysql需要创建3个数据表
All these tables have information for Postfix, and some for Courier-IMAP as noted by each table.
There are a couple of columns that are not used by either Postfix or Courier-IMAP. These columns are:
# domain (in some tables)
# create_date
# change_date
# active
These columns are used to make your life easier together with Postfix Admin.
The “active” column is not used at the moment.
创建 Alias 表
#
# Table structure for table alias
#
USE postfix;
CREATE TABLE alias (
address varchar(255) NOT NULL default ”,
goto text NOT NULL,
domain varchar(255) NOT NULL default ”,
create_date datetime NOT NULL default ‘0000-00-00 00:00:00′,
change_date datetime NOT NULL default ‘0000-00-00 00:00:00′,
active tinyint(4) NOT NULL default ‘1′,
PRIMARY KEY (address)
) TYPE=MyISAM COMMENT=’Virtual Aliases - mysql_virtual_alias_maps’;
Postfix: is using the “address” and “goto” column.
Courier: is not using this table.
NOTE: This table can be used for virtual .foward files. This table is nothing more then /etc/aliases that you will find on any *nix OS.
Multiple destination email addresses need to be separated by a “,” (comma).
创建 Domain 表
#
# Table structure for table domain
#
USE postfix;
CREATE TABLE domain (
domain varchar(255) NOT NULL default ”,
description varchar(255) NOT NULL default ”,
create_date datetime NOT NULL default ‘0000-00-00 00:00:00′,
change_date datetime NOT NULL default ‘0000-00-00 00:00:00′,
active tinyint(4) NOT NULL default ‘1′,
PRIMARY KEY (domain)
) TYPE=MyISAM COMMENT=’Virtual Domains - mysql_virtual_domains_maps’;
Postfix: is using the “domain” and “description” column.
Courier: is not using this table.
创建 Mailbox 表
#
# Table structure for table mailbox
#
USE postfix;
CREATE TABLE mailbox (
username varchar(255) NOT NULL default ”,
password varchar(255) NOT NULL default ”,
name varchar(255) NOT NULL default ”,
maildir varchar(255) NOT NULL default ”,
domain varchar(255) NOT NULL default ”,
create_date datetime NOT NULL default ‘0000-00-00 00:00:00′,
change_date datetime NOT NULL default ‘0000-00-00 00:00:00′,
active tinyint(4) NOT NULL default ‘1′,
PRIMARY KEY (username)
) TYPE=MyISAM COMMENT=’Virtual Mailboxes - mysql_virtual_mailbox_maps’;
Postfix: is using the “username” and “maildir” column.
Courier: is using the “username, “password”, “name” and “maildir” column.
下面先插入一条测试数据
Populate the Tables
USE postfix;
INSERT INTO domain (domain,description) VALUES (’domain.tld’,'Test Domain’);
INSERT INTO alias (address,goto) VALUES (’alias@domain.tld’, ‘user@domain.tld’);
INSERT INTO mailbox (username,password,name,maildir) VALUES (’user@domain.tld’,'$1$DOrHOomo$U6MleaFKGwWLB3iS9P1Yx0′,’Mailbox User’,'user@domain.tld/’);
接下来在/etc/postfix/下面 mkdir mysql
然后
touch /etc/postfix/mysql/mysql_virtual_alias_maps.cf
touch /etc/postfix/mysql/mysql_virtual_domains_maps.cf
touch /etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
这里新建立的3个文件就是上面main.cf里面mysql部分的
virtual_alias_maps = mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
对应的3个配置文件
接下来编辑你的第一个配置文件
#vi mysql/mysql_virtual_alias_maps.cf
输入如下内容:
user = your_postfix_db_user
password = your_postfix_db_pass
hosts = localhost
dbname = your_postfix_db_name
table = alias
select_field = goto
where_field = address
编辑mysql_virtual_domains_maps.cf
#vi mysql/mysql_virtual_domains_maps.cf
输入如下内容:
user = your_postfix_db_user
password = your_postfix_db_pass
hosts = localhost
dbname = your_postfix_db_name
table = domain
select_field = description
where_field = domain
编辑mysql_virtual_mailbox_maps.cn
#vi mysql/mysql_virtual_mailbox_maps.cf
输入如下内容:
user = your_postfix_db_user
password = your_postfix_db_pass
hosts = localhost
dbname = your_postfix_db_name
table = mailbox
select_field = maildir
where_field = username
ok,现在3个配置文件都编辑好了。
5-3、配置sasl认证
#vi /usr/lib/sasl2/smtpd.conf
输入如下内容:
pwcheck_method: authdaemond
log_level: 3
mech_list: plain login
authdaemond_path:/usr/lib/authlib/var/socket
5-4、配置courier-imap
#mv /usr/lib/authlib/etc/authlib/authmysqlrc /usr/lib/authlib/etc/authlib/authmysqlrc.bak
vi /usr/lib/authlib/etc/authlib/authmysqlrc
输入如下内容:
MYSQL_SERVER localhost
MYSQL_USERNAME your_postfix_db_user
MYSQL_PASSWORD your_postfix_db_pass
MYSQL_PORT 0
MYSQL_OPT 0
MYSQL_DATABASE your_postfix_db_name
MYSQL_USER_TABLE userinfo
MYSQL_CRYPT_PWFIELD passwd
MYSQL_UID_FIELD ‘your_mysql_user_uid’
MYSQL_GID_FIELD ‘your_mysql_user_gid’
MYSQL_LOGIN_FIELD address
MYSQL_HOME_FIELD homedir
MYSQL_NAME_FIELD realname
MYSQL_MAILDIR_FIELD maildir
MYSQL_QUOTA_FIELD quota
注:
MYSQL_UID_FIELD和MYSQL_GID_FIELD
你可以看你的/etc/passwd来获得UID和GID
#mv /usr/lib/authlib/etc/authlib/authdaemonrc /usr/lib/authlib/etc/authlib/authdaemonrc.bak
#vi /usr/lib/authlib/etc/authlib/authdaemonrc
输入如下内容:
authmodulelist=”authmysql”
authmodulelistorig=”authmysql”
version=”authdaemond.mysql”
daemons=5
subsystem=mail
DEBUG_LOGIN=0
DEFAULTOPTIONS=”wbnodsn=1″
#cp /usr/lib/imapd/etc/pop3d /usr/lib/imapd/etc/pop3d.bak
#vi /usr/lib/imapd/etc/pop3d
将
POP3DSTART=NO
修改为
POP3DSTART=YES
六、安装WebMail
这里采用Tmail webmail程序。
首先解压缩tmail程序,放到你想要的目录中。
下面来修改配置文件:
#vi config/config_inc.php
在你的mail程序目录下新建temp目录
然后修改config_inc.php中的$CFG_BASEPATH为:
$CFG_BASEPATH = “your_webmail_path/temp”;
修改如下思想为你数据库的配置:
define(MYSQL_HOST, ‘localhost’);
define(MYSQL_USER, ‘your_postfix_db_user’);
define(MYSQL_PASS, ‘your_postfix_db_pass’);
define(MYSQL_DATA, ‘your_postfix_db_name’);
保存。
更改临时目录的权限:
#chown -R postfix:postfix “your_webmail_path/temp”
执行如下命令:
#mkdir /var/mail/netdisk
#chown -R postfix:postfix /var/mail/netdisk/
#cp courier-authlib-0.58/courier-authlib.sysvinit.in /etc/rc.d/init.d/courier-authlib
#chmod 755 /etc/rc.d/init.d/courier-authlib
#/sbin/chkconfig –add courier-authlib
#cp courier-imap-4.1.1/courier-imap.sysvinit.in /etc/rc.d/init.d/courier-imap
#chmod 755 /etc/rc.d/init.d/courier-imap
#/sbin/chkconfig –add courier-imap
七、启动服务进行测试
首先确定你的mysql和httpd服务已经启动
然后执行如下命令:
#/sbin/service /etc/rc.d/init.d/courier-authlib start
#/sbin/service /etc/rc.d/init.d/courier-imap start
如果这个时候出现:
/etc/rc.d/init.d/courier-authlib: unrecognized service
或者
/etc/rc.d/init.d/courier-imap: unrecognized service
别着急,请跟我来,虽然我到现在还不知道这个是什么意思,恕偶才疏学浅,谁知道还请告诉我哈。
执行一下操作:
#vi /etc/rc.d/init.d/courier-authlib
在第一行输入:#!/bin/sh
同样的
#vi /etc/rc.d/init.d/courier-imap
在第一行输入:#!/bin/sh
然后一个一个来,
先执行:
#/sbin/service courier-authlib start
可能会提示:@authdaemonrc@ does not exist, forgot make install-configure?
如果这样的话,和我一起来解决
再次的#vi /etc/rc.d/init.d/courier-authlib
将开始的如下4行:
prefix=”@prefix@”
exec_prefix=”@exec_prefix@”
sysconfdir=”@sysconfdir@”
sbindir=”@sbindir@”
修改为
prefix=”/usr/local/authlib”
exec_prefix=”/usr/local/authlib”
sysconfdir=”/usr/lib/authlib/etc”
sbindir=”/usr/lib/authlib/sbin”
将if test ! -f @authdaemonrc@修改为
if test ! -f /usr/lib/authlib/etc/authlib/authdaemonrc
测试启动服务:
#/sbin/service courier-authlib start
显示:Starting Courier authentication services: authdaemond
同样的,跟我来修改
#vi /etc/rc.d/init.d/courier-imap
这4行修改为:
prefix=”/usr/lib/imapd”
exec_prefix=”/usr/lib/imapd”
bindir=”/usr/lib/imapd/bin”
sbindir=”/usr/lib/imapd/sbin”
保存后执行
#/sbin/service courier-imap start
这个时候可能会提示:/etc/init.d/courier-imap: line 24: @sysconfdir@/imapd: No such file or directory
接着修改这个文件:
传说中的这个是提示找不到etc的imapd目录的意思吧,那么来这样:
修改如下几处地方,用vi全局替换
@sysconfdir@ :%s/@sysconfdir@/\/usr\/lib\/imapd\/etc/g
@libexecdir@ :%s/@libexecdir@/\/usr\/lib\/imapd\/libexec/g
@datadir@ 这个不用去管他
然后保存退出并执行
#/sbin/service courier-imap start
显示:Starting Courier-IMAP server: pop3
ok,启动成功了。
继续启动postfix
由于我安装的没有采用默认路径,所以执行起来有些麻烦:
修改你的/etc/postfix/postfix-script
#vi /etc/postfix/postfix-script
在#!/bin/sh后面加入:
command_directory=”/usr/local/postfix/usr/sbin”
daemon_directory=”/usr/libexec/postfix/postfix”
#config_directory=”"
#queue_directory=”"
#chown -R postfix:postfix /usr/local/postfix
#/usr/local/postfix/usr/sbin/postfix start
启动可能会提示很多的 postfix/postfix-script: warning: not owned by root: /usr/libexec/postfix/postfix/……… 等类似的提示
不用去理会。。。
然后测试服务是否启动
telnet localhost 25
如果出现类似于这样的提示:
Trying 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]’.
220 mail.test.com ESMTP Postfix
ehlo mail
250-mail.test.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
则表示启动成功。
停止服务。
#/usr/local/postfix/usr/sbin/postfix stop
安装Clamav
…….
设置你的防火墙
打开111,143,25这三个的tcp端口
然后下载squirrelmail,我下载的时候最新的版本是1.4.8
解压缩后,会在根目录看到一个configure文件,这是个命令行交互式的配置程序,具体的配置就不在这里说明了
都是英文,很容易看明白的,你也可以参照里面的docs文档。
主要的是配置数据库的这部分说一下
选择选项9: 9.Database
官方文档你可以参考:Database Backend 这部分
首先确认你的php安装了PEAR::DB类,这个一般都是有的。
然后按照文档说明建立如下几个表:
address,userprefs
其实就是把文档提供的sql语句复制下来在数据库中执行下就好了。
然后要设置你的DSN
mysql://squirreluser:sqpassword@localhost:port/squirrelmail
yum install php-imap
