Mailing-List Managers

Table of contents:

Running mailing lists within Postfix is fine for static lists. But lists that change frequently are better handled by a mailing-list manager (MLM). With an MLM, the administrator of the list doesn't have to manually edit the list file to add, delete, or change addresses because list members can subscribe and unsubscribe themselves. MLMs also support other features such as archiving of messages, digests of discussions, and the ability to moderate a list by allowing an administrator to review messages before they are posted to all members.

MLMs work by pointing normal Postfix aliases to commands that handle the distribution of messages and management of lists. MLMs use administrative aliases that point to programs to handle list functions such as subscribing and unsubscribing members from the list, handling bounced messages, and possibly filtering messages sent to the list. The lists themselves actually work the same way as the simple aliases from the last section. Each list has its own file to store list members, but rather than editing the file yourself, you can have the MLM automatically add and remove addresses.

The next two sections look at two popular MLMs: Majordomo and Mailman.

10.2.1 Majordomo

Majordomo is one of the more popular MLMs and has been available since the early 1990's. It offers a complete set of MLM features, and nearly all administration takes place by sending commands through email messages. Little to no intervention is required by a postmaster once a list has been created. There are also web-based administration packages available to work with Majordomo, allowing much of the list administration to take place from a web site.

Majordomo is available at the Majordomo home page (http://www.greatcircle.com/majordomo/.) It requires Perl and works with Perl4 Version 4.036 or Perl5 Version 5.002 or better. Future releases will probably require Perl5. Majordomo also makes use of a small wrapper program written in C. If you are planning to build the package from scratch, you must have an ANSI C compiler.

If you configure Majordomo for moderated lists, where a list administrator approves posts using the Majordomo-supplied approve, you have to make an adjustment for Postfix and Majordomo to work together correctly. Postfix prepends a Delivered-To: header to messages it handles. It then uses the header to detect mailer loops. When a Majordomo message is delivered to a moderator for approval who then pipes the message through the approve command, it is sent back to the list with all of its original headers intact. When Postfix receives the message again, it recognizes that it has already seen the message and reports a mail delivery loop.

The easiest way to fix this issue is to make a small change to the Majordomo approve script (which is written in Perl). You'll have to edit the file, normally located in the /bin directory located below the main Majordomo installation directory. If you follow the steps in the procedure below, your file will be located at /usr/local/majordomo/bin/approve. Edit the file and find the subroutine called process_bounce. Within that routine, there is a while loop, as shown below. Insert the emphasized line as shown, save the file, and you're done:

while (<$FILE>) {
 if (/^>?From / && ! defined($from_skipped)) {
 # Skip any initial "From " or ">From " line
 $from_skipped = 1;
 next;
 }
 next if ( /^delivered-to:/i ); # Added for Postfix
 s/^~/~~/;
 print MAIL $_;
}

10.2.1.1 Creating a Majordomo list

The following steps walk you through setting up the astronomy list alias using Majordomo and Postfix. These instructions assume that you will create a user called majordom and install the package at /usr/local/majordomo. If you create a different username or install to a different location, keep that in mind as you read through this example.

  1. Make sure that you have Perl installed on your system and that it is at least Version 5.002 or better. You can check your Perl installation by typing perl -v at a command prompt. This will display license and other information about your installation of Perl, including the version number:

    $ perl -v
    This is perl, version 5.005_03 built for i386-freebsd
    Copyright 1987-1999, Larry Wall
    ...
  2. Obtain a copy of Majordomo either in source form from the Majordomo home page or find a prepackaged version from your normal software sources. Follow the instructions that come with your bundle to install Majordomo on your system. If you are installing from source, you will need an ANSI C compiler to build it.

    If you build Majordomo yourself, when you modify the Makefile and majordomo.cf file, you should be able to follow the instructions as if you were installing Majordomo to work with Sendmail as the MTA. If the location for $sendmail_command in majordomo.cf is correct, the rest of the mailer variables with the default options will be correct.

  3. Create and edit a file called /usr/local/majordomo/aliases to store the Majordomo aliases. Add the aliases for the Majordomo commands as specified in the Majordomo instructions. Then add the aliases for your list. The file should look like the following:

    majordomo: "| /usr/local/majordomo/wrapper majordomo"
    owner-majordomo: kdent@example.com
    majordomo-owner: kdent@example.com
    # astronomy list
    astronomy: :include:/usr/local/majordomo/lists/astronomy
    owner-astronomy: csagan@example.com
    astronomy-request: "|/usr/local/majordomo/wrapper request-answer astronomy"
    astronomy-approval: csagan@example.com
  4. Edit /etc/postfix/main.cf to add the Majordomo alias file to the alias_maps parameter:

    alias_maps = hash:/etc/aliases, hash:/usr/local/majordomo/aliases
  5. You can also add the new alias file to the alias_database parameter to automatically rebuild the datafile when you run the newaliases command:

    alias_database = hash:/etc/aliases, hash:/usr/local/majordomo/aliases
  6. Reload Postfix so that it recognizes the changes in its main.cf configuration file:

    # postfix reload
  7. Create the file to hold the email addresses for the astronomy list. Set its ownership to the majordom account:

    # touch /usr/local/majordomo/lists/astronomy
    # chown majordom /usr/local/majordomo/lists/astronomy
  8. Create the info file that contains the message sent to new members of the list and anyone who sends the info command. Create the file as /usr/local/majordomo/lists/astronomy.info and include any text that is appropriate for your list:

    Welcome to the astronomy discussion list at example.com. The
    purpose of this list is to discuss new astronomical phenomena.
    To send a message to all the members of the list, address your
    email to .
    The basic rules and etiquette for the list are as follows:
    1. ...
  9. Make sure that the info file is accessible by the majordom account:

    # chown majordom /usr/local/majordomo/lists/astronomy.info
  10. Build the alias database:

    # postalias /usr/local/majordomo/aliases

Or, if you added the Majordomo alias file to alias_database, just type newaliases.

You can test your Majordomo installation by running the following command:

$ echo 'lists' | mail majordomo

Executing the above sends an email message to Majordomo containing the command 'lists', telling Majordomo to send you information about all of the lists it maintains. On our example system, the reply from Majordomo looks like the following:

Date: Tue, 16 Jul 2002 18:14:59 -0400 (EDT)
From: Majordomo@example.com
To: kdent@example.com
Subject: Majordomo results

--

>>>> lists
Majordomo@example.com serves the following lists:

 astronomy 

Use the 'info ' command to get more information
about a specific list.
>>>> 
>>>>

You or your users can now send Majordomo commands at the address majordomo@example.com to get help and be added to lists. To add yourself to the new mailing list, send a message to majordomo with the subscribe command in the body of the message:

To: majordomo@example.com
From: tbrahe@porcupine.org
Subject:

subscribe astronomy

If you send a subscription request, you should receive a confirmation message from Majordomo. You must reply to the message with the authentication code provided to complete your subscription to the list (see the Majordomo documentation).

10.2.1.2 Potential problems

If you had no problems during the Majordomo installation, everything should work as expected. The main issue that you may run into has to do with file permissions. If you send a message to the list and receive a bounce notification like the following, then you know you have a permissions problem:

...
 The Postfix program

: cannot open include file
 /usr/local/majordomo/lists/astronomy: Permission denied

...

Majordomo needs read access to the list file (/usr/local/majordomo/astronomy) and the list configuration file (/usr/local/majordomo/astronomy.config) when Postfix invokes it for deliveries to the list. Postfix delivers the message to Majordomo running with the privileges of the user that owns the alias map file containing the majordomo alias, /usr/local/majordomo/aliases.db. The normal mechanism used to ensure that Majordomo has access to the necessary files is to set the Majordomo wrapper program to set user ID (suid) with root as the owner. This means that regardless of the user executing the command, the process runs with root privileges. The Majordomo installation takes care of setting the permissions properly, but if for some reason they are not correct, you will see an error message like the one described above. You can correct the problem by setting the permissions yourself:

# chmod 4755 /usr/local/majordomo/wrapper

A better solution than setting the wrapper program suid is to make sure that the alias file and all of the list files are owned by the majordom user.

10.2.2 Mailman

Mailman is another full-featured MLM. It is available at the Mailman home page at http://www.gnu.org/software/mailman/. It includes web-based administration and creates a home page for each list where list administrators and members can perform administrative functions. It also accepts administrative commands via email much like Majordomo does.

Mailman requires at least Version 1.5.2 of Python. It includes some security wrapper programs that are written in C, so you must have an ANSI C compiler if you are planning to build the package from scratch.

There is one slightly tricky aspect to get Postfix and Mailman working together correctly. Mailman expects to be invoked by a process running with a particular group ID (GID). The GID it expects is specified at the time the Mailman package is built. If you are building the package yourself, make sure that you first create an account and a group called mailman. You should be able to use the normal administrative tools on your system to create both the account and the group. When you are finished, you should have an entry in /etc/passwd that resembles the following:

mailman:*:26413:60003:Mailman List Manager:/home/mailman:/bin/sh

and an entry in /etc/group like the following:

mailman:*:60003:

Make sure that the account mailman has the group mailman as its primary group. In the examples above, 60003 specifies the mailman group and the mailman account has that as its primary group.

When you run configure for Mailman, be sure that you include the option --with-mail-gid=xxx, where xxx is the actual GID for the mailman group that you created. According to the examples above, you should execute configure using 60003 for the GID option:

$ ./configure --with-mail-gid=60003

You may have additional options for configure according to your environment. Be sure to read the Mailman documentation for building the package. If you have already built your Mailman package and you did not specify the group, build it again. If you didn't build your Mailman package, see the sidebar below.

WANTED gid 12 GOT gid 99?

If you didn't build the Mailman package yourself (and don't have the option of rebuilding it), there is no good way to find out which GID it is expecting other than by looking at what is reported in an error message. If you have a mismatch between the group of the Postfix process and the group that Mailman expects, you will receive a bounce error message after you send an email message to a Mailman list. Mailman also logs the error, which will look something like the following:

