2023年6月21日发(作者:)

1. Gentoo Linux, 必须熟悉Gentoo Linux

2. 配置OpenLDAP支持多域名,支持web用户界面管理,支持LAMP应用进行对应的用户验证,支持 POP3/POP3s, IMAP/IMAP3 和 SMTP (支持SSL)

3. 配置邮件系统支持多域名,支持web界面管理。邮件用户和OpenLDAP匹配,并能与LDAP同步更新。

4. 配置CATCI和Apache流量统计工具,Web界面。

5. 详细的配置文档,和基本的操作步骤说明

Gentoo LINUX

postfix+openldap+extmail+maildrop+sasl+courier-authlib+courier-imap配置文档

先大概讲讲结构,MTA以postfix为核心,通过模块扩展的方式来实现完整的邮件系统功能

Maidrop作为MDA

openLDAP作为数据库(另一个选择是mysql)

extmail作为webmail,extman作为webmail的后台用户管理,有图形日志,别名等功能

sasl作为smtp的身份验证模块

courier-authlib,作为验证pop3登录的中间模块

courier-imap,提供imap/pop3等功能

理论上讲,包的安装顺序和配置顺序是随意的,但在最后调试的时候,需要逐个进行调试,否则有可能因为依赖的问题,导致其他功能也不正常,比如说如果sasl的配置不正确,那么在客户端试图发信的时候就会提示验证失败之类的错误

对于GNU来说,在各个发行版上的安装软件都是类似的。但是对于gentoo来说,有一个强大的工具能节省很多输入指令和解决依赖关系的时间。它就是emerge

和其他发行版类似,emerge看上去和Redhat的yum,debian的apt-get比较像,但更加像freebsd的ports。

下面的安装中需要用到emerge,对于emerge的详细使用方法,请自行查看文档。

1. 安装postfix

#emerge postfix

安装前先修改/etc/

在USE那一行加入sasl(gentoo对于包采用Use flags的方式来管理,以后编译其他包的时候都用这个方法,如果不修改可以直接在命令行中用USE =“sasl”来指定

#emerge -pv postfix可以查询编译的时候包含哪些功能支持,

#emerge -av postfix询问模式,提示USE FLAGS的参数列表,并等待用户确认安装。

这样编译的postfix才能支持sasl #USE =“sasl” emverge –av postfix

编译的过程可以去看帖子,聊天,总之干啥都行。看着那一堆参数在屏幕上翻滚,是一件很无聊的事情。

编译完成后会出现一堆提示,大意是告诉你更新了哪些文件,哪些配置文件需要修改之类的

接下来可以手动修改配置文件了,对于postfix而言,主要的配置文件有两个,和

因为这两个配置文件要反复修改,建议修改前先做一个备份

#cd /etc/postfix/

#cp

#cp

备份之后我们把原来的配置清空,因为里面有大段的注释看着很头痛,也不便于我们修改

#>/etc/postfix/

按照我们的修改顺序,从上往下添加配置,注意不要添加重复的字段,比如前面如果有了关于hostname=的配置,就不要再次写相同的信息。否则会引起一些问题。

#vi /etc/postfix/

#base config

queue_directory = /var/spool/postfix

command_directory = /usr/sbin

daemon_directory = /usr/lib64/postfix

mail_owner = postfix

myhostname =

mydomain =

inet_interfaces = all

mydestination = localhost.$mydomain, localhost

unknown_local_recipient_reject_code = 550

mynetworks = 222.190.111.0/24 127.0.0.0/8

local_destination_concurrency_limit = 2

default_destination_concurrency_limit = 10

debug_peer_level = 2

debugger_command =

PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin

xxgdb $daemon_directory/$process_name $process_id & sleep 5

sendmail_path = /usr/sbin/sendmail

newaliases_path = /usr/bin/newaliases

mailq_path = /usr/bin/mailq

setgid_group = postdrop

html_directory = /usr/share/doc/postfix-2.4.6-r2/html

manpage_directory = /usr/share/man sample_directory = /etc/postfix

readme_directory = /usr/share/doc/postfix-2.4.6-r2/readme

以上这些信息基本都是默认值,需要修改的只有myhostname和mydomain

#vi /etc/postfix/

Code Listing 2.3: /etc/postfix/

# service type private unpriv chroot wakeup maxproc command + args

# (yes) (yes) (yes) (never) (50)

#

==========================================================================

(Just add the "-v" after the smtpd in the following line)

smtp inet n - n - - smtpd –v

这里的-v是为了打开调试模式,如果后面一切正常了,还可以把它再去掉

修改/etc/mail/aliases

可以添加一个root的别名邮箱如root: coolerfeng@

/usr/bin/newaliases

/etc/init.d/postfix start

添加到默认运行级别(开机自动启动)

# rc-update add postfix default(后面的软件也是相同的用法)

检查

#telnet localhost 25

出现banner之后随意输入一个ehlo xxxxx(xxxx为任意域名)

会提示服务器的认证模式,如果没有AUTH字样,说明前面没有编译进去sasl支持,需要返工)

www ~ # telnet localhost 25

Trying 127.0.

Connected to localhost.

Escape character is '^]'.

220 ESMTP Postfix - by coolerfeng

ehlo

250-PIPELINING

250-SIZE 52428800

250-VRFY

250-ETRN 250-STARTTLS

250-AUTH LOGIN PLAIN

250-AUTH=LOGIN PLAIN

250-ENHANCEDSTATUSCODES

250-8BITMIME

250 DSN

quit

221 2.0.0 Bye

Connection closed by foreign host.

2,openldap

为啥这么早就开始安装ldap呢,因为后面的工作都是基于ldap的,没有基础,后面的工作就无法测试,所以在顺序上把它放在前面

# emerge openldap pam_ldap nss_ldap

#emerge BerkeleyDB

# chown ldap:ldap -R /var/lib/openldap-{ldbm,data,slurp}

复制extman/doc目录下的到/etc/openldap/schema

这里说的是我们从extman的压缩包中的docs目录中找到的,它的作用相当于定义了一个结构。这样在后面我们能用extman后台来创建一个虚拟域。

配置log文件。便于调试

# vi /etc/syslog-ng/

destination ldap { file("/var/log/"); };

filter f_ldap {facility(local4); };

log { source(src); filter(f_ldap); destination(ldap); };

以上分别是log的目的地址,过滤器,log动作,详细介绍参考syslog-ng

设置完成后/etc/init.d/syslog-ng restart

如果机器上安装的是syslog只需要先设定/etc/

加放local4.* /var/log/

然後touch /var/log/,重启syslog,就有slapd的log可查了。

#vi /etc/openldap/

# Include the needed data schemes

include /etc/openldap/schema/

include /etc/openldap/schema/

include /etc/openldap/schema/

include /etc/openldap/schema/

include /etc/openldap/schema/

###extmail依赖core,cosine,nis这三个文件,所以要放在他们后面 loglevel 256

pidfile /var/run/openldap/

access to * by self write by * read

database bdb

suffix "dc="

checkpoint 32 30

rootdn "cn=Manager,dc="

directory /var/lib/openldap-data/

index objectClass eq

这里用bdb作为数据库类型,需要说明的是,前面需要先安装bdb,才能使用,默认的配置是ldbm的类型。

这里面需要解释一下几个参数的含义,suffix表示后缀 这里填写域名,格式有几种

有o=xxxx,c=xxxxx 或者dc=xxxx,dc=xxxx 需要说明的是dc=与dc=extmail,dc=org是不一样的。要注意。

Rootdn,管理员的名字,用来管理整个ldap的域

dn :一条记录的位置

dc :一条记录所属区域

ou :一条记录所属组织

cn/uid:一条记录的名字/ID

添加ldap的root密码

#echo rootpw `slappasswd -h {Md5}` >> /etc/openldap/

