leafnode(8)

BEZEICHNUNG
leafnode - ein NNTP server für kleine Sites (mit Wählverbindung)

SYNTAX
leafnode

BESCHREIBUNG
Leafnode ist ein USENET-Software-Paket, das für kleine Sites gedacht ist, wo es wenige User und nur geringe Festplatten-Kapazität gibt, aber trotzdem eine große Zahl von Gruppen gewünscht wird.

Leafnode ist so designt, daß es Fehler selbständig reparieren und keinerlei manuelle Pflege benötigen soll.

Das leafnode -Programm selbst ist der NNTP-Server. Es wird von inetd(8), xinetd(8) oder tcpserver gestartet, wenn jemand News lesen möchte. Die anderen Teile des Paketes, fetchnews und texpire , sind dafür zuständig, News von anderen Servern zu holen und nach einer gewissen Zeit zu löschen.

ZUGANGSKONTROLLE
Leafnode bietet keinerlei Authentifizierungs- oder Zugangskontrolle an. Eine solche zu implementieren, ist eine Aufgabe, die nicht für jeden einzelnen Dienst neu vorgenommen werden sollte.

Es ist daher dringendst anzuraten, externe Zugangskontrolle per tcpd, inetd/xinetd mit libwrap-Unterstützung, tcpserver mit -x oder vergleichbarer Funktionalität einzurichten. tcpd und libwrap sind Bestandteil des tcp_wrappers Pakets von Wietse Venema.

Als grobe sichernde Maßnahme gegen Mißbrauch verweigert leafnode Verbindungen, die nicht von einem lokalen Netz (LAN) stammen. Dies kann in der Konfiguration ausgestellt werden, ist aber nicht anzuraten (siehe Option allowstrangers), da die Gefahr von Mißbrauch ohne weitere Sicherungsmaßnahmen sehr groß ist.

DATEIEN UND VERZEICHNISSE
Für alle folgenden Dateien und Verzeichnisse muß der User "news" Leserechte besitzen. Es wird angeraten, falls im weiteren nicht anders angegeben, daß "news" der einige Benutzer in der Gruppe "news" sein sollte und die Dateien "root:news" (Benutzer root, Gruppe news) gehören sollten, so daß die Konfiguration- und Filterdateien von leafnode nicht geändert werden können.

/usr/local/etc/leafnode sollte für den Benutzer "news" nicht beschreibbar, für die Gruppe "news" aber les- und ausführbar sein (g+ux).

/usr/local/etc/leafnode/config enthält die Konfigurationseinstellungen für leafnode. Diese Datei darf nicht schreibbar sein für den Benutzer "news". Setzen Sie diese Datei auf mode 640, Besitzer root:news. Siehe auch KONFIGURATION unten.

/var/spool/news muß für den Benutzer "news" les- und schreibbar sein. Es enthält die News-Artikel, so enthält z.B. das Verzeichnis /var/spool/news/alt/fan/agulbra die Artikel der Newsgruppe alt.fan.agulbra. Jedes Verzeichnis enthält die Artikel in durchnumerierten Dateien (Dezimalzahlen, streng monoton steigend) und eine spezielle Datei .overview , die die "Subject"-, "From"-, "Date"-, "Message-ID"-, "References"-, "Bytes"- und "Lines"-Header für jeden einzelnen Artikel der Gruppe enthält.

Mehrere Unterverzeichnisse haben spezielle Aufgaben:

/var/spool/news/leaf.node enthält diejenigen Dateien, die leafnode während des Betriebs anlegt, zum Beispiel die groupinfo-Datei , die Informationen über jede einzelne USENET-Gruppe enthält. Diese Datei wird von fetchnews (8) erstellt, Sie können diese Datei jederzeit neu erstellen lassen, indem Sie fetchnews mit dem Parameter -f aufrufen (s. fetchnews (8)).

/var/spool/news/out.going enthält lokale Artikel, die von fetchnews (8) an den Upstream-Server weitergereicht werden sollen. Nachdem ein Posting dort erfolgreich geschrieben wurde, wird das Ausführungsrecht für die Datei gesetzt (u+x). fetchnews(8) interpretiert diese Rechte als "dieses Posting darf veröffentlicht werden".

/var/spool/news/failed.postings enthält lokale Postings, die vom Upstream-Server zurückgewiesen wurden. Fetchnews erstellt Dateien in diesem Verzeichnis, allerdings löscht keines der leafnode -Programme dort Dateien.

