古斯塔斯集团的Qmail邮件系统

2,867 views
2,759 views

Published on

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,867
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

古斯塔斯集团的Qmail邮件系统

  1. 1. qmail 全系统安装部署文档(for CentOS5.4)如影随形 ,原帖发自: http://bbs.linuxtone.org/thread-4330-1-1.html time: 9:28 2009-11-13 #前言: #预设的域名/主机名: #mail.gusitasi.com #IP 地址 192.168.118.143 #预设的目录、用户和组: groupadd mysql useradd -g mysql -s /bin/false -M mysql mkdir /var/qmail groupadd nofiles useradd alias -g nofiles -d /var/qmail/alias -s /sbin/nologin useradd qmaild -g nofiles -d /var/qmail -s /sbin/nologin useradd qmaill -g nofiles -d /var/qmail -s /sbin/nologin useradd qmailp -g nofiles -d /var/qmail -s /sbin/nologin groupadd qmail useradd qmailq -g qmail -d /var/qmail -s /sbin/nologin useradd qmailr -g qmail -d /var/qmail -s /sbin/nologin useradd qmails -g qmail -d /var/qmail -s /sbin/nologin groupadd vchkpw -g 89 useradd vpopmail -u 89 -g vchkpw mkdir -p /home/vpopmail/etc #预设的路径: #mysql 主目录:/usr/local/mysql #mysql 的 unix 套接字文件:/tmp/mysql.sock #apache 的安装路径:/usr/local/apache2 #apache 的 web 主目录:/www/html #apache 的 CGI 目录: /www/cgi-bin #php application dir:/usr/local/php5 #bind9 conf dir:/etc/bind9 #qmail 的主目录/var/qmail/ #vpopmail 的主目录 /home/vpopmail/etc #/home/netdisk #预设的用户名/密码: #mysql 数据库 root/空 #vpopmail 在 mysql 中的用户:vpopmail/ryan098 #邮件域管理员:postmaster/jiadaliwansui #测试邮箱 1:c1@gustasi.com/c1 #测试邮箱 2:xiaojiahuo@gusitasi.com/xiaojiahuo
  2. 2. #3 防火墙已经关闭,selinux 已经禁用 #安装中发现缺失、错误的组件: #首先挂载 CentOS5.4 到/mnt #1。安装 mysql 时发现需要安装如下软件包 rpm -ivh ncurses-devel-5.5-24.20060715.i386.rpm #2。安装 PHP 时发现需要安装的包: rpm -ivh zlib-devel-1.2.3-3.i386.rpm rpm -ivh libxml2-devel-2.6.26-2.1.2.8.i386.rpm #3。安装 qmail 补丁过程中需要安装的包: ####错误原文:make: *** [qmail-remote.o] 错误 1 rpm -ivh e2fsprogs-devel-1.39-23.el5.i386.rpm rpm -ivh keyutils-libs-devel-1.2-1.el5.i386.rpm rpm -ivh libselinux-devel-1.33.4-5.5.el5.i386.rpm rpm -ivh libsepol-devel-1.15.2-2.el5.i386.rpm rpm -ivh libselinux-devel-1.33.4-5.5.el5.i386.rpm rpm -ivh krb5-devel-1.6.1-36.el5.i386.rpm rpm -ivh openssl-devel-0.9.8e-12.el5.i386.rpm ####make: *** [tls.o] 错误 1 。原因是 openssl 版本问题,CentOS5.4 默认是 098,实际需要 097 mv /usr/bin/openssl /usr/bin/openssl098 cd ~ tar xzfv openssl-0.9.7i.tar.gz cd openssl-0.9.7i ./Configure make make install find / -name openssl cp /usr/local/ssl/bin/openssl /usr/bin/ #配置支持中文 echo "LANG="zh_CN.GB18030" ">/etc/sysconfig/i18n echo "SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"">>/etc/sysconfig/i18n echo "SYSFONT="latarcyrheb-sun16" ">>/etc/sysconfig/i18n cat /etc/sysconfig/i18n source /etc/sysconfig/i18n LAMP 安装 第一步安装 mysql ################## tar xzfv mysql*.tar.gz cd mysql* ./configure --prefix=/usr/local/mysql --enable-thread-safe-client --enable-local-infile --with- extra-charset=all --with-tcp-port=3306 --with-unix-socket-path=/tmp/mysql.sock --enable-
  3. 3. assembler --with-mysqld-user=mysql --with-federated-storage-engine --with-client-ldflags=-all- static --with-mysqld-ldflags=-all-static #####编译时如报错参看附录 1。 make &&make install cp support-files/my-medium.cnf /etc/my.cnf #####安装 db cd /usr/local/mysql chown -R mysql . chgrp -R mysql . bin/mysql_install_db --user=mysql chown -R root . chown -R mysql var bin/mysqld_safe --user=mysql & #####设置启动项“cd -”是返回上一次所在的目录的意思 cd - cp support-files/mysql.server /etc/rc.d/init.d/mysqld chmod 700 /etc/rc.d/init.d/mysqld chkconfig --add mysqld chkconfig --level 345 mysqld on chkconfig --list mysqld echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf&&ldconfig -v export PATH=$PATH:/usr/local/mysql/bin ln -s /usr/local/mysql/bin/* /usr/bin/ 测试 mysql 是否正常 /usr/local/mysql/bin/mysqladmin ping /usr/local/mysql/bin/mysqladmin version 添加 vpopmail/igenus 的数据库,以及用户、密码、权限; /usr/local/mysql/bin/mysql -uroot -p mysql> show databases; CREATE DATABASE vpopmail; GRANT select,insert,update,delete,create,drop ON vpopmail.* TO vpopmail@localhost IDENTIFIED BY 'ryan098'; use vpopmail; CREATE TABLE `address` ( `id` int(11) unsigned NOT NULL auto_increment, `pw_id` int(5) NOT NULL default '0', `name` varchar(64) NOT NULL default '', `email` varchar(128) NOT NULL default '', UNIQUE KEY `id` (`id`), KEY `pw_id` (`pw_id`) ) TYPE=MyISAM PACK_KEYS=1 ; CREATE TABLE `admin` (
  4. 4. `id` int(10) unsigned NOT NULL auto_increment, `site_id` int(10) unsigned NOT NULL default '0', `domain` varchar(128) NOT NULL default '', `quota` smallint(5) unsigned NOT NULL default '0', `total` smallint(5) unsigned NOT NULL default '0', `createtime` timestamp(14) NOT NULL, `login` char(1) NOT NULL default '', `cur_total` smallint(5) NOT NULL default '0', `cur_quota` smallint(5) NOT NULL default '0', `gid` varchar(11) NOT NULL default '', `expiration_time` timestamp(14) NOT NULL, `flag` int(10) unsigned NOT NULL default '0', `maxmsg` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`id`), UNIQUE KEY `domain` (`domain`) ) TYPE=MyISAM PACK_KEYS=1 ; CREATE TABLE `card` ( `id` int(5) unsigned NOT NULL auto_increment, `pw_id` int(5) unsigned NOT NULL default '0', `LinkMan` varchar(64) NOT NULL default '', `CompanyName` varchar(100) NOT NULL default '', `Address` varchar(255) NOT NULL default '', `Position` varchar(32) NOT NULL default '', `PhoneNumber` varchar(16) NOT NULL default '', `Mobile` varchar(12) NOT NULL default '', `Email` varchar(128) NOT NULL default '', `Partaker` varchar(32) NOT NULL default '', `Memo` varchar(255) NOT NULL default '', PRIMARY KEY (`id`) ) TYPE=MyISAM ; CREATE TABLE `lastauth` ( `user` char(32) NOT NULL default '', `domain` char(64) NOT NULL default '', `remote_ip` char(18) NOT NULL default '', `timestamp` bigint(20) NOT NULL default '0', PRIMARY KEY (`user`,`domain`) ) TYPE=MyISAM; CREATE TABLE `logs` ( `pw_id` int(5) default '0', `ip` varchar(15) NOT NULL default '', `action` varchar(15) NOT NULL default '',
  5. 5. `time` datetime default NULL, `content` varchar(64) NOT NULL default '', `email` varchar(128) NOT NULL default '' ) TYPE=MyISAM; CREATE TABLE `message` ( `id` int(5) unsigned NOT NULL auto_increment, `title` varchar(255) NOT NULL default '', `body` text NOT NULL, `createtime` datetime NOT NULL default '0000-00-00 00:00:00', `updatetime` datetime NOT NULL default '0000-00-00 00:00:00', `pw_domain` varchar(64) NOT NULL default '', UNIQUE KEY `id` (`id`) ) TYPE=MyISAM ; CREATE TABLE `personal` ( `id` int(11) unsigned NOT NULL auto_increment, `pw_id` int(5) NOT NULL default '0', `truename` varchar(10) NOT NULL default '', `fax` varchar(20) NOT NULL default '', `telephone` varchar(15) NOT NULL default '', `sex` int(1) NOT NULL default '0', `year` int(4) NOT NULL default '0', `MONTH` int(2) NOT NULL default '0', `DAY` int(2) NOT NULL default '0', `education` varchar(4) NOT NULL default '', `marital` int(1) NOT NULL default '0', `occupation` varchar(15) NOT NULL default '', `companyname` varchar(30) NOT NULL default '', `province` varchar(6) NOT NULL default '', PRIMARY KEY (`id`) ) TYPE=MyISAM PACK_KEYS=1 ; CREATE TABLE `scheduler` ( `id` int(11) unsigned NOT NULL auto_increment, `begin_time` int(11) unsigned default NULL, `end_time` int(11) unsigned default NULL, `title` varchar(255) NOT NULL default '', `body` varchar(255) NOT NULL default '', `pw_id` int(11) unsigned NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM ; CREATE TABLE `stow` (
  6. 6. `id` int(5) unsigned NOT NULL auto_increment, `pw_id` int(5) unsigned NOT NULL default '0', `Name` varchar(128) NOT NULL default '', `http` varchar(255) NOT NULL default 'http://', `memo` varchar(255) NOT NULL default '', PRIMARY KEY (`id`) ) TYPE=MyISAM ; CREATE TABLE `vpopmail` ( `pw_id` int(5) unsigned NOT NULL auto_increment, `pw_name` varchar(32) NOT NULL default '', `pw_domain` varchar(64) NOT NULL default '', `pw_passwd` varchar(40) NOT NULL default '', `pw_uid` int(11) default NULL, `pw_gid` int(11) default NULL, `pw_gecos` varchar(48) default NULL, `pw_dir` varchar(255) default NULL, `pw_shell` varchar(20) default NULL, `pw_clear_passwd` varchar(16) default NULL, `createtime` timestamp(14) NOT NULL, PRIMARY KEY (`pw_id`), KEY `pw_name` (`pw_name`,`pw_domain`) ) TYPE=MyISAM PACK_KEYS=1 ; FLUSH PRIVILEGES; show databases; QUIT ################### 第二步,安装 apache cd ~ tar -zxvf httpd* cd httpd* ./configure --prefix=/usr/local/apache2 --enable-so make &&make install mkdir -p /www/cgi-bin/ mkdir /www/html/ vi /usr/local/apache2/conf/httpd.conf #####设置 httpd.conf 文件,添加或修改如下的内容(尤其注意 ScriptAlias 和 DirectoryIndex 需要注意插入的位置) : #####!!!!!!!!!!!!!!!! ServerName www.gusitasi.com:80 DocumentRoot "/www/html/" AddType application/x-httpd-php .php AddType applicatoin/x-httpd-php-source .phps User vpopmail
  7. 7. Group vchkpw <Directory /www> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> AddDefaultCharset GB2312 ScriptAlias /cgi-bin/ "/www/cgi-bin/" DirectoryIndex index.html index.php #####设置 apache 自启动: cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd vi /etc/init.d/httpd,在第一行加上选文(注意保留#号 ) : #!/bin/sh # chkconfig: 35 70 30 # description: Apache is a World Wide Web server. chmod 700 /etc/init.d/httpd chkconfig --level 345 httpd on chkconfig --list httpd #################### ####第三步,安装 php cd ~ tar -zxvf php* cd php* ./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2/bin/apxs --with- mysql=/usr/local/mysql --with-config-file-path=/usr/local/php5/etc ##### 编 译 过 程 中 出 现 “configure: error: xml2-config not found. Please check your libxml2 installat”错误,可以参照上文安装 rpm 包 make&&make install cp php.ini-dist /usr/local/php5/etc/php.ini ###LAMP 测试 ################ echo "<? phpinfo(); ?>">/www/html/test.php service httpd start curl -I 127.0.0.1 ####最后一步,用 curl 或图形化浏览器来访问 test.php curl 127.0.0.1/test.php ####如果 shell/浏览器输入 N 多内容,代表 php 已经成功的处理了 test.php 那个文件。 ####删除 amp 文件 cd ~ rm -rf httpd* mysql* php*
  8. 8. 第四步,安装 bind9(可选,如有 DNS 服务器可忽略此步骤) tar xzfv bind* cd bind* mkdir /etc/bind9 ./configure --sysconfdir=/etc/bind9 --disable-openssl-version-check make &&make install ############开始配置 bind9 cd /etc/bind9 首先挖掘根 dns 创建 ca 文件(详情见附录 3) ,也可以直接运行下面的命令: cat>> named.ca <<EOF A.ROOT-SERVERS.NET. 3600000 IN A 198.41.0.4 A.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:503:ba3e::2:30 B.ROOT-SERVERS.NET. 3600000 IN A 192.228.79.201 C.ROOT-SERVERS.NET. 3600000 IN A 192.33.4.12 D.ROOT-SERVERS.NET. 3600000 IN A 128.8.10.90 E.ROOT-SERVERS.NET. 3600000 IN A 192.203.230.10 F.ROOT-SERVERS.NET. 3600000 IN A 192.5.5.241 F.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:500:2f::f G.ROOT-SERVERS.NET. 3600000 IN A 192.112.36.4 H.ROOT-SERVERS.NET. 3600000 IN A 128.63.2.53 H.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:500:1::803f:235 I.ROOT-SERVERS.NET. 3600000 IN A 192.36.148.17 J.ROOT-SERVERS.NET. 3600000 IN A 192.58.128.30 J.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:503:c27::2:30 EOF #####rndc 是 bind 软件引进的远程控制通道,代替 unix 信号来控制 named 进程。 接下来 要设置 rndc 文件,并根据 rndc 文件来书写 bind9 自己的配置文件。 rndc-confgen > rndc.conf #####创建 bind9 的主配置文件 named.conf,指定配置文件位置和根文件位置 cat >> named.conf <<EOF options{ directory "/etc/bind9"; }; zone "."{ type hint; file "named.ca"; }; EOF 然后将 rndc.conf 中被 #号注释掉的部分(不含首行“# Use with the……”和尾行 “# End of named.conf”)去掉#号注释追加到 named.conf 的尾部。下面命令中 tail、head 的数值可能会根据你的 rndc.conf 的内容而变换
  9. 9. cat rndc.conf |tail -10|head -9|cut -c 2->>named.conf #####现在 BIND9 的基础设置就完成了下面就是添加启动项: 根据下文增加启动脚本文件 [root@mail bind9]# cat /etc/init.d/named #!/bin/bash # named a network name service. # chkconfig: 345 35 75 # description: a name server if [ `id -u` -ne 0 ] then echo "ERROR:For bind to port 53,must run as root." exit 1 fi case "$1" in start) if [ -x /usr/local/sbin/named ]; then /usr/local/sbin/named -c /etc/bind9/named.conf && echo . && echo 'BIND9 server started' fi /usr/local/sbin/rndc status && echo . && echo 'rndc status' ;; stop) kill `cat /var/run/named/named.pid` && echo . && echo 'BIND9 server stopped' ;; restart) echo . echo "Restart BIND9 server" $0 stop sleep 7 $0 start ;; reload) test -e /var/run/named/named.pid &&/usr/local/sbin/rndc reload||echo 'Bind is no working' ;; status) test -e /var/run/named/named.pid &&/usr/local/sbin/rndc status||echo 'Bind is no working' ;; *) echo "$0 start | stop | restart |reload |status" ;; esac #####然后设置下脚本权限 chmod 700 /etc/rc.d/init.d/named chkconfig --add named chkconfig --level 345 named on
  10. 10. ####现在即可通过 service named start | stop | restart |reload |status 进行控制。 #####设置区域 #####现在 bind 的设置已经是一个合格的空壳, 下面就要往壳里写入要解析的区域的内容了 。 #####在 named.conf 里添加区域: cat >>/etc/bind9/named.conf<< EOF zone "gusitasi.com"{ type master; file "gusitasi.com"; }; EOF #####书写区域配置文件 cat >>/etc/bind9/gusitasi.com<<EOF @ 1D IN SOA gusitasi.com. root ( 2008030201 1H 15M 1W 1D ) IN NS ns ns IN A 192.168.118.143 mx1 IN A 192.168.118.143 smtp IN A 192.168.118.143 pop3 IN A 192.168.118.143 gusitasi.com. IN MX 10 mx1.gusitasi.com. www IN A 192.168.118.143 news IN CNAME www EOF #####启动 bind,同时设置本机的 resolv.conf service named start cat /dev/null>/etc/resolv.conf cat >>/etc/resolv.conf<< EOF nameserver 127.0.0.1 search gusitasi.com EOF 测试效果: [root@mail bind9]# host -t mx gusitasi.com gusitasi.com mail is handled by 10 mx1.gusitasi.com. [root@mail bind9]# host www.gusitasi.com www.gusitasi.com has address 192.168.118.143 [root@mail bind9]# host smtp smtp.gusitasi.com has address 192.168.118.143 [root@mail bind9]# host mx1 mx1.gusitasi.com has address 192.168.118.143
  11. 11. 清理:rm -rf bind9* ######################## 前面是安装 LAMP 和 bind9,现在是正式安装 qmail 了。请注意,接下来安装的软件和补丁 的版本要求比较严格。 首先检查并卸掉自动安装上的 sendmail 和 mysql。 rpm -qa sendmail mysql service sendmail stop rpm -e --nodeps sendmail rm -rf /usr/sbin/sendmail rpm -qa sendmail mysql rpm -e --nodeps mysql #####解压缩 netqmail-1.05.tar.gz,但是不安装,只是做基础对照; cd ~ tar xzfv netqmail-1.05.tar.gz cd netqmail-1.05 ./collate.sh #####打补丁并安装 daemontools 。daemontools 是一个收集管理 UNIX 进程的工具.用它来监 听 qmail-send,qmail-smtpd,qmail-pop3d cd ~ tar xzfv daemontools-0.76.tar.gz cd admin/daemontools-0.76 patch -p1 < ../../daemontools-0.76.errno.patch ./package/install ps ax | grep svscan #################################################### # 验证 daemontools 已经正常运行: [root@ora1 daemontools-0.76]# ps ax | grep svscan 28555 ? Ss 0:00 /bin/sh /command/svscanboot 28557 ? S 0:00 svscan /service #################################################### #####补丁并安装 ucspi-tcp 说明: ucspi-tcp 软件包由一组工具组成。它们用来简单的建立客户机-服务器 tcp 后台程序。 TcpServer 是一个比 inetd 安全性更好的选择。它内建有基于规则的连接控制,能完善地在达 到预定义的最大系统负载时将连接推迟,这点比 inetd 好。Tcpserver 也被推荐与 qmail 一同 使用,因为它们是同一个作者编的程序。 参考:http://cr.yp.to/ucspi-tcp.html cd ~ tar zxvf ucspi-tcp-0.88.tar.gz cd ucspi-tcp-0.88 patch -p1 < ../ucspi-tcp-0.88.errno.patch make make setup check
  12. 12. #####准备安装 qmail cd ~ tar xzfv toaster-scripts-0.7.tar.gz cd netqmail-1.05/netqmail-1.05/ vi qmail-smtpd.c +50 ----------------------------------------- #####搜索函数 straynewline 中的 451 改为 553 第 50 行 #####当你的服务器收到无效格式的邮件时,会发送:"I am not going to accept that message at the moment,you can try again later", 对方服务器收到后,几秒钟后又会发送同样的邮件给你,造成多次的重复。 #####改为 553 后,你的服务器将直接发送:"I am not going to accept that message,don't try sending it again.",告诉对方的服务器不 要再发这封无效的信件。 #####RedHat/Fedora 用户可能需要为 TLS 补丁链接一个 include 文件 #####输入如下命令: ln -s /usr/kerberos/include/com_err.h /usr/include/ ----------------------------------------- #####qmail 编译安装 make &&make setup check #####安装过程中可能会出现警告:“main”的返回类型不是“int”,这些警告来自 GCC,一般 不用理会。 #####注:qmail 的补丁在 vpopmail 安装之后再打。 #####用你自己的主机名代替下面的 mx1.gusitasi.com ./config-fast mx1.gusitasi.com #设置管理员的邮箱地址。 #发往 root/postmaster/mailer-daemon 地址的邮件将会由定义的管理员邮箱接收。 #将如下的“admin@gusitasi.com"替换成你的管理员邮箱。 cd /var/qmail/alias echo "xiaojiahuo@gusitasi.com" > .qmail-postmaster echo "xiaojiahuo@gusitasi.com" > .qmail-mailer-daemon echo "xiaojiahuo@gusitasi.com" > .qmail-root chmod 644 /var/qmail/alias/.qmail* #####开启 SPF 设置 echo ./Maildir/ >/var/qmail/control/defaultdelivery echo 3 > /var/qmail/control/spfbehavior
  13. 13. #####添加 qmail 的帮助手册 echo MANPATH /var/qmail/man >> /etc/man.config #####为 qmail 服务建立监控目录和日志文件: mkdir -p /var/qmail/supervise/qmail-send/log mkdir -p /var/qmail/supervise/qmail-smtpd/log mkdir -p /var/qmail/supervise/qmail-pop3d/log mkdir -p /var/qmail/supervise/qmail-pop3ds/log cd ~ cp toaster-scripts-0.7/send.run /var/qmail/supervise/qmail-send/run cp toaster-scripts-0.7/send.log.run /var/qmail/supervise/qmail-send/log/run cp toaster-scripts-0.7/smtpd.run /var/qmail/supervise/qmail-smtpd/run cp toaster-scripts-0.7/smtpd.log.run /var/qmail/supervise/qmail-smtpd/log/run cp toaster-scripts-0.7/pop3d.run /var/qmail/supervise/qmail-pop3d/run cp toaster-scripts-0.7/pop3d.log.run /var/qmail/supervise/qmail-pop3d/log/run cp toaster-scripts-0.7/pop3ds.run /var/qmail/supervise/qmail-pop3ds/run cp toaster-scripts-0.7/pop3ds.log.run /var/qmail/supervise/qmail-pop3ds/log/run echo 20 > /var/qmail/control/concurrencyincoming chmod 644 /var/qmail/control/concurrencyincoming chmod 755 /var/qmail/supervise/qmail-send/run chmod 755 /var/qmail/supervise/qmail-send/log/run chmod 755 /var/qmail/supervise/qmail-smtpd/run chmod 755 /var/qmail/supervise/qmail-smtpd/log/run chmod 755 /var/qmail/supervise/qmail-pop3d/run chmod 755 /var/qmail/supervise/qmail-pop3d/log/run chmod 755 /var/qmail/supervise/qmail-pop3ds/run chmod 755 /var/qmail/supervise/qmail-pop3ds/log/run mkdir -p /var/log/qmail/smtpd mkdir -p /var/log/qmail/pop3d mkdir -p /var/log/qmail/pop3ds chown -R qmaill /var/log/qmail #####设置启动脚本: cd ~ cp toaster-scripts-0.7/rc /var/qmail/rc chmod 755 /var/qmail/rc cp toaster-scripts-0.7/qmailctl /var/qmail/bin/ chmod 755 /var/qmail/bin/qmailctl ln -s /var/qmail/bin/qmailctl /usr/bin ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
  14. 14. rm -rf /usr/lib/sendmail ln -s /var/qmail/bin/sendmail /usr/lib/sendmail # 用 daemontools 来启动 qmail-send 和 qmail-smtpd ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service #命令: # 启动,停止,重启,查看队列等 #qmailctl start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help # 检查服务 netstat -an | grep 25 ps -ef | grep qmail ps -efl | grep "service errors" | grep -v grep ps -ef | grep qmail|grep -v grep |wc -l [root@ora1 rhy]# ps -ef | grep qmail|grep -v grep |wc -l 9 [root@rhel qmail]# ps -efl | grep "service errors" | grep -v grep 4 S root 3729 3289 0 78 0- 619 pipe_w 16:03 ? 00:00:00 readproctitle service errors: ............................................................................................................................. ............................................................................................................................. ............................................................................................................................. ......................... ##########下面的路径是 qmail 的日志: #/var/log/maillog #/var/log/qmail/current #/var/log/qmail/pop3d/current #/var/log/qmail/pop3ds/current #/var/log/qmail/smtpd/current #####安装 vpopmail 。vpopmail 是一个以 qmail 为基础的虚拟域管理包;其允许在一个 IP 地址添加多个虚拟域;并且可以不需要使用系统帐号做邮件帐号。http://vpopmail.sf.net ##### 设置默认域,设置 smtp 规则,关闭 open relays echo "gusitasi.com" > /home/vpopmail/etc/defaultdomain echo '127.0.0.1:allow,RELAYCLIENT=""' > /home/vpopmail/etc/tcp.smtp cd /home/vpopmail/etc tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp
  15. 15. #######设置 MySQL 信 息 ,localhost 是数据库服务的地址,第一个 vpopmail 是 帐 号,ryan098 为密码,第二个 vpopmail 是数据库的名字。 echo "localhost|0|vpopmail|ryan098|vpopmail" > /home/vpopmail/etc/vpopmail.mysql chmod 640 /home/vpopmail/etc/vpopmail.mysql chown -R vpopmail.vchkpw /home/vpopmail/etc ########开始安装: cd ~ tar zxvf vpopmail-5.4.13.tar.gz cd vpopmail-5.4.13 #######带数据库支持,需要注意--enable-incdir 和 --enable-libdir 的路径是否正确。 ./configure --enable-incdir=/usr/local/mysql/include/mysql --enable- libdir=/usr/local/mysql/lib/mysql --disable-roaming-users --enable-logging=p --disable-passwd -- enable-clear-passwd --disable-domain-quotas --enable-auth-module=mysql --enable-auth-logging --enable-sql-logging --disable-valias --disable-mysql-limits --enable-learn-passwords make make install-strip #######编译时出现如下 gcc 警告可以忽略: ###vchkpw.c:439: 警告:传递参数 2 (属于 ‘authcram’) 给指针时目标与指针有/无符号不一 致 ###vchkpw.c:439: 警告:传递参数 3 (属于 ‘authcram’) 给指针时目标与指针有/无符号不一 致 ###vchkpw.c:445: 警告:传递参数 1 (属于 ‘authapop’) 给指针时目标与指针有/无符号不一 致 ###vchkpw.c:445: 警告:传递参数 2 (属于 ‘authapop’) 给指针时目标与指针有/无符号不一 致 #####将 vpopmail 管理命令加入 path: echo 'export PATH=$PATH:/home/vpopmail/bin' >> /etc/profile source /etc/profile ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so.15 /lib/libmysqlclient.so.15 # 添加域的命令,前面是域名,后面的“jiadaliwansui”是管理员(用户名:postmaster)的密码 #vadddomain gusitasi.com jiadaliwansui ######可能出现类似“MySQL server has gone away”的错误 ,一般原因是没有正确的使用 mysql 对应的 vpopmail 的密码,解决方法就是修改/home/vpopmail/etc/vpopmail.mysql 这个文 件中对应的 vpopmail 的密码还有就是把以前 mysql 的 rpm 包文件卸载掉。 ###### rpm -e --nodeps mysql ###### rpm -e --nodeps mysqlclient10-3.23.58-4.RHEL4.1 ###### rpm -qa|grep mysql ######并且执行 ######ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so.14 /usr/lib/libmysqlclient.so.14 #####在 vpopmail 里添加用户,格式为:
  16. 16. #####vadduser -q 10485760S(邮箱大小) ryan098@domain.com(邮箱帐号) 1234(密码) #####vmoduser -c ryan(邮箱描述) ryan098@domain.com ####################################### #####大大的注意:部署正确 以上不会有任何错误。 ###################################### ###### 设置邮箱容量达到 90%的警告信息 cat >>/home/vpopmail/domains/.quotawarn.msg<<EOF From: 邮箱管理员 Reply-To: postmaster@gusitasi.com To: 邮箱用户 Subject: 邮箱空间警告 Mime-Version: 1.0 Content-Type: text/html; charset=gb2312 Content-Transfer-Encoding: base64 您的邮箱空间已经达到 90%.如果想继续使用,请删除一些信件. 如果需要帮助,请联系邮箱管理员: Email : postmaster@gusitasi.com EOF ######设置邮箱已满的警告信息 echo "邮件被拒绝,用户的邮箱空间已满." > /home/vpopmail/domains/.over-quota.msg cat /home/vpopmail/domains/.over-quota.msg #启动脚本: cp ~/toaster-scripts-0.7/vpopmailctl /var/qmail/bin ln -s /var/qmail/bin/vpopmailctl /usr/bin chmod 700 /var/qmail/bin/vpopmailctl #现在打上 qmail 的补丁: cd ~/netqmail-1.05/netqmail-1.05 bunzip2 -c ~/qmail-toaster-0.7.2.patch.bz2 | patch -p0 make clean make qmailctl stop make setup check chown -R vpopmail:vchkpw /var/qmail/spam #创建 SSL Key make cert
  17. 17. #按提示输入公司信息 #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! [root@mail netqmail-1.05]# make cert Country Name (2 letter code) [AU]:EF State or Province Name (full name) [Some-State]:Duiwu Locality Name (eg, city) []:Gusitasijituan Organization Name (eg, company) [Internet Widgits Pty Ltd]:gusitasihaidao Organizational Unit Name (eg, section) []:gstsjygcs Common Name (eg, YOUR name) []:gusitasi.com Email Address []:mingyun@gusitasi.com #注:这里可能要多等一会,创建证书 make tmprsadh chown -R vpopmail:qmail /var/qmail/control/clientcert.pem /var/qmail/control/servercert.pem #启动 qmail qmailctl start # 用 daemontools 来启动 qmail-pop3d 和 qmail-pop3ds ln -s /var/qmail/supervise/qmail-pop3d /service ln -s /var/qmail/supervise/qmail-pop3ds /service #Vpopmail 的命令: # 启动,停止,重启,查看队列等 #vpopmailctl start|stop|restart|stat|pause|cont|help vpopmailctl start # 检查服务 netstat -an | grep 110 ps -ef | grep qmail |wc -l #[root@rhel netqmail-1.05]# ps -ef | grep qmail |wc -l #16 ps -efl | grep "service errors" | grep -v grep #[root@rhel netqmail-1.05]# ps -efl | grep "service errors" | grep -v grep #4 S root 3729 3289 0 78 0 - 619 pipe_w 16:03 ? 00:00:00 readproctitle service errors:
  18. 18. #####安装 iGenus(可选) 用户看的的 web mail 界面.iGENUS 不是一套独立的邮件系统,只 是一个 Webmail 接口,需要配合 qmail+vpopmail+Mysql 使用。iGENUS 是由 PHP 写成, 采用直接对 qmail 的 Maildir 进行读写操作,因而比 IMAP/POP 方式更快一点。 参考: http://www.igenus.org #####安装: cd ~ mkdir -p /www/html tar zxvf igenus_2.0.2_20040901_release.tgz -C /www/ cd /www rm -rf html/ mv igenus html #####建 temp 文件夹 mkdir /tmp/temp chmod -R 755 /tmp/temp chown -R vpopmail:vchkpw /tmp/temp mkdir /home/netdisk chmod -R 0755 /home/netdisk chown -R vpopmail:vchkpw /home/netdisk chmod -R 0755 /www/html/ chown -R vpopmail:vchkpw /www/html/ #修改 config_inc.php 文件 vi /www/html/config/config_inc.php $CFG_BASEPATH = "/www/html/"; $CFG_MYSQL_HOST = 'localhost'; $CFG_MYSQL_USER = 'vpopmail'; $CFG_MYSQL_PASS = 'ryan098'; $CFG_MYSQL_DB = 'vpopmail'; $CFG_TEMP = "/tmp/temp"; ########用 vadddomain 和 vadduser 添加新域名和新用户。 vadddomain gusitasi.com jiadaliwansui vadduser c1@gusitasi.com c1 vadduser c2@gusitasi.com c2 vadduser xiaojiahuo@gusitasi.com xiaojiahuo
  19. 19. vmoduser -c 毒蝎 c1@gusitasi.com vmoduser -c 乌鸦 c2@gusitasi.com vmoduser -c 小家伙 xiaojiahuo@gusitasi.com 最后打开浏览器,输入 http://domain.com/,就可以访问网站了 #######安装 Ezmlm 。ezmlm 是 qmail 的作者 Dan Bernstein 为 qmail 编写的邮件列表管理 器. 它依赖于 qmail 服务器的几个特点工作, 最显著的, 就是它使用 VERPs 来可靠的处理反 弹邮件. ezmlm 在众多邮件列表管理器(MLM)中显得有点独特 , 它不是处理传送到中央 MLM 地 址 的 命 令 , 而 是 将 命 令 附 加 在 列 表 名 字 后 面 . 例 如 , 发 送 邮 件 到 "foo- subscribe@list.example.net" 来订阅 "foo@list.example.net" 的邮件列表, . 关于 ezmlm 的更多 信息, 参见 http://www.ezmlm.org/, 这是 ezmlm 的非正式 web 站点. ezmlm-idx 的正式站点, 介绍了这个非常棒的 add-on 插件 ezmlm-idx, 它包括了很多有用的特色、 exmlm 是一个快速 , 强大的邮件列表程序,可以通过 qmailadmin 对其进行配置 #安装: cd ~ tar -xvzf ezmlm-0.53.tar.gz tar -xvzf ezmlm-idx-0.42.tar.gz /bin/cp -rf ezmlm-idx-0.42/* ezmlm-0.53/ cd ezmlm-0.53 patch < idx.patch chmod u+x makelang make make man #汉字 GB2312 支持 make ch_GB make setup ###安装 qmailadmin TOP #######qmailadmin 除了不能添加删除虚拟域外,几乎可以完成所有的虚拟域管理 #安装: cd ~ tar -xvzf qmailadmin-1.2.13.tar.gz cd qmailadmin-1.2.13 chmod -R 755 /www/cgi-bin mkdir -p /var/qmail/bin/ezmlm chmod -R 777 /var/qmail/bin/ezmlm ./configure --enable-htmldir=/www --enable-cgibindir=/www/cgi-bin --enable-autoresponder- bin=/usr/bin --enable-vpopuser=vpopmail --disable-ezmlm-mysql --enable-maxusersperpage=20 --enable-maxaliasesperpage=20 --enable-modify-quota --enable-domain-autofill -enable- autoresponder-path
  20. 20. #./configure --enable-imagedi……这里可能要指定 ezmlm dir = /var/qmail/bin/ezmlm 根 据 上 面 的 configure 提 示 。 --enable-htmldir=//usr/local/apache/htdocs 和 --enable- cgibindir=/usr/local/apache/cgi-bin make make install-strip cd /usr/local/share/qmailadmin/lang mv en en.bak cp zh-cn en ###接下来要将图标文件上传到/www/html/目录下,并解压为 image 文件夹:这样才有图片 可以显示; #访问时,用 http://mx1.gusitasi.com/cgi-bin/qmailadmin #通过 qmailadmin 可以添加、删除、修改用户、自定义邮件列表。“新建邮件列表”,建完后 可以“添加订户”指定该列表内的收件人。 #上面刚设置了 smtpd pop3d ,igenus(webmail),虚拟域和虚拟用户(vpopmail),qmailadmin(邮件 帐号的管理),smtpd 的加密认证 另外需要增加的功能有 imap 收信, 邮件列表。 发邮件的 ssl 加密,垃圾邮件黑名单,对某个用户的邮件过滤,邮件杀毒。自动投递。 #删除 A 用户给 gusitasi.com 中的所有成员发送的邮件方法: ####一封邮件的格式 1213338634.10526.fbi5_mail,S=6548 其中 S=xxx 是唯一的,可以理解 成邮件的 ID,下文假设邮件的 ID 为 52265。 ###cd /home/vpopmail/domains/gusitasi.com ###find . -name "*S=52265*" ####有些在/home/vpopmail/domains/fbi5.cn/liuxingguang/Maildir/cur 已收到的邮件中(用户 已接收) ####有些在/home/vpopmail/domains/fbi5.cn/liuxingguang/Maildir/new 未收到的邮件中(用户 尚未接收) ####可以看到这些文件几乎是同一时刻的。 ####然后 find . -name "*S=52265*" |xargs rm -rf # qmail 限制附件大小 #在/var/qmail/control/databytes 文件中设置附件的大小,可以实现对 qmail 附件大小的限制, 一般安装完成后,这个文件是没有的,你可以自己创建。 #smtp 方式是以 qmail 的 databytes 作限制的 #创建 databytes 并设置邮件最大为 4m echo 4000000 >/var/qmail/control/databytes #用 qmail 禁止指定地址发到到本邮件域(黑名单) vi /var/qmail/control/badmailfrom ###这个控制文件实现拒收邮件功能的,每一个地址要单独一行。而且,不用重起 qmail 就 能生效。例如: #tskj@tianshejituan.com-----限制一个特定的用户
  21. 21. #@xuexizhe.com -----限制整个域中的邮件 ############## #qmail 邮件队列目录/var/qmail/queue # QMAIL 队列目录及其作用: # 邮件进入队列的处理过程被分割为不同的部分 # bounce 存储投递永久失败的邮件 # info 存储邮件的发送者的地址 # intd 存储邮 queue 重建的邮件头 # local 存储将要投递到本地的邮件接受者的地址 # lock 存储供 qmail-send 读取邮件状态的标识文件 # mess 存储要投递的邮件 # pid 存储输入邮件队列前的邮件 # remote 存储将要投递到远端主机的目标地址 # todo 存储完整的邮件头包括发送者与接受者的地址 # 过程: # (邮件接受) qmail-smtpd /qmail-inject ->qmail-queue ,将邮件存储转变成 文件于 pid 中,---->以 PID 内的文件节点为名 CP pid 文件到 mess(邮件存储)---》 提 取 邮 ( 件头 ) qmail-queue 扫描 mess 并撮邮件头将其拷贝到 intd(发送者与接受者的地址)---》 邮 ( 件队列生成与处理)link intd todo queue 工作结束,以下由 qmail-send 负责: qmail-send 不断扫 描 todo 的新文件,若有则认为是新邮件,qmail-send 将发送者的地址-info,将目标地址 - >local/remote------>邮件投递:qmail-send 读取 info ,remote 文件,将相应的 mess 即邮件内 容,激活投递程序 qmail-remote/local ####邮件队列的处理。qmail 的快速高效让人称道,但他对邮件往往是不管有没有该用户先 把邮件接收过来。而且现在不少人利用它作垃圾邮件转发,造成队列拥堵。现在针对这个问 题, 国 外 有 人 开 发 了 邮 件 队 列 的 清 除 软 件 。 该 软 件 可 到 www.linuxts.net (国 内 ) , http://www.linuxmagic.com/opensource/qmail/qmail-remove/(国外)下载。 下面简述一下该 软件的用法: #简要的安装过程: cd ~ tar zxvf qmail-remove-0.95.tar.tar cd qmail-remove-0.95 make make install #就把该软件安装到/usr/local/sbin 下了。 # 配置 mkdir /var/qmail/queue/yanked # 使用 # 1 查看队列 qmail-remove -q /var/qmail/queue
  22. 22. # 2 删除队列 qmail-remove -r #这步会把所有队列内容移动到/var/qmail/queue/yanked 目录下。接下来可以决定如何处理该 目录的内容了,垃圾邮件 一般就删掉。 #为了每天让服务器自动清理一下垃圾邮件,建立 qmail-remove.sh 文件 cat>>/root/qmail-remove.sh<< EOF qmailctl stop vpopmailctl stop mkdir -p /var/qmail/queue/yanked sleep 10 qmail-remove -r qmailctl start vpopmailctl start rm /var/qmail/queue/yanked -rf mkdir -p /var/qmail/queue/yanked EOF chmod 755 /root/qmail-remove.sh #用”crontab -e”在 crontab 里增加下面这条,定时清除 cache #crontab -e 增加 #0 4 * * * /root/qmail-remove.sh > /dev/null 2>&1 #del spam mail ## qmail 内存溢出问题解决: #!!!!!!!!!!!! vi /var/qmail/supervise/qmail-smtpd/run ###把其中的 8000000 改为下面。 exec /usr/local/bin/softlimit -m 40000000

×