  Firewall Piercing mini-HOWTO
  Franois-Ren Rideau, fare@tunes.org
  v0.3b, 27 novembre 1998

  Direttive per l'utilizzo del protocollo ppp usando telnet per operare
  in modo trasparente attraverso un firewall Internet.  Traduzione a
  cura di Stefano di Sandro <stedis@radiolink.net>, ultima revisione 24
  Gennaio 2000.
  ______________________________________________________________________

  Indice Generale


  1. Varie
     1.1 LIBERATORIA
     1.2 Copyright
     1.3 Ringraziamenti

  2. Introduzione
     2.1 Premessa
     2.2 Problemi di sicurezza
     2.3 Altri requisiti
     2.4 Scaricare il software

  3. Capire il problema
     3.1 Dare un nome alle cose
     3.2 Il problema
     3.3 Difficolt aggiuntive

  4. La soluzione
     4.1 Il principio
     4.2 fwprc
     4.3 .fwprcrc

  5. Piercing al contrario
     5.1 Giustificazioni
     5.2 Ricevere il messaggio di innesco

  6. Note Finali
     6.1 Altre impostazioni
     6.2 Manutenzione dell'HOWTO
     6.3 Copia extra della IMPORTANTE LIBERATORIA --- CREDETEMI!!!


  ______________________________________________________________________

  11..  VVaarriiee



  11..11..  LLIIBBEERRAATTOORRIIAA

  LLEEGGGGII QQUUEESSTTAA SSEEZZIIOONNEE::  IIMMPPOORRTTAANNTTEE !!!!!!

  QQuuii ddii sseegguuiittoo ddeecclliinnoo ttuuttttee llee rreessppoonnssaabbiilliitt ppeerr qquueessttee
  iinnffoorrmmaazziioonnii..  QQuuaalluunnqquuee ssiiaa iill mmooddoo iinn ccuuii iill lloorroo uuttiilliizzzzoo ppoossssaa
  rriittoorrcceerrssii ccoonnttrroo ddii vvooii,, nnoonn  ccoollppaa mmiiaa..  SSee nnoonn ssiieettee iinn ggrraaddoo ddii
  ccoommpprreennddeerree ii rriisscchhii ccuuii vvii aacccciinnggeettee aa ssoottttooppoorrvvii ffaacceennddoo ccii cchhee qquuii
   ssccrriittttoo,, nnoonn ffaatteelloo..  SSee uusseerreettee qquueessttee iinnffoorrmmaazziioonnii ee ccii
  ppeerrmmeetttteerr aa bbaalloorrddii tteeppppiissttii ddii ppeenneettrraarree llee ddiiffeessee ddeeii ccoommppuutteerr
  ddeellllaa vvoossttrraa aazziieennddaa ccoommpprroommeetttteennddoo vvooii,, iill vvoossttrroo iimmppiieeggoo ee ii
  mmiilliiaarrddii ddeellllaa vvoossttrraa aazziieennddaa,, bbeehh ssoonnoo pprroobblleemmii vvoossttrrii..  NNoonn vveenniittee aa
  ppiiaannggeerree ddaa mmee..



  11..22..  CCooppyyrriigghhtt

  Copyright  1998 by Franois-Ren Rideau.

  This document is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or (at
  your option) any later version.

  Questo documento  da considerarsi software libero; ne  possibile la
  redistribuzione e/o la modifica nei termini della GNU General Public
  License cos come pubblicata dalla Free Software Foundation, sia nella
  versione 2 che (a vostra scelta) in una qualunque versione successiva.


  11..33..  RRiinnggrraazziiaammeennttii

  Sebbene abbia riscritto quasi tutto tranne la liberatoria, sono in
  debito con Barak Pearlmutter  <mailto:bap@cs.unm.edu> per il suo Term-
  Firewall mini-HOWTO: penso che vi fosse la necessit di un mini-HOWTO
  sul "firewall piercing", e nonostante qualche difetto, il suo mini-
  HOWTO si  rivelato un modello e un incoraggiamento.


  22..  IInnttrroodduuzziioonnee

  22..11..  PPrreemmeessssaa

  Dal momento che amministratori di sistema e semplici utenti hanno
  diversi diritti e doveri, pu accadere che un utente si trovi protetto
  dietro un firewall, che  in grado di attraversare, ma in maniera
  complicata.  Questo mini-HOWTO spiega un metodo generale e versatile
  per utilizzare gli strumenti di Internet, senza che apparentemente si
  debba attraversare alcun firewall, facendo uso di un emulatore IP
  all'interno di una sessione telnet.

  Tutto  liberamente inspirato al Term-Firewall mini_HOWTO di Barak
  Pearlmutter  <mailto:bap@cs.unm.edu>, che si affidava sia all'antico e
  abbandonato Term (a suo tempo un grande programma), che ai dettagli di
  una implementazione di telnet non proprio standard, fatta di codice
  obsoleto e non portabile.


  22..22..  PPrroobblleemmii ddii ssiiccuurreezzzzaa

  Se l'amministratore del vostro sistema ha predisposto un firewall, 
  naturale che possa aver avuto le sue buone ragioni, cos come 
  probabile che voi abbiate sottoscritto l'accordo di non aggirarlo.
  D'altro canto, l'eventuale possibilit di utilizzare telnet verso
  l'esterno (che  un requisito affinch quanto ci accingiamo a spiegare
  funzioni) significa che vi  stato concesso di connettervi con sistemi
  remoti e, se potete effettuare il login su alcuni di questi sistemi,
  significa che qualcuno ve l'ha a sua volta permesso.

  Quindi l'utilizzo dei varchi "legali" in un firewall diventa
  estremamente _c_o_n_v_e_n_i_e_n_t_e per permettere a qualunque programma remoto
  di comunicare con la nostra macchina utilizzando i normali protocolli.
  Nel caso opposto avremmo bisogno di programmi speciali o modificati (e
  ricompilati) facenti uso di proxy dai compiti particolari, le cui
  configurazioni possono essere opera di amministratori sprovveduti o
  incompetenti.  Oppure potremmo dover installare un certo numero di
  convertitori per poter accedere a ciascuno dei normali servizi (come
  la posta elettronica) attraverso le strade consentite dal firewall
  (come il web).


  Inoltre l'uso di un emulatore IP che operi a livello utente come
  SLiRP, pu essere anche utile per prevenire attacchi dall'esterno in
  grado di perforare il firewall nuovamente in senso inverso, a meno che
  non siate voi a permetterlo esplicitamente (oppure che l'attacco sia
  condotto in modo abile e astuto o che l'intruso abbia acquisito i
  privilegi di root o, infine, che sia in grado di spiarvi sull'host
  remoto).

  Sia come sia, il metodo qui presente dovrebbe essere _r_e_l_a_t_i_v_a_m_e_n_t_e
  sicuro.  Tutto dipende dalle particolari circostanze nelle quali vi
  troverete quando lo metterete all'opera e io non posso darvi alcuna
  garanzia.  Molti sono gli aspetti intrinsecamente insicuri in una
  qualunque connessione internet e non dipendono esclusivamente dall'uso
  di questo metodo; non assumete a priori di essere al sicuro a meno che
  non ne abbiate delle valide ragioni e cercate di criptare sempre
  l'informazione.

  Per concludere: non usate questo metodologia se non sapete cosa state
  facendo.   meglio che rileggiate la liberatoria.



  22..33..  AAllttrrii rreeqquuiissiittii

  Si d per scontato che sappiate cosa state facendo; che sappiate
  impostare una connessione di rete; che possediate un account di shell
  su entrambi i lati del firewall; che possiate usare telnet (o ssh, o
  equivalenti) da un account all'altro; che possiate far girare un
  emulatore IP su entrambi i lati della connessione; che possediate
  programmi in grado di lavorare su un'emulazione IP.  Si noti come
  qualunque programma possa usare la connnessione, in questo caso  il
  pppd l'emulatore locale che colloquia con il kernel di Linux; altri
  emulatori, come Term, necessitano di essere ricompilati e collegati a
  speciali librerie.

  Parlando di emulatori IP, il demone pppd si trova in qualunque buona
  distribuzione di Linux o sito ftp; e lo stesso vale per SLiRP.  Se
  l'account sulla shell remota vi consente di eseguire programmi
  soltanto a livello utente, SliRP  la soluzione da adottare per la
  connessione.


  22..44..  SSccaarriiccaarree iill ssooffttwwaarree

  La maggior parte del software descritto sar disponibile nella vostra
  distribuzione o enventualmente tra i contrib; tranne gli ultimi due
  tutti si possono trovare come pacchetti rpm.  Nel caso vogliate
  recuperare l'ultima versione dei sorgenti o degli eseguibili (dopo
  tutto non  detto che su entrambi i lati della connessione si trovi un
  sistema Linux) utilizzate gli indirizzi elencati di seguito:

    SLiRP si trova a <http://blitzen.canberra.edu.au/slirp> oppure
     <ftp://www.ibc.wustl.edu/pub/slirp_bin/>.

    zsh la trovate presso <http://www.peak.org/zsh/>.

    ppp  scaricabile da <ftp://cs.anu.edu.au/pub/software/ppp/>.

    fwprc e cotty sono invece a
     <http://www.tunes.org/~fare/files/fwprc/>.



  33..  CCaappiirree iill pprroobblleemmaa

  Capire un problema  la prima met del percorso che porta alla sua
  soluzione.


  33..11..  DDaarree uunn nnoommee aallllee ccoossee

  Se volete che questo medoto funzioni,  obbligatorio che abbiate
  un'idea di come funziona, cos, nell'eventualit che qualcosa vada
  storto, saprete dove andare a mettere le mani.

  D'ora in avanti avranno aggettivo "locale" sia la macchina che inizia
  la connessione, sia i programmi e i file che si trovano in essa;
  dunque, tutto quello che si trova dall'altra parte sar "remoto".


  33..22..  IIll pprroobblleemmaa

  Il nostro fine  collegare l'ingresso e l'uscita di un emulatore IP
  locale rispettivamente all'uscita e all'ingresso di un emulatore IP
  remoto.  I canali di comunicazione con i quali gli emulatori
  interagiscono sono device diretti (come nel caso usuale del pppd) o il
  "tty corrente".  Questo ovviamente non si verifica con una sessione
  telnet.  In quest'ultimo caso la situazione  complicata perch,
  quando lanciate l'emulatore locale da riga comando, il "tty corrente"
   collegato all'utente non a una sessione remota. Inoltre quando
  apriamo una nuova sessione, sia essa locale o remota, su un nuovo
  terminale, dobbiamo sincronizzare l'avvio e la connessione di entrambi
  gli emulatori IP altrimenti la spazzatura prodotta in uscita da una
  delle due sessioni rappresenter un comando per l'altra sessione con
  il risultato di produrre altra spazzatura.


  33..33..  DDiiffffiiccoolltt aaggggiiuunnttiivvee

  Per ottenenere la massima facilit d'uso, l'emulatore IP locale deve
  fornire un IP al kernel per le operazioni di rete, per tale ragione si
  usa il pppd.  Comunque, il pppd  limitato abbastanza da accettare
  dati attraverso una sola voce all'interno della directory /dev o
  attraverso il terminale corrente (tty); una coppia di pipe sarebbe
  stata molto pi naturale.  Tutto funziona correttamente per quanto
  riguarda il pppd remoto, visto che quest'ultimo pu usare il tty della
  sessione telnet; ma per il pppd locale  un problema perch non  in
  grado di lanciare la sessione telnet per effettuare la connessione e
  quindi dovremo provvedere ad aggiungergli attorno uno strato di
  software.

  Telnet si comporta _q_u_a_s_i corretamente con una coppia di pipe, solo che
  si ostiner sempre a effettuare il controllo di I/O (ioctl) sul tty
  corrente, con il quale interagisce; usare telnet senza un tty  causa
  inoltre di corse critiche che faranno fallire la connessione su
  macchine "lente" (fwrpc 0.1 funziona perfettamente su un P/MMX 233,
  una volta su sei su un 6x86-P200+ e mai su un 486DX2/66).

  [Nota: se trovo quel bischero (probabilmente qualcuno del MULTICS,
  sebbene debba esserci stata gente UNIX stupida abbastanza da copiare
  l'idea) che ha inventato il principio dei dispositivi "tty" in base al
  quale si legge e si scrive dallo "stesso" pseudo-file, invece di poter
  disporre di una pulita coppia di pipe, lo strangolo!]


  44..  LLaa ssoolluuzziioonnee



  44..11..  IIll pprriinncciippiioo

  Il programma per il firewall-piercing, fwprc, far uso di un "proxy
  tty", cotty, che apre due dispositivi pseudo-tty, invoca alcuni
  comandi su ciascuno di questi slave e, senza pi smettere, copia ogni
  carattere che viene battuto, nel tty che serve da ingresso per l'altro
  comando.  Un comando sar la connessione telnet al sito remoto e
  l'altro sar il locale demone pppd.  Il pppd pu quindi aprire e
  controllare la sessione telnet con il pi classico degli script di
  chat.


  44..22..  ffwwpprrcc

  Ho realizzato un script auto-documentato per "forare" i firewall,
  fwprc, disponibile al mio sito
  <http://www.tunes.org/~fare/files/fwprc/>, insieme a cotty (che 
  necessario nelle versioni fwprc 0.2 e successive).  Al momento di
  scrivere queste parole, le versioni pi recenti sono fwprc 0.3a e
  cotty 0.3a.

  Il nome "fwprc"  volutamente illeggibile e impronunciabile, al fine
  di confondere il paranoico amministratore di sistema che probabilmente
   la causa del firewall che vi rompe le scatole (naturalmente, possono
  esistere anche firewall opportuni, e talvolta indispensabili; la
  sicurezza  tutta una questione di _c_o_r_r_e_t_t_a configurazione).  Se
  dovete pronunciare questa parola ad alta voce, fate in modo di dirla
  nel peggior modo possibile.

  SFIDA! SFIDA! Mandatemi un file audio in formato .au con la
  registrazione digitale della vostra pronuncia di "fwprc".  La peggiore
  vincer un aggiornamento gratuito e il suo nome nella pagina della
  versione 1.0 di fwprc.

  Ho verificato il programma con svariate impostazioni configurandolo
  attraverso dei file di risorse.  Ma naturalmente, per la legge di
  Murphy, a voi non funzioner.  Ritenetevi liberi di contribuire ai
  miglioramenti che potranno rendere la vita pi facile alle persone che
  faranno le cose dopo di voi.


  44..33..  ..ffwwpprrccrrcc

  fwprc pu essere personalizato attraverso il file .fwprcrc che deve
  essere disponibile su entrambi i lati della connessione.   anche
  possibile predisporre configurazioni diverse da usare alternativamente
  (per esempio, _i_o lo faccio), ed  lasciato come esercizio al lettore.

  Per cominciare, copiate la sezione appropriata di fwprc (la penultima)
  nel file .fwprcrc all'interno della vostra home directory.  Poi
  rimpiazzate i valori delle variabili con quelli adatti alla vostra
  configurazione.  Infine copiate il tutto anche sull'altro host e
  provate.

  Il metodo di base prevede di usare il pppd localmente e slirp sulla
  macchina remota.  Per modificarlo potreste ridefinire la appropriata
  funzione all'interno del vostro .fwprcrc con una linea del tipo:

       remote_IP_emu () { remote_pppd }


  Ricordate che SLiRP  pi sicuro di pppd, ed  pi facile accedervi,
  dal momento che non richiede privilegi di root sull'host remoto.
  Un'altra caratteristica di sicurezza consiste nel fatto che scarter
  tutti i pacchetti che non provengono direttamente dalla macchina a
  esso connessa (tale caratteristica diventa un difetto se tentate di
  sfruttare questo metodo per realizzare il routing di una sottorete
  usando il mascheramento dell'IP).  Le funzionalit di base di SLiRP
  sono piuttosto affidabili anche se l'ho trovato privo delle aggiunte
  promesse (quali la controllabilit a tempo di esecuzione), ma, dal
  momento che  un software libero, siete anche voi liberi di mettere le
  mani nel codice sorgente in modo da implementare tutte le funzionalit
  di cui possiate avere bisogno.



  55..  PPiieerrcciinngg aall ccoonnttrraarriioo



  55..11..  GGiiuussttiiffiiccaazziioonnii

  Talvolta, solo da un lato del firewall  possibile lanciare una
  sessione telnet; ci nonostante alcune forme di comunicazione restano
  possibili (tipicamante usando la posta elettronica).  Forare il
  firewall  ancora possibile, escogitando un qualunque modo di
  innescare una connessione telnet dalla parte "giusta" del firewall
  verso l'altra.

  fwprc include il codice per scatenare tali connessioni a partire da un
  messaggio di posta elettronica autenticato con PGP; tutto ci di cui
  abbisognate  aggiungere fwprc come filtro per procmail(1) ai messaggi
  che fanno uso di tale protocollo, (le istruzioni sono incluse in
  fwprc).  Notate comunque che per lanciare pppd con i privilegi
  appropriati dovrete creare da soli un "suid wrapper" per diventare
  root.  Istruzioni incluse in fwprc.

  La sola autenticazione di questa sorta di "scintilla" non significa
  aver predisposto una connessione sicura.  Diventa davvero opportuno,
  in questo caso, fare uso di una Secure Shell (anche sopra telnet) per
  rendere sicuro il collegamento.  E infine osservate attentamente ci
  che accade tra l'innesco della connessione telnet e la ssh che ha
  luogo su tale connessione.  Qualunque contributo in questa direzione 
  ben accetto.



  55..22..  RRiicceevveerree iill mmeessssaaggggiioo ddii iinnnneessccoo

  Se un firewall vi circonda, il vostro messaggio potrebbe trovarsi in
  un server centrale che non consente il fitraggio con procmail o alcuna
  connessione telnet. Niente paura! Potete usare fetchmail(1) da
  eseguire in modalit "demone" per recuperare e trasferire la posta al
  vostro sistema linux che opera da clien, e/o aggiungere un job al
  servizio cron per automatizzare il recupero della posta ogni 1-5
  minuti.  Fetchmail inoltrer la posta verso l'indirizzo locale usando
  sendmail(8) che, a sua volta, deve essere configurato per usare
  procmail(1) per il recapito.  Se eseguite fetchmail(1) in background
  come demone, questi impedir qualunque altra esecuzione di fetchmail:
  come nel caso dell'apertura di un fwprc.  Naturalmente potreste far
  girare fetchmail come falso utente.  Recuperi troppo frequenti possono
  non essere opportuni nei confronti del server, cos come recuperi
  troppo sporadici possono obbligare a pesanti attese affinch il
  messaggio venga letto e la connessione inversa stabilita.  Io uso una
  frequenza di recupero di due minuti.


  66..  NNoottee FFiinnaallii



  66..11..  AAllttrree iimmppoossttaazziioonnii

  Ci sono altri tipi di firewall, come quelli che non consentono le
  connessioni telnet.  Dal momento che un continuo flusso di pacchetti
  attraversa un firewall e trasporta informazioni fuori e dentro di
  esso,  sempre possibile perforarlo; al solo prezzo di "usare il
  punteruolo pi in alto o pi in basso".

  In un caso estremamente semplice, potreste semplicemente lanciare ssh
  su un pty, e lavorare con il pppd nel tty slave.  cotty 0.3a dovrebbe
  essere in grado di farlo, ma ancora nessuno ha modificato fwprc per
  effettuare il login.  Potrebbe essere un buon esercizio per stanotte.
  Potreste voler applicare quanto visto con un firewall ostile, solo per
  costrure una ``VPN'' sicura (Virtual Private Network).  Leggete VPN
  mini-HOWTO a proposito di questo.

  Se dovete passare attraverso una linea a 7-bit, probabilmente userete
  SLIP al posto di PPP. Io non ho mai provato: le linee sono quasi tutte
  8 bit al giorno d'oggi, ma non dovrebbe essere complicato.

  Ora, se l'unica strada attraverso il firewall  un proxy WWW (di
  solito  il minimo per una rete connessa a internet) potreste scrivere
  un demone che registra il traffico di dati in ingresso e in uscita, e
  farlo girare durante le connessione HTTP, ottenendo una sorta di
  telnet-su-HTTP con il quale eseguire fwrpc.  Potrebbe rivelarsi una
  soluzione lenta e non molto efficace ma sufficiente da permettervi di
  usare fetchmail(1), suck(1) e altri programmi non interattivi.

  Se volete prestazioni maggiori o se le uniche cose che passano
  inalterate attraverso il firewall sono cosucce di basso livello
  (richieste DNS, pacchetti ICMP, ecc.) allora il gioco si fa duro dal
  momento che dovrete mettere le mani sul primitivo stack IP usando (per
  esempio) i Fox project's packet-protocol functors.  Otterrete una
  forma diretta di IP-su-HTTP, IP-su-DNS, IP-su-ICMP, o affini. Questi
  ultimi non richiedono soltanto un complesso protocollo, ma anche
  un'interfaccia al nucleo del sistema operativo ed entrambi sono
  costosi da implementare.

  Ancora una cosa, se usate un demone HTTP per il Firewall-piercing, non
  dimenticate di fare in modo che serva pagine fasulle, in questo modo
  ingannerete i sospettosi amministratori dei firewall "avversari".



  66..22..  MMaannuutteennzziioonnee ddeellll''HHOOWWTTOO

  Ho sentito il bisogno di scriverlo, ma non ho tutto il tempo da
  dedicargli, ecco perch questo HOWTO  cos scarno.  E cos rester, a
  meno che non riceva abbastanza commenti che mi permettano di
  individuare le sezioni che devono essere migliorate.  I commenti sono
  benvenuti. L'aiuto  benvenuto.  Il mantenimento del mini-HOWTO 
  benvenuto.

  A ogni modo, le sezioni che avete letto hanno messo in evidenza
  diversi problemi le soluzioni dei quali richiedono solo che qualcuno
  (voi?) vi dedichi un po' di tempo (oppure denaro, pagando altri che lo
  facciano in sua vece), sedendosi e scrivendole: nulla di davvero
  complicato, sebbene i dettagli possano apparire pesanti e difficili.

  Non esitate a contribuire con altri problemi e possibilmente con
  altrettante soluzioni, a questo mini-HOWTO.



  66..33..  CCooppiiaa eexxttrraa ddeellllaa IIMMPPOORRTTAANNTTEE LLIIBBEERRAATTOORRIIAA ------ CCRREEDDEETTEEMMII!!!!!!


       DDii sseegguuiittoo ddeecclliinnoo ooggnnii rreessppoonnssaabbiilliitt ppeerr qquueessttaa mmeettooddoolloo
       ggiiaa..  IIll ffaattttoo cchhee ppoossssaa rriittoorrcceerrssii ccoonnttrroo ddii vvooii iinn uunn
       qquuaalluunnqquuee mmooddoo  uunn pprroobblleemmaa cchhee nnoonn mmii rriigguuaarrddaa..  SSee nnoonn
       rriiuusscciittee aa ccoommpprreennddeerree ii rriisscchhii iinneerreennttii iill ssuuoo uuttiilliizzzzoo,,
       nnoonn uuttiilliizzzzaatteelloo..  SSee,, uussaannddoo qquueessttaa mmeettooddoollooggiiaa,, ppeerrmmeett
       tteerreettee aa bbaalloorrddii vvaannddaallii ddii ppeenneettrraarree nneeii ccoommppuutteerr ddeellllaa
       vvoossttrraa aazziieennddaa ccoommpprroommeetttteennddoo vvooii,, iill vvoossttrroo llaavvoorroo ee ii mmiill
       iiaarrddii ddeellllaa sstteessssaa,, nnoonn vveenniittee aa ppiiaannggeerree ddaa mmee..