/var/spool/news/message.id enthält harte Links zu jedem Artikel; dies ersetzt die dbz Datenbank, die größere Server einsetzen. (Ein solches Verzeichnis ist auf kleinen Servern, für die leafnode gedacht ist, effizienter, skaliert dafür aber sehr schlecht.)

/var/spool/news/interesting.groups enthält pro Gruppe, die ein NNTP-Klient angefordert hat, eine Datei. Leafnode führt die Operation touch(1) auf die relevante Datei aus, wenn ein LISTGROUP-, XOVER-, XHDR-, STAT-, HEAD-, BODY- oder ARTICLE-Befehl direkt nach einem GROUP-Befehl ausgeführt wird. fetchnews (8) lädt die Artikel derjenigen Gruppen, auf deren Dateien entweder

    - innerhalb der letzten zwei Tage, oder

    - mehr als einmal und mindestens einmal in der vergangenen Woche zugegriffen wurde.

/etc/inetd.conf oder /etc/xinetd.conf enthält die Konfiguration, die leafnode startet. Es wird dringend angeraten, leafnode vom User "news" starten zu lassen.

KONFIGURATION
Die komplette Konfiguration wird in der Datei /usr/local/etc/leafnode/config vorgenommen. Es wird kein graphisches Werkzeug, um leafnode zu konfigurieren, mitgeliefert; allerdings existiert eine externe PHP-Anwendung namens "leafwa" von Phil Hunt zur Administration.

Die Datei hat eine Art Unix-Standard-Format: Nur ein Argument pro Zeile, Kommentare werden durch # eingeleitet und durch das Zeilenende beendet. Im Folgenden werden die möglichen Parameter anhand einiger Beispiele erklärt.

OBLIGATORISCHE PARAMETER

server = news02.bigprovider.com
    "server" wird von fetchnews (8) benutzt, um festzustellen, von welchem Server es News herunterladen und wohin es neue Artikel posten soll. Es ist möglich, mehrere Server anzugeben, sie werden der Reihe nach kontaktiert. Sie brauchen auf diesen Servern Leserechte, falls Sie selber Artikel veröffentlichen möchten, auf mindestens einem der Server auch Schreibrechte. Im obigen Beispiel ist news02.bigprovider.com der primäre News-Server. Dieser Parameter kann mehrmals angegeben werden. Jeder Server erhält dabei zunächst einen Satz Standard-Optionen, die Einstellungen des vorherigen Server-Eintrags werden nicht übernommen. Ebenso können Server-spezifische Einstellungen nicht global getätigt werden.

expire = 5
    "expire" ist die Anzahl der Tage, die ein Artikel aufbewahrt werden soll. Im Beispiel wird ein Artikel fünf Tage, nachdem er zuletzt gelesen wurde, durch texpire(8) gelöscht.

SERVERUNABHÄNGIGE OPTIONALE PARAMETER

hostname = host.domain.country
    Leafnode versucht zunächst, den Namen des Computers zu ermitteln und dabei ungültige Namen auszulassen. Der host name wird mit gethostname(3) erfragt und mit bei Bedarf mit gethostbyname(3) aufgelöst. Dieser Name entstammt üblicherweise der Datei /etc/hosts oder NIS und DNS (Details in der System-Dokumentation). Falls Leafnode keinen host-Namen ermitteln kann, deutet das in der Regel auf ein nicht sorgfältig konfiguriertes System oder auf einen nicht eindeutigen Namen hin, der für die Erstellung von Message-IDs nicht verwendbar ist. Namen wie "localhost.localdomain" sind nicht eindeutig und daher zu ändern. Es genügt in der Regel, einen sogenannten fully-qualified host name (FQDN) der Datei /etc/hosts hinzuzufügen. In der Datei README-FQDN werden weitere Informationen dazu (auf Englisch gegeben), weiterhin finden sich in der Datei INSTALL_de Hinweise auf deutsche Dokumentation zu diesem Thema. Sie können den Teil der Message-ID nach dem @ auch mit dem Parameter hostname konfigurieren. Die Verwendung von "hostname" zur Erzeugung einer Phantasie-Message-ID ist zwar möglich, aber dringend abzuraten.

create_all_links = 1
    Üblicherweise speichert fetchnews Artikel nur in den Newsgruppen, die in /var/spool/news/interesting.groups vorhanden sind, wenn Sie create_all_links auf 1 setzen, erstellt fetchnews jedoch für jede Newsgruppe, die es im "Newsgroups:"-Header findet, einen harten Link. Dies kann interessant für Sie sein, wenn Sie ein Score- oder Kill-File auf den "Xref:"-Header anwenden möchten.

