Come realizzare un remailer tipo II (Mixmaster)
(28/10/2003)
Copyright (c) 2003 del Progetto Winston Smith. E' garantito il permesso di copiare, distribuire e/o modificare questo documento seguendo i termini della GNU General Public License, Versione 2.0, pubblicata dalla Free Software Foundation. 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.9 su distribuzione GNU/Linux Debian Collegarsi come utente root Se già non è stato fatto, con apt-setup aggiungete le liste dei pacchetti non-free e contrib, e poi installare pgp-2.6.3i apt-get install pgp-i e ovviamente anche GPG può essere installato apt-get install gnupg Oppure, se non utilizzate Debian, potete scaricare Mixmaster da http://mixmaster.sourceforge.net/ la versione corrente nel momento in cui scrivo è contenuta nel file mixmaster-2.9.0.tar.gz Per l'installazione di mixmaster devono essere già installate le librerie openssl e ncurses. touch /var/spool/mail/mix chown mix.mail /var/spool/mail/mix chown mix.mix mixmaster-2.9.0.tar.gz Creare l'utente mix e entrare nel sistema come mix per compilare mixmaster adduser mix login as mix tar xzvf mixmaster-2.9.0.tar.gz cd mixmaster-2.9.0 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. #./Install Mixmaster directory? [/home/mix/Mix] Do you want to set up a remailer? [y] Use the source if the pre-installed library causes compilation problems. Use source? [n] Please enter a pass phrase for your remailer (must be the same whenever you re-compile Mixmaster). (inserisci la password) (a questo punto parte la compilazione) (Le domande che seguono sono parametri che andranno nel file mix.cfg che potrà comunque essere modificato in seguito) Install as middleman? [n] (i remailer middleman accettano e inviano posta solo ad altri remailer; questa modalità può 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: mix@mixmaster.it (inserite l'indirizzo del vostro remailer) Do you want Mixmaster to send auto-replies to messages it does not understand (If the addressis also used for mail to be read by a human, type `n')? [y] (se si attiva questa opzione il mixmaster risponderà con un messaggio di spiegazioni alle e-mail che non interpreta come messaggi correttamente inviatigli nel formato mixmaster (altre spiegazioni più sotto)). An address to appear in the `From:' line of anonymous messages: nobody@mixmaster.it (inserite l'indirizzo che deve comparire come mittente dei messaggi che transitano dal vostro remailer; il default va bene) Address for complaints to be sent to: abuse@mixmaster.it (è buona norma lasciare inalterata questa impostazione, abuse è l'indirizzo usato di default per inviare lamentele all'operatore). Choose a name for your remailer. It will appear in remailer status messages. Long name: [George Remailer] (questo sarà il "nome" completo del remailer) Choose a name to be used in the `From:' line of remailed messages. Anon long name: [George Orwell's remailer] A short name to appear in lists: george (questo sarà il "nome" del remailer con il quale sarà definito nelle liste pubbliche dei remailer attivi) 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) ) Accept unencrypted remailer messages? [n] (per accettare solo messaggi criptati, è meglio evitare che transitino sul server dei messaggi non criptati che potrebbero essere intercettati) 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, però può generare dei log riguardo la sua attività, 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 è presente in un file di testo, e in caso affermativo non lo spedisce; se un utente riceve spamming dal remailer può chiedere che l'operatore lo inserisca nella block list, oppure può farlo da solo se questa opzione è 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@nym.alias.net] Pool size: [20] (se arriva un messaggio finisce nel pool e ne esce dopo tot tempo, tanto maggiore quanto più è grande il pool dei messaggi, se però è troppo grande possono esserci problemi di latenza perché i messaggi restano troppo nel pool prima di uscire; un valore basso è utile per le prove). Mailbox for non-remailer messages: [/home/mix/Mix/mbox] (mailbox per i messaggi che il remailer non riconosce perché non contengono istruzioni di remailing) (a questo punto il remailer crea le sue chiavi - può essere lungo) Set .forward to the following line: "|/home/mix/Mix/mix -RM" Do that now? [y] (qui il remailer inserisce la riga che gli fa ricevere i messaggi destinati ad mix) Auto-replies impostate. Il remailer risponde automaticamente a certi msg con un file di spiegazioni: - posta per mix@mixmaster.it con subject: remailer-help --> help.txt - posta per mix@mixmaster.it con dentro: DESTINATION-BLOCK --> blocked.txt (con questo messaggio l'indirizzo del mittente viene bloccato, inserendolo nel file Mix/dest.blk ) - msg per mix@mixmaster.it non in formato corretto: --> usage.txt - posta per abuse@mixmaster.it: abuse.txt - posta per nobody@mixmaster.it: reply.txt Complete !!!!! L'indirizzo del remailer è quindi mix@mixmaster.it Come root aggiungo queste righe a /etc/mail/aliases: abuse: mix (abuse puntava a postmaster) nobody: mix e lancio il programma "newaliases" per aggiornare il db degli alias aggiungere gli indirizzi per il virtualhost: a genericstable aggiungo: mix mix@mixmaster.it a virtusertable aggiungo: mix@mixmaster.it mix lanciare infine un make per rendere effettive le modifiche. Controllare che i permessi siano settati correttamente tutto rw per mix.www-data tranne il file mix e la directory pool che sono rwx in pratica non cambio nulla, lascio così: directory /home/mix/. 0750 rwxr-x--- directory /home/mix/Mix 0700 rwx------ file /home/mix/Mix/mix 0700 rwx------ Fare un touch /home/mix/Mix/id.log per creare il file che il remailer non crea. È necessario prelevare la lista dei remailer attivi; c'è uno script apposito da inserire nel cron che si chiama getmix.sh, che aggiorna chiavi e statistiche. È possibile prelevarlo a questo indirizzo: http://lexx.shinn.net/cmeclax/getmix.html Se sendmail fosse installato con smrsh (un meccanismo per consentire l'utilizzo dei pipe) bisogna creare un link nella directory /usr/lib/sm.bin : su root cd /usr/lib/sm.bin ln -s /home/mix/Mix/mix mix Se invece viene usato postfix non c'e' bosogno di fare altro. A questo punto il remailer funziona, ma bisogna fare ancora qualcosa prima di renderlo pubblico in modo che sia utilizzabile in catena. 1) Bisogna creare una chiave PGP/GPG che avrà uno user-ID remailer-admin@mixmaster.it, con questa chiave si firmeranno tutti i messaggi postati nella mailing list dei remailer-operators. 2) Bisogna creare l'utente remailer-admin@mixmaster.it in /etc/mail/alias che verrà indirizzato all'utente mix o a chi si occuperà della gestione dei rapporti con la comunità cypherpunk e con gli utenti. 3) Con questa chiave vanno firmate le chiavi del remailer, quindi ho prelevato le chiavi, importate nel mio keyring, le ho firmate con la chiave del remailer-admin, le ho esportate (gpg -a --export KeyID >> remailer.keys.signed) dove KeyID sono i key ID delle chiavi RSA e DH del remailer. Le chiavi firmate le ho quindi messe nel file pgpkey.txt al posto di quelle vecchie in modo che chiunque richieda le chiavi al remailer riceva le chiavi firmate. 4) Sempre con la chiave dell'admin vanno firmati (gpg --clearsign) i messaggi di help che il remailer invia in automatico (i file help.txt, abuse.txt, usage.txt e reply.txt) 5) Ho modificato un paio di parametri nel file mix.cfg, soprattutto ho aggiunto: 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 mix con mutt e contengono messaggi errati, messaggi che vanno in bounce, richieste per l'utente abuse@mixmaster.it, 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 fare dei symlink in quanto mutt cerca le mailbox nella directory ~/mail/ nella home dell'utente mix, mentre le mailbox si trovano in ~/Mix/, quindi per ogni mailbox bisogna creare un symlink come questo ln -s ~/mail/mbox.abuse ~/Mix/mbox.abuse Le mailbox saranno poi accessibili ad es. con mutt inserendo nel file .muttrc una riga come questa : mailboxes +mbox.mix +mbox.abuse +mbox.block etc. etc. Per firmare tutti i msg in uscita dalla mailbox, bisogna impostare opportunamente mutt,ad esempio impostando nel .muttrc: my_hdr From: remailer-admin@No_Spam_Please.mixmaster.it set pgp_autosign set pgp_sign_as="remailer-admin@mixmaster.it" my_hdr X-PGP-Key-fingerprint: (inserite qui il fingerprint della chiave di remailer-admin) set realname="George admin" 6) Ho annunciato il remailer alla lista dei remailer operators remops@mixmaster.shinn.net e al newsgroup alt.privacy.anon-server, allegando le chiavi e gli altri dati del remailer; di solito si invia il contenuto della risposta del remailer al messaggio che ha soggetto "remailer-key" 7) Ho impostato il cron in modo che ogni 30 minuti esegua lo script getmix che aggiorna le chiavi dei remailer e le statistiche prelevandole dal webM come utente mix dare cron -e per editare il file in cui inserisco questa riga: */30 * * * * /home/mix/Mix/getmix.sh 8) Ho scritto a mike@shinn.net per inserire l'IP della macchina su cui gira il remailer nella sua "white list", in pratica è una lista di IP di remailer da cui il suo remailer accetta i messaggi, se non glielo si comunica tutti i msg per il remailer "shinn" vengono rispediti al mittente e finiscono nel folder dei bounce (e sono tanti), anche perché un pinger (software per generare le statistiche) gira sulla sua macchina. =============================================== == Installare il controllo antispam Nilsimsa == =============================================== Molto spesso quancuno tenta di usare i remailer per mandare spam, catene di S. Antonio od altri gruppi di messaggi molto simili. Esiste un programma che calcolando una distanza lessicale, rimuove dalla directory Mix/pool messaggi troppo simili, e li sposta in Mix/festi, dove possono poi essere esaminati o cancellati Scaricate il software da http://lexx.shinn.net/cmeclax/nilsimsa.html la versione corrente e' (e probabilmente rimarra') la 0.2.4. scompattate il file nilsimsa-0.2.4.tar.gz nella directory /home/mix con il comando tar zxvf nilsimsa-0.2.4.tar.gz che creera' la directory nilsimsa-0.2.4; entratevi e date i comandi ./configure make Potrebbe verificarsi un errore per la mancanza di termio.h, in questo caso dovete installare la libreria ncurses-dev. Ho scelto di non effettuare il make install, previsto dalle istruzioni di installazione, per evitare la necessita' di avere le permission di root e mantenere tutti i file del remailer nella directory /home/mix Devo quindi fare le seguenti modifiche rinominare la directory mv nilsimsa-0.2.4 nilsimsa entrare nella directory nilsimsa/scripts ed editare i 3 script che vi si trovano, dando la path assoluta; in pratica, in tutte le righe che iniziano con nilsimnsa ..... inserira la path all'inizio /home/mix/nilsimsa/scripts/nilsimsa ...... Creare la directory festi in /home/mix/Mix cd /home/mix/Mix mkdir festi facendo attenzione che abbia gli stessi permessi della directory pool Il principio di funzionamento di nilsimsa e' semplice. Inserite un job di cron frequente (ogni 5 minuti, anche meno secondo il trafico del remailer), */5 * * * * /home/mix/nilsimsa/scripts/finddups Questo job lancia lo script finddups, che scandisce i file della directory pool (i messaggi del remailer) e sposta nella directory festi gli eventuali gruppi di messaggi molto simili. Inserisce poi nel file /home/mix/Mix/rules una riga che contiene l'impronta del gruppo di file spostati e la lettera "D". Questa riga provochera' lo spostamento di eventuali altri file simili che giungessero successivamente, anche se arrivassero uno per volta. La directory festi tendera' quindi a riempirsi; usando a mano lo script catsimsa, a cui dovete fornire come argomento una intera liea del file rules, potete visualizzare i file relativi, per decidere se sono da gettare (spam, flood ..) oppure se sono legittimi (ad es. i ping dei pinger echolot) Nei primi tempi dovrete provare ogni nuova riga di rules, per vedere se i messaggi sono dei ping; quando ne trovate uno, modificate la riga relativa sostituendo "D" con "A". Potete anche aggiungere un commento aggiungendo un cancelletto a fine riga, e proseguendo con il commento vero e proprio. Attenzione a conservare lo spazio bianco che c'e' a fine riga; il cancelletto inseritelo dopo. Rimettete poi i messaggi legittimi in pool con lo script mvsimsa, a cui come al solito va fornita la relativa riga di rules come argomento. Ripetete l'operazione per tutte le nuove righe di rules (vi conviene inserire un commento per distinguere quelle che avete testato dalle altre che verranno aggiunte in futuro) A questo punto cancellate tutti i file rimasti nella directory festi. Durante un flood, su un remailer pienamente operativo possono essere generati anche 100Mb di file al giorno, sia nella directory festi, che nella mailbox dell'utente mix che nei file /home/mix/Mix/mbox.xxxx. All'inizio un controllo quotidiano della situazione e' praticamente obbligatorio; dopo qualche settimana, nel caso che questo ritmo di controllo non possa continuare, e' opportuno automatizzare lo svuotamento della dir festi ed il trim delle mailbox con uno script in cron, che scatti ogni giorno, od al verificarsi di un certo evento, per esempio la dimensione della directory /home/mix/Mix che supera i 100-200Mb. Attenzione anche alla dimensione della mailbox dell'utente che e' di solito /var/spool/mail/mix. ============================================================ == Interfaccia web per utilizzare il remailer Mixmaster == ============================================================ http://xenophon.r0x.net/webscripts.tar.gz Pubblico una directory web con il nome del remailer; ad esempio, utilizzando apache attivo l'opzione che pubblica la directory di default degli utenti. La directory si potra accedere come http://mixmaster.it/~mix, ma non sara' questo il modo di accederla. Bisogna creare in apache un virtualhost per remailer.mixmaster.it che consenta solo connessioni attraverso ssl, ridirigendo automaticamente su https eventuali connessioni http a mixmaster.it. La homedir sara' ovviamente /home/mix/public_html. Creo la directory /home/mix/public_html con una sottodirectory cgi-bin. sposto il file webscripts.tar.gz in /home/mix/public_html e lo decmoprimo 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/mix/public_html 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/mix/public_html/cgi-bin/rems riga 65: sostituisco con cp outdata /home/mix/public_html/cgi-bin/data riga 69: sostituisco con cat output | grep Generated > /home/mix/public_html/cgi-bin/current file: send inserisco il percorso dove risiede l'eseguibile del remailer mixmaster: /home/mix/Mix/mix -S file: /cgi-bin/mixemail-send.cgi riga 27: inserisco il percorso dell'eseguibile del mixmaster: $mix = "/home/mix/Mix/mix"; 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/mix/public_html/cgi-bin/current"; riga 28: $data = "/home/mix/public_html/cgi-bin/data"; riga 29: $rems = "/home/mix/public_html/cgi-bin/rems"; riga 71: open(CURRENT, "/home/mix/public_html/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/mix/public_html/gc > /dev/null 2>&1 chmod +x a tutti gli scripts Sara' infine necessario modificare i permessi in modo che l'utente www-data, che fa girare apache, possa accedere all'eseguibile /home/mix/Mix/mix.