postfix+mysql邮局

时间:2007-01-04 10:28:38   来源:  作者:whsong  点击:次  出处:技术无忧
关键字:post

通过几天的摸索和实践,终于把一个基本完整的邮件系统安装完毕,以下是我安装的过程,以及在安装过程中碰到的一些问题和解决方案,
所有的软件都是通过ports来安装的,我这里只是写一些和平常不同的,以及要注意的,一些常见软件的安装请查阅其它的文档。有不对的地方,请大家指出。
1. FreeBSD 5.3-Stable
2. MySQL 4.1.7
创建database和tables
mysql -u root -p < DATABASE.TXT (可以直接下载使用)
3. Apache 2.0.52
4. PHP 4.3.9
注意:Postfixadmin需要的包php-pear,不支持mod_php模式,因此我安装的是php-cgi-4.3.9,和mod_fastcgi-2.4.2
#ee /usr/local/etc/php.ini
include_path = ".:/usr/local/share/pear"
#ln -s /usr/local/bin/php /usr/local/www/cgi-bin/php
#ee /usr/local/etc/apache2/httpd.conf
AddHandler fastcgi-script fcgi fcgi fpl
AddHandler php-fastcgi .php
Action php-fastcgi /cgi-bin/php
5. Cyrus-sasl 2.1.20
注意:Cyrus-sasl 2.1.20还是不支持MySQL的加密密码,而Postfixadmin默认添加用户到MySQL数据库是用加密密码的,而Courier-IMAP也是支持加密密码的,我看到有的文章把所有的用户认证都改成了明码,我自己认为不是很好,因此还是把Cyrus-sasl2打了补丁,网上的补丁版本是针对Cyrus-sasl 2.1.19的,但是我试验下来,也是可以用的。到http://frost.ath.cx/software/cyrus-sasl-patches/,下载三个文件(for FreeBSD),patch-lib__Makefile.in.txt,patch-lib__checkpw.c,patch-plugins__sql.c
#cp patch-lib__Makefile.in.txt,patch-lib__checkpw.c,patch-plugins__sql.c /usr/ports/security/cyrus-sasl2/files/
#cd /usr/ports/security/cyrus-sasl2/
#make WITH_MYSQL=yes install clean
#ln -s /usr/local/lib/sasl2 /usr/lib/sasl2
在/usr/local/etc/postfix/main.cf,加入
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_application_name = smtpd
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_hostname, reject_non_fqdn_sender,
reject_non_fqdn_recipient, reject_unauth_destination
#ee /usr/lib/sasl2/smtpd.conf
pwcheck_method: auxprop
auxprop_plugin: sql
sql_engine: mysql
allowanonymouslogin: no
allowplaintext: yes
mech_list: PLAIN LOGIN
password_format: crypt
sql_user: postfix
sql_passwd: postfix
sql_hostnames: localhost
sql_database: postfix
sql_select: SELECT password FROM mailbox WHERE username = '%u@%r' AND domain = '%r'
6. Postfix 2.1.5
安装时,加入Cyrus-sasl2,MySQL和VDA(quota)的支持
创建一个目录,用来存放所有virtual users的email
# mkdir /usr/local/virtual
# chown -R postfix:postfix /usr/local/virtual
# chmod -R 751 /usr/local/virtual
在/usr/local/etc/postfix/main.cf,加入
virtual_alias_maps = mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:125
virtual_mailbox_base = /usr/local/virtual/
virtual_mailbox_domains = mysql:/usr/local/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_limit = 51200000
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 125
virtual_transport = virtual
virtual_uid_maps = static:125
# Additional for quota support
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes
注意:gid和uid是你自己的postfix用户的gid和uid,你可以通过vipw来查看
在/usr/local/etc/postfix/下面创建以下5个文件:
6.1 mysql_virtual_alias_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
6.2 mysql_virtual_domains_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = domain
select_field = description
where_field = domain
6.3 mysql_virtual_mailbox_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
6.4 mysql_virtual_mailbox_limit_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username
6.5 mysql_relay_domains_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
7. Courie-IMAP 3.0.8
/usr/local/etc/courier-imap/authmysqlrc
DEFAULT_DOMAIN lulin.hn.org -> 改成你自己的域名
MYSQL_CRYPT_PWFIELD password
MYSQL_DATABASE postfix
MYSQL_GID_FIELD '125'
MYSQL_HOME_FIELD '/usr/local/virtual/'
MYSQL_LOGIN_FIELD username
MYSQL_MAILDIR_FIELD maildir
MYSQL_NAME_FIELD name
MYSQL_OPT 0
MYSQL_PASSWORD postfix
MYSQL_PORT 3306
MYSQL_QUOTA_FIELD quota
MYSQL_SERVER localhost
MYSQL_SOCKET /tmp/mysql.sock
MYSQL_UID_FIELD '125'
MYSQL_USERNAME postfix
MYSQL_USER_TABLE mailbox
注意:当中不能有任何的空格,用Tab来代替,gid,uid都是postfix的gid,uid
修改,/usr/local/etc/courier-imap/authdaemonrc
authmodulelist="authmysql"
8. Postfixadmin 2.0.5
默认site管理员帐号和密码都是admin/admin,可以修改.htpasswd来改密码
#ee /usr/local/www/postfixadmin/admin/.htpasswd
但是这里的密码是加密的,如果也想要用加密密码怎么办,只要vipw,随便找一个密码,cp过去就可以了:)。
编辑/usr/local/www/postfixadmin/config.inc.php,把启用Quota的项改为"YES",默认是关的,再查看一下关于MySQL数据库的信息是否正确。
9. Clamav 0.80
查看/usr/local/etc/clamd.conf,找到LocalSocket /var/run/clamav/clamd,记下,因为Amavisd-new要用到。port安装clamav的时候会自动创建clamav的用户和组,我们要把所有clamav拥有的目录和文件都改成vscsn用户和vscan组(Amavisd-new),有/usr/local/share/clamav/,/var/log/clamav/,/var/run/clamav/,/var/mail/clamav,因为这样,Amavisd-new调用clamav的时候就没有什么权限问题,修改上面的/usr/local/etc/clamd.conf,把运行的user改成vscan。自动升级clamav,可以用cn的镜像,这样会比较快,修改/usr/local/etc/freshclam.conf,DatabaseMirror db.cn.clamav.net,还有database owner也改成vscan
10. Spamassassin 3.0.1
修改,/usr/local/etc/mail/spamassassin/local.cf
11. Amavisd-new 2.2.0
在/usr/local/etc/postfix/main.cf,加入
content_filter=smtp-amavis:[127.0.0.1]:10024
在/usr/local/etc/postfix/master.cf,加入
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_hostname, reject_non_fqdn_sender,
reject_non_fqdn_recipient, reject_unauth_destination
-o mynetworks=192.168.0.0/24,127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks
把/usr/local/etc/amavisd.conf里面关于clamav的注释都去掉,还有看看/var/run/clamav/clamd对不对,就可以调用clamav了。
注意:如果要提高amavisd的效率的话,可以修改/usr/local/etc/amavisd.conf
$max_servers = x; 默认是2
参数,但是要和/usr/local/etc/postfix/master.cf的一项
smtp-amavis unix - - n - x smtp
要相吻合。
建议: $final_virus_destiny = D_PASS; # (defaults to D_DISCARD)
$final_spam_destiny = D_PASS; # (defaults to D_BOUNCE)
这样在测试阶段可以看看防病毒,防垃圾邮件的效果,如果满意的话,一段时间后可以把D_PASS改成D_BOUNCE。记得把virusalert,spam.police加到/etc/mail/aliases里面,保证有一个真实的邮件用户可以收到这些邮件。
12. Squirrelmail 1.4.3a
安装完后,需要配置一下才能使用,
#cd /usr/local/www/squirrelmail/
#./configure
13. pflogsumm-1.1.0
这是一个postfix日志文件分析软件,可以定时提供一个报告给管理员,范例:pflogsumm.txt,安装完后,
#ee /usr/local/sbin/my-postfix-report.sh
#!/bin/sh
bzcat /var/log/maillog.0.bz2 |/usr/local/bin/pflogsumm | mail -s "Report" root
存盘,改成可执行文件
#crontab -u root -e
0 4 * * * /usr/local/sbin/my-postfix-report.sh Reporting on SPAM
这样,会每天凌晨4:00,自动发送报告给root。
至此,一个带虚拟用户,防病毒,防垃圾邮件,邮箱空间配额,包括webmail,方便管理的邮件系统就完成了。
参考:
http://high5.net/howto/

http://www.flakshack.com/anti-spam/wiki/index.php

欢迎收藏Pc51.Net技术无忧网


文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面