maxfetch = 1000
    "maxfetch" begrenzt die Anzahl der Artikel, die fetchnews (8) vom Upstream-Server laden darf. Die Benutzung dieses Parameters ist jedoch nicht zu empfehlen, da Sie sonst nicht alle Artikel einer Gruppe bekommen. In der Grundeinstellung gibt es keine Obergrenze.

initialfetch = 1
    "initialfetch" beschränkt die Anzahl der Artikel, die von einer vorher noch nicht bezogenen Gruppe geladen werden sollen. Normalerweise werden alle alten Artikel geladen, was allerdings sehr zeitaufwendig werden kann, wenn in dieser Gruppe sehr viele Artikel gepostet werden. Dies entspricht einem Wert von 0 für initialfetch; wenn Sie keine alten Artikel empfangen möchten, setzen Sie den Wert, wie im Beispiel, auf 1.

groupexpire sehr.volle.Gruppe = 1

groupexpire sehr.volle.Hierarchie.* = 1
    "groupexpire" ermöglicht es, unterschiedliche Haltezeiten für verschiedene Gruppen festzulegen. Die Haltezeit wird in Tagen angegeben, der Wert wird von texpire (8) benutzt. Sie können so viele groupexpire-Einträge anlegen wie Sie möchten und dabei glob (7)-Wildcards verwenden.

maxage = 10
    Wenn ein Artikel auf dem Upstream-Server auftaucht, der älter als "maxage" Tage ist, wird er von fetchnews nicht geladen, auch wenn er noch nicht lokal vorhanden ist. Dies ist nützlich, wenn Ihr Upstream-Server gelegentlich den 'Schluckauf' bekommt. Die Standardeinstellung beträgt 10 Tage; wenn Sie maxage deaktivieren möchten, tragen Sie einen möglichst großen Wert ein, z. B. 100000 (also ca. 270 Jahre)

maxold = 10
    Ist synonym zu maxage, siehe oben.

maxlines = 2000
    Wenn Sie es vermeiden möchten, sehr große Artikel zu laden, setzen Sie den "maxlines"-Parameter auf die Anzahl der Zeilen, die ein Artikel höchstens haben darf. Üblicherweise ist dieses Feature deaktiviert.

minlines = 2
    Manchmal werden Newsgruppen mit leeren Artikeln überhäuft. Um solche Artikel abzuweisen, können sie "minlines" verwenden. "minlines" auf einen Wert größer als 4 zu setzen, ist wahrscheinlich keine gute Idee, da dann u. U. auch echte Artikel abgelehnt werden könnten. Üblicherweise ist dieses Feature deaktiviert.

maxbytes = 100000
    Wenn Sie große Artikel ablehnen möchten, können Sie statt "maxlines" auch "maxbytes" verwenden. Auch dieses Feature ist normalerweise deaktiviert.

maxcrosspost = 5
    Wenn Sie Spam bekämpfen möchten, können Sie alle Artikel filtern, die über mehr als "maxcrosspost" Gruppen crossgepostet werden. Den Wert von "maxcrosspost" zu niedrig anzusetzen ist wahrscheinlich keine gute Idee. Auch dieses Feature ist standardmäßig deaktiviert.

maxgroups = 5
    Ist synonym zu maxcrosspost, siehe oben.

filterfile = /usr/local/etc/leafnode/filters
    leafnode kann die Header eingehender Artikel nach regulären Ausdrücken filtern, die im "filterfile" gespeichert sind. Das Format dieser Filterdatei ist einfach, ein regulärer Ausdruck pro Zeile. Entspricht einer der regulären Ausdrücke dem Header eines eingehenden Artikels, wird der Body dieses Postings abgelehnt. Dieses Feature ist üblicherweise deaktiviert. Reguläre Ausdrücke werden in pcre (3) beschrieben.

timeout_short = 2
    Normalerweise wird eine Gruppe, die nur zufällig abonniert wurde, 2 Tage lang bezogen. Hier können Sie diese Zeit abändern.

timeout_long = 7
    Normalerweise wird eine Gruppe, die nicht mehr gelesen wird, noch sieben Tage lang bezogen. Diese Zeitspanne kann hier geändert werden.

timeout_active = 90
    Normalerweise wird das Active-File alle 90 Tage vom Upstream-Server gezogen. Dieser Abstand kann verändert werden, indem Sie "timeout_active" einen anderen Wert zuweisen. Bedenken sie dabei aber, daß beim Laden des Active-Files von einem Server, der ca 20.000 Gruppen vorrätig hat, rund ein Megabyte an Informationen übertragen werden.