然后在提示之后输入密码(secert)

如果这里不用secert,后面的配置文件中遇到secert的地方都要对应修改。

ldap的root密码也可以直接用明文在/etc/openldap/中直接写上

rootpw secret

建立数据库配置文件

#cp /var/lib/openldap-data/DB_e /var/lib/openldap-data/DB_CONFIG

测试配置文件的语法

# slaptest -d 10

config file testing succeeded

以上提示说错配置文件正确

如果是

slaptest: bad configuration file!

需要检查配置文件是否有拼写错误(重点检查

suffix "dc=mydomain,dc=org" rootdn "cn=admin,dc=mydomain,dc=org"

两者的dc是否吻合

配置文件正确就可以启动slapd 服务了

# /etc/init.d/slapd start

如果用bdb方式做数据库,启动不了,需要进入数据库目录(/var/lib/openldap-data/

运行 db4.5_recover 然后删除alock

然后重启启动/etc/init.d/slapd start

就可以了,并检查一下是否有slapd进程和监听389端口

如果还是启动不了,打开/var/log/检查一下,是否有其他问题,如权限等)

添加到默认运行级别(开机自动启动)

# rc-update add slapd defaul

配置ldap的cilent用的配置文件(ldapsearch等需要)

www ~ # cat /etc/openldap/

#

# LDAP Defaults

#

# See (5) for details

# This file should be world readable but not world writable.

HOST 127.0.0.1

BASE dc=

URI

SIZELIMIT 12

TIMELIMIT 15

DEREF never

导入LDAP树结构

#ldapadd -x -D "cn=Manager,dc=" -w secret -f /path-to-extman/doc/

-w后面是刚才设置的root密码 –f 后面是的路径和文件名

没有问题的话会提示add to xxxxxxxxxxx。没有报错信息。

如果导入的文件出错的话,

ldap_add: Server is unwilling to perform (53)

additional info: no global superior knowledge

检查/etc/openldap/中的域和是否一致

suffix "dc= "

rootdn "cn=Manager,dc= "

默认的模版中定义的是 如果报错ldap_bind: Invalid credentials (49)

说明是域或者密码不对。这里要用正确的域cn=Manager,dc=

如果没有启动LDAP server,会提示

ldap_bind: Can't contact LDAP server (-1)

运行 /etc/init.d/slapd start来启动,

导入成功后

cp /root/extman-0.2.4/docs/ldap*

在/etc/postfix/中添加

# extmail config here

virtual_alias_maps = ldap:/etc/postfix/ldap_virtual_alias_

virtual_mailbox_domains = ldap:/etc/postfix/ldap_virtual_domains_

virtual_mailbox_maps = ldap:/etc/postfix/ldap_virtual_mailbox_

ldap安装好了,为了方便管理,我们需要一个web管理工具

安装phpldapadmin

ACCEPT_KEYWORDS="~amd64" emerge phpldapadmin

Cp -R /usr/share/webapps/phpldapadmin/1.1.0.5/htdocs

/var/www//htdocs/phpldapadmin

cd /var/www//htdocs/phpldapadmin

cd config

cp e

vi

取消如下行的注释

$config->custom->session['blowfish'] = 'secret';

$ldapservers->SetValue($i,'server','name','My LDAP Server');

$ldapservers->SetValue($i,'server','host','127.0.0.1');

$ldapservers->SetValue($i,'server','port','389');

$ldapservers->SetValue($i,'server','base',array('dc='));

$ldapservers->SetValue($i,'login','dn','cn=Manager,dc=');

$ldapservers->SetValue($i,'login','pass','secret');

#$ldapservers->SetValue($i,'appearance','password_hash','md5'); //如果前面用的是明文密码不需要此行

$ldapservers->SetValue($i,'login','attr','dn');

然后访问浏览器

/phpldapadmin 用户名:cn=Manager,dc=

密码:secret

l

通常都是把webmail的配置放在后面,为啥我这里写在前面呢,因为相对而言,个人认为webmail的配置简单一些,很多人都是卡在smtp和pop3.所以先配置成功webmail有助于帮助后面解决smtp和pop3的问题。

Extmail是perl编写的,所以如果在运行中提示缺少模块,就缺啥补啥

Webmail需要web服务器支持,首先安装apache

建议打开suexec功能

打开apache的suexec功能

USE=suexec SUEXEC_MINUID=100 SUEXEC_DOCROOT=/var/www emerge -av apache

进行编译。结束后

#vi /etc/apache2/

LoadModule suexec_module modules/mod_

配置extmail和extman

从下载extmail和extman,解压缩extmail和extman,并移动到apache的vhosts中定义的htdocs目录下

vi /etc/apache2/vhosts.d/

NameVirtualHost *:80

ScriptAlias /extmail/cgi /var/www//htdocs/extmail/cgi

Alias /extmail /var/www//htdocs/extmail/html

ScriptAlias /extman/cgi /var/www//htdocs/extman/cgi

Alias /extman /var/www//htdocs/extman/html

SuexecUserGroup vuser vgroup SuexecUserGroup vuser vgroup

# chown -R /var/www//htdocs/extman/cgi

配置extman和extmail(两者相似)

编辑/

SYS_CONFIG = /var/www//htdocs/extman/

SYS_LANGDIR = /var/www//htdocs/extman/lang

SYS_TEMPLDIR = /var/www//htdocs/extman/html

SYS_MAILDIR_BASE = /share/domains //修改默认的存储路径

SYS_CAPTCHA_ON = 0 //取消验证码

SYS_BACKEND_TYPE = ldap

SYS_LDAP_PASS = secret //和前面设置的ldap的root密码一致

然后从浏览器访问extmail. 如果提示少perl模块Unix::Syslog

用perl的cpan在线安装

perl -MCPAN -e shell

cpan>install Unix::Syslog

然后再访问extmail。这次出来页面了。

配置extman的过程类似

如果提示缺少Net::LDAP的perl模块,用上面的办法补上。安装的提示会提示几个可选模块是否安装,按Y都安装上

然后一切正常后登录后台,添加虚拟域,添加一个用户test,密码test

然后登录webmail,如果MX已经做好了,测试一下是否可以正常的收发邮件,如果不能,检查/var/log/(关于log的配置可以参考前面的说明)

r-authlib+courier-imap

到这里了基本就是难点了,多半都会在这里遇到问题,sasl认证以及courier-imap的配置在论坛上的讨论很多,相关的问题的帖子也不少,但是如果能把整个流程弄明白,排错也就不难了。

#emerge courier-imap courier-authlib

#vi /etc/courier/authlib/authdaemonrc

authmodulelist="authldap"

debug_level=2

(打开调试模式,便于后面排错,这里只用一种认证模式,就是ldap方式,需要说明的是这些软件的编译的时候需要打开对应的功能支持,不过幸运的是我们可以在全局参数/etc/里面把我们想要的参数都写在USE的列表里面,这样就不用每次编译的时候都操心了,如果遇到不兼容的模块,emerge会停下来,并提示你,这时候,我们在手动指定一个参数把不兼容的去掉就可以了,比如USE =”-mysql” 表示去掉mysql的支持,用减号表示,同样+号表示打开支持)

vi /etc/courier/authlib/authldaprc

LDAP_URI ldap://

LDAP_SERVER 127.0.0.1

LDAP_PORT 389

LDAP_PROTOCOL_VERSION 3

LDAP_BASEDN o=extmailAccount,dc=

LDAP_BINDDN cn=Manager,dc=

LDAP_BINDPW secret

LDAP_TIMEOUT 5 LDAP_MAIL mail

LDAP_FILTER (&(objectClass=extmailUser)(active=1))

LDAP_HOMEDIR homeDirectory

LDAP_MAILROOT /share/domains

LDAP_MAILDIRQUOTA quota

LDAP_CRYPTPW userPassword

LDAP_UID uidNumber

LDAP_GID gidNumber

LDAP_AUXOPTIONS

disablesmtpd=disablesmtpd,disablesmtp=disablesmtp,disablewebmail=disablewebmail,disablenetdisk=disablenetdisk,disableimap=disableimap,disablepop3=disablepop3

LDAP_DEREF never

LDAP_TLS 0

LDAP_DOMAIN

这个文件比较长,在这里我也卡住了。一度出现pop3登录的时候提示密码错误的现象

这里发现一个courier-authlib的启动脚本的bug

/etc/init.d/courier-authlib start

(提示失败看log提示myserver authdaemond: exec: No such file or directory

后来发现/usr/sbin/authdaemond start 可以正常启动,就是不能用启动脚本,奇怪了

经过研究发现启动脚本中写错了)

编辑启动脚本/etc/init.d/courier-authlib 修改下面这一行

AUTHLIB="/usr/lib64/courier/courier-authlib"

默认是lib,但是我这是64位的机器,所以就提示找不到这个库了。晕倒。

Courier-imap的配置文件

这个软件包含了两个模块,一个是imap/imaps,一个是pop3/pop3s

这里贴出pop3的配置文件

www ~ # grep -v ^# /etc/courier-imap/pop3d | grep -v ^$

PIDFILE=/var/run/

MAXDAEMONS=40

MAXPERIP=4

POP3AUTH=""

POP3AUTH_ORIG="PLAIN LOGIN CRAM-MD5 CRAM-SHA1 CRAM-SHA256"

POP3AUTH_TLS=""

POP3AUTH_TLS_ORIG="LOGIN PLAIN"

POP3_PROXY=0

PORT=110

ADDRESS=0

TCPDOPTS="-nodnslookup -noidentlookup"

LOGGEROPTS="-name=pop3d"

DEFDOMAIN="@"

POP3DSTART=NO MAILDIR=Maildir

PRERUN=

LOGINRUN=

这里可以定义默认的虚拟域,需要注意的是MAILDIR这个参数。在后面会讲到

#vi /etc/courier-imap/

#vi /etc/courier-imap/

很简单的文件,就不解释了

mkdpop3cert

mkimapdcert

产生证书

#vi /etc/courier-imap/pop3d-ssl

和刚才pop3d的文件一样,也是要修改Maildri的配置,改法一样。

POP3/POP3S/IMAP/IMAPS的配置都基本一样,就不啰嗦了。

启动服务

先启动courier-authlib,然后再启动courier-imap,pop3

# /etc/init.d/courier-imapd start

# /etc/init.d/courier-imapd-ssl start

# /etc/init.d/courier-pop3d start

# /etc/init.d/courier-pop3d-ssl start

5. Cyrus-sasl

# emerge cyrus-sasl

# vi /etc/sasl2/(保持如下默认配置)

pwcheck_method:authdaemond

mech_list:PLAIN LOGIN

log_level:3

authdaemond_path:/var/lib/courier/authdaemon/socket

注意这个文件中不要有莫名其妙的字符,如多余的^M,空格之类的,否则会引起奇怪的问题

每一行都要用回车来结束。建议用cat –v 仔细看看

# vi /etc/conf.d/saslauthd

SASLAUTHD_OPTS="${SASLAUTH_MECH} -a rimap -r"

SASLAUTHD_OPTS="${SASLAUTHD_OPTS} -O localhost"

注释掉下面这行

#SASLAUTHD_OPTS="${SASLAUTHD_OPTS} -a pam"

# /etc/init.d/saslauthd start

测试sasl的验证

# authtest -s login test@ test

Authentication FAILED: Input/output error

查看log说什么authdaemond: ldap_simple_bind_s failed: Can't contact LDAP server

可是slapd确实起来了啊

/etc/courier/authlib/authldaprc

第一行LDAP_URI ldap://

不能注释,否则就会在log中提示authdaemond: You need to specify LDAP_URI in config file

但是加上了以后就半天不动,然后提示刚才的错误信息

无意间想到是DNS的问题,于是在hosts文件中加入

127.0.0.1

再次查询,这次有结果了。

myserver openldap-data # authtest -s login test@ test

Authentication succeeded.

Authenticated: test@ (uid 1000, gid 1000)

Home Directory: /share/domains//test

Maildir: (none)

Quota: (none)

Encrypted Password: $1$hmupaBpP$KT2KkAZ3AiSGPDLfL2ie7.

Cleartext Password: test

Options:

disablesmtpd=0,disablesmtp=0,disablewebmail=0,disablenetdisk=0,disableimap=0,disablepop3=0

这里的Home Directory是绝对路径,而Maildir是相对路径

(不过在其他发行版上也有都显示绝对路径的,可能和具体的版本或者编译参数有关系)

最后pop3登录的时候就会将2个路径相加,然后去访问

那么这个Home和Maildir是怎么得来的呢。

前面的authldaprc中有2个参数

LDAP_HOMEDIR homeDirectory

LDAP_MAILROOT /share/domains

Home Directory就是LDAP_MAILROOT+ LDAP_HOMEDIR

homeDirectory是LDAP树中定义的字段,从LDAP的树中查出它的值是

/test,所以最后的值就是我们看到的

LDAP_MAILDIR 在配置文件中我们没有定义,所以它的值是空的(none)

这里最后得到路径就是Home Directory+ Maildir /share/domains//test

看上去还有点不对劲,因为还少了一个/Maildir

没有关系,我们还有courier-pop3的配置文件来添加

MAILDIR=Maildir

这个就把最后的部分补齐了,现在的路径总算是完整的了

/share/domains//test/Maildir

如果权限正确,目录下的对应的目录都存在,如cur new 等,那么就可以正常的取到邮件了

刚才只是用了authest来测试,如果不放心,还可以telnet测试一把

为了验证pop3是否正常,我们再次用命令行的方式进行验证

myserver ~ # telnet localhost 110

Trying 127.0.

Connected to localhost.

Escape character is '^]'.

+OK Hello there.

user test@

+OK Password required.

pass test

+OK logged in.

如果最后一行不是OK,说明配置有误,需要结合log来分析错误。一般可能的错误有无法chdir到对应的目录,权限错误,Maildir的格式不对等等。如果提示OK logged in,说明配置正确,否则的话就如上面分析去检查配置文件吧。

以上贴出的位置文件仅供参考,实际上,在不同的环境下,是可以变化的。一开始我就是照搬EMOS的配置文件,结果遇到了障碍,耽误了很多时间。可见一句话,尽信书不如无书。

6. TLS for Postfix

/etc/ssl/编辑此文件,填入预设值(后面安装的时候就可以一路回车了)

countryName_default CN

stateOrProvinceName_default jiangsu

localityName_default

organizationName_default

Nanjing

test

commonName_default

emailAddress_default. test@

产生CA的私钥()和公钥()

#openssl req -new -x509 -keyout -out -days 3650

-new表示生成公私钥和CSR文件,-keyout输出私钥文件 -out输出CSR文件

-days表示10年有效期,-nodes表示不加密

产生服务器的私钥和CSR文件

#openssl req -nodes -new -x509 -keyout -out -days 3650

转换 #openssl x509 -x509toreq -in -signkey -out

用CSR来签发公钥。

#openssl ca -policy policy_anything -out -infiles

删除临时文件

rm

把证书复制到potfix的配置文件目录

#mkdir /etc/postfix/certs

#cp /etc/postfix/certs/

#cd /etc/postfix/certs

#chown root:wheel

#chown root:postfix

#chmod 755

#chmod 644

#chmod 440

#ln -s `openssl x509 -noout -hash < `.0

6. Adding SSL and SASL support to Postfix

#vi /etc/postfix/(在末尾添加如下内容)

smtpd_sasl_auth_enable = yes

smtpd_sasl2_auth_enable = yes

smtpd_sasl_security_options = noanonymous

broken_sasl_auth_clients = yes

smtpd_sasl_local_domain =

smtpd_recipient_restrictions =

permit_sasl_authenticated,

permit_mynetworks,

reject_unauth_destination

smtp_use_tls = yes

smtp_tls_note_starttls_offer = yes

smtpd_use_tls = yes

#smtpd_tls_auth_only = yes

smtpd_tls_key_file = /etc/postfix/certs/

smtpd_tls_cert_file = /etc/postfix/certs/

smtpd_tls_CAfile = /etc/postfix/certs/

smtpd_tls_loglevel = 3

smtpd_tls_received_header = yes

smtpd_tls_session_cache_timeout = 3600s

tls_random_source = dev:/dev/urandom vi /etc/postfix/

smtps inet n - n - - smtpd

-o smtpd_tls_wrappermode=yes

-o smtpd_sasl_auth_enable=yes

-o smtpd_client_restrictions=permit_sasl_authenticated,reject

# postfix reload

#telnet localhost 25

(没有这个工具的话先用emerge netkit-telnetd安装一下)

# telnet localhost 25

Trying 127.0.

Connected to localhost.

Escape character is '^]'.

220 ESMTP Postfix - by coolerfeng

ehlo

250-PIPELINING

250-SIZE 52428800

250-VRFY

250-ETRN

250-STARTTLS

250-AUTH LOGIN PLAIN

250-AUTH=LOGIN PLAIN

250-ENHANCEDSTATUSCODES

250-8BITMIME

250 DSN

在输出中有250-STARTTLS说明postfix已经支持TLS了

创建虚拟用户

# groupadd -g 1000 vgroup

# useradd -d /share/domains -g 1000 -m -s /bin/false -u 1000 vuser

# mkdir /share/domains

# chown –R vuser:vgroup /share/domains

# id vuser

uid=1000(vuser) gid=1000(vgroup) groups=1000(vgroup)

安装maildrop

emerge maildrop

安装完了用maildrop –v看一下,幸运的是默认的安装就支持sasl了

Courier Authentication Library extension enabled.

vi /etc/maildroprc

DEFAULT="$HOME/Maildir/"

vi /etc/postfix/

maildrop unix - n n - - pipe

flags=DRhu user=vuser argv=maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user}

