[原创-申请加精] postfix+dovecot+postfixadmin+mysql认证前段时间在弄postfix邮局,碰到了很多问题,最后原因都是由于看的那些教程没有把细结部分写出来,导致初学问题多多,这里就把我的过程写出来,本文是通过结合了CU上各位前辈的一些文章总结配置成功而写的,供需要学习的同学参考 首先先装好apache+php+mysql 步骤这里不提了 需要安装以下软件:postfix(一款MTA),postfixadmin(管理邮局账号),cyrus-sasl(安全认证软件),dovecot(一款安全pop软件) wget http:///releases/1.2/dovecot-1.2.9.tar.gz wget http://urceforg[…]_2.3.tar.gz?use_mirror=nchc wget ftp://ftp.andrew.cmu.edu/[…]/cyrus-sasl-2.1.23.tar.gz wget ftp://ftp.cuhk.edu.hk/[…]/postfix-2.6.5.tar.gz (1)安装postfixadmin tar zxf postfixadmin_2.3.tar.gz mv postfixadmin_2.3 /usr/local/wwwroot/postfix cd /usr/local/wwwroot/postfix cp config.inc.php.sample config.inc.php vi config.inc.php 找这行$CONF['default_language'] = 'en'; 改为$CONF['default_language'] = 'cn'; //让postfixadmin 支持中文 找到 $CONF['domain_in_mailbox'] = 'YES'; 改为$CONF['domain_in_mailbox'] = 'NO'; // If you don't want to have the domain in your mailbox set this to 'NO'. 找到此行:$CONF['encrypt'] = 改为CONF['encrypt'] = 'cleartext'; //明文存入mysql 配置apache访问postfixadmin vi /usr/local/apache/conf/httpd.conf <VirtualHost *:80> DocumentRoot /usr/local/wwwroot/postfix <Directory "/usr/local/wwwroot/postfix"> Options FollowSymLinks DirectoryIndex index.php AllowOverride None AuthType Basic authname Private authuserfile /var/run/admin require valid-user Order allow,deny Allow from all </Directory> </VirtualHost> 生成认证文件 /usr/local/apache/bin/htpasswd -c /var/run/admin admin //其中/var/run/admin为文件名,最后http://www.的admin为用户名 ew password: Re-type new password: Adding password for user admin 输入两次密码后生成用户admin 添加mysql用户 create database postfix; GRANT all privileges on postfix.* TO postfix@localhost IDENTIFIED BY 'PostFIX_1228'; flush privileges; 运行安装向导前需要安装php的imap扩展 先安装依赖包,否则会报错 yum -y install openssl openssl-devel pam pam-devel wget ftp://ftp.cac.washington.edu/mail/imap.tar.Z tar zxf imap.tar.z cd imap-2007a make lr5 PASSWDTYPE=std SSLTYPE=unix.nopwd IP6=4 echo "set disable-plaintext nil" > /etc/c-client.cf mkdir /usr/local/imap-2007a mkdir /usr/local/imap-2007a/include/ mkdir /usr/local/imap-2007a/lib/ chmod -R 077 /usr/local/imap-2007a cp imapd/imapd /usr/sbin/ cp c-client/*.h /usr/local/imap-2007a/include/ cp c-client/*.c /usr/local/imap-2007a/lib/ cp c-client/c-client.a /usr/local/imap-2007a/lib/libc-client.a cd /usr/local/src/php-5.2.10/ext/imap /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php-config --with-imap-ssl --with-imap=/usr/local/imap-2007a make && make install 然后在php.ini中加入 extension = "imap.so" 重启apache 打开http://yourip/setup.php就可以开始postfixadmin的安装了,安装完后可以进行添加域和用户的操作,这里添加了域mail.abc.com,用户名lsm@mail.abc.com (2)安装cyrus-sasl tar zxf cyrus-sasl-2.1.23.tar.gz cd cyrus-sasl ./configure --enable-login --enable-sql --with-mysql=/usr/local/mysql/ make && make install ln -s /usr/local/lib/sasl2 /usr/lib/sasl2 (3)安装postfix 停用sendmail service sendmail stop chkconfig --level 345 sendmail off mv /usr/bin/newaliases /usr/bin/newaliases.orig mv /usr/bin/mailq /usr/bin/mailq.orig mv /usr/sbin/sendmail /usr/sbin/sendmail.orig groupadd -g 12345 postfix useradd -u 12345 -g 12345 -c postfix -d /dev/null -s /bin/false postfix groupadd -g 54321 postdrop tar zxf postfix-2.6.5.tar.gz cd postfix-2.6.5 make -f Makefile.init makefiles \ 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include \ -DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\"' \ 'AUXLIBS=-L/usr/local/mysql/lib -lmysqlclient -lz -lm' make && make install 然后下一步下一步默认就可以 echo postfix: root >>/etc/aliases newaliases (4)安装配置dovecot mkdir -p /data/mailbox chown -R postfix.postfix /data/mailbox useradd -d /dev/null -s /sbin/nologin dovecot tar zxf dovecot-1.2.9.tar.gz cd dovecot-1.2.9 ./configure --with-sql --with-sql-drivers --with-mysql make && make install vi /usr/local/etc/dovecot.conf protocols=pop3 listen=* disable_plaintext_auth = no ssl_disable = yes auth_debug = yes log_path = /var/log/pop3.log mail_location = maildir:/data/mailbox/%u pop3_uidl_format=%08Xu%08Xv mail_uid = 12345 mail_gid = 12345 first_valid_uid = 12345 auth default { mechanisms = PLAIN LOGIN CRAM-MD5 DIGEST-MD5 passdb sql { args = /usr/local/etc/dovecot-sql.conf } userdb sql { args = /usr/local/etc/dovecot-sql.conf } socket listen { client { path = /var/run/dovecot/auth-client mode = 0660 user = postfix group = postfix } } } vi /usr/local/etc/dovecot-sql.conf driver = mysql connect = host=localhost dbname=postfix user=postfix password=PostFIX_1228 default_pass_scheme = MD5 password_query = SELECT password, maildir as userdb_home FROM mailbox WHERE username = '%u' user_query = select maildir as home,12345 as uid ,12345 as gid from mailbox where username='%u' And active='1' (5)配置postfix vi /etc/postfix/main.cf command_directory = /usr/sbin config_directory = /etc/postfix daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix debug_peer_level = 2 html_directory = no inet_interfaces = all mail_owner = postfix mailbox_size_limit = 209715200 #容量大小 mailq_path = /usr/bin/mailq manpage_directory = /usr/local/man message_size_limit = 52428800 #限制附件大小 mydomain = mail.abc.com #域名 myhostname = mail #主机名 mynetworks = 0.0.0.0/0 #配置这一项使用用户可在任意地发送邮件 mynetworks_style = subnet myorigin = $mydomain newaliases_path = /usr/bin/newaliases queue_directory = /var/spool/postfix readme_directory = no sample_directory = /etc/postfix sendmail_path = /usr/sbin/sendmail setgid_group = postdrop #配置使用dovecot的sql认证 smtpd_banner = $myhostname ESMTP smtpd_recipient_restrictions = permit_mynetworks, reject_invalid_hostname, reject_non_fqdn_hostname, reject_unknown_sender_domain, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_pipelining, reject_unauth_destination #上面这个smtpd_recipient_restrictions后面的项目每个逗号后都要有一个空格,否则会有问题 smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = smtpd_sasl_path = /var/run/dovecot/auth-client smtpd_sasl_security_options = noanonymous smtpd_sasl_type = dovecot unknown_local_recipient_reject_code = 550 #虚拟用户设定 virtual_alias_domains = virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_gid_maps = static:12345 virtual_mailbox_base = /data/mailbox/ virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_limit = 209715200 virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_transport = virtual virtual_uid_maps = static:12345 vi /etc/postfix/mysql_virtual_alias_maps.cf user = postfix password = PostFIX_1228 hosts = localhost dbname = postfix table = alias select_field = goto where_field = address vi /etc/postfix/mysql_virtual_domains_maps.cf user = postfix password = PostFIX_1228 hosts = localhost dbname = postfix table = domain select_field = description where_field = domain vi /etc/postfix/mysql_virtual_mailbox_maps.cf user = postfix password = PostFIX_1228 hosts = localhost dbname = postfix table = mailbox select_field = maildir where_field = username (6)运行测试 在测试前需要在DNS服务器上建一个MX记录解析到本机 postfix start dovecot 然后用netstat -putln查看25和110端口是否启动 测试认证 telnet localhost 25 ehlo localhost # 手工输入返回下列信息表示postfix运行良好 250-mail 250-PIPELINING 250-SIZE 52428800 250-VRFY 250-ETRN 250-AUTH PLAIN LOGIN CRAM-MD5 DIGEST-MD5 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN auth login #手工输入进行认证 334 VXNlcm5hbWU6 bHNtQG1haWwuYWJjLmNvbQ== #手工输入用户名的base64编码 334 UGFzc3dvcmQ6 MTIzNDU2 #手工输入密码的base64编码 334 UGFzc3dvcmQ6 235 2.7.0 Authentication successful #返回该信息表示认证成功 mail from:lsm@mail.abc.com #发件人地址 250 2.1.0 Ok rcpt to:lsm@163.com #收件人地址 data sdfasdfsdfsf #输入发信内容 . #结束输入发信内容 subject:test email #发信主题 将字符转换为base64编码的方法 vi a.php <?php echo base64_encode("lsm@mail.abc.com"); echo "<p>;"; echo base64_encode("123456"); ?>; 运行/usr/local/php/bin/php a.php就可以看到转换的base64编码 测试收信 telnet localhost 110 user lsm@mail.abc.com #输入用户名 +OK pass 123456 #输入密码 +OK Logged in. list #列出新邮件 +OK 1 messages: #有一封新邮件 1 1608 整个过程完成了,你可以在outlook或者foxmail上配置看能不能正常收发邮件,注意用户名是完整的,如lsm@mail.abc.com,这个邮件地址就是用户名 [ 本帖最后由 00306 于 2010-1-4 14:55 编辑 ]占个沙发板凳~~:mrgreen:只有站在地板上啦http://www.!汉王电纸书 有疑问: postfix支持curys-sasl 或dovecot 做验证。只选一个如dovecot不就干净了吗?干嘛非要两个都上?感觉有点多余。
阅读(90)评论(0)
|
|