timeout_client = 900
    Normalerweise beendet leafnode nach 900 Sekunden (15 Minuten) Inaktivität die Verbindung zum Newsreader. Mit "timeout_client" kann diese Zeitspanne angepaßt werden, etwa für defekte Newsreader, die sich nicht neu verbinden können. Es ist nicht ratsam, dies unter 5 Minuten zu setzen, da Neuverbindungen die Systemlast steigern.

delaybody = 1
    Wenn dieser Parameter gesetzt ist, lädt fetchnews (8) nur die Header eines Artikels zur Ansicht. Nur, wenn die Header gelesen werden, lädt fetchnews (8) beim nächsten Start auch den Body des Postings. Sie können so Plattenplatz und On-Line-Zeit sparen.

debugmode = 1
    Wenn Sie diesen Parameter angeben, geben fetchnews (8), texpire (8) und leafnode (8) Debugging-Informationen via syslog (8) nach news.debug aus. Benutzen Sie diese Option, wenn Sie Probleme mit Ihrem Feed haben.

allow_8bit_headers = 1
    Normalerweise läßt Leafnode das Posten von Artikeln, die 8-Bit-Daten im Nachrichtenkopf tragen, nicht zu, weil diese gegen einschlägige Normen, speziell RFC-2822 (auf den RFC-1036 baut), verletzen, und die verlangen, daß Usenet-News-Köpfe nur aus 7-bit US-ASCII-Zeichen bestehen, und aus den Steuerzeichen nur die Freiräume zuläßt. Da allerdings UTF-8 eingeführt werden soll und einige nationale Hierarchien, besonders die norwegische und dänische (no.*, dk.*) sich darauf geeinigt zu haben scheinen, 8-bit Daten einer Codierung mittels RFC-2047 vorzuziehen, können Sie diese Option benutzen, um 8-bit-Daten im Nachrichtenkopf zuzulassen. Leafnode wird in diesem Fall, wenn 8-bit-Daten vorhanden sind, aber einen zusätzliche Kopfzeile zur Warnung einfügen, die erwähnt, daß der Administrator das erlaubt hat. Es gibt derzeit keine Möglichkeit, beim Posten in Leafnode andere Steuerzeichen als die Leerzeichen (einschließlich Tabulator) im Nachrichtenkopf zuzulassen.

allowSTRANGERS = MAGIC
    Normalerweise verweigert leafnode Verbindungen von außerhalb des lokalen Netzes (LAN). In config.example, wird beschrieben, wie dieses Verhalten geändert werden kann. An Stelle von MAGIC muß eine Nummer eingesetzt werden, siehe config.example.

linebuffer = 1
    Leafnode verwendet normalerweise voll gepufferte Standardausgabe und -fehlerausgabe, außer bei Verbindung mit einem Terminal. Mit diesem Parameter kann explizit zeilengepufferte Ausgabe erzwungen werden.

clamp_maxage = 0
    Üblicherweise werden Artikel, die älter sind als die für die aktuelle Gruppe konfigurierte expire Zeit, nicht geladen (siehe expire und groupexire neben dem Parameter maxage). Dadurch wird verhindert, daß Artikel, die von texpire(8) gelöscht wurden, nochmal heruntergeladen werden. Mit clamp_maxage = 0 wird dieses Verhalten abgestellt.

SERVERABHÄNGIGE OPTIONALE PARAMETER

username = meinname
    Wenn einer Ihrer News-Server eine Authentifizierung erwartet, können Sie hier Ihren Usernamen auf diesem System eingeben. Dieses Feld darf mehrmals erscheinen, einmal nach jeder Server-Definition.

password = meinpasswort
    Wenn einer Ihrer News-Server eine Authentifizierung erwartet, können Sie hier Ihr Paßwort auf diesem System eingeben. Dieses Feld darf mehrmals erscheinen, einmal nach jeder Server-Definition. Da das Paßwort im Klartext angegeben wird, ist es ratsam, die Rechte an der config-Datei so stark wie möglich einzuschränken, da sonst andere Benutzer Ihres Rechners Ihr/e Paßwort/Paßwörter herausfinden könnten.

port = 8000
    Mit den Grundeinstellungen versucht leafnode sich mit dem Upstream-Server über den NNTP-Port (119) zu verbinden. Wenn ihr Server auf einem anderen Port läuft, können Sie ihn hier angeben. Dieses Feld darf mehrmals erscheinen, einmal nach jeder Server-Definition.

timeout = 30
    Normalerweise versucht leafnode 10 Sekunden lang, mit einem Server Verbindung aufzunehmen und gibt diesen Versuch dann auf. Wenn Sie einen langsamen Server haben, können Sie leafnode mehr Zeit dafür geben, indem Sie timeout auf einen höheren Wert setzen (im Beispiel 30 Sekunden). "timeout" kann für jeden Server einzeln angepaßt werden.

