Come realizzare un remailer
(23/01/2003)
(winstonsmith@nym.alias.net)
Copyright (c) 2003 del Progetto Winston Smith.
È garantito il permesso di copiare,
distribuire e/o modificare questo documento
seguendo i termini della GNU Free Documentation
License, Versione 1.1
pubblicata dalla Free Software Foundation;
con le tutte le Sezioni Non Modificabili.
Una copia della licenza è acclusa nel file
COPYING, distribuito insieme a questo documento.
Un remailer anonimo è un programma che riceve posta opportunamente crittografata tramite appositi programmi client, la decrittografa per la parte di sua competenza, e la inoltra ad un altro remailer od al destinatario finale.
Se il mittente del messaggio utilizza una catena di almeno 3 remailer per inviare la posta, il messaggio è irrintracciabile anche se uno dei 3 remailer fosse sotto completo controllo del nemico.
I remailer di tipo Mixmaster adottano precauzioni particolari per nascondere il flusso dei messaggi in arrivo ed in partenza, suddividendoli in parti tutte della stessa lunghezza, generando messaggi fasulli, e spedendo i messaggi ad intervalli casuali.
Un remailer correttamente utilizzato permette di spedire un messaggio ad un destinatario senza che nessuno, destinatario o nemico, possa risalire al mittente.
Il destinatario non può però rispondere al mittente senza che quest'ultimo gli riveli la sua identità, ed inoltre il mittente deve fidarsi del destinatario per quanto riguarda il corretto uso dei remailer; un errore nell'inoltrare la risposta da parte del destinatario potrebbe compromettere la anonimità del mittente nei confronti del nemico.
Per risolvere il problema della risposta sono stati realizzati i nym server.
Un nym server è un programma che permette di crearsi una identità anonima, che consente al destinatario di rispondere senza dover conoscere l'indirizzo del mittente.
Se l'invio del messaggio viene realizzato utilizzando, sempre tramite un apposito client, sia una catena di remailer che un nym server, è possibile realizzare una comunicazione completamente anonima, in cui le parti non possono risalire alla reciproca identità, e che il nemico non può rintracciare.
L'installazione di un remailer e di un nym server richiede una macchina 486 o superiore, dotata di GNU/Linux con almeno 32 mb ram (senza X) ed almeno 512 mb di spazio su disco.
Il carico della cpu e la banda passante utilizzata per il traffico dipendono fortemente da quanto il remailer sarà utilizzato, e saranno inizialmente quasi zero.
Avere CPU pentium, clock maggiori e più ram non infastidisce di certo, ed un pentium 133, 64 Mb di ram e 1 Gb di disco sono una configurazione più che adeguata. Per smaltire un traffico alto serve comunque una banda passante adeguata; aspettatevi che il collo di bottiglia sia lì.
A tutti gli effetti, a parte i privilegi richiesti durante l'installazione, un remailer è semplicemente un utente dedicato che riceve e trasmette posta automaticamente utilizzando l'MTA della macchina su cui è installato (sendmail, qmail, etc.).
installazione di Mixmaster 2.9beta40 su distribuzione GNU/Linux
Preparazione all'installazione
Creare un nuovo utente e chiamatelo ad es. anon
# adduser anon
Verificare di avere installati sul proprio sistema sia GPG che PGP
2.6.3i per gestirsi chiavi DH e RSA.
Come utente anon scaricare il file mixmaster-2.9beta39.tar.gz dal sito
http://www.sourceforge.net/projects/mixmaster/
nella home directory dell'utente anon e decomprimere il pacchetto:
$ tar xzvf mixmaster-2.9b39.tar.gz
$ cd mixmaster-2.9b39
Eseguire il comando ./Install e rispondere alle domande con le scelte che trovate nel log di installazione che segue.
Tra parentesi tonda trovate dei commenti.
L'installazione vera e propria
$ ./Install
Mixmaster directory? [/home/anon/Mix]
Do you want to set up a remailer? [y]
Do you want to compile the passphrase into the binary? [n]
Use the source if the pre-installed library causes compilation problems.
Use source? [n]
(Le domande che seguono sono parametri che andranno nel file mix.cfg
che potra' comunque essere modificato in seguito)
Install as middleman? [n]
(i remailer middleman accettano e inviano posta solo ad altri remailer;
questa modalita' puo' essere utile ad es. nel caso in cui il remailer sia
usato da qualcuno per fare spamming e l'operatore subisca pressioni per
chiuderlo.)
The e-mail address of your remailer:
(inserite l'indirizzo del vostro remailer)
Do you want Mixmaster to send auto-replies to messages it does not
understand (If the address <anon@esempio.it> is also used
for mail to be read by a human, type `n')? [y]
(se si attiva questa opzione il mixmaster rispondera' con un messaggio
di spiegazioni alle e-mail che non interpreta come messaggi correttamente
inviatigli nel formato mixmaster (altre spiegazioni piu' sotto)).
An address to appear in the `From:' line of anonymous messages:
(inserite l'indirizzo che deve comparire come mittente
dei messaggi che transitano dal vostro remailer; di solito si usa nobody)
Address for complaints to be sent to:
(e' buona definire un indirizzo come abuse che sara' l'indirizzo usato per
inviare lamentele all'operatore).
Choose a name for your remailer. It will appear in remailer status messages.
Long name: [Anonymous Remailer]
Choose a name to be used in the `From:' line of remailed messages.
Anon long name: [Anonymous]
A short name to appear in lists:
(questo sara' il "nome" del remailer con il quale sara' definito nelle liste
pubbliche dei remailer attivi; e' importante che non sia piu' lungo di
8 caratteri e che non contenga lettere maiuscole).
Accept Mixmaster (Type II) messages? [y]
(per accettare messaggi nel formato mixmaster (type II) )
Accept PGP (Type I) remailer messages? [y]
(per accettare messaggi nel formato cypherpunk (type I) )
Mixmaster will log error messages and warnings. Do you want to log
informational messages about normal operation as well? [y]
(il remailer non logga gli IP, pero' puo' generare dei log
riguardo la sua attivita', problemi, errori e operazioni compiute,
utile soprattutto nella fase iniziale di debug)
Filter binary attachments? [y]
Allow users to add themselves to the list of blocked addresses? [y]
(il remailer controlla se l'indirizzo di destinazione di un messaggio
e' presente in un file di testo, e in caso affermativo non lo spedisce;
se un utente riceve spamming dal remailer puo' chiedere che l'operatore
lo inserisca nella block list, oppure puo' farlo da solo se questa
opzione e' attivata).
Do you want to allow posting? Newsgroups can be restricted in dest.blk.
y)es, post locally; use m)ail-to-news gateway; n)o.
Allow posting to Usenet? [m]
Mail-to-news gateway: [mail2news_nospam@nym.alias.net]
Pool size: [20]
(se arriva un messaggio finisce nel pool e ne esce dopo tot tempo, tanto
maggiore quanto piu' e' grande il pool dei messaggi, se pero' e' troppo
grande possono esserci problemi di latenza perche' i messaggi restano
troppo nel pool prima di uscire; un valore basso e' utili per le prove).
Mailbox for non-remailer messages: [/home/anon/Mix/mbox]
(mailbox per i messaggi che il remailer non riconosce perche' non
contengono istruzioni di remailing)
Set .forward to the following line:
"|/home/anon/Mix/mix -RM"
Do that now? [n]
(potete scegliere se usare questo formato oppure dire no e usare procmail
che e' piu' versatile, spiegato piu' avanti)
Risposte automatiche impostate:
Mail to <anon@esempio.it> with Subject: remailer-help => help.txt
Mail to <anon@esempio.it> with Subject: remailer-adminkey => adminkey.txt
Remember to add your Remailer Admin public PGP key to the adminkey.txt file.
Mail to <anon@esempio.it> with line DESTINATION-BLOCK => blocked.txt
Other mail to <anon@esempio.it> => usage.txt
If you arrange for mail to <abuse@esempio.it> and <nobody@esempio.it>
to be forwarded to <anon@esempio.it>:
Mail to <abuse@esempio.it> => abuse.txt
Mail to <nobody@esempio.it> => reply.txt
Mixmaster installation complete.
Post-installazione
A questo punto come root dobbiamo impostare in /etc/aliases (questo dipende dal vostro MTA)
due alias di posta per far arrivare all'utente anon i messaggi destinati ad abuse e nobody.
abuse: anon
nobody: anon
e lanciare il programma newaliases per aggiornare il database degli alias
Se usate sendmail come MTA l'avete installato con smrsh (un meccanismo per consentire l'utilizzo dei pipe) bisogna creare un link nella directory /usr/lib/sm.bin :
# cd /usr/lib/sm.bin
# ln -s /home/anon/Mix/mix mix
A questo punto il remailer dovrebbe funzionare, ma bisogna fare ancora qualcosa prima di renderlo pubblico in modo che sia utilizzabile in catena:
Bisogna modificare un paio di parametri nel file mix.cfg, soprattutto bisgona aggiungere:
AUTOREPLY Y
per fare in modo che risponda in modo automatico ad alcune richieste (vedi sopra) e ho attivato la gestione separata delle mailbox:
MAILBOX mbox.mix
MAILABUSE mbox.abuse
MAILBLOCK mbox.block
MAILUSAGE mbox.usage
MAILANON mbox.anon
MAILERROR mbox.error
MAILBOUNCE mbox.bounce
queste mailbox sono leggibili dall'utente anon con mutt e contengono messaggi errati,
messaggi che vanno in bounce, richieste per l'utente abuse, errori vari e richieste
di blocco delle persone che non vogliono che il remailer gli mandi i messaggi.
Per avere le mailbox facilmente accessibili con mutt bisogna impostare nel file .muttrc dell'utente anon:
set folder=~/Mix
Le mailbox saranno poi accessibili con mutt inserendo nel file .muttrc una riga come questa :
mailboxes +mbox.mix +mbox.abuse +mbox.block etc. etc.
Il remailer va annunciato alla lista dei remailer operators remops@lexx.shinn.net e al newsgroup alt.privacy.anon-server
Bisogna anche scrivere a mike@shinn.net per inserire l'IP della macchina su cui gira il remailer nella sua "white list", in pratica e' una lista di IP di remailer da cui il suo remailer accetta i messaggi, (altrimenti i msg inviati attivano un flood detector e quindi vengono bloccati).
Se non glielo si comunica i msg per il remailer "shinn" < remailer@freedom.gmsociety.org > vengono rispediti al mittente e finiscono nel folder dei bounce (e sono tanti).
Ho messo nel .procmailrc dell'utente anon queste istruzioni:
:0
*
"|/home/anon/Mix/mix -RM"
Ho eliminato i simboli dall'eseguibile
cd ~/Mix
strip mix
Tenere aggiornate chiavi e statistiche
Per avere una lista dei remailer disponibili sempre aggiornata e' utile usare lo script getmix.sh
http://lexx.shinn.net/cmeclax/getmix.html
che scarica chiavi e statistiche dei remailer.
Copiarlo in /usr/local/bin e dare il comando:
# chmod +x /usr/local/bin/getmix.sh
per renderlo eseguibile.
E' buona regola eseguirlo regolarmente per restare aggiornati, editare
il crontab dell'utente anon con
$ crontab -e -u anon
e aggiungere questa riga:
*/30 * * * * /home/anon/Mix/getmix.sh
in modo che ogni 30 minuti vengano scaricate chiavi e statistiche aggiornati.
Il remailer administrator
Bisogna creare una chiave PGP/GPG che avra' uno user-ID remailer-admin@esempio.it,
con questa chiave si firmeranno tutti i messaggi postati nella mailing list dei remailer-operators.
Bisogna creare l'utente remailer-admin@esempio.it in /etc/aliases che verra' indirizzato all'utente anon o a chi si
occupera' della gestione dei rapporti con la comunita' cypherpunk e con gli utenti.
Per firmare tutti i msg in uscita dalla mailbox, usando mutt come client di posta di puo' bisogna impostare settare il .muttrc in questo modo:
my_hdr From: remailer-admin@esempio.it
set pgp_autosign
set pgp_sign_as="remailer-admin@esempio.it"
my_hdr X-PGP-Key-fingerprint: A9 32 4A CB 3C 4B 5D DA AB 34 BC A6 4D C8 44 5C
set realname="remailerX Admin"
====================================================
Installare un'interfaccia web per il remailer
E' possibile scaricare dal server autistici.org una serie di script che consentono di installare un'interfaccia web per il remailer mixmaster.
http://remailer.autistici.org/webscripts.tar.gz
Ponendo che la Root Directory di apache sia /home/apache,
creo la directory /home/apache/mixmaster con una sottodirectory cgi-bin.
sposto il file webscripts.tar.gz in /home/apache/mixmaster e lo decoprimo con:
$ tar -xzvf webscripts.tar.gz
I 4 file .cgi li sposto in /cgi-bin
Adesso devo modificare qualche file per adattarlo al mio sistema:
file: gc
riga 13: sostituisco il percorso con quello dove io ho installato lo script:
cd /home/apache/mixmaster
commento le righe dalla 31 alla 35 perche' non voglio che i file type2.list e pubring.mix raccolti da questo script vadano a sovrascrivere quelli raccolti dal remailer mixmaster con un altro script.
Quindi anche alla riga 22 tolgo il "&& \" finale perche' mi basta il wget che preleva il file mlist2.txt
riga 54: sostituisco con: cp rems2 /home/apache/mixmaster/cgi-bin/rems
riga 65: sostituisco con: cp outdata /home/apache/mixmaster/cgi-bin/data
riga 69: sostituisco con: cat output | grep Generated > /home/apache/mixmaster/cgi-bin/current
file: send
inserisco il percorso dove risiede l'eseguibile del remailer mixmaster:
/home/anon/Mix/mix -S
file: cgi-bin/mixemail-send.cgi
riga 27: inserisco il percorso dell'eseguibile del mixmaster:
$mix = "/home/anon/Mix/mix";
Ovviamente l'eseguibile del mixmaster dovra' essere accessbile all'owner del processo httpd, in genere e' l'utente nobody, quindi occhio ai permessi.
file: cgi-bin/mixnews-send.cgi
vedi file precedente, stessa variabile da definire alla riga 27
file: cgi-bin/mixemail-user.cgi
imposto i percorsi dove si troveranno alcuni files delle statistiche:
riga 25: $current = "/home/apache/mixmaster/cgi-bin/current";
riga 28: $data = "/home/apache/mixmaster/cgi-bin/data";
riga 29: $rems = "/home/apache/mixmaster/cgi-bin/rems";
riga 71: open(CURRENT, "/home/apache/mixmaster/cgi-bin/current");
file: cgi-bin/mixnews-user.cgi
vedi file precedente, bisogna definire i percorsi per le variabili current, data e rems, che sono alle righe 26, 29 e 30.
poi c'e' da impostare un cron che lanci lo script gc ogni ora:
0 */1 * * * /home/apache/mixmaster/gc > /dev/null 2>&1
il cron sara' quello dell'utente coi cui permessi gira apache, di solito nobody.
dare un chmod +x a tutti gli scripts per renderli eseguibili
infine bisogna lavorare su apache creando due virtualhost per
mixmaster.mioserver.org, uno per la porta 80 che mostri un errore,
perche' la connessione deve avvenire criptata in https, quindi sulla
porta 443, e uno appunto per la porta 443 che consenta l'esecuzione degli script cgi.
Qui' sotto e' riportato un esempio:
<VirtualHost 80.71.227.37:80>
ServerAdmin webmaster@esempio.it
DocumentRoot /home/apache/mixmaster/error
ServerName mixmaster.esempio.it
ErrorLog "/var/log/apache/mixmaster-error_log"
CustomLog /var/log/apache/mixmaster-access_log common
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost 80.71.227.37:443>
ServerAdmin webmaster@esempio.it
DocumentRoot /home/apache/mixmaster/cgi-bin/mixemail-user.cgi
ServerName mixmaster.esempio.it
ErrorLog "/var/log/apache/mixmaster-error_log-ssl"
CustomLog /var/log/apache/mixmaster-access_log-ssl common
ScriptAlias /cgi-bin/ "/home/apache/mixmaster/cgi-bin/"
SSLEngine on
#SSLCertificateFile /etc/apache/ssl.crt/para.pem
SSLCertificateFile /etc/ssl/certs/apache.pem
SSLCertificateKeyFile /etc/ssl/keys/apache-key.pem
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
</Virtualhost>