${extension} {nexthop}

myserver ~ # echo "test" | maildrop -V 10 -d test@

maildrop: authlib: groupid=1000

maildrop: authlib: userid=1000

maildrop: authlib: logname=test@,

home=/share/domains//test, mail=(default)

maildrop: Changing to /share/domains//test

Message start at 0 bytes, envelope sender=test@

Tokenized ;

Tokenized ;

Tokenized string: "DEFAULT"

Tokenized =

Tokenized string: "$HOME/Maildir/"

Tokenized ;

Tokenized ;

Tokenized eof

/etc/maildroprc(3): DEFAULT="/share/domains//test/Maildir/"

maildrop: Attempting .mailfilter

maildrop: Delivery complete.

如上提示说明maildrop的投递是正常的。

接下来可以用客户端来测试了,当然telnet也是可以的,如果你不嫌输入指令麻烦的话

如果没有问题的话,基本的部分我们就完成了,能收能发,能用web界面进行管理

7.cacti的配置

#USE=”snmp” emerge -av cacti

gentoo默认安装的cacti居然不支持snmp,真不知道装上能干嘛。

安装cacti之前要准备好LAMP环境,关于这部分就不多说了。对于gentoo也是非常容易的事情

emerge安装完后可以用webapp-config来安装到apache的vhost目录下,也可以自己手动从/usr/share/webapps/中拷贝 创建cacti库并导入mysql库,进入到cacti的目录

