FreeBSD下Qmail安装

[PHP]ucspi-tcp
cd /usr/ports/sysutils/ucspi-tcp
make install clean

daemontools
cd /usr/ports/sysutils/daemontools
make install clean
mkdir /var/service
chmod 755 /var/service
ee /etc/rc.conf
svscan_enable="YES"[/PHP]
reboot
验证daemontools已经正常运行:
[PHP]ps ax | grep svscan[/PHP]
[PHP]cd /usr/ports/mail/qmail
make BARRIER_BIG_TODO_PATCH=yes WITH_QMAILQUEUE_PATCH=yes BARRIER_BIG_CONCURRENCY_PATCH=yes WITH_LOCALTIME_PATCH=yes WITH_QMTPC_PATCH=yes WITH_MAILDIRQUOTA_PATCH=yes WITH_BLOCKEXEC_PATCH=yes WITH_DISCBOUNCES_PATCH=yes WITH_SPF_PATCH=yes install clean
/var/qmail/scripts/enable-qmail
cd /var/qmail/configure
./config-fast domail.com[/PHP]
打auth smtp补丁
[PHP]tar zxvf qmail-1.03.tar.gz
tar zxvf qmail-smtpd-auth-0.31.tar.gz
cp qmail-smtpd-auth-0.31/base64.* qmail-1.03
patch -d qmail-1.03 < qmail-smtpd-auth-0.31/auth.patch
cd qmail-1.03
fetch http://gadfly.shanji.com/qmail-smtpd/qmail-smtpd.c
fetch http://gadfly.shanji.com/qmail-smtpd/qmail-smtpd.patch
patch -p1 < ../qmail-103.patch
patch -p1 < ../qmailqueue-patch
patch -p1 < ../qmail-maildir++.patch
patch -p1 < ../patch-qmail-1.03-rfc2821.diff
patch -p1 < ../qmail-block-executables.patch
patch -p1 < ../qmail-discard-double-bounces.patch
patch -p1 < ../sendmail-flagf.patch
patch -p1 < ../qmail-1.03-qmtpc.patch
patch -p1 < ../qmail-date-localtime.patch
patch < qmail-smtpd.patch
ee qmail-smtpd.c[/PHP]
[PHP]将函数straynewline中的451改为553(// 当你的服务器收到无效格式的邮件时,会发送:"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.",告诉对方的服务器不要再发这封无效的信件。)
void die_alarm() { out("451 超时. (#4.4.2)\r\n"); flush(); _exit(1); }
void die_nomem() { out("421 内存溢出. (#4.3.0)\r\n"); flush(); _exit(1); }
void die_control() { out("421 无法读取控制文件. (#4.3.0)\r\n"); flush(); _exit(1); }
void die_ipme() { out("421 无法判断发信IP地址. (#4.3.0)\r\n"); flush(); _exit(1); }
void straynewline() { out("451 如有疑问请发邮件到: xiwu518@163.com\r\n"); flush(); _exit(1); }

void err_bmf() { out("553 对不起您的邮件地址在我的黑名单里. (#5.7.1)\r\n"); }
void err_nogateway() { out("553 对不起,您所发送的邮件不在服务器允许的范围内. (#5.7.1)\r\n"); }
void err_unimpl() { out("502 命令执行失败. (#5.5.1)\r\n"); }
void err_syntax() { out("555 语法错误. (#5.5.4)\r\n"); }

out("214 WelCome To: http://www.domail.com\r\n");

out("354 继续.\r\n");

if (databytes) if (!bytestooverflow) { out("552 对不起,邮件大小超出服务器允许接受的范围. (#5.3.4)\r\n"); return; }[/PHP]
[PHP]make qmail-smtpd
cd /var/qmail/bin
mv qmail-smtpd qmail-smtpd.auth
cd -
cp qmail-smtpd /var/qmail/bin/qmail-smtpd

mkdir /var/log/qmail
cd /var/log/qmail
mkdir qmail-send qmail-smtpd qmail-pop3d
chown -R qmaill:wheel /var/log/qmail
chmod -R 750 /var/log/qmail
mkdir /var/qmail/supervise
cd /var/qmail/supervise
mkdir -p qmail-smtpd/log qmail-send/log qmail-pop3d/log
chmod +t qmail-smtpd qmail-send qmail-pop3d
ln -s /var/qmail/supervise/* /var/service/[/PHP]
maildrop
[PHP]tar -xjvf maildrop-1.8.1.tar.bz2
cd maildrop-1.8.1
./configure --prefix=/usr/local --exec-prefix=/usr/local --enable-maildrop-uid=root --enable-maildrop-gid=vchkpw --enable-maildirquota
make
make install-strip
make install-man[/PHP]
qmail启动脚本
[PHP]ee /var/qmail/supervise/qmail-pop3d/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec tcpserver -H -R -v -c100 0 110 qmail-popup domail.com \
/home/vpopmail/bin/vchkpw qmail-pop3d Maildir 2>&1[/PHP]
[PHP]ee /var/qmail/supervise/qmail-pop3d/log/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec setuidgid qmaill multilog t s100000 n20 /var/log/qmail/qmail-pop3d 2>&1[/PHP]
[PHP]ee /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh
QMAILDUID=`id -u vpopmail`
NOFILESGID=`id -g vpopmail`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`
if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
echo /var/qmail/supervise/qmail-smtpd/run
exit 1
fi
if [ ! -f /var/qmail/control/rcpthosts ]; then
echo "No /var/qmail/control/rcpthosts!"
echo "Refusing to start SMTP listener because it'll create an open relay"
exit 1
fi
exec /usr/local/bin/softlimit -m 40000000 \
/usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp \
/usr/local/bin/rblsmtpd \
-r cblplus.anti-spam.org.cn \
-r relays.ordb.org \
/var/qmail/bin/qmail-smtpd \
/home/vpopmail/bin/vchkpw /usr/bin/true 2>&1[/PHP]
[PHP]ee /var/qmail/supervise/qmail-smtpd/log/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec setuidgid qmaill multilog t s100000 n20 /var/log/qmail/qmail-smtpd 2>&1[/PHP]
[PHP]ee /var/qmail/supervise/qmail-send/run
#!/bin/sh
exec /var/qmail/rc[/PHP]
[PHP]ee /var/qmail/supervise/qmail-send/log/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec setuidgid qmaill multilog t s100000 n20 /var/log/qmail/qmail-send 2>&1[/PHP]
[PHP]ee /var/qmail/rc
#!/bin/sh

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start "`cat /var/qmail/control/defaultdelivery`"[/PHP]
[PHP]ee /usr/bin/qmailctl
#!/bin/sh

# description: the qmail MTA

PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH

QMAILDUID=`/usr/bin/id -u qmaild`
NOFILESGID=`/usr/bin/id -g qmaild`

case "$1" in
start)
echo "Starting qmail..."
echo ""
if svok /var/service/qmail-send ; then
svc -u /var/service/qmail-send /var/service/qmail-send/log
echo "Starting qmail-send"
else
echo "qmail-send supervise not running"
fi
if svok /var/service/qmail-smtpd ; then
svc -u /var/service/qmail-smtpd /var/service/qmail-smtpd/log
echo "Starting qmail-smtpd"
else
echo "qmail-smtpd supervise not running"
fi
if svok /var/service/qmail-pop3d ; then
svc -u /var/service/qmail-pop3d /var/service/qmail-pop3d/log
echo "Starting qmail-pop3d"
else
echo "qmail-pop3d supervise not running"
fi
if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
fi
;;
stop)
echo "Stopping qmail..."
echo ""
echo " qmail-smtpd"
svc -d /var/service/qmail-smtpd /var/service/qmail-smtpd/log
echo " qmail-send"
svc -d /var/service/qmail-send /var/service/qmail-send/log
echo " qmail-pop3d"
svc -d /var/service/qmail-pop3d /var/service/qmail-pop3d/log
if [ -f /var/lock/subsys/qmail ]; then
rm /var/lock/subsys/qmail
fi
;;
stat)
svstat /var/service/qmail-send
svstat /var/service/qmail-send/log
svstat /var/service/qmail-smtpd
svstat /var/service/qmail-smtpd/log
svstat /var/service/qmail-pop3d
svstat /var/service/qmail-pop3d/log
qmail-qstat
;;
doqueue|alrm|flush)
echo "Flushing timeout table and sending ALRM signal to qmail-send."
/var/qmail/bin/qmail-tcpok
svc -a /var/service/qmail-send
;;
queue)
qmail-qstat
qmail-qread
;;
reload|hup)
echo "Sending HUP signal to qmail-send."
svc -h /var/service/qmail-send
;;
pause)
echo "Pausing qmail-send"
svc -p /var/service/qmail-send
echo "Pausing qmail-smtpd"
svc -p /var/service/qmail-smtpd
echo "Pausing qmail-pop3d"
svc -p /var/service/qmail-pop3d
;;
cont)
echo "Continuing qmail-send"
svc -c /var/service/qmail-send
echo "Continuing qmail-smtpd"
svc -c /var/service/qmail-smtpd
echo "Continuing qmail-pop3d"
svc -c /var/service/qmail-pop3d
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /var/service/qmail-smtpd /var/service/qmail-smtpd/log
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /var/service/qmail-send /var/service/qmail-send/log
echo "* Sending qmail-pop3d SIGTERM and restarting."
svc -t /var/service/qmail-pop3d /var/service/qmail-pop3d/log
echo "* Restarting qmail-smtpd."
svc -u /var/service/qmail-smtpd /var/service/qmail-smtpd/log
;;
cdb)
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
chmod 644 /etc/tcp.smtp.cdb
echo "Reloaded /etc/tcp.smtp."
;;
help)
cat <

分享到