Inserisci Infobox

ppp e pppd

Introduzione al protocollo ppp e utilizzo del server pppd su Linux

Protocollo PPP Overview
Autore: homer - Ultimo Aggiornamento: 2003-06-05 23:53:43 - Data di creazione: 2003-06-05 23:53:43
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Il protocollo PPP (Point to Point Protocol) fornisce un metodo standard per il trasporto di diversi tipi di protocollo su una connessione punto a punto. Uno dei motivi per cui PPP è stato sviluppato è di facilitare il collegamento tra apparati di rete eterogenei.  

Il Point to Point Protocol viene definito nella RFC 1661, va a sostituire il protocollo SLIP (Serial Line Internet Protocol) le cui caratteristiche erano troppo limitate per gestire l'incremento delle connessioni ad Internet. Le caratteristiche principali di PPP sono:  
- supporto multiprotocollo;  
- supporto all'autenticazione;  
- riconoscimento errori;  
- supporto all'indirizzamento IP dinamico.  

I principali componenti del protocollo PPP sono tre:  
- Un metodo di incapsulazione per i datagrammi di diversi protocolli;  
- LCP (Link Control Protocol) per stabilire, configurare e mantenere sotto controllo la connessione;  
- NCP (Network Control Protocol) per configurare i diversi protocolli a livello rete che vengono trasportati;  

INCAPSULAZIONE
L'incapsulazione permette di trasportare simultaneamente più protocolli sullo stesso collegamento, questo processo è stato progettato in modo da garantire la compatibilità tra hardware di vendor differenti. Il formato dei frame PPP è simile a quello utilizzato da HDLC (High-level Data Link Control).

LINK CONTROL PROTOCOL
Il link control protocol permette di avere a disposizione un metodo per tenere sotto controllo e quindi gestire la connessione PPP. LCP oltre a stabilire e terminare la cominicazione si occupa anche dell'autenticazione dei peer e del monitoraggio del suo corretto funzionamento.

NETWORK CONTROL PROTOCOL
Grazie a NCP è possibile avere un protocollo di controllo per ogni livello rete supportato. Ncp si occupa quindi di negoziare le opzioni del livello rete, come per esempio l'attribuzione dell'indirizzo IP utilizzato poi anche da altri protocolli TCP/IP trasportati.

PRINCIPALI FASI DI UNA CONNESSIONE PPP
Le fasi di una connessione PPP sono tipicamente 4:
FASE 1: Definizione della connessione (Link Establishment Phase);  
FASE 2: Autenticazione (Authentication Phase);  
FASE 3: Configurazione Protocollo di rete (Network-Layer Protocol Phase);  
FASE 4: Terminazione della connessione (Link Termination Phase);

1 - Definizione della Connessione
La connessione viene stabilita dal Link Control Protocol il quale provvede a scambiare dei pacchetti di configurazione tra i due host che si mettono in contatto. La negoziazione avviene per i valori differenti da quelli predefiniti. I valori configurati sono:  
- MRU (Maximum Receive Unit): Definisce la dimensione massima dei pacchetti trasmessi;  
- Authentication Protocol: Seleziona il protocollo per l'autenticazione;  
- Quality of Link Protocol: Determina se sono abilitate le funzioni di controllo della connessione;  
- Magic Number: Individua se il collegamento si trova in uno stato di loop-back;  
- Protocol field compression: Permette la compressione del campo protocollo PPP;  
- Address and Control Field compression: Negozia la compressione dei campi indirizzi e controllo;  
Terminata quasta fase la connessione è stabilita.  
2 - Autenticazione
In alcuni casi prima di scambiare pacchetti a livello rete, l'host che si connette deve essere autenticato. Per default l'autenticazione non è obbligatoria su una connessione PPP, ma se si decide di utilizzarla essa deve avvenire al più presto. Nessuno scambio a livello rete può avvenire prima che l'autenticazione sia completata. I protocolli comunemente utilizzati per l'autenticazione sono PAP (Password Authentication Protocol) e CHAP (Challange Handshake Autentication Protocol).  
3 - Configurazione Protocollo di rete
In questa fase ogni protocollo di rete viene separatamente configurato tramite il proprio Network Control Protocol.  
4 - Terminazione della connessione
La connessione PPP può terminare in qualsiasi momento per differenti motivi: caduta della portante, fallimento dell'autenticazione, decadimento della qualità della linea, scadenza del tempo di inattività (idle-time) o chiusura da parte di un amministratore.

