postfix dovecot邮件服务器搭建

 Postfix安装
一、 安装mysql 5.0.45 2
二、 安装postfix 3
三、 ------反垃圾邮件策略: maildrop----------- 7
四、 安装POP3-----dovecot------------- 7
五、 ------加入SMTP认证-----sasl--------- 9
六、 ----- 配置无需smtp验证的人----- 10
七、 ----- 配置特定邮件组部分人才能发送----- 10
八、 ------安装 SPF Python 版本------ 12
九、 安装policy-greylist-postgrey------------ 13
十、 ------配置防火墙------------------- 14
十一、 ------设置FQDN--------------------------------- 14
十二、 ------安装extman---------------------- 15
十三、 ------安装extmail------------------------------ 16
十四、 (2)数据迁移部分: 25
十五、 安装apache 29
十六、 安装GCC 29
十七、 SSH 30
一、安装自带mysql 5.0.45
# rpm -ivh mysql-***.el5.rpm
出现错误:error: Failed dependencies:
libmysqlclient.so.15 is needed by mysql-devel-5.0.45-7.el5.i385.rpm
解决方法:
cd /mnt/cdrom/server
依次安装
perl-DBI-1.52-2.el5.i386.rpm
postgresql-libs-8.1.11-1.el5_1.1.i386.rpm
perl-DBD-Pg-1.49-1.fc6.i386.rpm,
mysql-5.0.45-7.el5.i386.rpm
perl-DBD-MySQL-3.0007-2.el5.i386.rpm
mysql-server-5.0.45-7.el5.i386.rpm
mysql-devel-5.0.45-7.el5.i386.rpm
安装:openssl-devel-0.9.8e-7.el5.i386.rpm 依次安装

