Cyrus and Netnews

Note that the NNTP support in Cyrus is still relatively young in the grand scheme of things, and has not been tested under a heavy Usenet load. That being said, the code appears to be stable and is currently running in production serving 50-60 newsgroups with a volume of about 6000 messages per day.

Introduction

Cyrus has the ability to export Usenet via IMAP and/or export shared IMAP mailboxes via NNTP. This is made possible by a new NNTP daemon which is included with Cyrus.

This document assumes that you have successfully been able to setup your Cyrus IMAP server. If you have not already done so, please refer to the rest of the documentation. This document also assumes that you are familiar with Usenet and shared IMAP mailboxes.

There is a diagram that shows the interactions of the various components of the NNTP support in Cyrus which may be helpful in understanding the "big picture".

Installation

You will need to build Cyrus IMAPd with the --enable-nntp configure option. This builds nntpd and the associated utilities.

Requirements

Obviously you must have a newsfeed from your ISP or Usenet provider.

Configuration

The first thing that must be done is to decide where your newsgroup mailboxes will reside, either at the toplevel of your hierarchy (eg, comp.mail.imap) or rooted elsewhere (eg, netnews.comp.mail.imap). If your newsgroup mailboxes are not at the toplevel of your hierarchy, then you must specify the parent with the newsprefix in imapd.conf. Using the example above, newsprefix would be set to netnews.

You must create a mailbox for each newsgroup that you would like to receive/export before the newsgroups can be used. If some groups are private, be sure to set the ACLs accordingly. The tools/mknewsgroups script can be used to help facilitate mass creation of newsgroup mailboxes. When using this script, be sure to add posting rights for 'anyone' (eg. mknewsgroups -a 'anyone +p' ...) so that articles can be fed/posted.

Receiving articles

In order to receive usenet articles, you must make sure that the Cyrus nntpd service is enabled in cyrus.conf. The master/conf/normal.conf and master/conf/prefork.conf sample configs both include entries for nntpd (disabled by default).

Whenever nntpd receives an article, it automatically adds a To: header with email addresses corresponding to the newsgroups that the article is destined for (eg, post+comp.mail.imap). The presence of this header makes it easier for email clients to post/reply to the newsgroup. The "pseudo" user that is used when constructing the email address can be specified with the newspostuser option in imapd.conf (default = "post").

Push (traditional) feeds

If your usenet peer will be pushing articles to you, no further configuration is necessary, beyond letting your peer access your Cyrus server on port 119 (nntp).

Pull (suck) feeds

If you prefer to pull articles from your peer (and your provider allows it), then you can use the fetchnews utility which will use the NNTP NEWNEWS command to retrieve articles from your peer and feed them to your Cyrus server. You will probably want to configure fetchnews as an EVENT in cyrus.conf to be called periodically (eg, once an hour, every 15 minutes, etc).

imapfeed

Alternatively, if you already have an INN v2.3 server in-house you can use the included imapfeed utility (written by the authors of Cyrus) to feed articles to your Cyrus server via LMTP. Consult the INN documentation for further details.

Control Messages

Control messages are accepted, parsed and delivered to the corresponding control.* pseudo-group (eg, control.newgroup, control.cancel, etc) if it exists, so that they may be reviewed by an administrator.

NOTE: Automatic execution of control messages is currently disabled until PGP verification and ACL checking are implemented (hopefully by v2.2.1).

Reading/Posting articles

In order to have articles posted by your local users propagate to the outside world, you must specify the name of your usenet peer with the newspeer option in imapd.conf. This is the host that nntpd contacts to feed outgoing articles. Also note that you may specify an optional wildmat to filter which groups will be fed (see imapd.conf(5) for details).

News clients

If anonymous logins are disabled (default) in imapd.conf, then your news clients will have to be configured to login with a username and password, otherwise they will not be allowed to post. Furthermore, if plaintext logins are disabled in imapd.conf, then you might have to configure your news clients to use SSL/TLS and enable the nntps service in cyrus.conf.

If you want to allow your news clients to use the NNTP NEWNEWS command, you will have to enable the allownewnews option in imapd.conf.

Email clients

If you are exporting Usenet via IMAP, then your users will reply to and post articles via SMTP. In order for these messages to be fed into your server (and subsequently to the outside world) you need to use an email to news gateway, such as lmtp2nntp. You need to configure your MTA (Sendmail, Postfix, etc) so that lmtp2nntp is used as the local mailer whenever it receives a news article. A simple rule for doing this in Sendmail is shown below:
# mail addressed to post+ goes to lmtp2nntp@localhost
LOCAL_RULE_0
Rpost + $+ < @ $=w . >		$#lmtp2nntp $@ localhost $: $1

For other configurations, consult the lmtp2nntp and documentation and your MTA documentation.

NOTE: If anonymous logins are disabled (default) in imapd.conf, then you should configure lmtp2nntp to use its "feed" operation mode.

Expiring articles

To expire usenet articles on a regular basis, you should use the expirenews utility. This utility both expunges articles from their mailboxes and prunes message-ids from netnews.db. The master/conf/normal.conf and master/conf/prefork.conf sample configs both include EVENT entries for expirenews (disabled by default).


last modified: $Date: 2003/03/12 20:54:32 $