Classico esempio di utilizzo del protocollo PPP è la connesione ad Internet tramite modem da parte di un PC. Questo protocollo è altresì utilizzato per connessioni router-router su linee dedicate.

/etc/ppp/ip-up
Autore: homer - Ultimo Aggiornamento: 2003-06-06 00:05:24 - Data di creazione: 2003-06-06 00:05:24
Tipo Infobox: PATH - Skill: 3- INTERMEDIATE

Script eseguito in seguito alla definizione di una connessione PPP.

Appena link è disponibile per la trasmissione e ricezione di pacchetti IP viene eseguito questo script che riceve in ingresso cinque parametri:  

$1 -> Nome Interfaccia IP; Esempio: ppp0  
$2 -> Porta di comunicazione; Esempio: ttyS1  
$3 -> Velocità del collegamento; Esempio: 57600  
$4 -> Indirizzo IP Locale; Esempio: 62.10.125.86  
$5 -> Indirizzo IP Remoto; Esempio: 212.123.87.139  

E' possibile trovare questo file nella propria di distribuzione anche vuoto, e può quindi essere utilizzato a discrezione di chi gestisce la macchina per compiere particolari operazioni riguardanti l'avvio di una connessione PPP. Di seguito un esempio di script che genera un log relativo alle connessioni avviate:

#!/bin/sh  
# Script ip-up  

InterfacciaIP="$1"  
IpLocale="$4"      
IpRemoto="$5"      
Acquisizione delle variabili passate in ingresso allo script  
FileLog="/etc/ppp/Connessioni-ppp.log"  
Definizione del file di log  

DataConnessione=$(/bin/date)            
InfoConnessione=": $IpLocale ($InterfacciaIP)-> $IpRemoto"  
Acquisizione della data e creazione stringa di log  

echo "PPP Internet UP   $DataConnessione $InfoConnessione" >> $FileLog
  
Append al file di log della stringa generata

/etc/ppp/ip-down
Autore: homer - Ultimo Aggiornamento: 2003-06-06 00:06:57 - Data di creazione: 2003-06-06 00:06:57
Tipo Infobox: PATH - Skill: 3- INTERMEDIATE

Script eseguito in seguito alla terminazione di una connessione PPP.

Quando il link non è più disponibile per la trasmissione e la ricezione di pacchetti ip viene eseguito questo script che riceve in ingresso gli stessi parametri di ip-up:

$1 -> Nome Interfaccia IP; Esempio: ppp0  
$2 -> Porta di comunicazione; Esempio: ttyS1
$3 -> Velocità del collegamento; Esempio: 57600  
$4 -> Indirizzo IP Locale; Esempio: 62.10.125.86  
$5 -> Indirizzo IP Remoto; Esempio: 212.123.87.139

Generalmente quando utilizzato, ripristina quanto avviato precedentemente dalla controparte ip-up.

E' possibile trovare questo file nella propria di distribuzione anche vuoto, può quindi essere utilizzato a discrezione di chi gestisce la macchina per compiere particolari operazioni riguardanti la terminazione di una connessione PPP. Di seguito un esempio di script che genera un log relativo ai tempi di disconnessione:

#!/bin/sh  
# Script ip-down  

InterfacciaIP="$1"  
IpLocale="$4"      
IpRemoto="$5"      
Acquisizione delle variabili passate in ingresso allo script  
FileLog="/etc/ppp/Connessioni-ppp.log"  
Definizione del file di log  

DataConnessione=$(/bin/date)            
InfoConnessione=": $IpLocale ($InterfacciaIP)-> $IpRemoto"  
Acquisizione della data e creazione stringa di log  

echo "PPP Internet DOWN   $DataConnessione $InfoConnessione" >> $FileLog
  
Append al file di log della stringa generata