zlib-devel-1.2.3-3.i386.rpm
libsepol-devel-1.15.2-1.el5.i386.rpm
libselinux-devel-1.33.4-5.1.el5.i386.rpm
keyutils-libs-devel-1.2-1.el5.i386.rpm
e2fsprogs-devel-1.39-20.el5.i386.rpm
krb5-libs-1.6.1-31.el5.i386.rpm
krb5-devel-1.6.1-31.el5.i386.rpm
重启自动初始化。
MySQL的最大连接数默认是100客户端登录:mysql -uusername -ppassword
设置新的最大连接数为200:mysql> set GLOBAL max_connections=200;
显示当前运行的Query:mysql> show processlist;
显示当前状态:mysql> show status;
退出客户端:mysql> exit
修改数据库root用户的密码为1234: mysqladmin -u root -p password '1234'
二、安装postfix
------准备好数据库-----------------------------------------------------------
chkconfig --list | grep mysql
chkconfig mysqld on
首先更改了mysql的root密码:
shell> mysql -u root mysql
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'; (GRANT命名不需要运行FLUSH PRIVILEGES;就生效) 没反应
mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('密码');
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('密码');
设置密码:#>mysqladmin -u root password*****
登陆mysql : mysql -u root -p
修改密码:#>mysqladmin -u root -p password 新密码
***** ///输入就密码
接着增加普通的postfix账户:
shell> mysql -u root mysql -p
mysql>use mysql;
mysql> INSERT INTO user (Host,User,Password) VALUES('%','postfix',PASSWORD('werdfgcvb'));
mysql> INSERT INTO user (Host,User,Password) VALUES('localhost','postfix',PASSWORD('werdfgcvb'));
mysql> flush privileges;
用Navicat等windows工具新建好extmail数据库,字符集一定要选:UTF-8 Unicode(如果远程连接数据库,连不上,请检查防火墙。)
mysql> GRANT ALL PRIVILEGES ON extmail.* TO 'postfix'@'localhost';
mysql> GRANT ALL PRIVILEGES ON extmail.* TO 'postfix'@'%';
接着取消postfix用户的DROP权限(注意:每次新建的数据库都要执行过以下两句才能真正取消对该数据库的DROP权限):
mysql> update db set Drop_priv='N' where Host='localhost' and User='postfix';
mysql> update db set Drop_priv='N' where Host='%' and User='postfix';
mysql> flush privileges;
------取消sendmail的启动-----------------------------------------------------------
ps aux | grep sendmail
service sendmail stop
chkconfig --list | grep sendmail
chkconfig --level 2345 sendmail off
------安装postfix------------------------------------------------------------------
rpm -ivh postfix-2.3.3-2.1.el5_2.i386.rpm 执行这个安装再卸载,主要是让其建立好相应的postfix用户和组。
rpm -e postfix-2.3.3-2.1.el5_2
tar -xzvf postfix-2.3.19.tar.gz
cd postfix-2.3.19
make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl -DUSE_TLS ' 'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 -lssl -lcrypto'
make
make install
如果碰到:
gcc -Wmissing-prototypes -Wformat -DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl -DUSE_TLS -DHAS_PCRE -g -O -I. -I../../include -DLINUX2 -c dict_mysql.c
dict_mysql.c:173:19: 错误:mysql.h:没有那个文件或目录
先安装:
rpm -ivh mysql-devel-5.0.45-7.el5.i386.rpm
错误信息2:make -f Makefile.in MAKELEVEL= Makefiles
(echo "# Do not edit -- this file documents how Postfix was built for your machine."; /bin/sh makedefs) >makedefs.tmp
No <db.h> include file found.
Install the appropriate db*-devel package first.
See the RELEASE_NOTES file for more information.
make: *** [Makefiles] 错误 1
make: *** [makefiles] 错误 2
原因:没装berkeleyDB的开发库,或者是指定路径没有找到,所以报这个错了。如果是linux, 注意看有没有db*-devel的rpm,或者libdb*-dev的deb(debian)如果是bsd,则看看有没有装db3/db4等包
解决方法:cd /mnt/cdrom/Server
安装:rpm -ivh db4-devel-4.3.29-9.fc6.i386.rpm
错误4:error: Failed dependencies:
libpq.so.4 is needed by perl-DBD-Pg-1.49-2.el5.i386
解决方法:
安装:rpm -ivh postgresql-libs-8.1.11-1.el5_1.1.i386.rpm
install_root: [/] /
tempdir: [/usr/local/src/ postfix-2.3.19] /tmp
config_directory: [/etc/postfix] /etc/postfix
daemon_directory: [/usr/libexec/postfix]
command_directory: [/usr/sbin]
queue_directory: [/var/spool/postfix]
sendmail_path: [/usr/sbin/sendmail]
newaliases_path: [/usr/bin/newaliases]
mailq_path: [/usr/bin/mailq]
mail_owner: [postfix]
setgid_group: [postdrop]
html_directory: [no]
manpages: [/usr/local/man]
readme_directory: [no]
拷贝以下五个文件(在 /var/www/extman-1.1\docs目录里)到/etc/postfix目录: 【安装extman后再拷贝吧?】
mysql_virtual_alias_maps.cf
mysql_virtual_domains_maps.cf
mysql_virtual_limit_maps.cf
mysql_virtual_mailbox_maps.cf
mysql_virtual_sender_maps.cf
cp mysql_virtual_alias_maps.cf /etc/postfix/
cp mysql_virtual_domains_maps.cf /etc/postfix/
cp mysql_virtual_limit_maps.cf /etc/postfix/
cp mysql_virtual_mailbox_maps.cf /etc/postfix/
cp mysql_virtual_sender_maps.cf /etc/postfix/
cd /etc/postfix
vi编辑五个文件
把以上五个文件的用户名和密码都改成:
user = postfix
password = werdfgcvb
添加虚拟用户:
groupadd -g 1000 vmta
useradd -g vmta -u 1000 vmta
usermod -G postfix vmta
cd /home
mkdir mailusers #建立虚拟邮件帐户的目录
chown -R vmta:vmta mailusers #付予虚拟邮件帐户的目录所有权者
vi /etc/postfix/main.cf
修改如下:
myhostname = pop.ipanel.cn #设置运行postfix服务的邮件主机的主机名、域名
mydomain = ipanel.cn
myorigin = $mydomain #设置由本机寄出的邮件所使用的域名或主机名称
inet_interfaces = all #设置postfix服务监听的网络接口
mydestination = $myhostname, $mydomain, localhost.$mydomain, localhost, ipanel.com.cn, ipanelwireless.com, geenovo.com #设置可接收邮件的主机名称或域名,$mydomain表示接受整个网域上的所有主机收信,的默认行为只接受送给系统主机的邮件。
mynetworks = 127.0.0.1 #设置为本地网络与本主机地址可以转发邮件
relay_domains = $mydestination #可以转发的域为mydestination的这个变量也就是loclahost.
home_mailbox = Maildir/ #采用的是Maildir方式储存邮件帐户
alias_maps = hash:/etc/aliases #设置这个参数的主要功能是以后把发往root的邮件都转发到postmaster这个邮箱
####<
配置文件解释:
mydomain参数是指email服务器的域名,请确保为正式域名(如centos.bz)
myhostname参数是指系统的主机名称(如我的服务器主机名称是mail.centos.bz)
myorigin参数指定本地发送邮件中来源和传递显示的域名。在我们的例子中,mydomain是centos.bz,也是我的域名。
对于下面的一行,我们的邮件地址是[email protected]而不是[email protected]
myorigin = $mydomain 设置由本机寄出的邮件所使用的域名或主机名称
mynetworks参数指定受信任SMTP的列表,具体的说,受信任的SMTP客户端允许通过Postfix传递邮件。0.0.0.0/0 #配置这一项使用用户可在任意地发送邮件
mydestination参数指定哪些邮件地址允许在本地发送邮件。这是一组被信任的允许通过服务器发送或传递邮件的IP地址。用户试图通过发送从此处未列出的IP地址的原始服务器的邮件将被拒绝。
inet_interfaces参数设置网络接口以便Postfix能接收到邮件。
relay_domains:该参数是系统传递邮件的目的域名列表。如果留空,我们保证了我们的邮件服务器不对不信任的网络开放。
home_mailbox:该参数设置邮箱路径与用户目录有关,也可以指定要使用的邮箱风格。
message_size_limit = 52428800 ###限制附件大小
mailbox_size_limit = 209715200 ###容量大小
注意:默认postfix从mydestination和virtual_mailbox_domains两个参数来确定postfix需要接收哪些域的邮件。如果接收的邮件域与mydestination匹配,则使用系统帐号处理邮件;如果接收的邮件域与virtual_mailbox_domains匹配则使用虚拟帐号处理邮件。
####>
postfix check 可以检查当前postfix的配置是否有问题、文件和目录权限是否正确。
加入:
### start abiao
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf //读取数据库虚拟域
virtual_mailbox_base = /home/mailusers //邮件存放的位置
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1000 # 这里要保证apache可以修改/home/mailusers 目录, 查看方法为 cat /etc/passwd
virtual_uid_maps = static:1000 # 这里要和你添加的postfix用户的uid一致, 查看方法为 cat /etc/passwd
virtual_gid_maps = static:1000 # 这里要和你添加的postfix用户的gid一致, 查看方法为 cat /etc/passwd
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
### end abiao
postfix start/stop/reload
vi /etc/rc.local
加入:
postfix start
如果想从日志中查出生哪些值得注意的事
egrep '(reject|warning|error|fatal|panic):' /var/log/maillog
如果一下报错:
Nov 6 20:07:10 ssn postfix/trivial-rewrite[4Array47]: warning: do not list domain test.edu.cn in BOTH mydestination and virtual_mailbox_domains
Nov 6 20:07:10 ssn postfix/smtpd[4Array44]: NOQUEUE: reject: RCPT from ssn[127.0.0.1]: 550 5.1.1 : Recipient address rejected: User unknown in local recipient table; from= to= proto=ESMTP helo=
Nov 6 20:08:11 ssn postfix/smtpd[4Array44]: lost connection after RCPT from ssn[127.0.0.1]
解决方案:
此出错提示说明系统域名(mydestination)与虚拟域名(virtual_mailbox_domains)配置有冲突。
默认postfix从mydestination和virtual_mailbox_domains两个参数来确定postfix需要接收哪些域的邮件。如果接收的邮件域与mydestination匹配,则使用系统帐号处理邮件;如果接收的邮件域与virtual_mailbox_domains匹配则使用虚拟帐号处理邮件。
此处mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,($mydomain=test.edu.cn)且virtual_mailbox_domains指定的mysql数据库中也存在test.edu.cn域,这样[email protected]邮件就同时匹配两种帐号,postfix不能判断使用哪种帐号去处理这个邮件,所以就出现了上述这种错误。
所以配置mydestination时,一定要考虑到不能与虚拟域有相同的域名。
vi /etc/hosts
加入:
192.168.10.248 pop.ipanel.cn pop
127.0.0.1 localhost.localdomain localhost
vi /etc/sysconfig/network修改HOSTNAME的值:
HOSTNAME=pop.ipanel.cn
三、------反垃圾邮件策略: maildrop-----------
-----------未完成待完善。。。-----------------------
rpm -ivh maildrop-2.0.4-1.el5.i386.rpm
cd /var/log
mkdir maildrop
cd /var/log/maildrop
touch maildrop.log
chmod 666 maildrop.log
vi /etc/maildroprc
加入:(在这个文件里编写自己的过滤邮件策略,具体语法参考:maildrop-2.0.4\htmldoc\maildropfilter.html)
#logfile "/var/log/maildrop/maildrop.log" (这个平常运营就不要打开了,需要调试时才打开即可)
#VERBOSE="5" (这个平常运营就不要打开了,需要调试时才打开即可)
to "$HOME/Maildir"s
四、安装POP3-----dovecot-------------
cd /var/log
mkdir dovecot
添加用户 dovecot
chown dovecot:dovecot dovecot
rpm -qa|grep dovecot
安装:dovecot
vi /etc/dovecot.conf
修改如下:
protocols = pop3 pop3s
log_path = /var/log/dovecot/dovecot.log
mail_location = maildir:/home/mailusers/%u/Maildir
auth_verbose = yes ### 此参数主要用于调试方便,详细的认证过程信息记录,平常运营可以设为no(关闭状态)
mechanisms = plain login
注释掉
passdb pam { 不采用系统默认的pam认证
}
userdb passwd { 不采用默认的系统用户
}
然后加入:
passdb sql {
args = /etc/postfix/dovecot-mysql.conf
}
userdb sql {
args = /etc/postfix/dovecot-mysql.conf
}
然后再加入:
first_valid_uid = 1000
last_valid_uid = 1000
first_valid_gid = 1000
last_valid_gid = 1000
vi /etc/postfix/dovecot-mysql.conf
写入:
driver = mysql
connect = host=localhost dbname=extmail user=postfix password=werdfgcvb
default_pass_scheme = PLAIN-MD5 ##与mysql的加密方式保持一致,可以直接用boss_mysql里面的密码
password_query = SELECT uid AS user,password AS password FROM mailbox WHERE uid = '%u'
user_query = SELECT maildir, uidnumber AS uid, gidnumber AS gid FROM mailbox WHERE uid = '%u'
chkconfig --list | grep dovecot
chkconfig dovecot on
service dovecot start
如果停止失败,报错:Error: auth(default): dovecot-auth: error while loading shared libraries: libmysqlclient.so.15: cannot open shared object file: No such file or directory
Dovecot 会依赖MySQL-shared-
前面强制卸载系统自带mysql时,把此包也删掉了,因此手动装上(版本和现在装的mysql差不多,否则有可能不兼容).。缺少libmysqlclient.so.15,将新的so.15f复制到/use/lib里面,可以试试或者:
下载:MySQL-shared-compat-5.0.92-1.rhel5.i386.rpm 安装即可
如果碰到:
启动 Dovecot Imap:Error: Can't write to log directory /var/log/dovecot: Permission denied
Fatal: Invalid configuration in /etc/dovecot.conf
这是selinux的问题:
vi /etc/sysconfig/selinux
修改SELINUX 为 “disabled”
setenforce 0 让selinux生效
telnet localhost 110
user 账号
+OK
pass 密码
+OK Logged in.
五、------加入SMTP认证-----dovecot认证---------
vi /etc/dovecot.conf
去掉socket listen { , client { 前面的#号
修改如下:
socket listen {
client {
path = /var/run/dovecot/auth-client ##注意不要在尾部添加,要在中间修改去掉#
mode = 0777
}
}
vi /etc/postfix/main.cf
加入:
### start abiao
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
smtpd_sasl_local_domain= $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions =
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
check_sender_access hash:/etc/postfix/limit/domains_be_trusted,
check_sender_access hash:/etc/postfix/limit/users_no_smtp_auth,
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_rbl_client cblplus.anti-spam.org.cn
### end abiao
----- 配置信任的特殊域名-----
vi /etc/postfix/limit/domains_be_trusted
新建limit 文件夹
根据需要写入信任的域名:
zhaoheng.com OK
wasu.com.cn OK
postmap /etc/postfix/limit/domains_be_trusted
六、 SASL身份验证介绍
SMTP服务器可以判断那些 smtp 客户端可以发送邮件,这就需要 SASL 的支持。Postfix 本身没有
SASL 功能,需要第三方软件支持,目前postfix 支持Cyrus SASL 和 Dovecot SASL 。
使用 Dovecot SASL 配置起来非常简单,后面在做虚拟用户的时候将使用到 Dovecot SASL,那里有
详细的配置。
我在研究 Cyrus SASL 的时候费了不少周折,下面介绍一下 Cyrus SASL 软件的配置。
2.6.1 关于 Cyrus SASL
1. 的认证机制
认证机制由 mech_list参数指定,下面是详细说明。
• 匿名:anonymous
• 明文文本:PLAIN,LOGIN 。两者通过base64编码传输用户名密码,LOGIN 是非便准认证方式,
有些特殊的MUA 客户端使用。
• 加密密码:CRAM-MD5,DIGEST-MD5 。
2. Cyrus SASL 的认证方法
认证方法由 pwcheck_method 参数指定,下面是详细说明。
• saslauthd :saslauthd是一个单独的守护进程。可以支持pam,shadow,sasldb2等方式。
• auxprop : auxprop 提供辅助的认证方式,可以支持SQL,LDAP等。
• authdaemond : authdaemond 是 Courier的密码认证服务。
3. Cyrus SASL 的日志
log_level 日志可选值为0~7 ,0不记录日志,我在试验中没发现这个值有啥用途。
2.6.2 postfix 主要的 SASL 认证参数
• smtpd_sasl_auth_enable : 是否启用sasl认证,默认值是no 。
• smtpd_sasl_type : sasl认证方式,可以选值cyrus 或 dovecot ,默认是cyurs。
• smtpd_sasl_path : smtpd_sasl_path 参数指定 postfix 读取sasl的配置文件,不要被 path
给迷惑了,实际上这个值是文件名的前缀。一般 Postfix 会到 /usr/lib/sasl2/ 目录下找配置
文件,文件名为“配置值.conf”比如你配置了smtpd_sasl_path = smtpd ,那么 postfix 会找
/usr/lib/sasl2/smtpd.conf 文件。
• mtpd_sasl_security_options : sasl认证安全选项,一般用 noanonymous 。
• broken_sasl_auth_clients : 非标准 MUA 支持,默认值no 。
七、----- 配置无需smtp验证的人-----
vi /etc/postfix/limit/users_no_smtp_auth
根据需要写入授权用户:
abiao@ OK
boss@ OK
postmap /etc/postfix/limit/users_no_smtp_auth
八、----- 配置特定邮件组部分人才能发送-----
vi /etc/postfix/main.cf
加入: (配置这里的classes要特别小心,如果有一点错了,会引起postfix发不了邮件。错误信息可以在/var/log/maillog里看到)
smtpd_restriction_classes =
users_group_itall,
users_group_ipanelall,
users_group_ipanelall-sz
users_group_itall = check_sender_access hash:/etc/postfix/limit/users_group/itall, reject
users_group_ipanelall = check_sender_access hash:/etc/postfix/limit/users_group/ipanelall, reject
users_group_ipanelall-sz = check_sender_access hash:/etc/postfix/limit/users_group/ipanelall-sz, reject
smtpd_sender_restrictions =
check_recipient_access hash:/etc/postfix/limit/email_group_limit
vi /etc/postfix/limit/email_group_limit
写入:
itall@ users_group_itall
ipanelall@ users_group_ipanelall
ipanelall-sz@ users_group_ipanelall-sz
postmap /etc/postfix/limit/email_group_limit
分别编辑 /etc/postfix/limit/users_group/目录下的:新建:itall 、ipanelall 、ipanelall-sz
根据需要写入授权用户:
abiao@ OK
postmap /etc/postfix/limit/users_group/itall
postmap /etc/postfix/limit/users_group/ipanelall
postmap /etc/postfix/limit/users_group/ipanelall-sz
postfix reload
------重要信息---------
postfix中restriction与milter的执行顺序
当postfix开启了milter功能后,在SMTP RCPT阶段中postfix先执行Smtpd_recipent_restrictions,再执行相应的milter(mimedefang中的filter_recipent函数),
先执行Smtpd_recipent_restrictions中的规则,如果里面有规则返回“Reject”,那postfix不会call mimedefang
如果没有规则返回“Reject”,postfix才会call mimedefang
postfix执行自己的Smtpd_xxxx_restrictions都是这样的机制
smtpd_client_restrictions
smtpd_helo_restrictions
smtpd_sender_restrictions
smtpd_recipient_restrictions
如果前面的规则集返回reject,则不会调用后面的规则集
本集中的规则返回OK只能使postfix不执行本集后的其他规则
---???未调试完的部分---
在另外一台机器用windows 命令测试smtp验证:
telnet 192.168.10.22 25
ehlo abiao
auth login
验证需要base64的编码格式,所以需要先在生成响应的base64字串:
echo "abiao" | base64 , 输出为:YWJpYW8K
echo "ipanel" | base64 , 输出为:aXBhbmVsCg==
九、------安装 SPF Python 版本------
rpm -ivh python-pydns-2.3.4-1.el5.noarch.rpm
rpm -ivh python-pyspf-2.0.4-2.el5.noarch.rpm
tar -xzvf pypolicyd-spf-0.8.1.tar.gz
cd pypolicyd-spf-0.8.1
python setup.py build
python setup.py install
vi /etc/python-policyd-spf/policyd-spf.conf
加入:(这样在SPF Pass状态时,将直接结束该阶段规则的检查,不再进入greylist了,从而提高用户体验)
### start abiao
Mail_From_pass_restriction = mfrom_passed_spf
### end abiao
vi /etc/postfix/master.cf
加入以下�热� (第二行 user 前面一定要有空格)
### start abiao
pyspfpolicy unix - n n - - spawn
user=nobody argv=/usr/bin/policyd-spf
### end abiao
vi /etc/postfix/main.cf
在 smtpd_restriction_classes 加入一个class :
mfrom_passed_spf,
然后定义该class:
mfrom_passed_spf = permit
在 smtpd_recipient_restrictions 的 reject_unauth_destination 后面加上:(一定要放在reject_unauth_destination 后,否则会成为 open relay )
check_policy_service unix:private/pyspfpolicy
同时加入:
policy_time_limit = 3600
postfix reload
十、安装policy-greylist-postgrey---黑白名单----
安装 postgrey,需要哪些perl模块来支持postgrey ,以下四个是检测到的,需要先安装它们:
rpm -ivh perl-Net-Server-0.99-1.el5.rf.noarch.rpm
rpm -ivh perl-IO-Multiplex-1.10-1.el5.rf.noarch.rpm
rpm -ivh perl-Parse-Syslog-1.10-1.el5.rf.noarch.rpm
rpm -ivh perl-BerkeleyDB-0.43-1.el5.rf.i386.rpm
因为postfix我们是采用源码安装的,所以我们也只能采用源码方式安装postgrey
tar -xzvf postgrey-1.34.tar.gz
cd postgrey-1.34
cp postgrey /usr/libexec/postfix/postgrey
cp postgrey_whitelist_clients /etc/postfix/ (根据需要修改这个白名单)
cp postgrey_whitelist_recipients /etc/postfix/(根据需要修改这个白名单)
cd /var/spool/postfix
mkdir postgrey
chown postfix:postfix postgrey/
启动方式:
vi /etc/rc.local
加入:
/usr/libexec/postfix/postgrey --unix=/var/spool/postfix/postgrey/socket --user=postfix --group=postfix -d --delay=60
关闭方式:
ps aux | grep postgrey
因为是源码安装,只能暂时采用kill的方式来操作了
vi /etc/postfix/main.cf
在 smtpd_recipient_restrictions 的 reject_unauth_destination 后面加上:(一定要放在reject_unauth_destination 后,否则会成为 open relay )
check_policy_service unix:/var/spool/postfix/postgrey/socket
postfix reload
十一、------配置防火墙-------------------
vi /etc/sysconfig/iptables
加入:
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp --dport 80 --state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp --dport 873 --state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp --dport 3306 --state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp --dport 443 --state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp --dport 110 --state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp --dport 25 --state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp --dport 10000 --state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp -s 192.168.10.247/32 --dport 123 --sport 123 -j ACCEPT
service iptables restart
十二、------设置FQDN---------------------------------
vi /etc/hosts
加入:
192.168.10.248 pop.ipanel.cn pop
127.0.0.1 localhost.localdomain localhost
vi /etc/sysconfig/network修改HOSTNAME的值:
HOSTNAME=pop.ipanel.cn
---------设置Selinux的问题-----------
如果碰到:pop dovecot: POP3(baib): open(/home/baib/Maildir/new/1316086143.V802I14f0013M662386.poppost.ipanel.cn) failed: Permission denied
是selinux引起的问题,临时解决方式:
vi /etc/sysconfig/selinux
修改SELINUX 为 “disabled”
setenforce 0 让selinux生效
Redhat缺省是SELINUX=enforcing , 也就是强制使用增强安全机制的。 有时间再研究一下在这个模式下的权限控制。。。
=======到此整套系统安装完成=======================
十三、------安装extman--------web客户端---
tar xzvf extman-1.1.tar.gz
mv extman-1.1 extman
mv extman /var/www/
cd /var/www/extman
cp webman.cf.default webman.cf
vi webman.cf
修改:
SYS_CONFIG = /var/www/extman/
SYS_LANGDIR = /var/www/extman/lang
SYS_TEMPLDIR = /var/www/extman/html
SYS_MAILDIR_BASE = /home/mailusers
修改以下mysql参数:
SYS_MYSQL_USER = postfix
SYS_MYSQL_PASS = werdfgcvb
SYS_MYSQL_HOST = localhost
安装apache .......
chkconfig httpd on
vi /etc/httpd/conf/httpd.conf
修改
User apache
Group apache

#User apache
#Group apache
User vmta
Group vmta
增加
### abiao start
ScriptAlias /extman/cgi/ "/var/www/extman/cgi/"
<Directory "/var/www/extman/cgi">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
Alias /extman /var/www/extman/html
### abiao end
cd /tmp
mkdir extman
chown postfix:postfix extman
service httpd restart
在mysql里分别导入如下文件(在extman-1.1\docs目录里):
extmail-abiao.sql , 我主要是去掉了针对mysql->user、mysql->db表的权限部分;
>use extmail
>source /var/www/extman/docs/extmail.sql;
可以访问http://192.168.10.22/extman/了
碰到:验证码图片不显示时,需要先安装这个rpm:
rpm -ivh perl-GD-2.35-1.el5.rf.i386.rpm
可以配置extman/webman.cf中SYS_CAPTCHA_ON = 0 #取消校验码,1为使用校验码,
vi /etc/rc.local,加入:
/var/www/extman/daemon/cmdserver -d
十四、------安装extmail------------------------------
tar xzvf extmail-1.2.tar.gz
mv extmail-1.2 extmail
mv extmail /var/www/
cd /var/www/extmail
cp webmail.cf.default webmail.cf
vi webmail.cf
修改:
SYS_CONFIG = /var/www/extmail/
SYS_LANGDIR = /var/www/extmail/lang
SYS_TEMPLDIR = /var/www/extmail/html
SYS_LOG_TYPE = file
SYS_LOG_FILE = /var/log/extmail.log
SYS_MAILDIR_BASE = /home/mailusers
修改以下mysql参数:
SYS_MYSQL_USER = postfix
SYS_MYSQL_PASS = werdfgcvb
SYS_MYSQL_HOST = localhost
SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock 【自带+数据库的路径】
touch /var/log/extmail.log
chown postfix:postfix /var/log/extmail.log
vi /etc/httpd/conf/httpd.conf
增加
### abiao start
ScriptAlias /extmail/cgi/ "/var/www/extmail/cgi/"
<Directory "/var/www/extmail/cgi">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
Alias /extmail /var/www/extmail/html
### abiao end
service httpd restart
可以访问http://192.168.10.22/extmail/了
碰到:Unix::Syslog not found, please install it first! 错误时,需要先安装这个rpm:
rpm -ivh perl-Unix-Syslog-0.100-1.2.el5.rf.i386.rpm
==============================================================================================================================================
十五、(2)数据迁移部分:
单个转换的做法:
perl /root/abiao-disk/postfix/mb2md-3.20.pl -s /var/spool/mail/liwei -d /var/spool/mail/users/liwei/Maildir
如果碰到Can't locate Date/Parse.pm in @INC ,就要先安装该perl包:
rpm -ivh perl-TimeDate-1.16-5.el5.noarch.rpm
批量转换的做法:
#!/bin/sh
set -x
MAILBOX_DIR="/var/spool/mail"
MAILDIR_DIR="/var/spool/mail/maildir"
[ -d $MAILDIR_DIR ] || mkdir -p $MAILDIR_DIR
cd $MAILBOX_DIR
for user in *; do
perl /root/mb2md-3.20.pl -s $MAILBOX_DIR/$user -d $MAILDIR_DIR/$user
chown -R $user.mail $MAILDIR_DIR/$user/
done
------------------------------------------
破解用户的密码,以便无缝迁移:(这个方法需要的时间太长了, 而且有些密码还很难破解出来,不是个最好的办法)
tar xzvf john-1.7.8.tar.tar
cd john-1.7.8/src
make
make linux-x86-any
cd ../run
cp /etc/passwd .
cp /etc/shadow .
./unshadow passwd shadow > mypasswd
./john mypasswd
------------------------------------------
采用新的pop服务,通过截取方式来取得用户密码,打印在log里:
tar jxvf courier-authlib-0.62.4.tar.bz2
安装:libstdc++-devel-4.1.2-44.el5.i386.rpm
gcc-c++-4.1.2-44.el5.i386.rpm
cd courier-authlib-0.62.4
./configure --prefix=/usr/local/courier-authlib --sysconfdir=/etc --with-redhat --with-authdaemonrc=/etc/authdaemonrc --with-authshadow
make
make install
chmod 755 /usr/local/courier-authlib/var/spool/authdaemon
cd /etc
mv authdaemonrc.dist authdaemonrc
vi authdaemonrc
修改:
authmodulelist="authshadow"
authmodulelistorig="authshadow"
DEBUG_LOGIN=2 ,(原来默认是0)这个等级可以把密码也打印在log里:/var/log/message或/var/log/maillog
cd /root/abiao-disk/postfix/courier-authlib-0.62.4
cp courier-authlib.sysvinit /etc/init.d/courier-authlib
chmod 755 /etc/init.d/courier-authlib
chkconfig --add courier-authlib
chkconfig --level 2345 courier-authlib on
echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf.d/courier-authlib.conf
ldconfig
ldconfig -v | grep cour
service courier-authlib start
调试的命令:
/usr/local/courier-authlib/sbin/authtest -s smtp abiaovu extmail
chkconfig --list | grep dovecot
chkconfig dovecot off
service dovecot stop、
安装新的POP服务器
tar jxvf courier-imap-4.5.1.tar.bz2
cd courier-imap-4.5.1
./configure --prefix=/usr/local/courier-imap --with-redhat --enable-unicode --disable-root-check --with-trashquota --without-ipv6 CPPFLAGS='-I/usr/local/courier-authlib/include' COURIERAUTHCONFIG='/usr/local/courier-authlib/bin/courierauthconfig'
make
make install
cd /usr/local/courier-imap/etc
mv pop3d.dist pop3d
mv pop3d-ssl.dist pop3d-ssl
mv imapd.dist imapd
mv imapd-ssl.dist imapd-ssl
vi pop3d
修改:
POP3DSTART=YES
设置Courier-IMAP开机自动运行:
cd /root/abiao-disk/postfix/courier-imap-4.5.1
cp courier-imap.sysvinit /etc/rc.d/init.d/imapd
chmod 755 /etc/rc.d/init.d/imapd
chkconfig --add imapd
chkconfig --list | grep imapd
service imapd start
在192.168.10.248上,
vi /etc/procmailrc
修改为:
MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR
这样,procmail在找到$HOME目录下有Maildir目录时,就投到该Maildir下, 否则还是会缺省投回去/var/mail里。。。
这样就可以方便地转移用户到Maildir了。。。
chkconfig --list | grep sasl
chkconfig --level 2345 saslauthd on
vi /usr/lib/sasl2/smtpd.conf
写入:
pwcheck_method:saslauthd
postfix reload
(一)ExtMail系统加密方式简介
有关ExtMail系统支持的加密方式,格式一直没有很正规的文档描述,这里我们做简单的介绍,以后整理成正式文档。目前支持的密码主要有以下的类型:
CRYPT老系统的加密方式,密码长度超过8位的话多出的部分是无法使用的,假设密码为12345678和12345678abcdefghijklmn 这2个是完全等效的。
CLEANTEXT及PLAIN明文密码,没啥好介绍的
MD5及MD5CRYPT
这个是参有salt的MD5加密,是目前emos和extman默认的加密方式,以下是一个例子:$1$QHhXzURU$a66/ExIQab7XNSa9/veEo/ ,该方式特点是$1$开头。即使同一个密码,每次加密完的结果都不一样。增加了保密性。
PLAIN-MD5
这是平常大家习惯见到的32位md5加密串,和php中的md5函数结果完全一致
LDAP-MD5
这种是适合在openLDAP或其他ldap里使用的密码,他的特点是以{MD5}开头,密文部分是base64编码的。因此要特别注意和PLAIN-MD5区分开。
SHA/SHA1
就是传说中的SHA加密。但要注意和SSHA(Salt-SHA)分开。后者是带了salt的方式。
安装apache
报错:
error: Failed dependencies:
libapr-1.so.0 is needed by httpd-2.2.3-22.el5.i386
解决方法:
libapr-1.so.0
解决安装:apr-1.2.7-11.el5_3.1.i386.rpm
libaprutil-1.so.0
解决安装:apr-util-1.2.7-7.el5_3.2.i386.rpm
Rpm -ivh httpd-2.2.3-22.el5.i386.rpm
安装httpd开发包,用于编译mod_jk.
httpd-devel-2.2.3-22.el5.i386.rpm 需先安装以下包
apr-devel-1.2.7-11.i386.rpm
db4-devel-4.3.29-9.fc6.i386.rpm
cyrus-sasl-devel-2.1.22-4.i386.rpm
openldap-devel-2.3.43-3.el5.i386.rpm
apr-util-devel-1.2.7-7.el5.i386.rpm
Jk
libtool-1.5.22-6.1.i386.rpm
imake-1.0.2-3.i386.rpm
autoconf-2.59-12.noarch.rpm
automake-1.9.6-2.1.noarch.rpm
十六、安装GCC
安装前要安装: cd/mnt/cdrom/Server
kernel-headers-2.6.18-128.el5.i386.rpm
glibc-headers-2.5-34.i386.rpm
kernel-headers-2.6.18-128.el5.i386.rpm
glibc-devel-2.5-34.i386.rpm
libgomp-4.3.2-7.el5.i386.rpm
gcc-4.1.2-44.el5.i386.rpm
libstdc++-devel-4.1.2-44.el5.i386.rpm
gcc-c++-4.1.2-44.el5.i386.rpm
十七、SSH
Linux上的SSH无法启动,报告/var/empty/sshd must be owned by root and not group or world-writable的解决方法。
使用rpm -V 命令可检查到ssh的软件包正常,但某个目录的属主错误。
# rpm -V openssh-server
S.5..... c /etc/ssh/sshd_config
.....U.. /var/empty/sshd
经查看发现这个目录的属主不是root,所以启动ssh报错
# ls -ld /var/empty/sshd/
d--x--x--x 2 vu00106 root 1024 Feb 2 2005 /var/empty/sshd/
修改为root属主,启动成功
这个是权限的问题
可采取以下两步解决
chown -R root.root /var/empty/sshd
chmod 744 /var/empty/sshd
service sshd restart

你可能感兴趣的:(postfix,Dovecot)