ubuntu上搭建postfix+extmail(实战笔记)
sudo aptitube install postfix-mysql courier-authlib-mysql courier-pop libsasl2-modules-sql maildrop apache2-suexec-custom libunix-syslog-perl rsync mailgraph ntpdate apache2 libapache2-mod-fcgid sasl2-bin libsasl2-2 libsasl2-modules postfix
上传到/var/soft目录
extmail-1.2.tar.gz
extman-1.1.tar.gz
解压
sudo tar zxvf extmail-1.2.tar.gz
sudo tar zxvf extman-1.1.tar.gz
复制
sudo cp -R extmail-1.2 /var/www/extmail
sudo cp -R extman-1.1 /var/www/extman
添加权限相关
sudo groupadd -g 1007 vgroup
sudo useradd -g 1007 -u 1007 -s /bin/false -d /home/domains vuser
sudo mkdir /home/domains/
sudo chown -R 1007:1007 /home/domains
sudo chown -R 1007:1007 /var/www/extmail/cgi/
sudo chown -R 1007:1007 /var/www/extman/cgi/
设置 Extmail & Extman 配置文件
sudo cp /var/www/extmail/webmail.cf.default /var/www/extmail/webmail.cf
sudo cp /var/www/extman/webman.cf.default /var/www/extman/webman.cf
修改extman配置文件
sudo vi /var/www/extman/webman.cf
修改默认文件中的
帐号的ID配置
# sys_default_uid, if not set, webman will ignore it
SYS_DEFAULT_UID = 1007
# sys_default_gid, if not set, webman will ignore it
SYS_DEFAULT_GID = 1007
修改MYSQL配置信息
# if mysql, all relate paramters should prefix as SYS_MYSQL
SYS_MYSQL_USER = webman
SYS_MYSQL_PASS = password #修改成自己的密码
SYS_MYSQL_DB = extmail
SYS_MYSQL_HOST = localhost
SYS_MYSQL_SOCKET = /tmp/mysql.sock
修改exttmail配置文件
sudo vi /var/www/extmail/webmail.cf
修改MYSQL配置信息
# if mysql, all relate parameters should prefix as SYS_MYSQL
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = password #这里设置为自己的密码
SYS_MYSQL_DB = extmail
SYS_MYSQL_HOST = localhost
SYS_MYSQL_SOCKET = /tmp/mysql.sock
准备导入数据库信息
sudo vi /var/www/extman/docs/extmail.sql
修改用户的ID号
uidnumber int(6) NOT NULL default '1007',
gidnumber int(6) NOT NULL default '1007',
导入Extmail数据库
sudo /usr/local/webserver/mysql/bin/mysql -uroot -p < /var/www/extman/docs/extmail.sql
sudo /usr/local/webserver/mysql/bin/mysql -uroot -p < /var/www/extman/docs/init.sql
apache配置
cd /etc/apache2/mods-enabled/
sudo ln -s ../mods-available/suexec.load ./suexec.load
cd /etc/apache2/sites-enabled/
sudo rm -rf /etc/apache2/sites-enabled/000-default #删除了本来的默认站点信息
sudo vi /etc/apache2/sites-enabled/extmail
<VirtualHost *:1312>
ServerName mail.jiukewang.com
DocumentRoot /var/www/extmail/html/
ScriptAlias /extmail/cgi/ /var/www/extmail/cgi/
Alias /extmail /var/www/extmail/html/
ScriptAlias /extman/cgi/ /var/www/extman/cgi/
Alias /extman /var/www/extman/html/
# Suexec config
# 屏蔽这里,不知道为什么我加了这里一定出错,权限问题,不过我配置了的,没搞懂
#SuexecUserGroup vuser vgroup
</VirtualHost>
修改apache2.conf配置文件
sudo vi /etc/apache2/apache2.conf
修改
# These need to be set in /etc/apache2/envvars
#User ${APACHE_RUN_USER}
#Group ${APACHE_RUN_GROUP}
User vuser
Group vgroup
这里修改使用这个用户来启动apache
因为端口我用的1312所以需要修改/etc/apache2/ports.conf
sudo vi /etc/apache2/ports.conf
NameVirtualHost *:1312
Listen 1312
关于端口配置这里个人需要根据自己的情况配置哈
postfix配置
cd /var/www/extman/docs/
sudo cp mysql_virtual_*.cf /etc/postfix/ #拷贝了需要的配置文件到postfix配置下
sudo chmod o= /etc/postfix/mysql_virtual_*.cf
sudo chgrp postfix /etc/postfix/mysql_virtual_*.cf #这些配置文件组权限赋予postfix
cd /etc/postfix/
#替换这些文件中的localhost为127.0.0.1
#这一步后来没有用到,因为那些文件中的配置信息都改成了localhost,127.0.0.1链接总是有问题,可选
#sudo find ./ -name 'mysql_virtual_*' -exec sed --in-place 's/localhost/127.0.0.1/g' {} \;
开始修改配置文件main.cf
文件内容如下:
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
#本机机器名
myhostname = mail.jiukewang.com
#本机域名
mydomain = jiukewang.com
myorigin = $mydomain
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
#收信域名,一定要有$mydomain不然不能使用[email protected]收信
mydestination =
relayhost =
#信任的,无须SMTP认证的地址范围
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
#邮件的存储方式,一定要有此设置
home_mailbox = Maildir
append_dot_mydomain = no
append_at_myorigin = no
smtpd_helo_required = yes
ignore_mx_lookup_error = yes
message_size_limit = 31457280
#--------- virtual config --------------------------------------
#本地邮件的投递方式,也可以使用maildrop
local_transport = maildrop
#虚拟用户的投递方式,也可以使用maildrop
virtual_transport = maildrop
maildrop_destination_recipient_limit = 1
virtual_alias_domains =
virtual_alias_maps =
proxy:mysql:/etc/postfix/mysql_virtual_sender_maps.cf,
proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
#邮件存储的根目录
virtual_mailbox_base = /home/domains
#虚拟用户的ID,(数值参考实际系统的postfix用户的ID值)
virtual_uid_maps = static:105
virtual_gid_maps = static:114
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $smtpd_sender_login_maps $recipient_canonical_maps $relocated_maps transport_maps $mynetworks
# smtpd related config
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unauth_destination,
reject_unauth_pipelining,
reject_invalid_hostname,
# SMTP sender login matching config
smtpd_sender_restrictions =
permit_mynetworks,
reject_sender_login_mismatch,
reject_authenticated_sender_login_mismatch,
reject_unauthenticated_sender_login_mismatch
smtpd_sender_login_maps =
mysql:/etc/postfix/mysql_virtual_sender_maps.cf,
mysql:/etc/postfix/mysql_virtual_alias_maps.cf
# SMTP AUTH config here
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
#main.cf end... ...
修改master.cf 文件
sudo vi /etc/postfix/master.cf
修改maildrop配置就是了
maildrop unix - n n - - pipe
flags=DRhu user=vuser argv=maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} {nexthop}
courier配置
sudo cp /etc/courier/authdaemonrc /etc/courier/authdaemonrc.bak
sudo vi /etc/courier/authdaemonrc
修改
authmodulelist="authmysql"
authmodulelistorig="authmysql"
sudo cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc.bak
sudo vi /etc/courier/authmysqlrc
文件内容如下:
MYSQL_SERVER localhost
MYSQL_USERNAME extmail
MYSQL_PASSWORD password #数据库连接密码
MYSQL_SOCKET /tmp/mysql.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE extmail
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD '1007' # vuser ID号
MYSQL_GID_FIELD '1007' # vgroup ID号
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD concat("/home/domains/",homedir) # 根据自己的目录配置
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD concat("/home/domains/",homedir) # 根据自己的目录配置
MYSQL_QUOTA_FIELD quota
MYSQL_SELECT_CLAUSE SELECT username,password,"",uidnumber,gidnumber,\
CONCAT('/home/domains/',homedir), \
CONCAT('/home/domains/',maildir), \
quota, \
name \
FROM mailbox \
WHERE username = '$(local_part)@$(domain)'
#authmysqlrc end ... ...
配置sasl
创建/etc/postfix/sasl/smtpd.conf 加入下面的内容
sudo vi /etc/postfix/sasl/smtpd.conf
内容
pwcheck_method:authdaemond
log_level:3
mech_list:PLAIN LOGIN
allow_plaintext: true
authdaemond_path:/var/run/courier/authdaemon/socket
图形日志配置
sudo cp -R /var/www/extman/addon/mailgraph_ext /usr/local/mailgraph_ext
修改mailgraph-init
sudo vi /usr/local/mailgraph_ext/mailgraph-init
MAIL_LOG=/var/log/mail.log
添加开机自启动项
sudo vi /etc/rc.local
/usr/local/mailgraph_ext/mailgraph-init start
/var/www/extman/daemon/cmdserver -v -d
sudo chmod o+x /var/run/courier/authdaemon #这个很重要,不要后来会因为权限问题,无法发送邮件
/etc/init.d/courier-authdaemon restart
在运行extman的时候有几个问题,一个是GD库问题,还有DBI问题,所以先把这些都装上吧
进入extman报错需要安装perl的DBI DBD::mysql
安装DBI
sudo wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.615.tar.gz
sudo tar zxvf DBI-1.615.tar.gz
cd DBI-1.615/
sudo perl Makefile.PL
sudo make
sudo make install
安装DBD::mysql报错所以只好手动
sudo wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.018.tar.gz
sudo perl Makefile.PL --mysql_config=/usr/local/webserver/mysql/bin/mysql_config
sudo make
sudo make install
安装GD
sudo wget http://search.cpan.org/CPAN/authors/id/L/LD/LDS/GD-2.45.tar.gz
sudo perl Makefile.PL
sudo make
sudo make install
基本上就OK啦。搞了差不多一周时间,终于可以用上自己的邮件服务器了,真是历经千辛万苦呀。
最后一点因为用的nginx作为代理所以需要配置下让他转到apache
之所以用apache也是因为之前在nginx下配置extmail有问题,郁闷惨了
server {
listen 80;
server_name mail.jiukewang.com;
index index.html index.shtml;
error_log /var/wwwlog/mail.jiukewang.com/error.log;
# access_log /var/wwwlog/mail.jiukewang.com/access.log;
location / {
proxy_redirect off;
proxy_set_header HOST $host;
proxy_set_header SERVER_ADDR $server_addr;
proxy_set_header SERVER_PORT $server_port;
proxy_set_header REMOTE_ADDR $remote_addr;
proxy_set_header REMOTE_PORT $remote_port;
proxy_pass http://127.0.0.1:1312;
}
}