noactive = 1
    Wenn diese Option gesetzt ist, wird die Liste der verfügbaren Gruppen nie von diesem Upstream-Server geladen. Diese Option ist sinnvoll für sehr langsame Verbindungen, wenn andere Server die Gruppen ebenfalls führen.

nodesc = 1
    Manche Server geben die Beschreibungen der Newsgroups nicht korrekt an, da sie das "LIST NEWSGROUPS"-Kommando nicht verstehen. Fügen Sie in diesem Fall nach dem "server"-Eintrag diese Zeile ein.

nopost = 1
    Zu diesem Server keine Postings versenden. Manche Server erlauben das Veröffentlichen von Artikel nicht, teilen dies aber falsch mit (NNTP Antwort 200).

only_groups_pcre = PCRE
    Diese Option erlaubt es, einen Perl-kompatiblen, regulären Ausdruck derjenigen Gruppen anzugeben, die von diesem Server geholt oder zu diesem gepostet werden können. Der reguläre Ausdruck wird linker Hand automatisch verankert, so dass der ^ am Anfang ausgelassen werden kann. Wenn diese Option fehlt, werden alle Gruppen von diesem Server bezogen und zu ihm gepostet. Denken Sie aber daran, Punkte zu "escapen", z. B. so: de\.comp\.|de\.comm\.

OBSOLETE PARAMETER

supplement
    ist synonym zur Option server und bei neuen Installationen nicht mehr zu verwenden.

fqdn
    ist synonym zur Option hostname und bei neuen Installationen nicht mehr zu verwenden.

PROTOKOLL
leafnode unterstützt die folgenden NNTP-Befehle:

ARTICLE, BODY, GROUP, HDR, HEAD, HELP, LAST, LIST, LIST ACTIVE, LIST ACTIVE.TIMES, LIST EXTENSIONS, LIST NEWSGROUPS, LIST OVERVIEW.FMT, LISTGROUP, MODE, NEWGROUPS, NEXT, POST, OVER, SLAVE, STAT, XHDR, XOVER.

Die Befehle sind in RFC-977 und RFC-2980 spezifiziert. Zu beachten ist, daß sich die Syntax von HDR und OVER aufgrund fehlender Standardisierung noch ändern kann.

BUGS
Leafnode weist Artikel mit UTF-8-Zeichen in Header-Zeilen, die nicht nach RFC-2047 gequoted sind, zurück. Der aktuelle, noch nicht angenommene Usefor-Draft schlägt UTF-8 ohne weitere Kodierung für Header vor. Leafnode beendet das Einlesen einer Zeile beim ersten NUL-Zeichen. Leafnode kann Probleme mit hierarchieübergreifenden Crosspostings haben, wenn mehr als ein Upstream-Server vorhanden und only_groups_pcre konfiguriert ist.

AUTOR
Die ersten Versionen von leafnode wurden von Arnt Gulbrandsen <agulbra@troll.no> geschrieben; Copyright 1995 Troll Tech AS, Postboks 6133 Etterstad, 0602 Oslo, Norway, fax +47 22646949.

Weiterentwickelt wurde leafnode von Cornelius Krasel <krasel@wpxx02.toxi.uni-wuerzburg.de>, Randolf Skerka <Randolf.Skerka@gmx.de> und Markus Enzenberger <enz@cip.physik.uni-muenchen.de>. Copyright (an den Veränderungen) 1997-1999.

Weiterentwickelt von Andree <matthias.andree@gmx.de>, Copyright 1999 - 2002, und Ralf Wildenhues <ralf.wildenhues@gmx.de>, Copyright 2002.

Jonathan Larmour <jlarmour@redhat.com> implementierte die timeout_client Option. Andreas Meininger <a.meininger@gmx.net> fügte Code hinzu, so daß texpire Gruppen mit 'groupexpire = -1' ignoriert. Mark Brown <broonie@debian.org> implementierte die noactive-Option.

Unzählige Beiträge von weiteren Personen.

Die ursprüngliche Entwicklung wurde durch Uninett AS (http://www.uninett.no/) finanziert.

Deutsche Übersetzung: Alexander Reinwarth <a.reinwarth@gmx.de>, ergänzt von Ralf Wildenhues.

SIEHE AUCH

applyfilter(8), checkgroups(8), fetchnews(8), newsq(1), texpire(8).

tcpd(8), hosts_access(5), glob(7), pcre(3), RFC 977, RFC 2980.