Mail2News Mini-Howto Rick Dean v2.1, 1 settembre 1999 Questo documento descrive come rifornire un news server con una mail­ ing-list. Traduttore: Maurizio Mollicone, , 23 Marzo 2000 11.. DDiirriittttii ee ddiissttrriibbuuzziioonnee 11..11.. CChhee ccooss''èè qquueessttoo ddooccuummeennttoo Questo documento descrive come rifornire un news server con una mailing list utilizzando un sistema Linux. È un mini-HOWTO, più specificatamente il Mail2News mini-HOWTO. 11..22.. CCooppyyrriigghhtt ((iinn iinngglleessee)) Copyright (c) 1999, Rick Dean. Copyright (c) 1996, Robert Hart. The authors retain their copyright of this document. You are hereby granted permission to redistribute this document in whole or in part as long as it includes this copyright notice. Commercial redistribution is allowed and encouraged. All translations or derivative works of this document must be covered under this copyright notice, and without additional restrictions on distribution. This arrangement is also known as a copyleft. This copyright notice, itself, is hereby placed in the public domain. You may copy it without atribution. 11..33.. DDoovvee ppoossssoo ttrroovvaarree qquueessttoo HHOOWWTTOO?? La versione più recente di questo documento è disponibile all'indirizzo http://fdd.com/howto/. Molte distribuzioni includono questo HOWTO nella directory /usr/doc/HOWTO. Questo mini-HOWTO, come la maggior parte dei mini-HOWTO di Linux, è stato scritto inizialmente in SGML. Questo permette al testo di essere automaticamente tradotto in molti formati, tra cui testo, HTML, PostScript, ecc. Questi formati sono disponibili da qualche parte. Altre informazioni sulla documentazione di Linux sono disponibili presso Linux Documentation Project, e in molti altri posti 11..44.. SSttoorriiaa ddeell ddooccuummeennttoo · La versione 1.0 è stata scritta da Robert Hart nel 1996 · Le versioni 2.x sono state modificate da Rick Dean a partire dal Luglio 1999. 22.. IInnttrroodduuzziioonnee 22..11.. CCoommee,, ppeerrcchhéé,, ppiiùù aallccuunnee ddeeffiinniizziioonnii Questo documento descrive come rifornire (feed) un news server con una mailing-list utilizzando una macchina Linux. È un mini-HOWTO, specificatamente il Mail2News mini-HOWTO. Una mailing list (conosciuta anche col nome di remailer), è un indirizzo dove le e-mail vengono rispedite ad una lista di indirizzi. È molto utile per la collaborazione di gruppi geograficamente dispersi. Molte compagnie (ad esempio i gruppi di lavoro della IETF) utilizzano le mailing list. Sfortunatamente, se si è iscritti a più mailing list, si ha la casella di posta regolarmente innondata di messaggi. Inoltre, alcune compagnie (come 3Com) specificano quale applicazione di posta devono utilizzare i loro impiegati (ad esempio Lotus Notes). Se le e-mail vengono reindirizzate ad un gruppo di discussione, le persone sono rese libere di scegliere il lettore di news che preferiscono, utilizzando delle funzioni progettate proprio per quello scopo (cioè derivare un segnale dal rumore). I server di news sono apparsi su Internet molto tempo fa, diversi anni prima del World Wide Web. I server di news e i lettori di news hanno carateristiche come... · threading - le risposte sono raggruppate per argomento con le e- mail a cui si riferiscono · indicazione della lettura - il computer tiene traccia di cosa si è letto, anche attraverso i gruppi di discussione · Si possono marcare come letti i messaggi a seconda dell'argomento. · archiviazione · segregazione per newsgroup (i.e. mailing list) · un metodo di sottoscrizione/cancellazione veloce e standardizzato · e molto altro... Un grande obiettivo dei server di news è la condivisione di notizie tra server. Il più grande di questi gruppi venne conosciuto come USENET. Questo mini HOWTO non è rivolto a questo. Si possono condividere i gruppi di discussione creati attraverso questo documento da soli, ma si vive bene anche senza. Come per i web server, l'onnipresente connettività ad Internet, ha reso accettabile i news server centralizzati. Inoltre recenti prove hanno mostrato che un macchina Linux con un solo processore può gestire più di 1300 richieste HTTP per secondo, quindi la scalabilità è un obiettivo secondario. Sebbene non ci sia bisogno di avere una mailing list per utilizzare questo documento, è una buona idea avere il news server. 22..22.. AAmmbbiieennttee pprreessuuppppoossttoo Questo documento presume che si stia utilizzando Linux, ma vanno bene anche altri Unix. Attualmente è descritto solo sendmail come agente di posta, ma non appena qmail diverrà popolare (in parte per la facilità di configurazione) si spera che qualcuno scriva delle note di configurazione anche per lui. :-) Al momento della scrittura questo mini-HOWTO è stato testato solo su un distribuzione Redhat 6.0. Da buoni informatici, non si dovrebbe credere che qualcosa funzioni finché non sia stato specificatamente testato. Qualsiasi contributo o annotazione riguardo altre distribuzioni è benvenuto. Per la gran parte di questo documento si avrà bisogno dell'accesso di root, a meno che non sia specificato il contrario. 22..33.. MMeettooddoollooggiiaa Questo mini-HOWTO è presentato al contrario, dato che è il modo più semplice di costruire e debuggare il tutto. Al contrario significa che si inizierà con il lettore di news e si risalirà fino al gestore della mailing list, cioè la direzione opposta del normale flusso di dati. Questo sistema utilizza alcune parti (come sendmail e innd) che sono dei piccoli HOWTO. 22..44.. AArrggoommeennttii eesscclluussii Questo mini-HOWTO non riguarda... · la configurazione di una mailing list · lo scambio di informazioni tra server di news · una lista completa di argomenti non pertinenti. Per favore non scrivetemi e-mail su questi argomenti (o SPAM). 33.. IIll lleettttoorree ddii nneewwss 33..11.. NNeettssccaappee Netscape contiene un lettore di news integrato. Il modo più semplice di sottoscrivere un gruppo di discussione è di scrivere o cliccare un link simile a news://news.sfour.com/ietf.confctrl Una volta iscritti, si deve solo andare al centro messaggi. Questo si fa cliccando sulla icona a fumetto nell'angolo destro della finestra. 33..22.. FFrreeee AAggeenntt Free Agent è un meraviglioso lettore di news di Forte per Windows. Si guardi: http://www.forteinc.com/agent/freagent.htm 33..33.. ttrrnn ee aallttrrii I vecchi lettori di news come trn e tin sono una buona soluzione. Ci si assicuri di impostare prima la variabile d'ambiente NNTPSERVER. Per esempio... export NNTPSERVER=news.sfour.com trn 44.. IIll sseerrvveerr ddii nneewwss 44..11.. IInnssttaallllaazziioonnee ddeell sseerrvveerr ddii nneewwss Si deve installare un server di news. Io utilizzo inn, ma ne sono disponibili anche altri. Preferiblmente si scelga l'opzione "News Server" durante l'installazione iniziale, ma se la distribuzione utilizza RPM (RedHat package manager), allora basta utilizzare un comando come rpm -i inn-2.2.9.i386.rpm 44..22.. FFaarr ppaarrttiirree iill nneewwss sseerrvveerr Per far partire o fermare l'esecuzione del news server, si utilizza il comando /etc/rc.d/init.d/innd start o /etc/rc.d/init.d/innd stop o /etc/rc.d/init.d/innd restart Per far partire il news server all'avvio del sistema si può aggiungere un comando, come quelli visti, alla fine di /etc/rc.d/rc.local, ma non è la soluzione migliore. Molte distribuzioni hanno della applicazioni grafiche che permettono di scegliere quali demoni attivare. Si provi a scrivere: setup or chkconfig --add innd 44..33.. CCrreeaazziioonnee ddeell nneewwssggrroouupp innd richiede poco riguardo a permessi e proprietà Per la gran parte della configurazione basterà essere utente news. Per diventare questo utente quando si è root: su - news Utilizzando ctlinnd, si crea il gruppo di discussione sul server. Da ricordare che il newsgroup sarà llooccaallee, quindi si deve crearlo con un nome distintivo, in modo da poterlo filtrare dalla distribuzione delle news se si fa questo errore. Con orgoglio ho chiamato il mio newsgroup ietf.confctrl. Le parole da sinistra a destra vanno da meno a più specifico. Inoltre si deve dire a innd che il gruppo è moderato (utilizzando ctlinnd). Questo si fa specificando m al comando newgroup. Per esempio: ctlinnd newgroup ietf.confctrl m confctrl@isi.edu Il gruppo di discussione deve essere creato come mmooddeerraattoo, in modo da poter usufruire delle possibilità di innd. Qualsiasi messaggio inviato ad un gruppo moderato nnoonn èè immediatamente consegnato al gruppo, ma viene prima inviato al moderatore. Nell'esempio confctrl@isi.edu è l'indirizzo a cui è rimandato il remailer. Se si stanno condividendo notizie con altri server, ci si deve ricordare di editare le proprie configurazioni in modo che il gruppo non sia distribuito, a meno che non si voglia specificatamente fare questo. 44..44.. AAmmpplliiaarree ll''aacccceessssoo Di default, il news server non permette ad ogni client di leggere le notizie, quindi si deve disabilitare l'autenticazione dell'utente di innd. Questo va fatto nel file /etc/news/nnrp.access. Si legga la pagina man di nnrp.access per apprendere la sintassi di questo file. Io ho cambiato la prima riga non di commento in: *:Read Post:::* Se si vuole un nome utente e una password, allora si devono riempire il terzo e il quarto campo. Per maggiori informazioni sulla sintassi si guardi il manuale... man nnrp.access 44..55.. CCaammbbiiaarree ii ppeerrmmeessssii ddii //uussrr//bbiinn//rrnneewwss Si devono cambiare anche i permessi di /usr/bin/rnews. Non è leggibile e eseguibile da tutti, ma sendmail esegue script come nobody. chmod a+rx /usr/bin/rnews 44..66.. TTeessttaarree ll''iinnvviioo ddeellll''aarrttiiccoolloo Se si copia il seguente articolo in un file di nome rick.article... ______________________________________________________________________ Path: rick From: rick@fdd.com Message-ID: <199907120548.AAA05475@fdd.com> Subject: test Date: Mon, 12 Jul 1999 00:48:49 -0500 (CDT) Newsgroups: ietf.confctrl Approved: ietf-confctrl@kepler.hedland.edu.au NNTP-Posting-Host: localhost Organisation: (mail2news gateway) test ______________________________________________________________________ Ora si dovrebbe essere in grado di inviare un file con... /usr/bin/rnews -r localhost ) { last if /^$/; # transform real from: line back to icky style s/^From:\s+(.*) <(.*)>/From: $2 ($1)/; s/Message-Id/Message-ID/; # transform from_ line to path header; also works locally s/^From\s+(\S+)@(\S+).*/Path: $2!$1/ || s/^From\s+(\S+)[^@]*$/Path: $1\n/; print INEWS # if /^(Date|From|Subject|Path|Newsgroups|Organization|Message-ID):/i; if /^(Date|From|Subject|Path|Newsgroups|Message-ID):/i; $saw_subject |= ( $+ eq 'Subject' ); $saw_msgid |= ( $+ eq 'Message-ID' ); # $saw_newsgroup |= ( $+ eq 'Newsgroups' ); } warn "$program: didn't expect newsgroup in both headers and ARGV\n" if $newsgroup && $saw_newsgroup; die "$program: didn't get newsgroup from either headers or ARGV\n" unless $newsgroup || $saw_newsgroup; $approved = $newsgroup; $approved =~ s/\./'-'/eg; ($sec,$min,$hour,$mday,$mon,$year)=localtime(time); $madeupid = "\<$year$mon$mday.$hour$min$sec.$$\@kepler.hedland.edu.au\>"; printf INEWS "Newsgroups: %s\n", $newsgroup if $newsgroup; printf INEWS "Approved: %s\@kepler.hedland.edu.au\n", $approved; print INEWS "Subject: Untitled\n" unless $saw_subject; printf INEWS "Message-ID: %s\n", $madeupid unless $saw_msgid; printf INEWS "NNTP-Posting-Host: %s\n", $postinghost; print INEWS "Organisation: (mail2news gateway)\n"; print INEWS "\n"; print INEWS while ; # gobble rest of message close INEWS; exit $?; ______________________________________________________________________ Io ho salvato lo script in /usr/local/bin (e utilizzeremo questo percorso per tutto l'HOWTO). Ci si assicuri di rendere lo script eseguibile per tutti, ma senza permesso di scrittura per il gruppo e gli altri. chmod a+x /usr/local/bin/mail2news.pl chmod go-w /usr/local/bin/mail2news.pl o chmod 555 /usr/local/bin/mail2news.pl per brevità. 55..44.. CCoommee ssii ffaa aa ssaappeerree ssee lloo ssccrriipptt èè iinn eesseeccuuzziioonnee?? Ho testato questo script cambiando il programma per inviare news da /usr/bin/rnews a /bin/cat. Quindi ho salvato una mail mandata a me stesso in un file. Infine ho eseguito mail2news.pl sulla mail salvata e catturato l'output in un file. /usr/local/bin/mail2news.pl ietf.confctrl /tmp/article 55..55.. CCoossaa cc''eennttrraa ll''AAuussttrraalliiaa?? Sí l'output dello script deve contener l'indirizzo di un australiano. Il mio consiglio è che l'indirizzo sia un indirizzo garantito nella propria configurazione (sebbene non possa trovarlo nella mia) per approvare l'invio moderato. 55..66.. CCoossaa ssiiggnniiffiiccaa $$PPAATTHH?? Se lo script mail2news.pl non è nel percorso si ottiene l'errore bash: mail2news.pl: command not found. Si deve aggiungere quindi questa direcory al percorso: PATH=$PATH:/usr/local/bin (che funziona solo per la sessione corrente) o dare un percorso assoluto quando si esegue lo script: /usr/local/bin/mail2news.pl Per veder l'attuale valore della variabile PATH: echo $PATH 66.. IIll ddeemmoonnee ddii ppoossttaa llooccaallee 66..11.. IInnttrroodduuzziioonnee Si deve prima creare un indirizzo di posta locale a cui far spedire la mailing-list. Questo indirizzo sarà configurato per eseguire un programma (spedire ad un gruppo di discussione) tutte le volte che arriva un mail. Sfortunatamente (per noi), questa opzione non è abilitata usualmente per ragioni di sicurezza. Questo HOWTO descrive solo come configurare sendmail. qmail è un'altra scelta eccellente, ma non è ancora trattato. 66..22.. CCrreeaazziioonnee ddii uunn aalliiaass ddii ppoossttaa Invece di creare un nuovo acconto per un utente, si creerà solo un alias. Per sendmail questi sono contenuti in /etc/aliases. La sintassi è definita nella pagina man... man aliases Nell'esempio, il nome utente dell'indirizzo di mail è confctrl che spedisce al gruppo di discussione locale ietf.confctrl, cosí aggiungiamo una riga... confctrl: "| /usr/local/bin/mail2news.pl ietf.confctrl " Il doppio apice è richiesto. Non ci può essere uno spazio tra la prima coppia di apici e il carattere | (pipe), o sendmail si lamenterà: "User unknown". Quandunque si modifichi il file /etc/aliases, si dovrà comunicarlo a sendmail. sendmail -bi 66..33.. FFuunnzziioonnaa?? Dopo aver mandato una e-mail, si controlli il file /var/log/maillog per controllare se ha funzionato. Il log può contenere un utile messaggio di errore. Ho trovato conveniente aprire un'altro terminale per seguire il log con tail -f /var/log/maillog 66..44.. AAbbiilliittaarree iill ""ppiippee aall pprrooggrraammmmaa"" Il "pipe al programma" è il CGI della posta elettronica. Quando arriva una mail, invece di appenderla ad un file, sendmail esegue uno script o un programma e consegna la mail allo standard input. Attualmente, con Redhat 6.0, sendmail è distribuito con il "pipe al programma" abilitato, ma solo un numero limitato di programmi é eseguibile. La sicurezza degli utenti non era un bisogno sulla mia macchina, cosí otrovato piú facile abilitare l'esecuzione di tutto. D'altra parte non c'è una pagina di manuale per smrsh. Per rendere possibile il "pipe al programma" dobbiamo modificare sendmail.cf, modificando sendmail.mc, per non utilizziare la shell ristretta. Stranamente, scommentando l'opzione, non funziona, quindi ho dovuto cambiare la shell da /usr/sbin/smrsh a /bin/bash. L'intestazione del file /etc/senmail.mc di Redhat 6 ha un errore. La linea di comando giusta è m4 /etc/sendmail.mc >/etc/sendmail.cf Si deve fare questo quando si cambia sendmail.mc. Fortunatamente Redhat estenderà la magnifica idea del Makefile in /etc/mail in modo da dover solo scrivere make. Si dovrà prima installare sendmail- cf.qualcosa.rpm Ad esempio: rpm -i sendmail-cf-8.9.3-10.i386.rpm Ogni volta che si modifica il file sendmail.cf, si deve far ripartire sendmail... /etc/rc.d/init.d/sendmail restart 66..55.. DDooccuummeennttaazziioonnee La Redhat, di default, non installa la documentazione di sendmail. È distribuita in un pacchetto rpm separato con un nome come sendmail- doc-8.9.3-10.i386.rpm. Questo crea una cartella /usr/doc/sendmail rpm -i sendmail-doc-* http://www.sendmail.org/ ca/email/doc/op-sh-5.html descrive la sintassi del sendmail.cf. Spero che non dobbiate utilizzarla. Questa è descrizione delle caratteristiche che si stanno modificando in sendmail.mc http://www.sendmail.org/m4/features.html Sendmail ha un pagina di manuale... man sendmail 66..66.. SSeennzzaa pprriivviilleeggii Se si hanno dei problemi e si crea un alias di un indirizzo di posta con un script differente e più semplice per testarlo, si ricordi che sendmail esegue il programma come utente non privilegiato, che probabilmente non avrà il diritto di scrivere ovunque, eccetto che in cartelle come /tmp. 77.. IIll rreeiinnddiirriizzzzaattoorree ddeellllaa mmaaiilliinngg lliisstt 77..11.. SSoottttoossccrriizziioonnee Il metodo di sottoscrizione ad ognuna delle mailing list è differente, sebbene implichi l'invio di un certo tipo di messaggio di posta. Per favore, si stia attenti a non mandare l'indirizzo di risposta al gruppo. È un metodo sicuro per annoiare i membri della lista. Molte mailing list hanno indirizzi separati per le sottoscrizioni. In confctrl, l'indirizzo di amministrazione è confctrl-request@isi.edu, come spiegato da http://www.ietf.org/html.charters/mmusic- charter.html. Quando ci si è iscritti con successo, si dovrebbe vedere un messaggio di benvenuto nel newsgroup. Alcune liste non permettono di iscriversi con un indirizzo diverso da quello con cui si sta inviando. In questo caso si dovrà truccare l'indirizzo di ritorno di una e-mail. 77..22.. TTrruuccccaarree llaa ppoossttaa Questa è la cosa più semplice da fare con un vecchio Netscape. Accetta qualsiasi cosa come indirizzo di ritorno. Fortunatamente, i browser moderni, richiedono che si scarichi posta con successo per un indirizzo, prima di permettere l'invio. Quindi si deve tornare al buon vecchio metodo...telnet. 77..22..11.. CCeerrccaarree mmaacccchhiinnee MMXX Quando si richiede un pagina web, il browser effettua una richiesta al DNS per convertire il nome del dominio in un indirizzo IP. Questo equivale alla ricerca di un campo "A" (sono considerati anche i campi "CNAME"). Quando si invia un e-mail, si ricerca il campo "MX". Se non è trovato allora si utilizza il campo "CNAME", o "A". Quindi per truccare un'e-mail si deve cercare il campo MX. dig mx isi.edu darà... ; <<>> DiG 8.2 <<>> mx isi.edu ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 4 ;; QUERY SECTION: ;; isi.edu, type = MX, class = IN ;; ANSWER SECTION: isi.edu. 1D IN MX 0 tnt.isi.edu. isi.edu. 1D IN MX 10 venera.isi.edu. ;; AUTHORITY SECTION: isi.edu. 1D IN NS venera.isi.edu. isi.edu. 1D IN NS ns.isi.edu. isi.edu. 1D IN NS east.isi.edu. ;; ADDITIONAL SECTION: tnt.isi.edu. 1D IN A 128.9.128.128 venera.isi.edu. 1D IN A 128.9.176.32 ns.isi.edu. 1D IN A 128.9.128.127 east.isi.edu. 1D IN A 38.245.76.2 ;; Total query time: 448 msec ;; FROM: fdd.com to SERVER: default -- 127.0.0.1 ;; WHEN: Sun Jul 25 15:49:32 1999 ;; MSG SIZE sent: 25 rcvd: 182 quindi si vorrà usare tnt.isi.edu (se non si ha dig, anche ;; nslookup andrà bene). 77..22..22.. SSMMTTPP La posta è consegnata utilizzando il protocollo SMTP (Simple Mail Transfert Protocol). Come la maggior parte dei protocolli di Internet è basato su ASCII per rendere lo sviluppo e la risoluzione dei problemi più semplici. Non spiegherò tutto, ma semplicemente darò un esempio. Spero che sia abbastanza. Il protocollo è orientato alla linea. Ogni e-mail, come specificato nel documento RFC822, è composta da intestazioni e da un corpo, che sono separati dalla prima linea vuota (senza caratteri o spazi). Il protocollo SMTP specifica che l'e-mail è terminata da una linea contenente solo un punto. halyard$ telnet tnt.isi.edu 25 Trying 128.9.128.128... Connected to tnt.isi.edu. Escape character is '^]'. 220 tnt.isi.edu ESMTP Sendmail 8.8.7/8.8.6; Sun, 25 Jul 1999 14:01:25 -0700 (PDT) helo isi.edu 250 tnt.isi.edu Hello rick@node-d8e9822 [216.233.8.34] (may be forged), pleased to meet you mail from: 250 ... Sender ok rcpt to: 250 ... Recipient ok data 354 Enter mail, end with "." on a line by itself From: Subject: help help . 250 OAA26778 Message accepted for delivery quit 221 tnt.isi.edu closing connection Connection closed by foreign host. halyard$ 77..33.. PPaazziieennzzaa.. La mailing list è l'ultima in parte perché è la più lenta. Quando la posta viene girata ad altri indirizzi, sipuò aspettare un'ora prima di vedere la risposta.