Newsserver einrichten
Aus wiki.freifunk.net
Inhaltsverzeichnis |
INN2
InterNetNews ist ein nntp Server für Linux. Die nachstehende Anleitung zeigt, wie man mit inn2 einen Newsserver für Freifunk aufsetzt.
Installation
Unter Debian:
sudo aptitude install inn2 suck
Konfiguration
Alle Konfigurationsdateien liegen in /etc/news/
- Zuerst einmal muß die Hauptconfig angepasst werden. Diese liegt als /etc/news/inn.conf vor.
Die Parameter organization und pathhost sollten auf jeden Fall angepasst werden.
organization: "Freifunk Leipzig" pathhost: news.leipzig.freifunk.net
Auf Systemen mit mehreren IP Adressen ist es zusätzlich sinnvoll, den inn2 an eine bestimmte Adresse zu binden:
bindaddress: 88.198.44.10
- Anschließend zur /etc/news/expire.ctl hinzufügen:
freifunk.*:A:never:never:never
Dies sorgt dafür, daß die Nachrichten nicht auslaufen und dauerhaft vorgehalten werden. Andere Werte sind natürlich auch möglich, falls der Speicherplatz begrenzt ist.
- Zur /etc/news/control.ctl hinzufügen:
# freifunk newgroup:*:freifunk.*:doit rmgroup:*:freifunk.*:doit
Damit wird das automatische Erzeugen und Löschen von Gruppen durch control Nachrichten innerhalb der freifunk.* Hierarchie erlaubt.
- /etc/news/actsync.ign anlegen mit folgendem Inhalt
# Don't touch control groups, etc. i control i control.* i local.* i general i junk
Diese Datei stellt sicher, dass beim Abgleich der Liste der Gruppen lokalen Systemgruppen nicht gelöscht werden.
- mit /etc/news/readers.conf wird der Zugriff auf den Newsserver reguliert
# Clients die aus einem der in "hosts" angegebenen Adressbereiche connecten
# erhalten den pseudo Usernamen "freifunk" ...
auth "freifunk" {
hosts: "104.0.0.0/8"
default: "freifunk"
}
# ... diesen wird dann einfacher lesender und schreibender Zugriff auf
# die freifunk.* Hierarchie erlaubt.
access "freifunk" {
users: "freifunk"
newsgroups: "freifunk.*"
}
Wichtig: Der letzte passende Eintrag gilt, d.h. allgemein gefasste Einträge müssen vor spezifischen Einträgen stehen. Dies gilt insbesondere auch für eventuelle Server, wie weiter unten gezeigt.
Benutzerauthentifizierung
Mit diesem Perl Script kann man eine Benutzerauthentifizierung gegen die FFsomething Benutzerdatenbank durchführen.
Dazu muss in die readers.conf Folgendes vor den anderen Einträgen hinzugefügt werden:
# Login mit FFsomething Benutzerkennung
auth "freifunk" {
auth: /etc/news/filter/ffsomething_auth.pl
}
SSL Verschlüsselung
Obwohl die SSL Funktionen von inn2 nicht mit Thunderbird und möglicher Weise anderen Clients kompatibel sind, kann man optional einen SSL Verschlüsselung für die Benutzer mit Hilfe von stunnel und inetd realisieren.
- in /etc/inetd.conf eintragen
nntps stream tcp nowait root /usr/bin/stunnel stunnel -p /usr/lib/news/cert.pem -s news -g news -r nntp
Synchronisation
Es gibt zwei Möglichkeiten einen INN zu füttern. Entweder man syncronisiert passiv durch pull der Nachrichten, oder man wird gefüttert von einem Upstream (statische IP nötig).
Die Gegenstelle muß euch erlauben, die Nachrichten abzuholen bzw. sie Euch zuschicken. Daher müsst ihr auf einem der großen Newsserver nach einem Upstream fragen. Am besten von zwei, damit eine gewisse Redundanz entsteht.
Pull
Fürs pullen am Besten suck installieren.
- /etc/cron.d/inn2 eintragen
# update active list every day 3 3 * * * news /usr/lib/news/bin/actsync -A localhost UPSTREAM -v 1 -p 0 -o x -i /etc/news/actsync.ign # suck new articles every five minutes */5 * * * * news suck UPSTRAM -U LOGIN -P PWD -bp -hl localhost -q -s -A -c 2>/dev/null >/dev/null
Newsfeeds
Newsfeeds sind eigentlich eine saubere Lösung. Die meisten Newsserver auf diesem Planeten verwenden reguläre Newsfeeds um ihren Datenbestand auszutauschen. Allerdings funktionieren Newsfeeds nur mit statischen IP Adressen größtenteils ohne Probleme. Bei Servern mit dynamischen IP Adressen sollte man keine Newsfeeds einsetzen, da es regelmäßig zu Verbindungsabbrüchen kommt und der Austausch von Daten nicht gewährleistet werden kann.
Man kann einen ausgehenden Feed entweder mittels nntpsend (zeitverzögert) oder innfeed (echtzeit) konfigurieren.
Empfang
- in /etc/news/readers.conf hinter den allgemeinen Einträgen
# Den hier in der "hosts" Zeile eingetragenen Rechnern wird
# der pseudo Username "server" zugewiesen ...
auth "server" {
hosts: "peer-1.fqdn.tld, peer-2.fqdn.tld, ..."
default: "server"
}
# ... welcher erhöhte Privilegien erhält.
access "server" {
users: "server"
newsgroups: "*"
access: "RPIAN"
}
Hier wird allen Peers der Pseudo-User "server" zugewiesen. Dieser User hat mehr Berechtigungen welche z.B. zum Synchronisieren und Feeden gebraucht werden.
Möglicher Weise gibt es Probleme mit Reverse Lookup, weshalb die Verwendung von IP Adressen anstelle von Hostnamen hier eigentlich die bessere Wahl ist.
- in /etc/news/incoming.conf
group freifunk {
peer peer1 {
hostname: "peer-1.fqdn.tld"
}
peer peer2 {
hostname: "peer-2.fqdn.tld"
}
...
}
Als Peer trägt man einen beliebigen Bezeichner ein und als Hostnamen den jeweiligen FQDN oder die IP Adresse. Auch hier sind die IP Adressen eventuell besser, um Probleme zu vermeiden.
Versand (echtzeit)
- in /etc/news/newsfeeds
innfeed!\
:!*\
:Tc,Wnm*:/usr/lib/news/bin/startinnfeed
peer1:*,!junk,!local*:Tm:innfeed!
peer2:*,!junk,!local*:Tm:innfeed!
Hier wird zunächst ein Sammelfeed ("funnel") definiert, der über das externe Programm innfeed versendet wird. Anschließend wird festgelegt, dass für die genannten Peers alle News-Gruppen außer "junk" und "local.*" an diesen funnel übergeben werden sollen.
- in /etc/news/innfeed.conf
group freifunk {
peer peer1 {
ip-name: "peer-1.fqdn.tld"
}
peer peer2 {
ip-name: "peer-2.fqdn.tld"
}
}
In dieser Datei werden die vollständigen Hostnamen bzw. IP Adressen für jeden Peer (Ziel) konfiguriert.
Versand (zeitversetzt)
Wenn ihr feeds in bestimmten Intervallen zu anderen Servern schicken möchtet:
- in /etc/news/newsfeeds:
peer1:*,!local*,!junk:Tf,Wnm: peer2:*,!local*,!junk:Tf,Wnm: peer3:*,!local*,!junk:Tf,Wnm: ...
Die einzelnen Zeilen legen fest wohin lokale Posts verteilt werden sollen, gefiltert nach Gruppen. In unserem Beispiel werden alle lokalen Gruppen außer die internen "junk" und "local.*" Gruppen an alle Peers verteilt. Die Nachrichten werden zunächst in eine lokale Datei geschrieben.
- in /etc/news/nntpsend.ctl:
peer1:peer-1.fqdn.tld::-t180 peer2:peer-2.fqdn.tld::-t180 peer3:peer-3.fqdn.tld::-t180 ...
Hier wird festgelegt welche Peers vom eigenen Server versorgt werden. "peer-n.fqdn.tld" wird hierbei durch den voll qualifizierten Hostnamen oder die statische IP-Adresse des jeweiligen Peer-Servers ersetzt.
- in /etc/news/passwd.nntp
peer1:user:password peer2:user:password
Dieser Eintrag wird nur benötigt, falls der Zielserver ein Passwort verlangt. Der Benutzernamen und das Passwort zum Synchronisieren muss beim jeweiligen Betreiber des Peers erfragt werden.
- in /etc/cron.d/inn2
*/5 * * * * news /usr/lib/bin/nntp-send peer1 peer2 peer3
Dieser Eintrag sorgt dafür, dass die lokal gesammelten Nachrichten alle fünf Minuten an den/die Zielserver gesendet werden. Die Zielserver können alle in einer Zeile hintereinander aufgeführt werden.
Letzte Schritte
- Starten des inn2 Servers
/etc/init.d/inn2 start
- Beim ersten Start sollte noch mit einem der Upstreams synconisiert werden. Als root eingeben:
su - news /usr/lib/news/bin/actsync -A localhost UPSTREAM -v 1 -p 0 -o x
Dies aktualisert das active file, also die Liste aller auf dem Newsserver aktiven Newsgroups.
- bisher vorhandene Artikel holen
suck UPSTREAM -U LOGIN -P PWD -bp -hl localhost -q -s -A -c 2>/dev/null >/dev/null
füllt erstmal den Newsserver mit allen Nachrichten vom Upstream, damit er nicht so leer ist :)
Dokumentation
Dokumentation zu Inn2 findet sich u.A. unter http://www.eyrie.org/~eagle/software/inn/
Peeringliste
Server welche zum Peering offen sind und die freifunk Hierarchie beinhalten.
| Server | Admin | Peerings |
| news.leipzig.freifunk.net | freifunk [ät] poelzi {dot} org | news1.halle, news2.leipzig, news.hannover, news.weimar |
| news2.leipzig.freifunk.net | freifunk {at} wwsnet {dot} net | news1.halle, news.leipzig |
| news1.freifunk-halle.de | se nada1 de | news.leipzig, hannover |
| news.hannover.freifunk.net | mickey netfreaks org | leipzig, halle, erfurt |

