Computing
    Reference
     Emoticons
     Hardware
     Internet Security
    Protocols
      DNS
      MAIL
      WWW
      SQL
      SNMP (manage)
      RADIUS
      AppleTalk
    Specific
      FreeBSD
      MacOS
    Legacy
    PalmOS
    BSDI
 
     | 
      | 
     
        
      1. Get the following files and place them in /usr/src/qmail: 
      qmail-1.03.tar.gz ftp://koobera.math.uic.edu  
      ucspi-tcp-0.88.tar.gz http://pobox.com/~djb/ucspi-tcp.html 
       
      2. Install auxiliary programs: 
       
      # cd /usr/src/qmail 
      # gunzip ucspi-tcp-0.80.tar.gz ; tar -xvf ucspi-tcp-0.80.tar.gz 
      # cd ucspi-tcp-0.80 
      # make ; make man ; make setup 
       
      # gunzip checkpassword-0.81.tar.gz ; tar -xvf checkpassword-0.81.tar 
      # cd ../checkpassword-0.81 
      # make ; make setup check 
       
      # gunzip rblsmtpd-0.70.tar.gz ; tar -xvf rblsmtpd-0.70.tar 
      # cd ../rblsmtpd-0.70 
      # make ; make setup check 
       
      3. Create the qmail home directory: 
      # mkdir /var/qmail 
       
      4. Set up the qmail group and the qmail users. 
      # addgroup nofiles 
      # adduser -g nofiles -H/var/qmail/alias -G,,, -s/dev/null -P'*' alias 
      # adduser -g nofiles -H/var/qmail -G,,, -s/dev/null -P'*' qmaild 
      # adduser -g nofiles -H/var/qmail -G,,, -s/dev/null -P'*' qmaill 
      # adduser -g nofiles -H/var/qmail -G,,, -s/dev/null -P'*' qmailp 
      # addgroup qmail 
      # adduser -g qmail -H/var/qmail -G,,, -s/dev/null -P'*' qmailq 
      # adduser -g qmail -H/var/qmail -G,,, -s/dev/null -P'*' qmailr 
      # adduser -g qmail -H/var/qmail -G,,, -s/dev/null -P'*' qmails 
       
      5. Compile the qmail program: 
      # cd /usr/src/qmail 
      # gunzip qmail-1.03.tar.gz ; tar -xvf qmail-1.03.tar 
      # cd qmail-1.03 
      # patch < ../qmail-1.03-rbl.diffs 
      # patch < ../qmail-1.03-popbull.diffs 
      # make 
      # cp qmail-popbull /usr/local/bin/ 
      6. Create the formatted man pages, *.0: 
      # make man 
      7. Create the qmail directory tree: 
      # make setup 
      8. Run instcheck to make sure it doesn't print any warnings: 
      # make check 
      7. You MUST tell qmail your hostname. 
      # ./config 
      qmail-config finds your fully-qualified hostname and puts it in control/me. 
      If you want to learn configuration possibilities, see qmail-control.0. 
       
      8. Minimal survival command: 
      # (cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root) 
      # chmod 644 ~alias/.qmail* 
       
      * root. Under qmail, root never receives mail. Your system may generate 
      mail messages to root every night. Set up an alias for root 
      in ~alias/.qmail-root. 
       
      9. qmail-local delivers mail by default into ~user/Mailbox. 
       
      Put ``setenv MAIL $HOME/Maildir'' in your system-wide .cshrc, 
      ``MAIL=$HOME/Maildir; export MAIL'' in your system-wide .profile, 
      ``inbox-path=$HOME/Maildir'' in your system-wide pine.conf. 
       
      10. Enable deliveries of messages injected into qmail: 
       
      Copy /var/qmail/boot/home to /var/qmail/rc. Edit to taste. 
      # /var/qmail/rc & 
       
      12. Look for a "qmail: running" line in syslog. qmail-send always 
      prints either 
      ``cannot start'' or ``running''. (The big number is a splogger timestamp.) 
       
      13. Do a ps and look for the qmail daemons. There should be four of 
      them, all idle: qmail-send, running as qmails; qmail-lspawn, running 
      as root; qmail-rspawn, running as qmailr; and qmail-clean, running 
      as qmailq. You will also see the splogger process. 
       
      14. Local-local test: Send yourself an empty message. (Replace ``me'' 
      with your username. Make sure to include the ``to:'' colon.) 
      % echo to: me | /var/qmail/bin/qmail-inject 
      The message will show up immediately in ~/Maildir, and syslog will 
      show something like this: 
      qmail: new msg 53 
      qmail: info msg 53: bytes 246 from <me@domain> qp 20345 uid 666 
      qmail: starting delivery 1: msg 53 to local me@domain 
      qmail: delivery 1: success: did_1+0+0/ 
      qmail: end msg 53 
      (53 is an inode number; 20345 is a process ID; your numbers will 
      probably be different.) 
       
      15. Local-error test: Send a message to a nonexistent local address. 
      % echo to: nonexistent | /var/qmail/bin/qmail-inject 
      qmail: new msg 53 
      qmail: info msg 53: bytes 246 from <me@domain> qp 20351 uid 666 
      qmail: starting delivery 2: msg 53 to local nonexistent@domain 
      qmail: delivery 2: failure: No_such_address.__#5.1.1_/ 
      qmail: bounce msg 53 qp 20357 
      qmail: end msg 53 
      qmail: new msg 54 
      qmail: info msg 54: bytes 743 from <> qp 20357 uid 666 
      qmail: starting delivery 3: msg 54 to local me@domain 
      qmail: delivery 3: success: did_1+0+0/ 
      qmail: end msg 54 
      You will now have a bounce message in ~/Maildir. 
       
      16. Local-remote test: Send an empty message to your account on another 
      machine. 
      % echo to: me@wherever | /var/qmail/bin/qmail-inject 
      qmail: new msg 53 
      qmail: info msg 53: bytes 246 from <me@domain> qp 20372 uid 666 
      qmail: starting delivery 4: msg 53 to remote me@wherever 
      qmail: delivery 4: success: 1.2.3.4_accepted_message./... 
      qmail: end msg 53 
      There will be a pause between ``starting delivery'' and ``success''; 
      SMTP is slow. Check that the message is in your mailbox on the other 
      machine. 
       
      17. Local-postmaster test: Send mail to postmaster, any capitalization. 
      % echo to: POSTmaster | /var/qmail/bin/qmail-inject 
      Look for the message in ~alias/Maildir. 
       
      18. Double-bounce test: Send a message with a completely bad envelope. 
      % /var/qmail/bin/qmail-inject -f nonexistent 
      To: unknownuser 
      Subject: testing 
       
      This is a test. This is only a test. 
      % 
      (Use end-of-file, not dot, to end the message.) Look for the double 
      bounce in ~alias/Maildir. 
       
      19. Group membership test: 
      % cat > ~me/.qmail-groups |groups >> MYGROUPS; exit 0 
      % /var/qmail/bin/qmail-inject me-groups < /dev/null 
      % cat ~me/MYGROUPS 
      MYGROUPS will show your normal gid and nothing else. (Under Solaris, 
      make sure to use /usr/ucb/groups; /usr/bin/groups is broken.) 
       
      20. You must replace the sendmail invocation in your 
      boot scripts with an appropriate qmail invocation. 
       
      Find sendmail in your boot scripts. It's in /etc/rc. 
      sendmail -bd -q15m 
      Comment out this line, and add this to /etc/rc.local: 
       
      csh -cf '/var/qmail/rc &' 
       
      22. Replace sendmail with a link to qmail's ``sendmail'' wrapper: 
      # mv /usr/sbin/sendmail /usr/sbin/sendmail.bak 
      # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail 
       
      23. Add the following to /etc/rc.local. 
      /usr/local/bin/tcpserver -x/etc/tcp.smtp.cdb -u1009 -g101 0 smtp \ 
      /usr/local/bin/rblsmtpd -b -t2 -r dul.maps.vix.com \ 
      /usr/local/bin/rblsmtpd -b -t2 /var/qmail/bin/qmail-smtpd & 
      Comment out comsat in /etc/inetd.conf. 
      The -uXXX is the UID of qmaild and -g is the GID of nofiles. 
       
      24. Create the /etc/tcp.smtp file. 
       
      127.0.0.1:allow,RELAYCLIENT="" 
      208.246.108.:allow,RELAYCLIENT="" 
      208.246.109.:allow,RELAYCLIENT="" 
      208.246.110.:allow,RELAYCLIENT="" 
      208.246.111.:allow,RELAYCLIENT="" 
      209.14.30.:deny 
      209.14.198.:deny 
       
      Compile it with the /etc/tcpmakectl you are about to create: 
      #!/bin/sh 
      /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp \ 
      < /etc/tcp.smtp 
      chmod 644 /etc/tcp.* 
      echo "Reloaded /etc/tcp.smtp..." 
       
      25. Configure your DNS server(s) for the domains rbl.maps.vix.com, 
      dul.maps.vix.com, and any other anti-spam lists you subscribe to. 
       
      26. Reboot. 
       
      27. Disable all the sendmail and binmail programs in your system. The 
      safest approach is to chmod 0 everything. Some locations to check: 
      /usr/sbin/sendmail, /usr/lib/sendmail.bak, /usr/lib/sendmail.mx, 
      /bin/mail, /usr/libexec/mail.local. 
       
      28. Make sure that ``mail'' still invokes a reasonable mailer. Under 
      SVR4 you may want to link mail to mailx. 
       
      Post-upgrade tests (can be done immediately after step 24): 
       
      29. SMTP server test: Forge some mail locally via SMTP. 
      % telnet 127.0.0.1 25 
      Trying 127.0.0.1... 
      Connected to 127.0.0.1. 
      Escape character is '^]'. 
      220 domain ESMTP 
      helo dude 
      250-domain 
      250-PIPELINING 
      250 8BITMIME 
      mail <me@domain> 
      250 ok 
      rcpt <me@domain> 
      250 ok 
      data 
      354 go ahead 
      Subject: testing 
       
      This is a test. 
      . 
      250 ok 812345679 qp 12345 
      quit 
      221 domain 
      Connection closed by foreign host. 
      % 
      Look for the message in your mailbox. 
      30. Remote-local test: Send yourself some mail from another machine. 
      31. Remote-error test: I think you can figure this one out. 
      32. UA test: Try sending mail, first to a local account, then to a 
      remote account, with your normal user agent. 
      33. Remote-postmaster test: Send mail from another machine to 
      PoStMaStEr@domain. Look for the message in ~alias/Maildir. 
       
      If you have questions about qmail, contact qmail@pobox.com. 
       
      QMAIL-POP3D 
       
      34. Edit /etc/services and make sure port 110 is open. 
      pop3 110/tcp 
      Comment out the default popper in /etc/inetd.conf. 
       
      35. Start the qpop3d server at boot time but adding the following 
      to /etc/rc.local: 
       
      /usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup \ 
      HOSTNAME /usr/local/bin/checkpassword /var/qmail/bin/qmail-pop3d \ 
      Maildir & 
       
      RCPTHOSTS file should include all virtual domains and any that you secondary 
      MX for. 
       
       
      maildir2smtp is designed to pass messages along a SLIP or 
      PPP link. To set this up on the disconnected end, create 
      a new maildir in ~alias: 
       
      # maildirmake ~alias/pppdir 
      # chown -R alias ~alias/pppdir 
       
      Put 
       
      :alias-ppp 
       
      into control/virtualdomains and 
       
      ./pppdir/ 
       
      into ~alias/.qmail-ppp-default. Don't forget the extra 
      slash in pppdir/. Then, in the PPP startup script, do 
       
      maildir2smtp ~alias/pppdir alias-ppp- $IP `hostname` 
       
      replacing $IP with the remote IP address. 
       
      My /etc/ppp/ip-up script, for example, looks like this: 
       
      #!/bin/sh 
       
      # qmail controlfiles are in 
      QCD='/var/qmail/control' 
       
      # our mailhandling host 
      SMARTHOST=`cat $QCD/SMARTHOST | sed '/^#/d'` 
       
      # find smarthost's ip-address 
      SMARTIP=`host $SMARTHOST | cut -d" " -f4` 
       
      # find own hostname; dynamically assigned! 
      # $4 is the assigned ipaddress, passed along by pppd 
      ME=`host $4|head -1|cut -d" " -f2` 
      echo "$ME" > $QCD/HOSTNAME 
       
      # send batched mail to smarthost 
      /var/qmail/bin/maildirsmtp ~alias/pppdir alias-ppp- $SMARTIP $ME 
       
      # fetch mail from POP/IMAP servers for users specified in 
      # $QCD/POPPERS 
      for user in `cat $QCD/POPPERS | sed '/^#/d'` 
      do su - $user -c /usr/local/bin/fetchmail -s 
      done 
       
      I don't know if this is the most elegant way, but it works well for me. 
      Note that SMARTHOST and POPPERS are not part of qmail. I just put them in 
      that directory to have all the mail stuff in one place. Maybe /etc would 
      be more appropriate.  |