在 Slackware 下全部从源代码安装邮件服务器 Thu, Jul 23. 2009
习惯于自己从源代码开始编译安装软件,现在要配置一个邮件服务器,以前用的 Qmail,感觉不是很好,sendmail 也被骂死了,决定改 Postfix 看看。
目的:搭建一个支持 POP3、IMAP、SMTP、WebMail 的邮件系统,支持虚拟域和虚拟账户。
操作系统:Slackware,所需软件(库):Postfix、Cyrus SASL、Courier Auth Lib、Courier IMAP server、Courier Maildrop、amavisd-new、Clam AntiVirus、MySQL、Apache、Extman/Extmail、RRDtool。
说明:
- 安装操作系统的时候,只安装最基本的开发环境和库,其他的服务器软件一律不装。
- 考虑到实际用途,很可能还会需要安装 PHP 和 phpMySQL,请在安装完 Cyrus SASL 后安装 PHP,否则可能会产生依赖关系,关于 PHP 的安装,请参加本 Blog 的其他文章。
- 本人习惯于按照如下方式设定安装目录,如果您习惯其它方式,请相应的修改目录,如果您全部采用默认目录,则更简洁:
- 数据文件,放在
/home下,比如 www、mailbox。 - 大型的,需要配置、启动服务的软件,放在
/home下,例如 MySQL、Apache、Postfix 等。 - 不需要配置的,而且不需要独立启动的库,放在默认目录下,例如 Perl 的模块等。
- 数据文件,放在
目录
- 系统需求
- 下载软件包
- 创建所需的用户、组和目录
- 安装 MySQL
- 安装 Apache
- 安装 Cyrus SASL
- 安装 Postfix
- 安装 Courier Authlib
- 安装 Courier IMAP
- 安装 Courier Maildrop
- 安装 Spamassassin
- 安装 Amavisd-new
- 安装 Clam AntiVirus
- 配置 MySQL
- 配置 Apache
- 配置 Postfix
- 配置 CYRUS-SASL
- 配置 Courier Authlib
- 配置 Courier IMAP
- 配置 Courier MailDrop
- 配置 Spamassassin
- 配置 Amavisd-new
- 配置 Clam AntiVirus
- 系统需求说明
- 添加数据库
- 安装 Extman/Extmail
- 配置 Apache 的虚拟主机
- 安装 RRDtool
- 配置 Extman/Extmail
- 其他配置
- 启动服务
- 测试
Install LILO to MBR on CCISS device Thu, Jul 23. 2009
I was in hell when trying to get LILO installed on a CCISS driver, which is how HP SmartArray RAID card recognized as. No matter I installed LILO to MBR or Boot Record, it always failed.
Here is my solution:
- After installing Slackware finished, reboot server with Installation CD.
- At prompt, input:
Change
- hugesmp.s root=/dev/cciss/c0d0p2 rdinit= ro
hugesmp.sto your kernel if necessary.c0d0p2means second partition of logical drive 0 on controller 0, which is my "/" partition. - Login as root, modify
/etc/lilo.conf. Changeboot = /dev/sdatoboot = /dev/cciss/c0d0p2. - Run the command:
- lilo -M /dev/cciss/c0d0 mbr
- lilo
Reboot to check if everthing is right.
在 Slackware 下全部从源代码安装邮件服务器:五、启动并且测试服务 Tue, Jul 21. 2009
1、启动服务
- # 启动 MySQL
- mysql.server start
- # 启动病毒防护
- su - amavis -c "/home/amavis/sbin/amavisd"
- /home/clamav/sbin/clamd
- # 启动 authlib
- /home/courier/authlib/sbin/authdaemond start
- # 启动 POP3 和 IMAP
- /home/courier/imap/libexec/imapd.rc start
- /home/courier/imap/libexec/imapd-ssl.rc start
- /home/courier/imap/libexec/pop3d.rc start
- /home/courier/imap/libexec/pop3d-ssl.rc start
- # 启动 Postfix
- /home/postfix/sbin/postfix start
- # 启动 Extman 所需的图形统计
- /home/www/extsuite/extman/addon/mailgraph_ext/mailgraph-init start
- /home/www/extsuite/extman/addon/mailgraph_ext/qmonitor-init start
- # 启动 Apache
- apachectl -k start
2、测试
执行 netstat -ap,看看已经打开被监听的端口中是否有下面的所有端口:
- Active Internet connections (servers and established)
- Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
- tcp 0 0 *:3306 *:* LISTEN 3377/mysqld
- tcp 0 0 *:auth *:* LISTEN 3080/inetd
- tcp 0 0 *:smtp *:* LISTEN 29100/master
- tcp6 0 0 [::]:imaps [::]:* LISTEN 29020/couriertcpd
- tcp6 0 0 [::]:pop3s [::]:* LISTEN 29032/couriertcpd
- tcp6 0 0 [::]:pop3 [::]:* LISTEN 29026/couriertcpd
- tcp6 0 0 [::]:imap [::]:* LISTEN 29013/couriertcpd
- tcp6 0 0 [::]:http [::]:* LISTEN 3307/httpd
注:如果你没有加载 POP3-SSL 和 IMAP-SSL 支持,那么 pop3s 和 imaps 端口就不会打开。
然后看看 /var/log/maillog 里面是否有错误,本系统主要的日志都在这个文件里。
下面就是用浏览器打开 http://domail.ltd/extman/,用 postmaster@domail.ltd:extmail*123* 登录,然后添加域、帐号并且使用邮件系统吧。
下面测试垃圾邮件和病毒邮件监控是否正常工作。
用其他的邮箱给自己的帐号发信,分别包含如下特征字符串:
- X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
- XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
第一行是病毒邮件的特征字符串,第二行是 Spamassassin 的 GTUBE 垃圾邮件特征字符串。
如果一切正常的话,那么病毒邮件就会显示出被隔离的字样,而垃圾邮件则自动存入垃圾邮件箱。如果没有,请检查 /var/log/maillog 以定位问题。
在 Slackware 下全部从源代码安装邮件服务器:四、Webmail 和管理端 Tue, Jul 21. 2009
1、系统需求说明
Extman 登录时的验证码需要 libXpm 的支持,统计图表需要 RRDtool 和 Perl 的 GD 模块的支持,Extman 还需要 Perl 的 Unix::Syslog 模块支持,mailgraph_ext 需要 Perl 的 File::Tail 模块支持。可以使用 /home/www/extsuite/extmail/tools/pkg_stats.sh 来查看还缺少什么模块。
2、添加数据库
使用 phpMyAdmin 或者其他的 MySQL 客户端,在 postfix 表中增加如下的表和初始管理员记录:
- SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
- CREATE TABLE IF NOT EXISTS `alias` (
- `address` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `goto` TEXT COLLATE utf8_unicode_ci NOT NULL,
- `domain` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `createdate` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
- `active` TINYINT(1) NOT NULL DEFAULT '1',
- PRIMARY KEY (`address`),
- KEY `address` (`address`)
- ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='ExtMail - Virtual Aliases';
- CREATE TABLE IF NOT EXISTS `alias_domain` (
- `alias_domain` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `target_domain` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
- `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
- `active` TINYINT(1) NOT NULL DEFAULT '1',
- PRIMARY KEY (`alias_domain`),
- KEY `active` (`active`),
- KEY `target_domain` (`target_domain`)
- ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Postfix Admin - Domain Aliases';
- CREATE TABLE IF NOT EXISTS `domain` (
- `domain` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `description` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `hashdirpath` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `maxalias` INT(10) NOT NULL DEFAULT '0',
- `maxusers` INT(10) NOT NULL DEFAULT '0',
- `maxquota` VARCHAR(16) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
- `maxnetdiskquota` VARCHAR(16) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
- `transport` VARCHAR(255) COLLATE utf8_unicode_ci DEFAULT NULL,
- `can_signup` TINYINT(1) NOT NULL DEFAULT '0',
- `default_quota` VARCHAR(255) COLLATE utf8_unicode_ci DEFAULT NULL,
- `default_netdiskquota` VARCHAR(255) COLLATE utf8_unicode_ci DEFAULT NULL,
- `default_expire` VARCHAR(12) COLLATE utf8_unicode_ci DEFAULT NULL,
- `disablesmtpd` SMALLINT(1) DEFAULT NULL,
- `disablesmtp` SMALLINT(1) DEFAULT NULL,
- `disablewebmail` SMALLINT(1) DEFAULT NULL,
- `disablenetdisk` SMALLINT(1) DEFAULT NULL,
- `disableimap` SMALLINT(1) DEFAULT NULL,
- `disablepop3` SMALLINT(1) DEFAULT NULL,
- `createdate` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
- `expiredate` DATE NOT NULL DEFAULT '0000-00-00',
- `active` TINYINT(1) NOT NULL DEFAULT '1',
- PRIMARY KEY (`domain`),
- KEY `domain` (`domain`)
- ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='ExtMail - Virtual Domains';
- CREATE TABLE IF NOT EXISTS `domain_manager` (
- `username` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `domain` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `createdate` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
- `active` TINYINT(1) NOT NULL DEFAULT '1',
- KEY `username` (`username`)
- ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Ext/Webman - Domain Admins';
- CREATE TABLE IF NOT EXISTS `mailbox` (
- `username` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `uid` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `password` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `clearpwd` VARCHAR(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `name` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `mailhost` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `maildir` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `homedir` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `quota` VARCHAR(16) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
- `netdiskquota` VARCHAR(16) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
- `domain` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `uidnumber` INT(6) NOT NULL DEFAULT '1000',
- `gidnumber` INT(6) NOT NULL DEFAULT '1000',
- `createdate` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
- `expiredate` DATE NOT NULL DEFAULT '0000-00-00',
- `active` SMALLINT(1) NOT NULL DEFAULT '1',
- `disablepwdchange` SMALLINT(1) DEFAULT NULL,
- `disablesmtpd` SMALLINT(1) DEFAULT NULL,
- `disablesmtp` SMALLINT(1) DEFAULT NULL,
- `disablewebmail` SMALLINT(1) DEFAULT NULL,
- `disablenetdisk` SMALLINT(1) DEFAULT NULL,
- `disableimap` SMALLINT(1) DEFAULT NULL,
- `disablepop3` SMALLINT(1) DEFAULT NULL,
- `question` TEXT COLLATE utf8_unicode_ci NOT NULL,
- `answer` TEXT COLLATE utf8_unicode_ci NOT NULL,
- PRIMARY KEY (`username`),
- KEY `username` (`username`)
- ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='ExtMail - Virtual Mailboxes';
- CREATE TABLE IF NOT EXISTS `manager` (
- `username` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `password` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `type` VARCHAR(64) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'postmaster',
- `uid` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `name` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
- `question` TEXT COLLATE utf8_unicode_ci NOT NULL,
- `answer` TEXT COLLATE utf8_unicode_ci NOT NULL,
- `disablepwdchange` SMALLINT(1) DEFAULT NULL,
- `createdate` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
- `expiredate` DATE NOT NULL DEFAULT '0000-00-00',
- `active` TINYINT(1) NOT NULL DEFAULT '1',
- PRIMARY KEY (`username`),
- KEY `username` (`username`)
- ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Ext/Webman - Admin Accounts';
- INSERT INTO `manager` (`username`, `password`, `type`, `uid`, `name`, `question`, `answer`, `disablepwdchange`, `createdate`, `expiredate`, `active`) VALUES
- ('postmaster@domain.ltd', '$1$BrT9qxfB$Ha81Mb5YVV6rNKNN5jmtj1', 'admin', 'root', 'Super User', 'my question', 'my answer', 0, '2007-02-14 15:10:04', '2010-11-08', 1);
创建的初始管理员用户名是 postmaster@domain.ltd,初始密码是 extmail*123*,下面会用到。
3、安装 Extman/Extmail
- mkdir /home/www/extsuite
- tar -zxvf extmail-1.1.0.tar.gz -C /home/www/
- tar -zxvf extman-1.0.0.tar.gz -C /home/www/
- ln -s /home/www/extman-1.0.0/ /home/www/extsuite/extman
- ln -s /home/www/extmail-1.1.0/ /home/www/extsuite/extmail
- chown vmail:vmail /home/www/ -R
4、配置 Apache 的虚拟主机
修改 /home/httpd/conf/extra/httpd-vhosts.conf,增加如下指令:
- <VirtualHost *:80>
- ServerAdmin support@domain.ltd
- DocumentRoot "/home/www/extsuite/extmail/html"
- ServerName mail.domain.ltd
- ServerAlias domain.ltd
- ErrorLog "logs/ext-error_log"
- CustomLog "logs/ext-access_log" "common"
- ScriptAlias /extman/cgi/ /home/www/extsuite/extman/cgi/
- Alias /extman/ /home/www/extsuite/extman/html/
- ScriptAlias /extmail/cgi/ /home/www/extsuite/extmail/cgi/
- Alias /extmail/ /home/www/extsuite/extmail/html/
- </VirtualHost>
5、安装 RRDtool
将 rrdtool-1.3.8.tar.gz 解压后,请参阅 doc/rrdbuild.txt 的指令安装 RRDtool 的依赖包和 RRDTool,注意首先执行下面的指令:
- export INSTALL_DIR=/usr/local/rrdtool-1.3.8
- export PKG_CONFIG_PATH=${INSTALL_DIR}/lib/pkgconfig
- export PATH=$INSTALL_DIR/bin:$PATH
否则后面可能提示找不到依赖的库。
最后一步安装 rrdtool-1.3.8 包的时候,在 make install 后,执行:
- make site-perl-instal
- cp /lib/perl/5.10.0/i486-linux-thread-multi/RRDs.pm /usr/lib/perl5/site_perl/5.10.0/i486-linux-thread-multi/
- cp /lib/perl/5.10.0/i486-linux-thread-multi/auto/* /usr/lib/perl5/site_perl/5.10.0/i486-linux-thread-multi/auto/ -R
安装 RRDtool 的 Perl 支持。
6、配置 Extman/Extmail
6.1、extman/webman.cf
编辑 /home/www/extsuite/extman/webman.cf,找到如下行:
- SYS_CONFIG = /var/www/extsuite/extman/
- SYS_LANGDIR = /var/www/extsuite/extman/lang
- SYS_TEMPLDIR = /var/www/extsuite/extman/html
- SYS_MAILDIR_BASE = /home/domains
- # SYS_LANG = en_US
- SYS_GROUPMAIL_SENDER = postmaster@extmail.org
- SYS_MYSQL_USER = webman
- SYS_MYSQL_PASS = webman
- SYS_MYSQL_DB = extmail
- SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock
对应修改为如下:
- SYS_CONFIG = /home/www/extsuite/extman/
- SYS_LANGDIR = /home/www/extsuite/extman/lang
- SYS_TEMPLDIR = /home/www/extsuite/extman/html
- SYS_MAILDIR_BASE = /home/mailbox
- SYS_LANG = zh_CN
- SYS_GROUPMAIL_SENDER = postmaster@domain.ltd
- SYS_MYSQL_USER = postfix
- SYS_MYSQL_PASS = postfix_user_password
- SYS_MYSQL_DB = postfix
- SYS_MYSQL_SOCKET = /tmp/mysql.sock
6.2、extmail/webmail.cf
将 /home/www/extsuite/extmail/webmail.cf.default 在同目录复制为 webmail.cf,然后找到如下行:
- SYS_CONFIG = /var/www/extsuite/extmail/
- SYS_LANGDIR = /var/www/extsuite/extmail/lang
- SYS_TEMPLDIR = /var/www/extsuite/extmail/html
- SYS_SPAM_REPORT_TYPE = dspam
- SYS_USER_LANG = en_US
- SYS_MAILDIR_BASE = /home/domains
- SYS_MYSQL_USER = db_user
- SYS_MYSQL_PASS = db_pass
- SYS_MYSQL_DB = extmail
- SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock
- SYS_AUTHLIB_SOCKET = /var/spool/authdaemon/socket
- SYS_G_ABOOK_FILE_PATH = /var/www/extsuite/extmail/globabook.cf
对应修改为如下:
- SYS_CONFIG = /home/www/extsuite/extmail/
- SYS_LANGDIR = /home/www/extsuite/extmail/lang
- SYS_TEMPLDIR = /home/www/extsuite/extmail/html
- SYS_SPAM_REPORT_TYPE = spamassassin
- SYS_USER_LANG = zh_CN
- SYS_MAILDIR_BASE = /home/mailbox
- SYS_MYSQL_USER = postfix
- SYS_MYSQL_PASS = 42R854
- SYS_MYSQL_DB = postfix
- SYS_MYSQL_SOCKET = /tmp/mysql.sock
- SYS_AUTHLIB_SOCKET = /home/courier/authlib/var/spool/authdaemon/socket
- SYS_G_ABOOK_FILE_PATH = /home/www/extsuite/extmail/globabook.cf
7、其他配置
修改 /home/www/extsuite/extman/addon/mailgraph_ext/mailgraph-init 和 /home/www/extsuite/extman/addon/mailgraph_ext/qmonitor-init,分别找到:
相应的修改为:
- MAILGRAPH_PL=/home/www/extsuite/extman/addon/mailgraph_ext/mailgraph_ext.pl
- MAILGRAPH_PL=/home/www/extsuite/extman/addon/mailgraph_ext/qmonitor.pl
初始化日志统计图所需要的目录:
- /home/www/extsuite/extman/addon/mailgraph_ext/queue_mkrrd.sh
在 Slackware 下全部从源代码安装邮件服务器:三、系统配置 Mon, Jul 20. 2009
1、配置 MySQL
首先启动 MySQL 服务器,并且修改 MySQL 的 root 用户的密码:
- mysql.server start
- /home/mysql/bin/mysqladmin -u root password your_password
运行 /home/mysql/bin/mysql -u root -p,并且在提示符后输入 root 用户的密码,进入 MySQL 客户端,执行以下命令:
- # 创建 postfix 数据库
- CREATE DATABASE `postfix` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
- # 创建同名用户,并且设置密码
- CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'postfix_user_password';
- # 将 postfix 数据库的所有权限都赋予 postfix 用户
- GRANT ALL PRIVILEGES ON `postfix`.* TO 'postfix'@'localhost';
2、配置 Apache
2.1、httpd.conf
编辑 /home/httpd/conf/httpd.conf 文件,找到如下配置并且按照你自己的实际情况修改:
- # 设置默认字符集为 utf-8
- AddDefaultCharset utf-8
- # 设置以 vmail:vmail 的身份执行所有的 web 程序
- <IfModule !mpm_netware_module>
- User vmail
- Group vmail
- </IfModule>
- # 服务器管理员电子邮件,在出错页面显示
- ServerAdmin you@domain.tld
- # 监听 80 端口
- ServerName localhost:80
- # 设置文档主目录为 /home/www
- # 我的习惯是对不同的虚拟主机使用 /home/www/domain 的目录命名习惯
- # 具体可见 home/httpd/conf/extra/httpd-vhosts.conf
- DocumentRoot "/home/www"
- # 设置 /home/www 的默认权限
- <Directory "/home/www">
- Options Indexes Includes FollowSymLinks MultiViews
- AllowOverride All
- Order allow,deny
- Allow from all
- </Directory>
- # 设置默认索引页
- <IfModule dir_module>
- DirectoryIndex index.html index.php
- </IfModule>
- # 加载虚拟主机配置文件
- Include conf/extra/httpd-vhosts.conf
2.2、httpd-vhosts.conf
编辑 /home/httpd/conf/httpd.conf 文件,找到如下配置并且按照你自己的实际情况修改。我们在后面配置 Extman/Extmail 的时候同时配置该文件。
说明:如果有域名的 DNS 管理权限,推荐使用不同的域名表示不同服务,这样便于访问和管理,那么就需要配置该文件以支持多域名对应的虚拟主机。如果没有 DNS 管理权限,那么就只能把所有的服务都放在一个目录下,那么就不需要本文件的支持,同时上一节中的 /home/httpd/conf/httpd.conf 文件的 Include conf/extra/httpd-vhosts.conf 也可以注释掉。但是这种情况下,ExtMan 和 ExtMail 的 CGI 设置需要对应的修改。
3、配置 Postfix
3.1、main.cf
编辑 /etc/postfix/main.cf 文件,如下:
- # LOCAL PATHNAME INFORMATION
- queue_directory = /home/postfix/spool
- command_directory = /home/postfix/sbin
- daemon_directory = /home/postfix/libexec
- data_directory = /home/postfix/var
- # QUEUE AND PROCESS OWNERSHIP
- mail_owner = postfix
- # INTERNET HOST AND DOMAIN NAMES
- myhostname = mail.$mydomain
- mydomain = domain.ltd
- # SENDING MAIL
- myorigin = $mydomain
- # RECEIVING MAIL
- inet_interfaces = all
- mydestination =
- # REJECTING MAIL FOR UNKNOWN LOCAL USERS
- local_recipient_maps = $alias_maps $virtual_mailbox_maps unix:passwd.byname
- unknown_local_recipient_reject_code = 550
- # TRUST AND RELAY CONTROL
- mynetworks_style = subnet
- mynetworks = 202.119.43.0/24, 127.0.0.0/8
- # ALIAS DATABASE
- alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
- # DELIVERY TO MAILBOX
- home_mailbox = Maildir/
- mail_spool_directory = /home/mailbox
- # DEBUGGING CONTROL
- debug_peer_level = 2
- debugger_command =
- PATH=/bin:/usr/bin:/usr/local/bin; export PATH; (echo cont;
- echo where) | gdb $daemon_directory/$process_name $process_id 2>&1
- >$config_directory/$process_name.$process_id.log & sleep 5
- # INSTALL-TIME CONFIGURATION INFORMATION
- sendmail_path = /home/postfix/sbin/sendmail
- newaliases_path = /home/postfix/bin/newaliases
- mailq_path = /home/postfix/bin/mailq
- setgid_group = postdrop
- html_directory = /home/postfix/html
- manpage_directory = /home/postfix/man
- sample_directory = /etc/postfix
- readme_directory = /home/postfix/doc
- # VIRTUAL DOMAIN STORAGE
- virtual_mailbox_base = /home/mailbox
- virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf,
- mysql:/etc/postfix/mysql_virtual_alias_domain_mailbox_maps.cf
- virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
- virtual_alias_domains =
- virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf,
- mysql:/etc/postfix/mysql_virtual_alias_domain_maps.cf,
- virtual_uid_maps = static:2002
- virtual_gid_maps = static:202
- virtual_transport = maildrop
- virtual_minimum_uid = 200
- relay_domains = $mydestination
- maildrop_destination_recipient_limit = 1
- maildrop_destination_concurrency_limit = 1
- # QUOTA
- message_size_limit = 14336000
- virtual_mailbox_limit = 20971520
- virtual_create_maildirsize = yes
- virtual_mailbox_extended = yes
- virtual_mailbox_limit_maps = mysql:/etc/postfix/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_path = smtpd
- broken_sasl_auth_clients = yes
- smtpd_recipient_restrictions =
- permit_sasl_authenticated,
- permit_mynetworks,
- reject_unauth_destination
- smtpd_sasl_auth_enable = yes
- smtpd_sasl2_auth_enable = yes
- smtpd_sasl_local_domain = $myhostname
- smtpd_sasl_security_options = noanonymous
- smtpd_sasl_application_name = smtpd
- smtpd_banner=$myhostname ESMTP "Version not Available"
- smtpd_sasl_authenticated_header = yes
- # TLS
- smtpd_use_tls = yes
- smtpd_tls_cert_file = /etc/postfix/postfix.pem
- smtpd_tls_key_file = $smtpd_tls_cert_file
- # OPTIONAL PART
- smtpd_helo_required = yes
- disable_vrfy_command = yes
- smtpd_data_restrictions = reject_unauth_pipelining
- smtpd_etrn_restrictions = reject
- show_user_unknown_table_name = no
- # AMAVIS
- content_filter=smtp-amavis:[127.0.0.1]:10024
3.2、master.cf
编辑 /etc/postfix/master.cf 文件。
找到如下的代码:
- maildrop unix - n n - - pipe
- flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
修改为:
- maildrop unix - n n - - pipe
- flags=DRhu user=vmail argv=/home/courier/maildrop/bin/maildrop -d ${recipient}
在该文件的最后增加如下代码:
- smtp-amavis unix - - n - 2 lmtp
- -o lmtp_data_done_timeout=1200
- -o lmtp_send_xforward_command=yes
- 127.0.0.1:10025 inet n - n - - smtpd
- -o content_filter=
- -o local_recipient_maps=
- -o relay_recipient_maps=
- -o smtpd_restriction_classes=
- -o smtpd_client_restrictions=
- -o smtpd_helo_restrictions=
- -o smtpd_sender_restrictions=
- -o smtpd_recipient_restrictions=permit_mynetworks,reject
- -o mynetworks=127.0.0.0/8
- -o strict_rfc821_envelopes=yes
- -o smtpd_error_sleep_time=0
- -o smtpd_soft_error_limit=1001
- -o smtpd_hard_error_limit=1000
3.3、mysql_*.cf
新建如下文件:
/etc/postfix/mysql_virtual_alias_domain_mailbox_maps.cf
- user = postfix
- password = password_for_postfix
- hosts = localhost
- dbname = postfix
- query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'
/etc/postfix/mysql_virtual_alias_domain_maps.cf
- user = postfix
- password = password_for_postfix
- hosts = localhost
- dbname = postfix
- query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
/etc/postfix/mysql_virtual_alias_maps.cf
- user = postfix
- password = password_for_postfix
- hosts = localhost
- dbname = postfix
- query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
- #expansion_limit = 100
/etc/postfix/mysql_virtual_domains_maps.cf
- user = postfix
- password = password_for_postfix
- hosts = localhost
- dbname = postfix
- query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
- #query = SELECT domain FROM domain WHERE domain='%s'
- #optional query to use when relaying for backup MX
- #query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
- #expansion_limit = 100
/etc/postfix/mysql_virtual_mailbox_maps.cf
- user = postfix
- password = password_for_postfix
- hosts = localhost
- dbname = postfix
- query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
- #expansion_limit = 100
3.4、创建 SSL 证书
- cd /etc/postfix
- /usr/local/ssl/bin/openssl req -x509 -newkey rsa:1024 -keyout postfix.pem -out postfix.pem -nodes -days 365
按照提示输入你的组织等信息。
3.5、修改权限
- chmod 640 /etc/postfix/mysql_*
- chgrp postfix /etc/postfix/mysql_*
4、配置 CYRUS-SASL
创建并且修改 /home/cyrus-sasl/lib/sasl2/smtpd.conf 文件,内容如下:
- pwcheck_method:authdaemond
- log_level:3
- srp_mda:md5
- password_format:crypt
- mech_list:PLAIN LOGIN
- authdaemond_path: /home/courier/authlib/var/spool/authdaemon/socket
设置属性:
- chown postfix:postfix /home/cyrus-sasl/lib/sasl2/smtpd.conf
- chmod 400 /home/cyrus-sasl/lib/sasl2/smtpd.conf
5、配置 Courier Authlib
打开 /home/courier/authlib/etc/authlib/authdaemonrc 文件,修改 27 行:
- authmodulelist="authuserdb authldap authmysql authcustom authpipe"
为:
- authmodulelist="authmysql"
修改 /home/courier/authlib/etc/authlib/authmysqlrc:
- # MySQL 服务器地址
- MYSQL_SERVER localhost
- # MySQL 用户名
- MYSQL_USERNAME postfix
- # MySQL 密码
- MYSQL_PASSWORD password_for_postfix
- # 链接 MySQL 用的 sock
- MYSQL_SOCKET /tmp/mysql.sock
- # 上面指定了使用 sock 方式,所以端口号不需要指定
- # MYSQL_PORT 0
- MYSQL_OPT 0
- # 数据库名
- MYSQL_DATABASE postfix
- # 需要访问的表名
- MYSQL_USER_TABLE mailbox
- # 存放加密密码的列名
- MYSQL_CRYPT_PWFIELD password
- # 存放密码明文的列名,在这里不需要
- # MYSQL_CLEAR_PWFIELD clear
- # 默认域名
- DEFAULT_DOMAIN domain.ltd
- # 用户 ID 和用户组 ID
- MYSQL_UID_FIELD 2002
- MYSQL_GID_FIELD 202
- # 存放用户名 (email) 的列名
- MYSQL_LOGIN_FIELD username
- # 存放邮箱跟目录的列名,直接指定
- MYSQL_HOME_FIELD '/home/mailbox/'
- # 用户姓名列
- MYSQL_NAME_FIELD name
- # 存放用户邮箱路径的列名
- MYSQL_MAILDIR_FIELD maildir
- # MYSQL_DEFAULTDELIVERY defaultdelivery
- # 存放配额的列名
- MYSQL_QUOTA_FIELD quota
- # 附加选项列
- # MYSQL_AUXOPTIONS_FIELD CONCAT("disableimap=", disableimap, ",disablepop3=", disablepop3, ",disablewebmail=", disablewebmail, ",sharedgroup=" ,sharedgroup)
- # 附加 WHERE 语句
- MYSQL_WHERE_CLAUSE active='1'
注意:
- 确认在这个文件中不能用空格键(包括行尾),只能用 Tab 键。
- 确认只使用单引号,比如:'/var/mailbox/'
- localhost 不能用单引号。
- 确认你的 /etc/hosts 文件中有 localhost 解析。
- 编译时如果支持 Ipv6 可能导致错误。
- MYSQL_GID_FIELD 和 MYSQL_UID_FIELD 是 maildrop 所用到的用户(在这里是 vmail:vmail)的 UID 和 GID,而不是 MySQL 的。
6、配置 Courier IMAP
修改 /home/courier/imap/etc 目录下的 imapd、imapd-ssl、pop3d、pop3d-ssl 四个文件。找到 IMAPDSTART、 IMAPDSSLSTART、POP3DSTART、POP3DSSLSTART 四行,把 NO 修改为 YES。如下:
- IMAPDSTART=YES
如果你不需要 SSL 认证,则不需要修改 imapd-ssl 和 pop3d-ssl 文件。下面一步可以直接跳过。
创建 IMAP 和 POP3 需要的 SSL 证书:
- cd /home/courier/imap/share
- /usr/local/ssl/bin/openssl req -x509 -newkey rsa:1024 -keyout pop3d.pem -out pop3d.pem -nodes -days 365
- /usr/local/ssl/bin/openssl req -x509 -newkey rsa:1024 -keyout imapd.pem -out imapd.pem -nodes -days 365
按照提示输入你的组织等信息。
7、配置 Courier MailDrop
创建并修改 /etc/maildroprc 文件,内容如下:
- logfile "/var/log/maildrop.log"
- if ( $SIZE < 26144 )
- {
- exception {
- xfilter "/usr/bin/spamassassin --prefspath=$HOME/$DEFAULT/.spamassassin/user_prefs "
- }
- }
- if (/^X-Spam-Flag: *YES/)
- {
- exception {
- to "$HOME/$DEFAULT/.Junk/"
- }
- }
- else
- {
- exception {
- to "$HOME/$DEFAULT"
- }
- }
创建日志文件并且设置正确的权限:
- touch /var/log/maildrop.log
- chown vmail:vmail /var/log/maildrop.log
- chmod a+r /etc/maildroprc
8、配置 Spamassassin
修改 /etc/mail/spamassassin/local.cf,找到如下行:
- # rewrite_header Subject *****SPAM*****
- # report_safe 1
- # required_score 5.0
- # use_bayes 1
- # bayes_auto_learn 1
对应修改成如下:
- rewrite_header Subject *****SPAM*****
- report_safe 0
- required_score 10.0
- use_bayes 1
- bayes_auto_learn 1
并且最最后增加如下规则,以适应中国的邮件,减少误报的机会:
- ##################################################
- ##Follow is diables some bad rules for chinese mail
- ##################################################
- score SUBJ_FULL_OF_8BITS 0.0
- score BASE64_ENC_TEXT 0.0
- score BAYES_99 0.1
- score BAYES_90 0.1
- score BAYES_80 0.1
- score BAYES_70 0.1
- score BAYES_60 0.1
- score FROM_ILLEGAL_CHARS 0.1
- score HEAD_ILLEGAL_CHARS 0.1
- score SUBJ_ILLEGAL_CHARS 0.1
- score MIME_BASE64_TEXT 0.1
- score FAKE_HELO_AOL 0.1
- score NO_RDNS_DOTCOM_HELO 0.1
- score CHINA_HEADER 0.1
9、配置 Amavisd-new
编辑 /etc/amavisd.conf 文件。找到如下行:
- $daemon_user = 'vscan'; # (no default; customary: vscan or amavis), -u
- $daemon_group = 'vscan'; # (no default; customary: vscan or amavis), -g
- $mydomain = 'example.com'; # a convenient default for other settings
- # $MYHOME = '/var/amavis'; # a convenient default for other settings, -H
- $QUARANTINEDIR = '/var/virusmails'; # -Q
- # $db_home = "$MYHOME/db"; # dir for bdb nanny/cache/snmp databases, -D
- # $helpers_home = "$MYHOME/var"; # working directory for SpamAssassin, -S
- # $lock_file = "$MYHOME/var/amavisd.lock"; # -L
- # $pid_file = "$MYHOME/var/amavisd.pid"; # -P
- # $myhostname = 'host.example.com'; # must be a fully-qualified domain name!
- # $final_virus_destiny = D_DISCARD;
- # $final_banned_destiny = D_BOUNCE;
- # $final_spam_destiny = D_BOUNCE;
- # $final_bad_header_destiny = D_PASS;
- # ['ClamAV-clamd',
- # \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"],
- # qr/\bOK$/m, qr/\bFOUND$/m,
- # qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],
对应修改成如下:
- $daemon_user = 'amavis'; # (no default; customary: vscan or amavis), -u
- $daemon_group = 'amavis'; # (no default; customary: vscan or amavis), -g
- $mydomain = 'domain.ltd'; # a convenient default for other settings
- $MYHOME = '/home/amavis'; # a convenient default for other settings, -H
- $QUARANTINEDIR = '/home/mailbox/virusmails'; # -Q
- $db_home = "$MYHOME/db"; # dir for bdb nanny/cache/snmp databases, -D
- $helpers_home = "$MYHOME/var"; # working directory for SpamAssassin, -S
- $lock_file = "$MYHOME/var/amavisd.lock"; # -L
- $pid_file = "$MYHOME/var/amavisd.pid"; # -P
- $myhostname = 'domain.ltd'; # must be a fully-qualified domain name!
- $final_virus_destiny = D_PASS;
- $final_banned_destiny = D_PASS;
- $final_spam_destiny = D_PASS;
- $final_bad_header_destiny = D_PASS;
- ['ClamAV-clamd',
- \&ask_daemon, ["CONTSCAN {}\n", "/tmp/clamd.socket"],
- qr/\bOK$/m, qr/\bFOUND$/m,
- qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],
10、配置 Clam AntiVirus
10.1、clamd.conf
修改 /home/clamav/etc/clamd.conf,找到如下行:
- Example
- #LogFile /tmp/clamd.log
- #TemporaryDirectory /var/tmp
- #DatabaseDirectory /var/lib/clamav
对应修改成如下:
- #Example
- LogFile /tmp/clamd.log
- TemporaryDirectory /tmp
- DatabaseDirectory /home/clamav/var
10.2、freshclam.conf
修改 /home/clamav/etc/freshclam.conf,找到如下行:
- Example
- #DatabaseDirectory /var/lib/clamav
- #UpdateLogFile /var/log/freshclam.log
对应修改成如下:
- # Example
- DatabaseDirectory /home/clamav/var
- UpdateLogFile /var/log/freshclam.log
10.4、病毒库升级
首先创建日志文件并且升级病毒库:
- touch /var/log/freshclam.log
- chmod 666 /var/log/freshclam.log
- chown amavis /var/log/freshclam.log
- /home/clamav/bin/freshclam
设置定时更新,执行 crontab -e,增加如下指令:
- 00 08 * * * /home/clamav/bin/freshclam --quiet
表示每天的 08:00 自动升级病毒库。
在 Slackware 下全部从源代码安装邮件服务器:二、软件包安装 Mon, Jul 20. 2009
1、安装 MySQL
- tar -zxvf mysql-5.1.31.tar.gz
- cd mysql-5.1.31
- # 安装到 /home/mysql目录下,加入对 UTF-8 的支持,使用 mysql user,支持所有的字符和和插件
- ./configure --prefix=/home/mysql --with-charset=utf8 --with-extra-charsets=all --with-mysqld-user=mysql --with-plugins=all
- make; make install
- # 变更 /home/mysql 的属主
- chown -R mysql.mysql /home/mysql
- # 运行 MySQL 的初始化脚本
- ./scripts/mysql_install_db --user=mysql
- ln -s /home/mysql/share/mysql/mysql.server /usr/sbin
- ln -s /home/mysql/bin/mysql /usr/sbin/
- echo "/home/mysql/lib/mysql" >> /etc/ld.so.conf
- ldconfig
2、安装 Apache
- tar -zxvf httpd-2.2.11.tar.gz
- cd httpd-2.2.11
2.1、安装 APR
- cd srclib/apr
- ./configure
- make; make install
2.2、安装 APR-Util
- cd ../apr-util/
- ./configure --with-apr=/usr/
- make; make install
2.3、安装 Apache:
- cd ../../
- # 安装到 /home/httpd 目录下,支持动态链接路,支持 rewrite,支持 SSL,支持 DAV,支持代理
- ./configure --prefix=/home/httpd --enable-so --enable-auth-digest --enable-rewrite --enable-ssl --enable-dav --enable-dav-fs --enable-proxy --enable-proxy-ftp --enable-proxy-http --enable-proxy-balancer --with-apr=/usr/ --with-apr-util=/usr/
- make; make install
- ln -s /home/httpd/bin/apachectl /usr/sbin/
- ln -s /home/httpd/bin/htpasswd /usr/sbin/
3、安装 Cyrus SASL
- tar -zxvf cyrus-sasl-2.1.23.tar.gz
- cd cyrus-sasl-2.1.23
- # 安装到 /home/cyrus-sasl 目录下
- ./configure --prefix=/home/cyrus-sasl --enable-anon --enable-plain --enable-login --enable-sql --disable-krb4 --disable-otp --disable-cram --disable-digest --with-mysql=/home/mysql/ --without-pam --without-saslauthd --without-pwcheck --with-dblib=berkeley --with-bdb-libdir --with-bdb-incdir --with-openssl --with-plugindir=/home/cyrus-sasl/lib/sasl2
- make; make install
- # 创建符号链接,原因见 http://www.postfix.org/SASL_README.html#build_sasl
- ln -s /home/cyrus-sasl/lib/sasl2/ /usr/lib/sasl2
- echo "/home/cyrus-sasl/lib" >> /etc/ld.so.conf
- ldconfig
- # 很多弱智软件都找不到路径或者能找到但是配置很麻烦,例如 courier-authlib 和 PHP,于是直接做个符号链接
- ln -s /home/cyrus-sasl/lib/libsasl2.la /usr/lib/libsasl2.la
4、安装 Postfix
- tar -zxvf postfix-2.6.2.tar.gz
- cd postfix-2.6.2
- make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/home/mysql/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/home/cyrus-sasl/include/sasl -DUSE_TLS' 'AUXLIBS=-L/home/mysql/lib/mysql -lmysqlclient -lz -lm -ldb -L/home/cyrus-sasl/lib -lsasl2 -lssl -lcrypto'
- make install
make install 需要你指定路径,根据我的安装习惯,直接安装到 /home/postfix 下面,但是 etc 目录如果指定到 /home/postfix/etc,会出现很多错误,虽然能够解决,但是太麻烦了,所以 etc 例外,安装到默认的 /etc/postfix目录。
需要指定的目录如下,默认的直接回车。
- install_root: [/]
- tempdir: [/root/old/pkg/postfix-2.6.2] /tmp
- config_directory: [/etc/postfix]
- command_directory: [/usr/sbin] /home/postfix/sbin
- daemon_directory: [/usr/libexec/postfix] /home/postfix/libexec
- data_directory: [/var/lib/postfix] /home/postfix/var
- html_directory: [no] /home/postfix/html
- mail_owner: [postfix]
- mailq_path: [/usr/bin/mailq] /home/postfix/bin/mailq
- manpage_directory: [/usr/local/man] /home/postfix/man
- newaliases_path: [/usr/bin/newaliases] /home/postfix/bin/newaliases
- queue_directory: [/var/spool/postfix] /home/postfix/spool
- readme_directory: [no] /home/postfix/readme
- sendmail_path: [/usr/sbin/sendmail] /home/postfix/sbin/sendmail
- setgid_group: [postdrop]
修改权限:
- chmod a+x+g+s /home/postfix/sbin/postqueue
5、安装 Courier Authlib
说明:Courier 系列软件包的习惯都是用非 root 身份的用户 configure、make,然后再用 root 用户 make install。上面创建的 courier 用户就是这里起作用的。
注意:因为我们是非标准目录安装,所以在这里特别要增加 --without-stdheaderdir 选项,否则后面的组件无法找到 courier-authlib。
- # 出于让非 root 用户访问的权限问题,所以解压缩到 /tmp 目录下
- tar -jxvf courier-authlib-0.62.2.tar.bz2 -C /tmp/
- cd /tmp/courier-authlib-0.62.2/
- su courier
- # 下面的 configure 和 make 都是以 courier 用户的身份执行
- ./configure --prefix=/home/courier/authlib --with-authmysql=yes --with-mailuser=vmail --with-mailgroup=vmail --with-mysql-libs=/home/mysql/lib/mysql --with-mysql-includes=/home/mysql/include/mysql/ --without-stdheaderdir
- make
- exit
- # 切换到 root 用户 make install
- make install
- make install-configure
- # 修改权限
- chmod +x /home/courier/authlib/var/spool/authdaemon
6、安装 Courier IMAP server
注意:设置 COURIERAUTHCONFIG 环境变量,否则因为是非标准目录安装,找不到 courier-authlib 的路径,下面安装 Courier Maildrop 时也一样。
- # 出于让非 root 用户访问的权限问题,所以解压缩到 /tmp 目录下
- tar -jxvf courier-imap-4.5.0.tar.bz2 -C /tmp/
- cd /tmp/courier-imap-4.5.0/
- su courier
- # 下面的 configure 和 make 都是以 courier 用户的身份执行
- export COURIERAUTHCONFIG=/home/courier/authlib/bin/courierauthconfig
- ./configure --prefix=/home/courier/imap --with-authmysql=yes --with-mailuser=vmail --with-mailgroup=vmail --with-mysql-libs=/home/mysql/lib/mysql --with-mysql-includes=/home/mysql/include/mysql/ --enable-workarounds-for-imap-client-bugs --with-authchangepwdir --enable-unicode --with-trashquota
- make
- exit
- # 切换到 root 用户 make install
- make install-strip
- make install-configure
7、安装 Courier Maildrop
注意:下面 configure 命令参数里面的 --enable-maildrop-uid=2002 --enable-maildrop-gid=202 中的 2002 和 202 分别对应我们最开始添加的 vmail:vmail 的 UID 和 GID。如果你自己用其它方式增加的用户,则从 /etc/passwd 中找到对应的 UID/GID 并且替换。
- # 出于让非 root 用户访问的权限问题,所以解压缩到 /tmp 目录下
- tar -jxvf maildrop-2.1.0.tar.bz2 -C /tmp/
- cd /tmp/maildrop-2.1.0/
- su courier
- # 下面的 configure 和 make 都是以 courier 用户的身份执行
- export COURIERAUTHCONFIG='/home/courier/authlib/bin/courierauthconfig'
- # 设置编译时用到的类库
- export CPPFLAGS='-I/home/mysql/include/mysql/ -I/home/courier/authlib/include'
- export LDFLAGS="-L/home/mysql/lib/mysql/ -L/home/courier/authlib/lib/courier-authlib/"
- ./configure --prefix=/home/courier/maildrop --enable-sendmail=/home/postfix/sbin/sendmail --enable-trusted-users='root vmail' --enable-syslog=1 --enable-maildirquota --enable-maildrop-uid=2002 --enable-maildrop-gid=202 --with-trashquota --with-dirsync
- make
- exit
- # 切换到 root 用户 make install
- make install
8、安装 Spamassassin
执行以下指令进入 Perl CPAN 环境:
- perl -MCPAN -e shell
依次安装如下模块:
- YAML
- Digest::SHA1
- LWP
- Digest::BubbleBabble
- Net::DNS
- HTTP::Date
- IO::Zlib
- MIME::Base64
- DB_File
- Mail::SPF
- IP::Country::Fast
- Net::Ident
- IO::Socket::INET6
- IO::Socket::SSL
- Compress::Zlib
- Time::HiRes
- Mail::DKIM
- Mail::DomainKeys
- DBI
- DBD::mysql
- Encode::Detect
- Apache::Test
- Mail::SpamAssassin
说明:
- 安装
Net::DNS的时候,会询问是否进行测试,推荐选择 No。 - 在
CPAN里安装DBD::mysql的时候,因为我们不是在标准路径下安装,所以会提示找不到mysql_config错误。解决方法:返回 Shell(BASH),执行如下命令:- cd ~/.cpan/build/DBD-mysql-4.012-*
- perl Makefile.PL --mysql_config=/home/mysql/bin/mysql_config
- make
- make install
- 安装
Apache::Test的时候,会询问你httpd和apxs的安装位置,对应输入/home/httpd/bin/httpd和/home/httpd/bin/apxs。
9、安装 Amavisd-new
同上,进入 CPAN 界面,以此安装如下模块:
- Archive::Tar
- Archive::Zip
- Convert::UUlib
- Convert::BinHex
- Mail::Internet
- Net::Server
- Net::SMTP
- Digest::MD5
- IO::Stringy
- Unix::Syslog
- BerkeleyDB
- MIME::Tools
- Convert::TNEF
准备安装用到的环境,创建 Amavisd-new 所用到的目录并设置权限:
- mkdir /home/amavis
- chmod 750 /home/amavis
- mkdir /home/amavis/tmp/
- mkdir /home/amavis/db/
- mkdir /home/amavis/sbin/
- chown -R amavis:amavis /home/amavis
设置垃圾邮件存放的目录并且设置权限:
- mkdir /home/mailbox/virusmails
- chmod 750 /home/mailbox/virusmails/
- chown amavis /home/mailbox/virusmails/
安装 Amavisd-new,拷贝文件到对应的目录:
- tar -zvxf amavisd-new-2.6.4.tar.gz
- cd amavisd-new-2.6.4
- cp amavisd /home/amavis/sbin/
- chown root /home/amavis/sbin/amavisd
- chmod 755 /home/amavis/sbin/amavisd
- cp amavisd.conf /etc
- chown root /etc/amavisd.conf
- chmod 644 /etc/amavisd.conf
10、安装 Clam AntiVirus
- tar -zxvf clamav-0.95.2.tar.gz
- cd clamav-0.95.2
- ./configure --prefix=/home/clamav
- make
- make install
- mkdir /home/clamav/var
- chown clamav:clamav /home/clamav/ -R
在 Slackware 下全部从源代码安装邮件服务器:一、安装前的准备 Fri, Jul 10. 2009
1、系统需求
在安装前请确认您的系统已经安装了以下的组件或者类库,如果没有请先安装:
- Perl w/ CPAN
- OpenSSL
- Berkeley Database / libdb
2、下载软件包
下面是我们必须用的软件包,请分别下载:
- Postfix:消息传送代理/电子邮件服务器。下载地址
- Cyrus SASL:简单认证安全层。下载地址
- Courier Auth Lib:嵌入式身份认证系统。下载地址
- Courier IMAP server:提供 POP3 和 IMAP 服务。下载地址
- Courier Maildrop:投递邮件。下载地址
- amavisd-new:位于 MTA 和内容过滤器之间的接口。下载地址
- Clam AntiVirus:对邮件进行病毒检查。下载地址
- MySQL:数据库服务器,用来存储虚拟域、虚拟账户等信息。下载地址
- Apache:Web 服务器,用来给 Extman/Extmail 提供 Web 服务。下载地址
- Extman/Extmail:网页客户端和网页管理端。下载地址
- RRDtool:数据日志可视化库,Extman 生成统计图时使用。下载地址
下面是可选组件,请根据情况下载:
- PHP:如果你想使用 phpMyAdmin,或者同时提供其他的 Web 服务,则需要 PHP 支持。下载地址
- phpMyAdmin:提供一个简单、方便的 Web 数据库管理界面。下载地址
3、创建所需的用户、组和目录
创建所需要的用户组和用户,为了不和 Slackware 的默认 GID/UID 冲突,所以我们从 200 和 2000 开始。如果你使用自己的 GID/UID,那么后继的配置需要注意替换成您的 GID/UID。
- # Slackware 默认安装有 mysql:mysql 用户组,所以不必再新增
- # groupadd mysql
- # useradd -g mysql -d /home/mysql -s /sbin/false -c "MySQL" mysql
- groupadd -g 200 postfix
- groupadd -g 201 postdrop
- groupadd -g 202 vmail
- groupadd -g 203 amavis
- groupadd -g 204 clamav
- useradd -u 2000 -g postfix -d /dev/null -s /bin/false postfix
- useradd -u 2002 -g vmail -d /dev/null -s /bin/false vmail
- useradd -u 2003 -g amavis -d /home/amavis -s /bin/bash amavis
- useradd -u 2004 -g clamav -d /home/clamav -s /bin/false -c "Clam Antivirus" clamav
- useradd -u 2010 -g users -d /home/courier -s /bin/bash courier
创建邮件(虚拟域、虚拟帐号)所在的目录,并修改权限。
- mkdir /home/mailbox
- chown vmail:vmail /home/mailbox -R
创建 Web 服务(虚拟主机)所在目录,并且修改权限。
- mkdir /home/www
- chown vmail:vmail /home/www -R
