tomclegg.net |
Installing qmail on linux Posted August 23, 2003 See also:
Add users and groups. PATH=/bin:/sbin:/usr/bin:/usr/sbin groupadd nofiles -g 81 groupadd qmail -g 82 useradd alias -u 81 -g nofiles -s /nonexistent -d /var/qmail/alias -M useradd qmaild -u 82 -g nofiles -s /nonexistent -d /var/qmail -M useradd qmaill -u 83 -g nofiles -s /nonexistent -d /var/qmail -M useradd qmailp -u 84 -g nofiles -s /nonexistent -d /var/qmail -M useradd qmailq -u 85 -g qmail -s /nonexistent -d /var/qmail -M useradd qmailr -u 86 -g qmail -s /nonexistent -d /var/qmail -M useradd qmails -u 87 -g qmail -s /nonexistent -d /var/qmail -M Download qmail source code. cd /usr/local/src wget http://cr.yp.to/software/qmail-1.03.tar.gz Download patches. wget http://tomclegg.net/software/patch-qmail-103.patch wget http://tomclegg.net/software/patch-qmail-sendmail-flagf.patch wget http://tomclegg.net/software/patch-qmail-badmailfrom-wildcard wget http://tomclegg.net/software/patch-qmail-capa-pop3d wget http://tomclegg.net/software/patch-qmail-capa-popup wget http://tomclegg.net/software/patch-qmail-remote-auth wget http://tomclegg.net/software/patch-qmail-smtpd-auth wget http://tomclegg.net/software/patch-qmail-smtpd-auth-log Extract qmail and apply patches. tar xzf qmail-1.03.tar.gz cd qmail-1.03 for d in ../patch-qmail-*; do patch <"$d"; done Compile and install qmail. make setup check Some linux systems don't like the way qmail uses "errno":./load auto-str substdio.a error.a str.a substdio.a(substdo.o)(.text+0x43): In function `allwrite': : undefined reference to `errno' collect2: ld returned 1 exit status make: *** [auto-str] Error 1 Configure qmail. cd /var/qmail/control hostname >me cp me locals echo YOUR.IP.ADDR.HERE >>locals cp locals rcpthosts cd /var/qmail/alias echo YOUR@EMAIL.ADDRESS >.qmail-root cp .qmail-{root,mailer-daemon} cp .qmail-{root,postmaster} cp .qmail-{root,hostmaster} cp .qmail-{root,abuse} Download and install checkpassword. cd /usr/local/src wget http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz tar xzf checkpassword-0.90.tar.gz cd checkpassword-0.90 make make setup check(or use the author's installation guide) Download and install cmd5checkpw. cd /usr/local/src wget http://members.elysium.pl/brush/cmd5checkpw/dist/cmd5checkpw-0.22.tar.gz tar xzf cmd5checkpw-0.22.tar.gz cd cmd5checkpw-0.22 make vi Makefile ## (change /usr/man/man8 to /usr/share/man/man8) make install Download and install daemontools. wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz tar xzf daemontools-0.76.tar.gz cd admin/daemontools-0.76 package/install svscan should be running now. pstree should show something like this. |-svscanboot-+-readproctitle | `-svscan Add to if ! echo $PATH | /bin/grep -q "/command" ; then PATH="/command:$PATH" fi Create mkdir -p /var/service/qmail-send cd /var/service/qmail-send mkdir log log/main chown qmaill log/main chmod g+s log/main chmod +t . cat <<'EOF' >run #!/bin/sh exec env - PATH="/var/qmail/bin:$PATH" qmail-start ./Maildir/ 2>&1 EOF cat <<'EOF' >log/run #!/bin/sh exec env - PATH="/command" setuidgid qmaill multilog t s999999 ./main EOF chmod +x run log/run Turn on the supervised qmail service. ln -s /var/service/qmail-send /service/ Wait a few seconds. qmail-send should be running now. pstree should show something like this. |-svscanboot-+-readproctitle | `-svscan-+-supervise---qmail-send-+-qmail-clean | | |-qmail-lspawn | | `-qmail-rspawn | `-supervise---multilog Download and install ucspi-tcp. cd /usr/local/src wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz tar xzf ucspi-tcp-0.88.tar.gz cd ucspi-tcp-0.88 make setup check Set up a qmail-smtpd service on port 2525 for testing. Allow relaying to any domain from 127.0.0.1 and 192.168.202.0/24. cd /var/service mkdir qmail-smtpd cd qmail-smtpd mkdir log log/main chown qmaill log/main chmod g+s log/main chmod +t . cat <<'EOF' >run #!/bin/sh exec env - PATH="/var/qmail/bin:$PATH" \ envuidgid qmaild \ tcpserver -U -vR -l 0 -x rules.cdb 0 2525 \ rblsmtpd -a antirbl.tomclegg.net \ -r relays.ordb.org \ -r bl.spamcop.net \ qmail-smtpd `cat /var/qmail/control/me` cmd5checkpw true \ 2>&1 EOF cat <<'EOF' >rules 192.168.202.:allow,RELAYCLIENT="",RBLSMTPD="" 127.0.0.1:allow,RELAYCLIENT="",RBLSMTPD="" :allow EOF tcprules rules.cdb rules.tmp <rules cat <<'EOF' >log/run #!/bin/sh exec env - PATH=/command setuidgid qmaill multilog t ./main EOF chmod +x run log/run Start the qmail-smtpd service. ln -s /var/service/qmail-smtpd /service/ Set up a qmail-pop3d service on port 25110 for testing. cd /var/service mkdir qmail-pop3d cd qmail-pop3d mkdir log log/main chown qmaill log/main chmod g+s log/main chmod +t . cat <<'EOF' >run #!/bin/sh exec env - PATH="/var/qmail/bin:$PATH" \ tcpserver -vR -l 0 \ 0 25110 \ qmail-popup "`cat /var/qmail/control/me`" \ checkpassword qmail-pop3d Maildir \ 2>&1 EOF cat <<'EOF' >log/run #!/bin/sh exec env - PATH=/command setuidgid qmaill multilog t ./main EOF chmod +x run log/run Start the qmail-pop3d service. ln -s /var/service/qmail-pop3d /service/ Create a Maildir for each user. cd /home && \ for user in * do su -l "$user" -c "/var/qmail/bin/maildirmake Maildir" ls -ld "$user"/Maildir done Create a Maildir in /var/qmail/bin/maildirmake /etc/skel/Maildir Switching mail service from sendmail to qmailTranslate Translate /etc/mail/virtusertable to /var/qmail/alias/.qmail-* and /var/qmail/control/virtualdomains (details omitted). Test local delivery using "telnet localhost 2525" Test remote delivery using "telnet localhost 2525" Test relay control using "telnet YOUR.IP.ADDR.HERE 2525" from somewhere else. You should be able to connect, but mail to test@example.com should be refused. Test pop using "telnet localhost 25110" Replace cd /usr/sbin mv -i sendmail sendmail~ ln -s /var/qmail/bin/sendmail Turn off pop3 service in perl -pi~ -e 's,^},\tdisable = yes\n},' /etc/xinetd.d/ipop3 killall -USR1 xinetd Make sure sendmail won't start at boot time any more. # /sbin/chkconfig sendmail off # /sbin/chkconfig --level 2 sendmail off # /sbin/chkconfig --list sendmail sendmail 0:off 1:off 2:off 3:off 4:off 5:off 6:off Stop sendmail. killall sendmail Change port 2525 to port 25 in svc -t /service/qmail-smtpd /service/qmail-pop3d Convert If you use pine, change the inbox-path={localhost/pop3}INBOX |