/etc/ppp/options
Autore: homer - Ultimo Aggiornamento: 2003-06-06 00:08:48 - Data di creazione: 2003-06-06 00:08:48
Tipo Infobox: PATH - Skill: 3- INTERMEDIATE

E' il file contenete le opzioni per l'utilizzo di pppd.

Questo file permette di raggruppare le opzioni comuni per la configurazione di una connesssione tramite protocollo PPP.
Il formato di options è ASCII e può contenere al suo interno sia linee vuote che linee di commento le quali devono iniziare con il carattere #.
  
Esempio del contenuto di un semplice file options:  
homer@Joker:/etc/ppp$ cat options  
/dev/modem Indica il nome del device utilizzato per la connessione  
57600 Specifica la velocità del modem  
debug Abilita il debug per la connessione  
lock  Setta l'accesso esclusivo al device  
crtscts Abilita il controllo di flusso Hardware  
modem Utilizza il controllo di linea del modem  
defaultroute Imposta la route predefinita per l'interfaccia PPP  
noipdefault Indica che non esiste un indirizzo IP di default  
mtu 552 Imposta il valore MTU (Maximum Transim Unit) in 552 byte  
mru 552 Imposta il valore MRU (Maximum Receive Unit) in 552 byte  

pppd
Autore: homer - Ultimo Aggiornamento: 2003-06-06 00:02:21 - Data di creazione: 2003-06-06 00:02:21
Tipo Infobox: COMMANDS - Skill: 3- INTERMEDIATE

pppd (Point to Point Protocol Daemon) è il demone che si occupa di stabilire una connessione tramite il protocollo PPP, viene usato sia come client, per collegarsi ad un server remoto, che come server, che autentica i client che si collegano.

La connessioni PPP su un sistema Linux vengono stabilite grazie a pppd che si trova in /usr/sbin/pppd. Questo server fornisce il supporto base per LCP, per l'autenticazione e per NCP riguardo alla configurazione IP. L'incapsulazione è invece fornita da routine presenti nel Kernel del sistema operativo.

Di seguito la sintassi e le opzioni più utilizzate:    
pppd [ opzioni ]  
<tty_name>: Nome del device utilizzato per la connessione;  
<speed>: Imposta la velocità del modem;  
auth: Richiede al peer a cui ci si connette di autenticarsi prima di ricevere o inviare pacchetti (necessario su un server, da evitare su un client).  
asyncmap <mappa>: Imposta la mappa dei caratteri asincrona e specifica quali non possono essere ricevuti con successo sulla linea seriale;  
connect <script>: Utilizza un eseguibile o un comando di shell per definire una connessione. Tipicamente viene utilizzato il programma chat che permette di avviare tramite modem un sessione ppp;  
crtscts: Utilizza il controllo Hardware sul flusso di dati della porta seriale utilizzata per la connessione;  
call <nomefile>: Legge le opzioni dal file passato come argomento, residente in /etc/ppp/peers/;  
defaultroute: Imposta una route predefinita per l'interfaccia PPP la quale viene rimossa al termine della connessione;    
debug: Abilita il debug. Con questa opzione invia a syslogd dei messaggi in formato facilmente comprensibile;  
demand: Inizia un collegamento su richiesta da parte di un client. Questa opzione implica l'utilizzo di
persist;    
disconnect <script<: Esegue uno script specificato come argomento al termine della connessione;  
escape <xx,yy,..<: Specifica quali caratteri devono essere preceduti dal carattere di escape durante la trasmissione;  
persist: Legge le opzioni dal file specificato come argomento. Il file utilizzato di default è /etc/ppp/options.  
persist: Il demone pppd non termina dopo la disconnessione e rimane in ascolto per successive richieste di connessione;  
holdoff <n>: Attende n secondi prima di inziare nuovamente un collegamento. E' utilizzata con persist e demand;  
idle <n>: Fissa il tempo in secondi, prima di terminare la connessione per inattività;  
lock: Viene creato un file che blocca il device seriale in modo da permetterne un accesso esclusivo;  
mru <n>: Setta il valore Maximum Receive Unit (MRU) in byte, ovvero richiede all'host remoto di non inviare pacchetti di dimensioni superiori a quelle definite in questo valore;  
mtu <n>: Setta il valore Maximum Transit Unit (MTU) in byte ovvero la dimensione massima dei pacchetti trasmessi;  
noipdefault: Indica che non viene utilizzato nessun indirizzo ip di default e che dovrà quindi essere negoziato. Solitamente viene utilizzata con l'opzione defaultroute.  
passive: Indica a pppd di attendere un pacchetto LCP valido. Per default pppd termina se non viene restitutio un pacchetto LCP valido dopo la richiesta iniziale.

