Opsætning af newsserver.

På et DKUUG klubmøde i Symbion den 29. april 2003 holdt jeg et foredrag om at have en newsserver stående derhjemme. Foredraget blev annonceret med følgende abstract:

Newsservere har lidt et skær af mysticisme over sig. Ofte kritiseres danske udbyder for deres usenetservice og det er også et upopulært arbejde at skulle vedligeholde serverene. Begrænser man sig til tekstgrupper i udvalgte hierarkier er det dog ikke noget problem at selv sætte sin egen newsserver op på en ADSL-linje.

Der findes en række muligheder for at sætte servere op der henter news hos ens udbyder som om den var en newsreader (for eksempel Hamster til Windows og leafnode til Unix). Vi vil dog se på hvordan man med INN sætter en newsserver op med et rigtigt newsfeed så man opnår redundans. Foredraget vil blandt andet omhandle:

Peter Makholm har, ud over sit øvrige engagement i forskellige open source-grupper, de sidste par måneder sammen med andre nørder delt newsfeeds og erfaringer om news i pnx.dk.


Opsætning af private newsservere

Dagens agenda

  1. Lidt introduktion
  2. Basisopsætning af INN
  3. Eksterne feeds
  4. Lidt om sikkerhed og ligende

Lidt om mig om min baggrund

Jeg hedder Peter Makholm. Min baggrund at holde dette foredrag er:


Hvorfor have egen newsserver?


Krav og muligheder

Krav: Muligheder:

Udbydernes problemer skyldes et større feed og flere brugere


Basisopsætning - inn.conf

Den primære konfigurationsfil for programmerne der følger med INN er inn.conf. Langt de fleste parametre har fornuftige værdier. Følgende felter skal dog sættes:

mta
Komandoen INN skal bruge til at sende mail. Bruges blandt andet ved modererede grupper.
"/usr/lib/sendmail -oi -oem %s" er et godt valg.
ovmethod
Hvordan overview-data skal gemmes.
pathhost
Navnet der indsættes i Path-headeren. Skal være unikt, da Path-headeren bruges til at undgå news-loops
pathnews
Stien til INN-installationen. Hvis de andre path-parametre ikke sættes defineres standardpositioner ud fra denne

inn.conf - mere opsætning

Kun få andre parametre er det nødvendigt at ændre. Jeg har kun ændre følgende:

hiscachesize
Størelse af cachen den gemmer modtagende Message-ID'er i. Hvis man har mere end en peer bør man sætte det til 256.
organization
Hvad der sættes ind hvis en lokal afsender ikke selv laver en Organization-header.
domain
Hvad serveren skal præsentere sig som
complaints
Adresse som klager skal sendes til. Indsættes i X-Complaints-To headeren.

Alt efter typen af overview-database og spool kan der være andre nødvendige parametre.


Overview-databasen

INN gemmer en række oplysninger om hver artikel i en overview-database. Dette kan slås fra hvis der ikke skal læses fra serveren men den kun skal bruges som transitserver.

Overview-databasen kan gemmes i tre forskellige formater:

tradindexed
Bruger to filer for hver gruppe som der tilføjes information til. Hurtigt at læse fra, langsomt at skrive til
buffindexed
Bruger præallokerede bufferer. Det vil sige bruger aldrig mere plads end hvad der er afsat til overview-databasen.
ovdb
Gemmer data i en BerkeleyDB-database.

Storage-typer

INN gemmer selve artiklerne i forskellige Storages. Dette sættes op i /etc/storage.conf

    method <methodname> {
            newsgroups: <wildmat>
            class: <storage class #>
            size: <minsize>[,<maxsize>]
            expires: <mintime>[,<maxtime>]                                         options: <options>
    }

INN understøtter 5 forskellige storage-metoder som har hver deres fordele og ulemper.


tradspool

Den traditionelle måde at gemme et newsspool på. Hver gruppe svare til et katalog og hver artikkel gemmes i en fil. En artikel i dk.edb.system.unix kan derfor ligge som dk/edb/system/edb/666.

Ulemper:

Fordele:


CNFS

Alle filer gemmes i en stor fil hvor INN selv holder styr på strukturen

Fordele:

Ulemper:


timecaf og timehash