#mysqladmin --user=root -p create cacti

#mysql -u root -p cacti <

给mysql创建一个用户

shell> mysql --user=root mysql -p

mysql> GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'somepassword';

mysql> flush privileges;

#vi include/

$database_type = "mysql";

$database_default = "cacti";

$database_hostname = "localhost";

$database_username = "cactiuser";

$database_password = "somepassword";

#useradd cacti

shell> chown -R cacti rra/ log/

然后从浏览器访问/cacti/

会有一个向导,按照提示操作,然后会提示你登录,用户名和密码都是admin

登录成功后会提示修改密码,这里我修改为admincacti

然后修改一下setting,如果没有开启snmp,可以在setting里面打开。然后就是添加主机,点device,选择模板,模板可以用snmp或者unix的,如果一切正常,会显示采集到数据,然后创建graph,ok之后,切换到shell下面进行初始化

su cacti

执行php /var/www//htdocs/cacti/

如果显示了一堆数字,并且在rra目录下产生了rrd文件,说明ok了

接下来把这行添加到cacti用户的crontab中,并设置为5分钟运行一次 crontab –u cacti –e

*/5 * * * * php /var/www//htdocs/cacti/ > /dev/null 2>&1

关于cacti的说明,如果要监控其他机器,一般采用snmp方式。

被监控的机器上要安装snmp。并且要修改

#vi /etc/snmp/

com2sec notConfigUser default public

group notConfigGroup v1 notConfigUser

group notConfigGroup v2c notConfigUser

view systemview included .1.3.6.1.2.1.1

view systemview included .1.3.6.1.2.1.25.1.1

access notConfigGroup "" any noauth exact all none none

view all included .1 80

syslocation Unknown (edit /etc/snmp/)

syscontact Root (configure /etc/snmp/)

pass .1.3.6.1.4.1.4413.4.1 /usr/bin/ucd5820stat

这里第一行是定义一组用户notConfigUre,这个名称随意,后面的default表示允许从任何主机来采集数据,如果要安全,可以修改为某一台机器的IP或者一个网段。后面的public表示通讯口令,可以修改为其他的字符。

一般用snmpv2协议,启动服务后监听udp 161端口,在cacti的界面上,创建主机后,可以看到被监机的snmp信息,如果提示snmp error,检查com2sec notConfigUser default

public这一行又没有问题。还可以用snmpwalk来协助查询。

如果某些模板取不到数据,比如查不到网卡的流量,检查是否开了view all included .1

80

稍等5分钟后,就可以看到流量图了,如果在graph的default tree中看不到新增加的主机,那么在device的界面中,选中主机,(在右侧打钩),然后选择下面的下拉框来把主机添加到默认的tree上。

8awstats,web服务器统计工具

首先安装,对应gentoo来说,直接用emerge来就可以了。

#emerge awstats

#webapp-config -I -h localhost -d awstats awstats 6.7-r2

也可以把localhost替换成其他的vhosts来安装到其他的vhosts站点

#cd /etc/awstats

新增設定檔

#cp

这里用域名来区分,如果要统计多个域名,就复制多份

以下是重要設定

LogFile="/var/log/apache2/access_log"

LogFormat=4

修改为你的apache log所在的位置,以及选择正确的log类型 设置apache的vhosts的conf文件

vi /etc/apache2/vhosts.d/

ScriptAlias /cgi-bin/ "/var/www//cgi-bin/"

ScriptAlias /awstats "/var/www//cgi-bin/"

ScriptAlias / "/var/www//cgi-bin/"

#Options +ExecCGI +FollowSymLinks

Options FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

Satisfy all

关于CGI权限的这节一定不能少,否则访问awstats的时候会提示无法访问

在刚才的conf文件中有一个参数来允许是否从web页面上更新,打开之后,页面上会有一个update now的按钮,方便进行更新

AllowToUpdateStatsFromBrowser=1

配置完了就可以从浏览器来访问了

/awstats/

然后在计划任务中加入一个脚本来每天自动更新awstats

#crontab -e

#update awstats /var/www//cgi-bin/