/etc/ppp/pap-secrets
Autore: homer - Ultimo Aggiornamento: 2003-06-05 23:49:54 - Data di creazione: 2003-06-05 23:49:54
Tipo Infobox: PATH - Skill: 3- INTERMEDIATE

E' il file contenete i parametri per l'autenticazione di tipo PAP (Password Authentication Protocol).

E' un file di testo, contentente gli username le password e gli indirizzi Ip validi per l'autenticazione PAP. Al suo interno può contenere linee di commento, le quali iniziano con il carattere #. Per motivi di sicurezza pap-secrets deve essere di proprietà dell'utente root e non leggibile da nessun altro utente, in caso contrario viene visualizzato un messaggio da parte di pppd.

Un esempio:  
root@Joker:/etc/ppp# cat pap-secrets  
#User   Server   Password   Ip  
homer      *      blmm44     *    
bart       *      krusty99   *  
jay        *      0pi2za0    *
  
Il significato di * è qualunque nome, qualunque indirizzo

/etc/ppp/chap-secrets
Autore: homer - Ultimo Aggiornamento: 2003-06-06 01:04:11 - Data di creazione: 2003-06-06 01:04:11
Tipo Infobox: PATH - Skill: 3- INTERMEDIATE

E' il file contenete i parametri per l'autenticazione di tipo CHAP (Challenge Handshake Authentication Protocol).

E' un file di testo, contentente gli username, le password e gli indirizzi Ip validi per l'autenticazione CHAP. Al suo interno può contenere linee di commento, le quali iniziano con il carattere #. Per motivi di sicurezza chap-secrets deve essere di proprietà dell'utente root e non leggibile da nessun altro utente, in caso contrario viene visualizzato un messaggio da parte di pppd.

Un esempio:
root@Joker:/etc/ppp# cat chap-secrets
# User   Server   Password   Ip
Ethan      *      IMF37136   *  
Nyah       *      IMF89238   *
Il significato di * è qualunque nome, qualunque indirizzo

Autenticazione PAP e CHAP
Autore: homer - Ultimo Aggiornamento: 2003-06-14 20:41:02 - Data di creazione: 2003-06-14 20:41:02
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

PAP (Password Authentication Protocol) e CHAP (Challenge Handshake Authentication Protocol) sono i due protocolli di autenticazione utilizzati da PPP.  

PROTOCOLLO PAP
Il metodo utilizzato dal protocollo PAP è ti tipo 2-way handshake. Quando la connessione è stabilita viene inviata da parte del client un coppia Username e Password. Il server confronta i dati ricevuti con quelli nel proprio database quindi autentica o rifiuta il client.

PROTOCOLLO CHAP
Il protocollo CHAP utilizza un metodo 3-way handshake per verificare l'identità del client e questo processo può essere ripetuto più volte lungo la durata della connessione. Una volta stabilito il collegamento il server invia una stringa contenente dei caratteri ed il proprio nome, chiamata "challenge". Il client invia in risposta una stringa calcolata tramite una funzione hash one-way. Il server controlla che l'hash generato anchesso tramite la stessa funzione one-way e se corretto autentica il client altrimenti termina la connessione.

PAP vs CHAP
PAP non è un metodo di autenticazione molto robusto in quanto l'autenticazione avviene inviando la password in chiaro da parte del client. Altro punto debole di PAP è dovuto all'utilizzo di password riutilizzabili. CHAP utilizza invece un metodo più sicuro in quanto non invia la password sul collegamento ed il challange utilizzato per l'autenticazione oltre ad essere crittografato tramite MD5 è diverso ogni volta.

Privacy Policy