Artikler bliver gemt i filer baseret på artiklens ankommelsestid. timecaf-metoden gemmer artikler der kommer tæt på hinanden i samme fil mens timehash gemmer hver artikel i seperate filer.

Fordele:

Ulemper


Oprettelse af grupper

Så skulle man være klar til at starte INN. Inden man starter INN første gang skal man dog udføre følgende kommando:
# makehistory; makedbz -i

Når man har startet INN kan man så oprette nogle lokal grupper og teste serveren:
# ctlinnd newgroup local.test

ctlinnd er generelt en god komando der kan lave mange ting uden at skulle genstarte serveren.


Eksterne feeds

Det første man skal bruge er nogen der vil peere med en. Der er forskellgie muligheder:

Man kender en der har en newsserver
Den letteste måde
pnx.dk
Man kontakter en på pnx.dk. Der er grænser for hvor mange nye vi kan sluse ind.
Man spørger sig frem
Ikke kommercielle og/eller offentligt tilgængelige newsservere er måske villige til at sætte et feed op.
http://www.usenet-se.net/peering/
Liste over folk der søger peers.

Eksterne feeds

Indgående og udgående eksterne feeds sættes op helt seperart. Man kan godt få feeds fra andre servere uden at feede til dem og omvendt.

Indgående feeds sættes op i incoming.conf og udgående sættes op i iinnfeed.conf og newsfeeds

I det følgende vil vi sætte et feed op bestående af de danske ikke-binære grupper mod en server der hedder news.hacking.dk


incoming.conf

incoming.conf indenholder stort set bare en liste over hvilke maskiner der har adgang til at sende indlæg til serveren.

For vores eksempel sætter vi følgende ind i incoming.conf:

    peer news.hacking.dk {
        hostname:       "news.hacking.dk,  212.242.196.94"
    }

Der er mulighed for at sætte et password på og begrænsninger på antallet af forbindelser.


innfeed.conf

innfeed.conf svare til incoming.conf med til udgående feeds. Man kan sætte passwords op og antallet af samtidige forbindelser og en række andre parametre.

For news.hacking.dk sætter vi følgende op:

    peer news.hacking.dk {
        ip-name:        news.hacking.dk
    }                                                                              

newsfeeds

Newsfeeds kan have forskellige former. Real-time feeds bliver sendt gennem programmet innfeed, hvilket skal sættes op i newsfeeds med følgende linjer:

      innfeed!\
              :!*\
              :Tc,Wnm*:/usr/lib/news/bin/startinnfeed

Derefter sættes et feed op til news.hacking.dk som bliver sendt videre gennem innfeed:

      news.hacking.dk/news.hacking.dk\
              :!junk,!control*,dk.*,!dk.binaer*\                                              :Tm:innfeed!

Derefter kan man begynde at feede med komandoen:
# ctlinnd begin news.hacking.dk


Resurseforbrug

Jeg modtager de danske, svenske, norske og islandske tekstgrupper samt gnu.* og comp.os.linux.*. Det giver nogenlunde følgende resurseforbrug:


Læseradgang

I readers.conf kan man sætter læseradgang op. Man kan authentificerer på IP-nummer eller på brugernivo.

Hver grupper kan tillades at læse og skrive bestemte grupper.

Der går ikke længe fra man har har sat et udgående feed op og der er folk der forsøger at forbinde sig til ens maskine. Så lad lige være med at åbne helt op for den.


Et DoS-angreb

Som standard følger der en fil med INN der siger hvem der har lov at oprette grupper i diverse hierarkier. Den dækker stort set alle udbredte hierarkier.

Oprettelsesbeskeder bliver selvfølgelig distribueret som andre artikler. De bliver normalt sendt til en gruppe i hierarkiet som oprettelsesbeskeden kun kommer frem til servere som føre hiererkiet.

På et tidspunkt var der dog en der postede en masse oprettelsesbeskeder til gnus.test som vi fik i pnx.dk og newsserverene begyndte troligt at tjekke om grupperne skulle oprettes og opretede dem. Loaden på maskinerne steg til 500+

Læren er at man bør rette control.ctl til så den ignorerer hierarkier man ikke er interesseret i.


Links et al.

http://hacking.dk/talks/inn/
Disse slides
http://pnx.dk/
Den grupper jeg peerer med
http://isc.org/products/INN/
Siden hvor man kan hente sourcen til INN
Peter Makholm, peter@makholm.net