10 4 * * * (cd /var/www//cgi-bin/; ./ -update -config= )

2023年6月21日发(作者:)

1. Gentoo Linux, 必须熟悉Gentoo Linux

2. 配置OpenLDAP支持多域名,支持web用户界面管理,支持LAMP应用进行对应的用户验证,支持 POP3/POP3s, IMAP/IMAP3 和 SMTP (支持SSL)

3. 配置邮件系统支持多域名,支持web界面管理。邮件用户和OpenLDAP匹配,并能与LDAP同步更新。

4. 配置CATCI和Apache流量统计工具,Web界面。

5. 详细的配置文档,和基本的操作步骤说明

Gentoo LINUX

postfix+openldap+extmail+maildrop+sasl+courier-authlib+courier-imap配置文档

先大概讲讲结构,MTA以postfix为核心,通过模块扩展的方式来实现完整的邮件系统功能

Maidrop作为MDA

openLDAP作为数据库(另一个选择是mysql)

extmail作为webmail,extman作为webmail的后台用户管理,有图形日志,别名等功能

sasl作为smtp的身份验证模块

courier-authlib,作为验证pop3登录的中间模块

courier-imap,提供imap/pop3等功能

理论上讲,包的安装顺序和配置顺序是随意的,但在最后调试的时候,需要逐个进行调试,否则有可能因为依赖的问题,导致其他功能也不正常,比如说如果sasl的配置不正确,那么在客户端试图发信的时候就会提示验证失败之类的错误

对于GNU来说,在各个发行版上的安装软件都是类似的。但是对于gentoo来说,有一个强大的工具能节省很多输入指令和解决依赖关系的时间。它就是emerge

和其他发行版类似,emerge看上去和Redhat的yum,debian的apt-get比较像,但更加像freebsd的ports。

下面的安装中需要用到emerge,对于emerge的详细使用方法,请自行查看文档。

1. 安装postfix

#emerge postfix

安装前先修改/etc/

在USE那一行加入sasl(gentoo对于包采用Use flags的方式来管理,以后编译其他包的时候都用这个方法,如果不修改可以直接在命令行中用USE =“sasl”来指定

#emerge -pv postfix可以查询编译的时候包含哪些功能支持,

#emerge -av postfix询问模式,提示USE FLAGS的参数列表,并等待用户确认安装。

这样编译的postfix才能支持sasl #USE =“sasl” emverge –av postfix

编译的过程可以去看帖子,聊天,总之干啥都行。看着那一堆参数在屏幕上翻滚,是一件很无聊的事情。

编译完成后会出现一堆提示,大意是告诉你更新了哪些文件,哪些配置文件需要修改之类的

接下来可以手动修改配置文件了,对于postfix而言,主要的配置文件有两个,和

因为这两个配置文件要反复修改,建议修改前先做一个备份

#cd /etc/postfix/

#cp

#cp

备份之后我们把原来的配置清空,因为里面有大段的注释看着很头痛,也不便于我们修改

#>/etc/postfix/

按照我们的修改顺序,从上往下添加配置,注意不要添加重复的字段,比如前面如果有了关于hostname=的配置,就不要再次写相同的信息。否则会引起一些问题。

#vi /etc/postfix/

#base config

queue_directory = /var/spool/postfix

command_directory = /usr/sbin

daemon_directory = /usr/lib64/postfix

mail_owner = postfix

myhostname =

mydomain =

inet_interfaces = all

mydestination = localhost.$mydomain, localhost

unknown_local_recipient_reject_code = 550

mynetworks = 222.190.111.0/24 127.0.0.0/8

local_destination_concurrency_limit = 2

default_destination_concurrency_limit = 10

debug_peer_level = 2

debugger_command =

PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin

xxgdb $daemon_directory/$process_name $process_id & sleep 5

sendmail_path = /usr/sbin/sendmail

newaliases_path = /usr/bin/newaliases

mailq_path = /usr/bin/mailq

setgid_group = postdrop

html_directory = /usr/share/doc/postfix-2.4.6-r2/html

manpage_directory = /usr/share/man sample_directory = /etc/postfix

readme_directory = /usr/share/doc/postfix-2.4.6-r2/readme

以上这些信息基本都是默认值,需要修改的只有myhostname和mydomain

#vi /etc/postfix/

Code Listing 2.3: /etc/postfix/

# service type private unpriv chroot wakeup maxproc command + args

# (yes) (yes) (yes) (never) (50)

#

==========================================================================

(Just add the "-v" after the smtpd in the following line)

smtp inet n - n - - smtpd –v

这里的-v是为了打开调试模式,如果后面一切正常了,还可以把它再去掉

修改/etc/mail/aliases

可以添加一个root的别名邮箱如root: coolerfeng@

/usr/bin/newaliases

/etc/init.d/postfix start

添加到默认运行级别(开机自动启动)

# rc-update add postfix default(后面的软件也是相同的用法)

检查

#telnet localhost 25

出现banner之后随意输入一个ehlo xxxxx(xxxx为任意域名)

会提示服务器的认证模式,如果没有AUTH字样,说明前面没有编译进去sasl支持,需要返工)

www ~ # telnet localhost 25

Trying 127.0.

Connected to localhost.

Escape character is '^]'.

220 ESMTP Postfix - by coolerfeng

ehlo

250-PIPELINING

250-SIZE 52428800

250-VRFY

250-ETRN 250-STARTTLS

250-AUTH LOGIN PLAIN

250-AUTH=LOGIN PLAIN

250-ENHANCEDSTATUSCODES

250-8BITMIME

250 DSN

quit

221 2.0.0 Bye

Connection closed by foreign host.

2,openldap

为啥这么早就开始安装ldap呢,因为后面的工作都是基于ldap的,没有基础,后面的工作就无法测试,所以在顺序上把它放在前面

# emerge openldap pam_ldap nss_ldap

#emerge BerkeleyDB

# chown ldap:ldap -R /var/lib/openldap-{ldbm,data,slurp}

复制extman/doc目录下的到/etc/openldap/schema

这里说的是我们从extman的压缩包中的docs目录中找到的,它的作用相当于定义了一个结构。这样在后面我们能用extman后台来创建一个虚拟域。

配置log文件。便于调试

# vi /etc/syslog-ng/

destination ldap { file("/var/log/"); };

filter f_ldap {facility(local4); };

log { source(src); filter(f_ldap); destination(ldap); };

以上分别是log的目的地址,过滤器,log动作,详细介绍参考syslog-ng

设置完成后/etc/init.d/syslog-ng restart

如果机器上安装的是syslog只需要先设定/etc/

加放local4.* /var/log/

然後touch /var/log/,重启syslog,就有slapd的log可查了。

#vi /etc/openldap/

# Include the needed data schemes

include /etc/openldap/schema/

include /etc/openldap/schema/

include /etc/openldap/schema/

include /etc/openldap/schema/

include /etc/openldap/schema/

###extmail依赖core,cosine,nis这三个文件,所以要放在他们后面 loglevel 256

pidfile /var/run/openldap/

access to * by self write by * read

database bdb

suffix "dc="

checkpoint 32 30

rootdn "cn=Manager,dc="

directory /var/lib/openldap-data/

index objectClass eq

这里用bdb作为数据库类型,需要说明的是,前面需要先安装bdb,才能使用,默认的配置是ldbm的类型。

这里面需要解释一下几个参数的含义,suffix表示后缀 这里填写域名,格式有几种

有o=xxxx,c=xxxxx 或者dc=xxxx,dc=xxxx 需要说明的是dc=与dc=extmail,dc=org是不一样的。要注意。

Rootdn,管理员的名字,用来管理整个ldap的域

dn :一条记录的位置

dc :一条记录所属区域

ou :一条记录所属组织

cn/uid:一条记录的名字/ID

添加ldap的root密码

#echo rootpw `slappasswd -h {Md5}` >> /etc/openldap/

然后在提示之后输入密码(secert)

如果这里不用secert,后面的配置文件中遇到secert的地方都要对应修改。

ldap的root密码也可以直接用明文在/etc/openldap/中直接写上

rootpw secret

建立数据库配置文件

#cp /var/lib/openldap-data/DB_e /var/lib/openldap-data/DB_CONFIG

测试配置文件的语法

# slaptest -d 10

config file testing succeeded

以上提示说错配置文件正确

如果是

slaptest: bad configuration file!

需要检查配置文件是否有拼写错误(重点检查

suffix "dc=mydomain,dc=org" rootdn "cn=admin,dc=mydomain,dc=org"

两者的dc是否吻合

配置文件正确就可以启动slapd 服务了

# /etc/init.d/slapd start

如果用bdb方式做数据库,启动不了,需要进入数据库目录(/var/lib/openldap-data/

运行 db4.5_recover 然后删除alock

然后重启启动/etc/init.d/slapd start

就可以了,并检查一下是否有slapd进程和监听389端口

如果还是启动不了,打开/var/log/检查一下,是否有其他问题,如权限等)

添加到默认运行级别(开机自动启动)

# rc-update add slapd defaul

配置ldap的cilent用的配置文件(ldapsearch等需要)

www ~ # cat /etc/openldap/

#

# LDAP Defaults

#

# See (5) for details

# This file should be world readable but not world writable.

HOST 127.0.0.1

BASE dc=

URI

SIZELIMIT 12

TIMELIMIT 15

DEREF never

导入LDAP树结构

#ldapadd -x -D "cn=Manager,dc=" -w secret -f /path-to-extman/doc/

-w后面是刚才设置的root密码 –f 后面是的路径和文件名

没有问题的话会提示add to xxxxxxxxxxx。没有报错信息。

如果导入的文件出错的话,

ldap_add: Server is unwilling to perform (53)

additional info: no global superior knowledge

检查/etc/openldap/中的域和是否一致

suffix "dc= "

rootdn "cn=Manager,dc= "

默认的模版中定义的是 如果报错ldap_bind: Invalid credentials (49)

说明是域或者密码不对。这里要用正确的域cn=Manager,dc=

如果没有启动LDAP server,会提示

ldap_bind: Can't contact LDAP server (-1)

运行 /etc/init.d/slapd start来启动,

导入成功后

cp /root/extman-0.2.4/docs/ldap*

在/etc/postfix/中添加

# extmail config here

virtual_alias_maps = ldap:/etc/postfix/ldap_virtual_alias_

virtual_mailbox_domains = ldap:/etc/postfix/ldap_virtual_domains_

virtual_mailbox_maps = ldap:/etc/postfix/ldap_virtual_mailbox_

ldap安装好了,为了方便管理,我们需要一个web管理工具

安装phpldapadmin

ACCEPT_KEYWORDS="~amd64" emerge phpldapadmin

Cp -R /usr/share/webapps/phpldapadmin/1.1.0.5/htdocs

/var/www//htdocs/phpldapadmin

cd /var/www//htdocs/phpldapadmin

cd config

cp e

vi

取消如下行的注释

$config->custom->session['blowfish'] = 'secret';

$ldapservers->SetValue($i,'server','name','My LDAP Server');

$ldapservers->SetValue($i,'server','host','127.0.0.1');

$ldapservers->SetValue($i,'server','port','389');

$ldapservers->SetValue($i,'server','base',array('dc='));

$ldapservers->SetValue($i,'login','dn','cn=Manager,dc=');

$ldapservers->SetValue($i,'login','pass','secret');

#$ldapservers->SetValue($i,'appearance','password_hash','md5'); //如果前面用的是明文密码不需要此行

$ldapservers->SetValue($i,'login','attr','dn');

然后访问浏览器

/phpldapadmin 用户名:cn=Manager,dc=

密码:secret

l

通常都是把webmail的配置放在后面,为啥我这里写在前面呢,因为相对而言,个人认为webmail的配置简单一些,很多人都是卡在smtp和pop3.所以先配置成功webmail有助于帮助后面解决smtp和pop3的问题。

Extmail是perl编写的,所以如果在运行中提示缺少模块,就缺啥补啥

Webmail需要web服务器支持,首先安装apache

建议打开suexec功能

打开apache的suexec功能

USE=suexec SUEXEC_MINUID=100 SUEXEC_DOCROOT=/var/www emerge -av apache

进行编译。结束后

#vi /etc/apache2/

LoadModule suexec_module modules/mod_

配置extmail和extman

从下载extmail和extman,解压缩extmail和extman,并移动到apache的vhosts中定义的htdocs目录下

vi /etc/apache2/vhosts.d/

NameVirtualHost *:80

ScriptAlias /extmail/cgi /var/www//htdocs/extmail/cgi

Alias /extmail /var/www//htdocs/extmail/html

ScriptAlias /extman/cgi /var/www//htdocs/extman/cgi

Alias /extman /var/www//htdocs/extman/html

SuexecUserGroup vuser vgroup SuexecUserGroup vuser vgroup

# chown -R /var/www//htdocs/extman/cgi

配置extman和extmail(两者相似)

编辑/

SYS_CONFIG = /var/www//htdocs/extman/

SYS_LANGDIR = /var/www//htdocs/extman/lang

SYS_TEMPLDIR = /var/www//htdocs/extman/html

SYS_MAILDIR_BASE = /share/domains //修改默认的存储路径

SYS_CAPTCHA_ON = 0 //取消验证码

SYS_BACKEND_TYPE = ldap

SYS_LDAP_PASS = secret //和前面设置的ldap的root密码一致

然后从浏览器访问extmail. 如果提示少perl模块Unix::Syslog

用perl的cpan在线安装

perl -MCPAN -e shell

cpan>install Unix::Syslog

然后再访问extmail。这次出来页面了。

配置extman的过程类似

如果提示缺少Net::LDAP的perl模块,用上面的办法补上。安装的提示会提示几个可选模块是否安装,按Y都安装上

然后一切正常后登录后台,添加虚拟域,添加一个用户test,密码test

然后登录webmail,如果MX已经做好了,测试一下是否可以正常的收发邮件,如果不能,检查/var/log/(关于log的配置可以参考前面的说明)

r-authlib+courier-imap

到这里了基本就是难点了,多半都会在这里遇到问题,sasl认证以及courier-imap的配置在论坛上的讨论很多,相关的问题的帖子也不少,但是如果能把整个流程弄明白,排错也就不难了。

#emerge courier-imap courier-authlib

#vi /etc/courier/authlib/authdaemonrc

authmodulelist="authldap"

debug_level=2

(打开调试模式,便于后面排错,这里只用一种认证模式,就是ldap方式,需要说明的是这些软件的编译的时候需要打开对应的功能支持,不过幸运的是我们可以在全局参数/etc/里面把我们想要的参数都写在USE的列表里面,这样就不用每次编译的时候都操心了,如果遇到不兼容的模块,emerge会停下来,并提示你,这时候,我们在手动指定一个参数把不兼容的去掉就可以了,比如USE =”-mysql” 表示去掉mysql的支持,用减号表示,同样+号表示打开支持)

vi /etc/courier/authlib/authldaprc

LDAP_URI ldap://

LDAP_SERVER 127.0.0.1

LDAP_PORT 389

LDAP_PROTOCOL_VERSION 3

LDAP_BASEDN o=extmailAccount,dc=

LDAP_BINDDN cn=Manager,dc=

LDAP_BINDPW secret

LDAP_TIMEOUT 5 LDAP_MAIL mail

LDAP_FILTER (&(objectClass=extmailUser)(active=1))

LDAP_HOMEDIR homeDirectory

LDAP_MAILROOT /share/domains

LDAP_MAILDIRQUOTA quota

LDAP_CRYPTPW userPassword

LDAP_UID uidNumber

LDAP_GID gidNumber

LDAP_AUXOPTIONS

disablesmtpd=disablesmtpd,disablesmtp=disablesmtp,disablewebmail=disablewebmail,disablenetdisk=disablenetdisk,disableimap=disableimap,disablepop3=disablepop3

LDAP_DEREF never

LDAP_TLS 0

LDAP_DOMAIN

这个文件比较长,在这里我也卡住了。一度出现pop3登录的时候提示密码错误的现象

这里发现一个courier-authlib的启动脚本的bug

/etc/init.d/courier-authlib start

(提示失败看log提示myserver authdaemond: exec: No such file or directory

后来发现/usr/sbin/authdaemond start 可以正常启动,就是不能用启动脚本,奇怪了

经过研究发现启动脚本中写错了)

编辑启动脚本/etc/init.d/courier-authlib 修改下面这一行

AUTHLIB="/usr/lib64/courier/courier-authlib"

默认是lib,但是我这是64位的机器,所以就提示找不到这个库了。晕倒。

Courier-imap的配置文件

这个软件包含了两个模块,一个是imap/imaps,一个是pop3/pop3s

这里贴出pop3的配置文件

www ~ # grep -v ^# /etc/courier-imap/pop3d | grep -v ^$

PIDFILE=/var/run/

MAXDAEMONS=40

MAXPERIP=4

POP3AUTH=""

POP3AUTH_ORIG="PLAIN LOGIN CRAM-MD5 CRAM-SHA1 CRAM-SHA256"

POP3AUTH_TLS=""

POP3AUTH_TLS_ORIG="LOGIN PLAIN"

POP3_PROXY=0

PORT=110

ADDRESS=0

TCPDOPTS="-nodnslookup -noidentlookup"

LOGGEROPTS="-name=pop3d"

DEFDOMAIN="@"

POP3DSTART=NO MAILDIR=Maildir

PRERUN=

LOGINRUN=

这里可以定义默认的虚拟域,需要注意的是MAILDIR这个参数。在后面会讲到

#vi /etc/courier-imap/

#vi /etc/courier-imap/

很简单的文件,就不解释了

mkdpop3cert

mkimapdcert

产生证书

#vi /etc/courier-imap/pop3d-ssl

和刚才pop3d的文件一样,也是要修改Maildri的配置,改法一样。

POP3/POP3S/IMAP/IMAPS的配置都基本一样,就不啰嗦了。

启动服务

先启动courier-authlib,然后再启动courier-imap,pop3

# /etc/init.d/courier-imapd start

# /etc/init.d/courier-imapd-ssl start

# /etc/init.d/courier-pop3d start

# /etc/init.d/courier-pop3d-ssl start

5. Cyrus-sasl

# emerge cyrus-sasl

# vi /etc/sasl2/(保持如下默认配置)

pwcheck_method:authdaemond

mech_list:PLAIN LOGIN

log_level:3

authdaemond_path:/var/lib/courier/authdaemon/socket

注意这个文件中不要有莫名其妙的字符,如多余的^M,空格之类的,否则会引起奇怪的问题

每一行都要用回车来结束。建议用cat –v 仔细看看

# vi /etc/conf.d/saslauthd

SASLAUTHD_OPTS="${SASLAUTH_MECH} -a rimap -r"

SASLAUTHD_OPTS="${SASLAUTHD_OPTS} -O localhost"

注释掉下面这行

#SASLAUTHD_OPTS="${SASLAUTHD_OPTS} -a pam"

# /etc/init.d/saslauthd start

测试sasl的验证

# authtest -s login test@ test

Authentication FAILED: Input/output error

查看log说什么authdaemond: ldap_simple_bind_s failed: Can't contact LDAP server

可是slapd确实起来了啊

/etc/courier/authlib/authldaprc

第一行LDAP_URI ldap://

不能注释,否则就会在log中提示authdaemond: You need to specify LDAP_URI in config file

但是加上了以后就半天不动,然后提示刚才的错误信息

无意间想到是DNS的问题,于是在hosts文件中加入

127.0.0.1

再次查询,这次有结果了。

myserver openldap-data # authtest -s login test@ test

Authentication succeeded.

Authenticated: test@ (uid 1000, gid 1000)

Home Directory: /share/domains//test

Maildir: (none)

Quota: (none)

Encrypted Password: $1$hmupaBpP$KT2KkAZ3AiSGPDLfL2ie7.

Cleartext Password: test

Options:

disablesmtpd=0,disablesmtp=0,disablewebmail=0,disablenetdisk=0,disableimap=0,disablepop3=0

这里的Home Directory是绝对路径,而Maildir是相对路径

(不过在其他发行版上也有都显示绝对路径的,可能和具体的版本或者编译参数有关系)

最后pop3登录的时候就会将2个路径相加,然后去访问

那么这个Home和Maildir是怎么得来的呢。

前面的authldaprc中有2个参数

LDAP_HOMEDIR homeDirectory

LDAP_MAILROOT /share/domains

Home Directory就是LDAP_MAILROOT+ LDAP_HOMEDIR

homeDirectory是LDAP树中定义的字段,从LDAP的树中查出它的值是

/test,所以最后的值就是我们看到的

LDAP_MAILDIR 在配置文件中我们没有定义,所以它的值是空的(none)

这里最后得到路径就是Home Directory+ Maildir /share/domains//test

看上去还有点不对劲,因为还少了一个/Maildir

没有关系,我们还有courier-pop3的配置文件来添加

MAILDIR=Maildir

这个就把最后的部分补齐了,现在的路径总算是完整的了

/share/domains//test/Maildir

如果权限正确,目录下的对应的目录都存在,如cur new 等,那么就可以正常的取到邮件了

刚才只是用了authest来测试,如果不放心,还可以telnet测试一把

为了验证pop3是否正常,我们再次用命令行的方式进行验证

myserver ~ # telnet localhost 110

Trying 127.0.

Connected to localhost.

Escape character is '^]'.

+OK Hello there.

user test@

+OK Password required.

pass test

+OK logged in.

如果最后一行不是OK,说明配置有误,需要结合log来分析错误。一般可能的错误有无法chdir到对应的目录,权限错误,Maildir的格式不对等等。如果提示OK logged in,说明配置正确,否则的话就如上面分析去检查配置文件吧。

以上贴出的位置文件仅供参考,实际上,在不同的环境下,是可以变化的。一开始我就是照搬EMOS的配置文件,结果遇到了障碍,耽误了很多时间。可见一句话,尽信书不如无书。

6. TLS for Postfix

/etc/ssl/编辑此文件,填入预设值(后面安装的时候就可以一路回车了)

countryName_default CN

stateOrProvinceName_default jiangsu

localityName_default

organizationName_default

Nanjing

test

commonName_default

emailAddress_default. test@

产生CA的私钥()和公钥()

#openssl req -new -x509 -keyout -out -days 3650

-new表示生成公私钥和CSR文件,-keyout输出私钥文件 -out输出CSR文件

-days表示10年有效期,-nodes表示不加密

产生服务器的私钥和CSR文件

#openssl req -nodes -new -x509 -keyout -out -days 3650

转换 #openssl x509 -x509toreq -in -signkey -out

用CSR来签发公钥。

#openssl ca -policy policy_anything -out -infiles

删除临时文件

rm

把证书复制到potfix的配置文件目录

#mkdir /etc/postfix/certs

#cp /etc/postfix/certs/

#cd /etc/postfix/certs

#chown root:wheel

#chown root:postfix

#chmod 755

#chmod 644

#chmod 440

#ln -s `openssl x509 -noout -hash < `.0

6. Adding SSL and SASL support to Postfix

#vi /etc/postfix/(在末尾添加如下内容)

smtpd_sasl_auth_enable = yes

smtpd_sasl2_auth_enable = yes

smtpd_sasl_security_options = noanonymous

broken_sasl_auth_clients = yes

smtpd_sasl_local_domain =

smtpd_recipient_restrictions =

permit_sasl_authenticated,

permit_mynetworks,

reject_unauth_destination

smtp_use_tls = yes

smtp_tls_note_starttls_offer = yes

smtpd_use_tls = yes

#smtpd_tls_auth_only = yes

smtpd_tls_key_file = /etc/postfix/certs/

smtpd_tls_cert_file = /etc/postfix/certs/

smtpd_tls_CAfile = /etc/postfix/certs/

smtpd_tls_loglevel = 3

smtpd_tls_received_header = yes

smtpd_tls_session_cache_timeout = 3600s

tls_random_source = dev:/dev/urandom vi /etc/postfix/

smtps inet n - n - - smtpd

-o smtpd_tls_wrappermode=yes

-o smtpd_sasl_auth_enable=yes

-o smtpd_client_restrictions=permit_sasl_authenticated,reject

# postfix reload

#telnet localhost 25

(没有这个工具的话先用emerge netkit-telnetd安装一下)

# telnet localhost 25

Trying 127.0.

Connected to localhost.

Escape character is '^]'.

220 ESMTP Postfix - by coolerfeng

ehlo

250-PIPELINING

250-SIZE 52428800

250-VRFY

250-ETRN

250-STARTTLS

250-AUTH LOGIN PLAIN

250-AUTH=LOGIN PLAIN

250-ENHANCEDSTATUSCODES

250-8BITMIME

250 DSN

在输出中有250-STARTTLS说明postfix已经支持TLS了

创建虚拟用户

# groupadd -g 1000 vgroup

# useradd -d /share/domains -g 1000 -m -s /bin/false -u 1000 vuser

# mkdir /share/domains

# chown –R vuser:vgroup /share/domains

# id vuser

uid=1000(vuser) gid=1000(vgroup) groups=1000(vgroup)

安装maildrop

emerge maildrop

安装完了用maildrop –v看一下,幸运的是默认的安装就支持sasl了

Courier Authentication Library extension enabled.

vi /etc/maildroprc

DEFAULT="$HOME/Maildir/"

vi /etc/postfix/

maildrop unix - n n - - pipe

flags=DRhu user=vuser argv=maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user}

${extension} {nexthop}

myserver ~ # echo "test" | maildrop -V 10 -d test@

maildrop: authlib: groupid=1000

maildrop: authlib: userid=1000

maildrop: authlib: logname=test@,

home=/share/domains//test, mail=(default)

maildrop: Changing to /share/domains//test

Message start at 0 bytes, envelope sender=test@

Tokenized ;

Tokenized ;

Tokenized string: "DEFAULT"

Tokenized =

Tokenized string: "$HOME/Maildir/"

Tokenized ;

Tokenized ;

Tokenized eof

/etc/maildroprc(3): DEFAULT="/share/domains//test/Maildir/"

maildrop: Attempting .mailfilter

maildrop: Delivery complete.

如上提示说明maildrop的投递是正常的。

接下来可以用客户端来测试了,当然telnet也是可以的,如果你不嫌输入指令麻烦的话

如果没有问题的话,基本的部分我们就完成了,能收能发,能用web界面进行管理

7.cacti的配置

#USE=”snmp” emerge -av cacti

gentoo默认安装的cacti居然不支持snmp,真不知道装上能干嘛。

安装cacti之前要准备好LAMP环境,关于这部分就不多说了。对于gentoo也是非常容易的事情

emerge安装完后可以用webapp-config来安装到apache的vhost目录下,也可以自己手动从/usr/share/webapps/中拷贝 创建cacti库并导入mysql库,进入到cacti的目录

#mysqladmin --user=root -p create cacti

#mysql -u root -p cacti <

给mysql创建一个用户

shell> mysql --user=root mysql -p

mysql> GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'somepassword';

mysql> flush privileges;

#vi include/

$database_type = "mysql";

$database_default = "cacti";

$database_hostname = "localhost";

$database_username = "cactiuser";

$database_password = "somepassword";

#useradd cacti

shell> chown -R cacti rra/ log/

然后从浏览器访问/cacti/

会有一个向导,按照提示操作,然后会提示你登录,用户名和密码都是admin

登录成功后会提示修改密码,这里我修改为admincacti

然后修改一下setting,如果没有开启snmp,可以在setting里面打开。然后就是添加主机,点device,选择模板,模板可以用snmp或者unix的,如果一切正常,会显示采集到数据,然后创建graph,ok之后,切换到shell下面进行初始化

su cacti

执行php /var/www//htdocs/cacti/

如果显示了一堆数字,并且在rra目录下产生了rrd文件,说明ok了

接下来把这行添加到cacti用户的crontab中,并设置为5分钟运行一次 crontab –u cacti –e

*/5 * * * * php /var/www//htdocs/cacti/ > /dev/null 2>&1

关于cacti的说明,如果要监控其他机器,一般采用snmp方式。

被监控的机器上要安装snmp。并且要修改

#vi /etc/snmp/

com2sec notConfigUser default public

group notConfigGroup v1 notConfigUser

group notConfigGroup v2c notConfigUser

view systemview included .1.3.6.1.2.1.1

view systemview included .1.3.6.1.2.1.25.1.1

access notConfigGroup "" any noauth exact all none none

view all included .1 80

syslocation Unknown (edit /etc/snmp/)

syscontact Root (configure /etc/snmp/)

pass .1.3.6.1.4.1.4413.4.1 /usr/bin/ucd5820stat

这里第一行是定义一组用户notConfigUre,这个名称随意,后面的default表示允许从任何主机来采集数据,如果要安全,可以修改为某一台机器的IP或者一个网段。后面的public表示通讯口令,可以修改为其他的字符。

一般用snmpv2协议,启动服务后监听udp 161端口,在cacti的界面上,创建主机后,可以看到被监机的snmp信息,如果提示snmp error,检查com2sec notConfigUser default

public这一行又没有问题。还可以用snmpwalk来协助查询。

如果某些模板取不到数据,比如查不到网卡的流量,检查是否开了view all included .1

80

稍等5分钟后,就可以看到流量图了,如果在graph的default tree中看不到新增加的主机,那么在device的界面中,选中主机,(在右侧打钩),然后选择下面的下拉框来把主机添加到默认的tree上。

8awstats,web服务器统计工具

首先安装,对应gentoo来说,直接用emerge来就可以了。

#emerge awstats

#webapp-config -I -h localhost -d awstats awstats 6.7-r2

也可以把localhost替换成其他的vhosts来安装到其他的vhosts站点

#cd /etc/awstats

新增設定檔

#cp

这里用域名来区分,如果要统计多个域名,就复制多份

以下是重要設定

LogFile="/var/log/apache2/access_log"

LogFormat=4

修改为你的apache log所在的位置,以及选择正确的log类型 设置apache的vhosts的conf文件

vi /etc/apache2/vhosts.d/

ScriptAlias /cgi-bin/ "/var/www//cgi-bin/"

ScriptAlias /awstats "/var/www//cgi-bin/"

ScriptAlias / "/var/www//cgi-bin/"

#Options +ExecCGI +FollowSymLinks

Options FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

Satisfy all

关于CGI权限的这节一定不能少,否则访问awstats的时候会提示无法访问

在刚才的conf文件中有一个参数来允许是否从web页面上更新,打开之后,页面上会有一个update now的按钮,方便进行更新

AllowToUpdateStatsFromBrowser=1

配置完了就可以从浏览器来访问了

/awstats/

然后在计划任务中加入一个脚本来每天自动更新awstats

#crontab -e

#update awstats /var/www//cgi-bin/

10 4 * * * (cd /var/www//cgi-bin/; ./ -update -config= )