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
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
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= )
发布评论