Failure to exec script. WANTED gid 12 GOT gid 99 (Reconfigure
to take 99?)

In order to get Postfix to deliver the message to Mailman using the correct GID, you have to set the permissions correctly on the Mailman alias file. When Postfix makes a normal local delivery, it assumes the identity of the recipient of the message. In the case of an alias, Postfix assumes the identity of the owner of the alias file, unless the owner is root, in which case Postfix uses the identity specified in its default_privs parameter. Make sure that the alias file is owned by the mailman user and that the mailman user has the mailman GID as its primary group. Postfix will then use the mailman group when it delivers a message to the Mailman system.

If you did not build your own Mailman package and therefore cannot control the GID that it expects, you will have to accommodate Mailman by getting Postfix to use the GID Mailman expects. Generate an error message like the one above by first creating a list (see the steps in this chapter) and then by sending a message to it. You should receive a bounce error email message (or you can check for the error in the Mailman log). Note the GID Mailman reports that it wants (WANTED gid 12). Change the primary group of the mailman account to that group. Make sure that the Mailman alias file is owned by the mailman account.

 

10.2.2.1 Creating a Mailman list

The following steps walk you through setting up the astronomy list alias using Mailman and Postfix. They assume that you create an account and a group called mailman and install the package in /home/mailman.

  1. Make sure that you have Python installed on your system and that you have at least Version 1.5.2. Test this by executing the python command, which will display version information and a Python prompt. You can exit the Python shell by typing Ctrl-D:

    $ python
    Python 1.5.2 (#1, Jul 5 2001, 03:02:19) [GCC...
    Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
    >>> ^D
    $

    If the version number following "Python" on the first line of output is not at least 1.5.2, you will have to upgrade your copy of Python.

  2. Obtain a copy of Mailman either in source form from the Mailman home page or find a prepackaged version from your normal software sources. Follow the instructions that come with your bundle to install Mailman on your system. If you are installing from source, you will need an ANSI C compiler to build it. Be sure to specify the correct GID when you build Mailman. (See the discussion earlier in this chapter.)
  3. You should create a separate alias file to store all of your Mailman aliases and set the owner and group correctly. Become the mailman user and execute the following commands. This example assumes that you want the alias file in the mailman home directory located at /home/mailman:

    $ cd /home/mailman
    $ touch aliases
    $ postalias aliases

    These commands create both the alias file and the necessary map files that Postfix uses for lookups. Since you perform these steps as the mailman user, the group and ownership of the files will automatically be correct, assuming your account is set up as it should be.

  4. Edit /etc/postfix/main.cf to add the new alias file for storing Mailman mailing lists. Simply add the Mailman alias file to the existing list of files for the alias_maps parameter:

    alias_maps = hash:/etc/aliases, hash:/home/mailman/aliases
  5. You can also add the new alias file to the alias_database parameter to automatically rebuild the datafile when you run the newaliases command:

    alias_database = hash:/etc/aliases, hash:/home/mailman/aliases
  6. Reload Postfix so that it recognizes the changes in its main.cf configuration file:

    # postfix reload
  7. Execute the Mailman command newlist to initialize your new mailing list. The output of newlist includes lines of text that must be inserted into the /home/mailman/aliases file. Copy the lines from the newlist output into /home/mailman/aliases. Save and exit the file. The emphasized lines in Example 10-4 are the lines that must be added to /home/mailman/aliases.
  8. Build the new alias datafile:

    # postalias /home/mailman/aliases

    Or, if you added the Mailman alias file to alias_database, just run the newaliases command.

Example 10-4. Executing the Mailman newlist command

# bin/newlist
Enter the name of the list: astronomy
Enter the email of the person running the list: kdent@example.com
Initial astronomy password:
Entry for aliases file:

## astronomy mailing list
## created: 08-Mar-2002 root
astronomy: "|/home/mailman/mail/wrapper post astronomy"
astronomy-admin: "|/home/mailman/mail/wrapper mailowner astronomy"
astronomy-request: "|/home/mailman/mail/wrapper mailcmd astronomy"
astronomy-owner: astronomy-admin

Hit enter to continue with astronomy owner notification...

You or your users can now send requests to astronomy-request@example.com to get help and be added to the list. You can now use Mailman's web- or email-based command interface to specify options for your new list. See the Mailman documentation to learn its options and other ways to work with the package.

Introduction

Prerequisites

Postfix Architecture

General Configuration and Administration

Queue Management

Email and DNS

Local Delivery and POP/IMAP

Hosting Multiple Domains

Mail Relaying

Mailing Lists

Blocking Unsolicited Bulk Email

SASL Authentication

Transport Layer Security

Content Filtering

External Databases

Appendix A. Configuration Parameters

Appendix B. Postfix Commands

Appendix C. Compiling and Installing Postfix

Appendix D. Frequently Asked Questions



Postfix(c) The Definitive Guide
Postfix: The Definitive Guide
ISBN: 0596002122
EAN: 2147483647
Year: 2006
Pages: 130
Authors: Kyle Dent D.

Flylib.com © 2008-2020.
If you may any questions please contact us: flylib@qtcs.net