Vpopmail

Aus crazylinux.de
Zur Navigation springen Zur Suche springen

Handling virtual domains is a common issue posed by new users in the qmail and postfix communities. Inter7 has developed vpopmail (vchkpw - buipopmeil), a free GPL software package, to provide an easy way to manage virtual email domains and non /etc/passwd email accounts on your qmail or Postfix mail servers.

http://www.inter7.com/index.php?page=vpopmail


1 Install

./configure --enable-ip-alias-domains --enable-qmail-ext  --disable-clear-passwd --enable-onchange-script --enable-domainquotas


vpopmail 5.4.28
            Current settings
---------------------------------------

vpopmail directory = /var/vpopmail
 domains directory = /var/vpopmail/domains
               uid = 10794
               gid = 1000
     roaming users = OFF --disable-roaming-users (default)
 password learning = OFF --disable-learn-passwords (default)
     md5 passwords = ON  --enable-md5-passwords (default)
      file locking = ON  --enable-file-locking (default)
vdelivermail fsync = OFF --disable-file-sync (default)
     make seekable = ON  --enable-make-seekable (default)
      clear passwd = OFF --disable-clear-passwd
 user dir hashing  = ON  --enable-users-big-dir (default)
address extensions = ON  --enable-qmail-ext
          ip alias = ON  --enable-ip-alias-domains
   onchange script = ON  --enable-onchange-script
     domain quotas = ON  --enable-domainquotas

                     *** Domain quotas should only be enabled ***
                     *** when using the vpopmail usage daemon ***

       auth module = cdb --enable-auth-module=cdb (default)
          auth inc = -Icdb
          auth lib =
  system passwords = OFF --disable-passwd (default)
        pop syslog = show only failed attempts --enable-logging=e (default)
      auth logging = ON  --enable-auth-logging (default)
      spamassassin = OFF --disable-spamassassin (default)
          maildrop = OFF --disable-maildrop (default)


2 onchange

after changing users, we have to rebuild our recipients db for anti-spam reasons.

/var/vpopmail/etc/onchange

#!/bin/sh
#echo "Updating Qmail-Recipients...";
/var/qmail/scripts/qmail-vpopmail2recipients
/var/qmail/scripts/qmail-alias2recipients
/var/qmail/scripts/qmail-users2recipients
/var/qmail/bin/qmail-recipients
#echo "done";


3 Quota

3.1 build

./configure --with-vpopmail=/var/vpopmail


3.2 Configure vusaged

Start/stop-Script:

#! /bin/sh                                                                           
### BEGIN INIT INFO                                                                  
# Provides:          skeleton                                                        
# Required-Start:    $local_fs $remote_fs                                            
# Required-Stop:     $local_fs $remote_fs                                            
# Default-Start:     2 3 4 5                                                         
# Default-Stop:      0 1 6                                                           
# Short-Description: Example initscript                                              
# Description:       This file should be used to construct scripts to be             
#                    placed in /etc/init.d.                                          
### END INIT INFO                                                                    

# Author: Foo Bar <foobar@baz.org>
#                                 
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script. 

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin                                       
DESC="Vpopmail usage daemon"                                             
NAME=vusaged                                                             
DAEMON=/var/vpopmail/bin/$NAME                                           
DAEMON_ARGS="--options args"                                             
PIDFILE=/var/run/$NAME.pid                                               
SCRIPTNAME=/etc/init.d/$NAME                                             

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0            

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME  

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh                               

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions                                           

#
# Function that starts the daemon/service
#                                        
do_start()                               
{                                        
        # Return                         
        #   0 if daemon has been started 
        #   1 if daemon was already running
        #   2 if daemon could not be started
        #start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
        #       || return 1                                                                      
        #start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \                
        #       $DAEMON_ARGS \                                                                   
        #       || return 2                                                                      
        # Add code here, if necessary, that waits for the process to be ready                    
        # to handle requests from services started subsequently which depend                     
        # on this one.  As a last resort, sleep for some time.                                   
        $DAEMON > /dev/null 2> /dev/null &                                                       
        echo $! > $PIDFILE                                                                       


}

#
# Function that stops the daemon/service
#                                       
do_stop()                               
{                                       
        # Return                        
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred     
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
        RETVAL="$?"                                                                            
        [ "$RETVAL" = 2 ] && return 2                                                          
        # Wait for children to finish too if this is a daemon that forks                       
        # and if the daemon is only ever run from this initscript.                             
        # If the above conditions are not satisfied then add some other code                   
        # that waits for the process to drop all resources that could be                       
        # needed by services started subsequently.  A last resort is to                        
        # sleep for some time.                                                                 
        start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON           
        [ "$?" = 2 ] && return 2                                                               
        # Many daemons don't delete their pidfiles when they exit.                             
        rm -f $PIDFILE                                                                         
        return "$RETVAL"                                                                       
}                                                                                              

#
# Function that sends a SIGHUP to the daemon/service
#                                                   
do_reload() {                                       
        #                                           
        # If the daemon can reload its configuration without
        # restarting (for example, when it is sent a SIGHUP),
        # then implement that here.                          
        #                                                    
        start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
        return 0                                                                   
}                                                                                  

case "$1" in
  start)    
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
        do_start                                                       
        case "$?" in                                                   
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;          
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;            
        esac
        ;;
  stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  #reload|force-reload)
        #
        # If do_reload() is not implemented then leave this commented out
        # and leave 'force-reload' as an alias for 'restart'.
        #
        #log_daemon_msg "Reloading $DESC" "$NAME"
        #do_reload
        #log_end_msg $?
        #;;
  restart|force-reload)
        #
        # If the "reload" option is implemented then remove the
        # 'force-reload' alias
        #
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
                do_start
                case "$?" in
                        0) log_end_msg 0 ;;
                        1) log_end_msg 1 ;; # Old process is still running
                        *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
          *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;
  *)
        #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
        exit 3
        ;;
esac

:


Enable script:

update-rc.d vusaged defaults

 

3.3 Set quota for all users

500MB or 9000 messages

/var/vpopmail/bin/set_quota_4all.sh

#!/bin/sh
#conf
base="/var/vpopmail/domains"

for domain in `ls $base`; do
  if [ -d "$base/$domain" ]; then
    echo "$domain"
        # to disable quota
        #/var/vpopmail/bin/vsetuserquota $domain NOQUOTA
        # set quota to 500mb or 9000 messages
        /var/vpopmail/bin/vsetuserquota $domain 500000000S,9000C
  fi
done