第一部分:安装程序,用于控制qmail向外发送邮件的速度
1.安装libevent
下载:wget ~provos/libevent-1.4.0-beta.tar.gz
libevent 是一个事件触发的网络库,适用于windows、linux、bsd等多种平
台,内部使用select、epoll、kqueue等系统调用管理事件机制.本次开发使
用libevent来进行域名发送时间的控制。
./configure
make
make install
2.安装memcached
下载:wget
Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少
数据库负载,提升访问速度。本次开发实用memcached保存收件域的配置信息
和当前状态信息。
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local
make
make install
ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2
3.安装libmemcached 0.18
下载:wget
libmemcached是基于C的memcached客户端.支持同步和异步方式.支持tcp和
Unix Socket协议方式;高效的hash算法;实现cas,更新,追加 等特性.同时,还
提供一些便捷的工具用以对memcached的维护和管理. (由于目前
libmemcached升级速度很快,当前应用是在0.18版下开发的。为保证现有应用
不受升级影响,建议使用0.18版)
./configure
make
make install
第二部分:安装qmail
1.添加Qmail所必须的用户和组
mkdir /var/qmail
groupadd nofiles
useradd -g nofiles -d /var/qmail/alias alias
useradd -g nofiles -d /var/qmail qmaild
useradd -g nofiles -d /var/qmail qmaill
useradd -g nofiles -d /var/qmail qmailp
groupadd qmail
useradd -g qmail -d /var/qmail qmailq
useradd -g qmail -d /var/qmail qmailr
useradd -g qmail -d /var/qmail qmails
2.停止sendmail服务
/etc/rc.d/init.d/sendmail stop
将现存的 /usr/lib/sendmail 替代为 qmail 版本.
mv /usr/lib/sendmail /usr/lib/sendmail.old # 忽略错误提示
mv /usr/sbin/sendmail /usr/sbin/sendmail.old # 忽略错误提示
chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old # 忽略错误提示
ln -s /var/qmail/bin/sendmail /usr/lib
ln -s /var/qmail/bin/sendmail /usr/sbin
注意: 创建 sendmail 的链接是很重要的, 即使不管以前的MTA, sendmail 命令也是一个会被很多程序调用来发送邮件的重要命令
3.安装Qmail包
tar -xzvf qmail-1.03.tar.gz
cd qmail-1.03
patch -p1 < ../qmail-1.03.errno.patch
patch -p1 < ../qmail-1.03-bind-interface.patch
注:qmail-1.03.errno.patch,qmail-1.03-bind-interface.patch放在qmail-1.03的上一级目录上
make setup check
./config-fast mail.com
touch ~alias/.qmail-postmaster ~alias/.qmail-mailer-daemon ~alias/.qmail-root
chmod 644 ~alias/.qmail*
cp /var/qmail/boot/home /var/qmail/rc
sed 's/Mailbox/Maildir\//g' /var/qmail/boot/home >/var/qmail/rc
4.安装tcpserver等服务程序
tar -xzvf ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88
patch -p1 < ../ucspi-tcp-0.88.errno.patch
make
make setup check
5.安装smtp支持
vi /etc/tcp.smtp
127.0.0.1:allow,RELAYCLIENT=""
172.18.1.:allow,RELAYCLIENT=""
192.168.7.:allow,RELAYCLIENT=""
172.18.2.:allow,RELAYCLIENT=""
/usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
6.qmail的设置参数
cd /var/qmail/control/
vi defaultdomain
51mymail.com
vi concurrencyremote
120
用来决定qmail可以同时运行的远程投递进程的数目,默认值是20,标准安装的qmail最大可设值是120。
vi smtproutes
#21cn.net:172.18.1.37
#21cn.com:172.18.1.37
#sohu.com:172.18.1.37
#tom.com:172.18.1.37
#163.com:172.18.1.37
#126.com:172.18.1.37
#yeah.net:172.18.1.37
#netease.com:172.18.1.37
#sina.com:172.18.1.37
#sina.com.cn:172.18.1.37
#sina.com:202.106.182.239
#sina.com.cn:202.106.182.239
#lenovo.com:211.100.14.37
#right.com:172.18.1.39
vi queuelifetime
400
用来指定一个邮件在队列中的最大存活时间,默认是604800秒
vi virtualdomains
mail.com:mail
7.添加别名用户
cd /var/qmail/alias/
../bin/maildirmake Maildir
ls -al
cp .qmail-mailer-daemon .qmail-mail-bounce
vi .qmail-mail-bounce
./Maildir/
cp .qmail-mail-bounce .qmail-mail-message
chown -R alias.qmail ./
ls -al
8、配置开机时qmail自动启动
vi /etc/rc.d/init.d/qmail
##########################################################
#!/bin/sh
######## define the ok function
echook ()
{
echo -ne "\033[40C ["
echo -ne "\033[32m"
echo -ne "\033[1C ok"
echo -ne "\033[39m"
echo -ne "\033[1C ]\n"
}
####### get qmail sid and uid
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
###### touch tcpserver log file
if [ -z /var/qmail/tcpserver.log ]
then
touch /var/qmail/tcpserver.log
else :
fi
####### mail
case "$1" in
start)
echo -en "Note: You can find the tcpserver log in /var/qmail/tcpserver.log.\n"
date >/var/qmail/tcpserver.log
echo -n "Start qmail service: "
/var/qmail/rc &
echook
echo -n "Start smtp service: "
#echo -n "you can find the tcpserver log in /var/qmail/tcpserver.log."
/usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb \
-u $QMAILDUID -g $NOFILESGID 0 smtp /var/qmail/bin/qmail-smtpd >>/var/qmail/tcpserver.log 2>&1 &
echook
#echo -en "Note: You can find the tcpserver log in /var/qmail/tcpserver.log.\n"
#echo -n "start pop3 service:"
#/usr/local/bin/tcpserver -R -H 0 pop3 \
#/var/qmail/bin/qmail-popup mail.madeforchina.com \
#/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir &
;;
stop)
echo -n "Stop qmail service: "
echook
killall qmail-remote >/dev/null 2>&1
killall -9 qmail-send >/dev/null 2>&1
killall tcpserver >/dev/null 2>&1
;;
restart|reload)
cd `pwd`
$0 stop
$0 start
;;
*)
echo $"Usage: $0 {start|stop|restart|reload}"
exit 1
;;
esac
exit 0
##########################################################
chmod 755 /etc/rc.d/init.d/qmail
qmail安装完成
第三部分:配置及启动
注:一定要先启动memcached,然后再启动qmail
1.编译带控制发送的程序
把qmail-remote.c,domain_init.c,domain_check.c放到qmail-1.03源码目录中。
使用makeremote.sh编译qmail-remote;
注:关于报错:qmail-remote.c: In function 'main':
qmail-remote.c:434: warning: return type of 'main' is not 'int'
这个错误没关系,不用管
使用gcc编译域控制模块
gcc -o domain_init domain_init.c /usr/local/lib/libmemcached.a
gcc -o domain_check domain_check.c /usr/local/lib/libmemcached.a
替换qmail-remote,及拷贝域控制模块
cp qmail-remote /var/qmail/bin/
cp domain_init /var/qmail/bin/
cp domain_check /var/qmail/bin/
2.启动memcached
/usr/local/memcached/bin/memcached -d -m 10 -p 11211 -u root
3.初始化域信息
配置文件格式 如:conf.txt
@hotmail.com #a2
@yahoo.com #b1
域名前面用@标记,域名结束后,添加一个或一个以上的空格,然后使用#作分隔符.a模
式标记从邮件开始发送时开始计时,直到规定的秒数后开始下一封邮件发送.b模式
从当前邮件发送结束开始计时,直到规定的秒数后开始下一封邮件.
4.执行域信息初始化
/var/qmail/bin/domain_init /var/qmail/control/conf.txt
命令行参数为域信息配置文件,我的放在了control下
5.启动qmail
/etc/rc.d/init.d/qmail start
6.检查当前域控制状态
/var/qmail/bin/domain_check /var/qmail/control/conf.txt
命令行参数为域信息配置文件
第四部分:qmail外发循环变换ip
新建/var/qmail/control/bindroutes文件,内容为
:12.113.140.70
该ip即为qmail外发使用ip,不需重启qmail
循环变换ip脚本
#!/bin/sh
while [ 1 ]
do
for i in "192.168.7.157" "192.168.7.158" "192.168.7.242"
do
echo ":$i">/var/qmail/control/bindroutes
sleep 1
done
done
每1秒变换一次ip。
第四部分:测试
echo "helllo" |/var/qmail/bin/qmail-inject test@rhel5.com
阅读(3495) | 评论(2) | 转发(0) |