From: Simone Piccardi Date: Mon, 3 Sep 2007 07:12:21 +0000 (+0000) Subject: Materiale sui socket. X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=commitdiff_plain;h=a4d2c80cad1136cecb529d68842f89745d62830b;p=gapil.git Materiale sui socket. --- diff --git a/filedir.tex b/filedir.tex index 0df466c..e4d61d0 100644 --- a/filedir.tex +++ b/filedir.tex @@ -2622,6 +2622,10 @@ liberia, \texttt{libacl} che nasconde i dettagli implementativi delle stesse e presenta ai programmi una interfaccia che fa riferimento allo standard POSIX 1003.1e. + + + + \itindend{Access~Control~List} diff --git a/macro.tex b/macro.tex index 9f4ea32..5cc9c93 100644 --- a/macro.tex +++ b/macro.tex @@ -164,7 +164,7 @@ %\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}% } % configuration file name \newcommand{\procrelfile}[2]{% -\index{file!filesystem~\texttt{/proc}!{#2}@{{\tt {#1}/{#2}}}}\texttt{#2}% +\index{file!filesystem~\texttt{/proc}!{#1/#2}@{{\tt {#1/#2}}}}\texttt{#2}% %\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}% } diff --git a/sockctrl.tex b/sockctrl.tex index 66f480f..f5a4c43 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -3983,12 +3983,12 @@ corrispondono a nessun nodo di \func{sysctl}. \subsection{I valori di controllo per i socket generici} \label{sec:sock_gen_sysctl} -Nella directory \texttt{/proc/sys/net/core} sono presenti i file +Nella directory \texttt{/proc/sys/net/core/} sono presenti i file corrispondenti ai parametri generici di \textit{sysctl} validi per tutti i socket. Quelli descritti anche nella pagina di manuale, accessibile con \texttt{man 7 socket} sono i seguenti: -\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}} \item[\procrelfile{/proc/sys/net/core}{rmem\_default}] imposta la dimensione di default del buffer di lettura (cioè per i dati in ingresso) dei socket. \item[\procrelfile{/proc/sys/net/core}{rmem\_max}] imposta la dimensione @@ -4002,16 +4002,16 @@ socket. Quelli descritti anche nella pagina di manuale, accessibile con \item[\procrelfile{/proc/sys/net/core}{message\_cost}, \procrelfile{/proc/sys/net/core}{message\_burst}] contengono le impostazioni del \itindex{bucket~filter} \textit{bucket filter} che controlla l'emissione - di messaggi di avviso da parte kernel per eventi relativi a problemi sulla - rete, imponendo un limite che consente di prevenire eventuali attacchi di - \itindex{Denial~of~Service~(DoS)} \textit{Denial of Service} usando i + di messaggi di avviso da parte del kernel per eventi relativi a problemi + sulla rete, imponendo un limite che consente di prevenire eventuali attacchi + di \itindex{Denial~of~Service~(DoS)} \textit{Denial of Service} usando i log.\footnote{senza questo limite un attaccante potrebbe inviare ad arte un traffico che generi intenzionalmente messaggi di errore, per saturare il sistema dei log.} Il \itindex{bucket~filter} \textit{bucket filter} è un algoritmo generico che permette di impostare dei limiti di flusso su una quantità\footnote{uno - analogo viene usato nel \index{netfilter} \textit{netfilter} per imporre + analogo viene usato nel \itindex{netfilter} \textit{netfilter} per imporre dei limiti sul flusso dei pacchetti.} senza dovere eseguire medie temporali, che verrebbero a dipendere in misura non controllabile dalla dimensione dell'intervallo su cui si media e dalla distribuzione degli @@ -4041,7 +4041,7 @@ Oltre a questi nella directory \texttt{/proc/sys/net/core} si trovano altri file, la cui documentazione dovrebbe essere mantenuta nei sorgenti del kernel, nel file \texttt{Documentation/networking/ip-sysctl.txt}; la maggior parte di questi però non è documentato: -\begin{basedescript}{\desclabelwidth{3.0cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}} \item[\procrelfile{/proc/sys/net/core}{dev\_weight}] blocco di lavoro (\textit{work quantum}) dello scheduler di processo dei pacchetti. @@ -4086,7 +4086,7 @@ dello stesso (come ARP). I file che consentono di controllare le caratteristiche specifiche del protocollo IP in quanto tale, che sono descritti anche nella relativa pagina di manuale accessibile con \texttt{man 7 ip}, sono i seguenti: -\begin{basedescript}{\desclabelwidth{3.5cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}} \item[\procrelfile{/proc/sys/net/ipv4}{ip\_default\_ttl}] imposta il valore di default per il campo TTL (vedi sez.~\ref{sec:IP_header}) di tutti i @@ -4154,9 +4154,10 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti: precedenti questo comportamento poteva essere solo stabilito un volta per tutte in fase di compilazione del kernel con l'opzione \texttt{CONFIG\_IP\_ALWAYS\_DEFRAG}.} Prende un valore logico e di default - è disabilitato. Con i kernel dalla serie 2.4 in poi la deframmentazione viene - attivata automaticamente quando si utilizza il sistema del netfilter, e - questo parametro non è più presente. + è disabilitato. Con i kernel dalla serie 2.4 in poi la deframmentazione + viene attivata automaticamente quando si utilizza il sistema del + \itindex{netfilter} \textit{netfilter}, e questo parametro non è più + presente. \item[\procrelfile{/proc/sys/net/ipv4}{ipfrag\_high\_thresh}] indica il limite massimo (espresso in numero di byte) sui pacchetti IP frammentati presenti @@ -4187,7 +4188,7 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti: I file di \texttt{/proc/sys/net/ipv4} che invece fanno riferimento alle caratteristiche specifiche del protocollo TCP, elencati anche nella rispettiva pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: -\begin{basedescript}{\desclabelwidth{3.9cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}} \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_abort\_on\_overflow}] indica al kernel di azzerare le connessioni quando il programma che le riceve è troppo @@ -4239,7 +4240,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_ecn}] abilita il meccanismo della \textit{Explicit Congestion Notification} (in breve ECN) nelle connessioni TCP. Prende valore logico che di default è disabilitato. La \textit{Explicit - Congestion Notification} \index{Explicit~Congestion~Notification} è un + Congestion Notification} \itindex{Explicit~Congestion~Notification} è un meccanismo che consente di notificare quando una rotta o una rete è congestionata da un eccesso di traffico,\footnote{il meccanismo è descritto in dettaglio nell'\href{http://www.ietf.org/rfc/rfc3168.txt}{RFC~3168} @@ -4269,7 +4270,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: ricezione del pacchetto FIN conclusivo, passati quali il socket viene comunque chiuso forzatamente. Prende un valore intero che indica i secondi e di default è 60.\footnote{nei kernel della serie 2.2.x era il valore - utilizzato era invece di 120 secondi.}) L'uso di questa opzione realizza + utilizzato era invece di 120 secondi.} L'uso di questa opzione realizza quella che in sostanza è una violazione delle specifiche del protocollo TCP, ma è utile per fronteggiare alcuni attacchi di \itindex{Denial~of~Service~(DoS)} \textit{Denial of Service}. @@ -4322,7 +4323,8 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: kernel. Prende un valore intero, il valore di default viene impostato inizialmente al valore del parametro del kernel \texttt{NR\_FILE}, e viene aggiustato a seconda della memoria disponibile. -% TODO verificare la spiegazione di connessione orfana + +% TODO verificare la spiegazione di connessione orfana. \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_max\_syn\_backlog}] indica la lunghezza della coda delle connessioni incomplete, cioè delle connessioni @@ -4350,21 +4352,25 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: prevenire alcuni semplici attacchi di \textit{denial of service}. -\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_mem}] prende una tripletta di - valori interi usati dallo stack TCP per controllare il proprio uso della - memoria. Il primo valore, chiamato \textit{low} nelle pagine di manuale, - indica il numero di pagine allocate sotto il quale non viene usato nessun - meccanismo di regolazione dell'uso della memoria. +\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_mem}] viene usato dallo stack TCP + per gestire le modalità con cui esso utlizzerà la memoria. Prende una + tripletta di valori interi, che indicano un numero di pagine: - Il secondo valore, chiamato \textit{pressure} indica il numero di pagine - allocate passato il quale lo stack TCP inizia a moderare il suo consumo di - memoria. Si esce da questo stato di \textsl{pressione} sulla memoria quando - il numero di pagine scende sotto il precedente valore \textit{low}. + \begin{itemize*} + \item il primo valore, chiamato \textit{low} nelle pagine di manuale, indica + il numero di pagine allocate sotto il quale non viene usato nessun + meccanismo di regolazione dell'uso della memoria. - Il terzo valore, chiamato \textit{high} indica il numero massimo di pagine - che possono essere utilizzate dallo stack TCP/IP, e soprassiede ogni altro - valore specificato dagli altri limiti del kernel. + \item il secondo valore, chiamato \textit{pressure} indica il numero di + pagine allocate passato il quale lo stack TCP inizia a moderare il suo + consumo di memoria; si esce da questo stato di \textsl{pressione} sulla + memoria quando il numero di pagine scende sotto il precedente valore + \textit{low}. + \item il terzo valore, chiamato \textit{high} indica il numero massimo di + pagine che possono essere utilizzate dallo stack TCP/IP, e soprassiede + ogni altro valore specificato dagli altri limiti del kernel. + \end{itemize*} \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_orphan\_retries}] indica il numero massimo di volte che si esegue un tentativo di controllo sull'altro capo di @@ -4404,7 +4410,6 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: nell'\href{http://www.ietf.org/rfc/rfc1122.txt}{RFC~1122} dove è indicato un massimo di 100 secondi, che però è un valore considerato troppo basso. - \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_rfc1337}] indica allo stack TCP del kernel di abilitare il comportamento richiesto nell'\href{http://www.ietf.org/rfc/rfc1337.txt}{RFC~1337}. Prende un valore @@ -4416,69 +4421,102 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_rmem}] viene usato dallo stack TCP per controllare dinamicamente le dimensioni dei propri buffer di ricezione, anche in rapporto alla memoria disponibile. Prende una tripletta di valori - interi separati da spazi che indicano delle dimensioni in byte. - - Il primo valore, chiamato \textit{min} nelle pagine di manuale, indica la - dimensione minima del buffer di ricezione; e di default vale 4Kb, ma in - sistemi con poca memoria viene automaticamente ridotto a \const{PAGE\_SIZE}. - Questo valore viene usato per assicurare che anche in situazioni di - pressione sulla memoria (vedi quanto detto per - \procrelfile{/proc/sys/net/ipv4}{tcp\_mem}) le allocazioni al di sotto di - questo limite abbiamo comunque successo.\footnote{e non ha a che fare con la - dimensione del buffer di lettura di un socket dichiarata con l'opzione - \const{SO\_RCVBUF}.} - - Il secondo valore, denominato \textit{default} nelle pagine di manuale, - indica la dimensione di default del buffer di ricezione di un socket TCP. - Questo valore sovrascrive il default iniziale impostato con - \procfile{/proc/sys/net/core/mem\_default} che vale per qualunque - protocollo. - - Il terzo valore, denominato \textit{max} nelle pagine di manuale - - -\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_sack}] un valore logico che indica - al kernel di utilizzare il meccanismo del \textit{TCP selective - aknowledment} definito - nell'\href{http://www.ietf.org/rfc/rfc2018.txt}{RFC~2018}; di default è - abilitato. - -\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_stdurg}] - -\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_synack\_retries}] un valore intero - che indica il numero massimo di volte che verrà ritasmesso il segmento - SYN/ACK nella creazione di una connessione (vedi - sez.~\ref{sec:TCP_conn_cre}). Il valore di default è 5, e non si deve - superare il valore massimo di 255. - -\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_syncookies}] un valore logico - che abilita i \textit{TCP syncookies},\footnote{per poter usare quasta - funzionalità è necessario avere abilitato l'opzione - \texttt{CONFIG\_SYN\_COOKIES} nella compilazione del kernel.} di default è - disabilitato. + interi separati da spazi che indicano delle dimensioni in byte: + + \begin{itemize*} + \item il primo valore, chiamato \textit{min} nelle pagine di manuale, indica + la dimensione minima del buffer di ricezione; il default è 4Kb, ma in + sistemi con poca memoria viene automaticamente ridotto a + \const{PAGE\_SIZE}. Questo valore viene usato per assicurare che anche in + situazioni di pressione sulla memoria (vedi quanto detto per + \procrelfile{/proc/sys/net/ipv4}{tcp\_mem}) le allocazioni al di sotto di + questo limite abbiamo comunque successo. Questo valore non viene comunque + ad incidere sulla dimensione del buffer di lettura di un singolo socket + dichiarata con l'opzione \const{SO\_RCVBUF}. + + \item il secondo valore, denominato \textit{default} nelle pagine di + manuale, indica la dimensione di default, in byte, del buffer di ricezione + di un socket TCP. Questo valore sovrascrive il default iniziale impostato + per tutti i socket con \procfile{/proc/sys/net/core/mem\_default} che vale + per qualunque protocollo. Il default è 87380 byte, ridotto a 43689 per + sistemi con poca memoria. Se si desiderano dimensioni più ampie per tutti + i socket si può aumentare questo valore, ma se si vuole che in + corrispondenza aumentino anche le dimensioni usate per la finestra TCP si + deve abilitare il \itindex{TCP~window~scaling} \textit{TCP window scaling} + (di default è abilitato, vedi più avanti + \procrelfile{/proc/sys/net/ipv4}{tcp\_window\_scaling}). + + \item il terzo valore, denominato \textit{max} nelle pagine di manuale, + indica la dimensione massima, in byte, del buffer di ricezione di un + socket TCP; il default è 174760 byte, che viene ridotto automaticamente a + 87380 per sistemi con poca memoria. Il valore non può comunque eccedere il + limite generale per tutti i socket posto con + \procfile{/proc/sys/net/core/rmem\_max}. Questo valore non viene ad + incidere sulla dimensione del buffer di lettura di un singolo socket + dichiarata con l'opzione \const{SO\_RCVBUF}. + \end{itemize*} + +\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_sack}] indica al kernel di + utilizzare il meccanismo del \textit{TCP selective aknowledment} definito + nell'\href{http://www.ietf.org/rfc/rfc2018.txt}{RFC~2018}. Prende un valore + logico e di default è abilitato. + +\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_stdurg}] indica al kernel di + utilizzare l'interpretazione che viene data + dall'\href{http://www.ietf.org/rfc/rfc1122.txt}{RFC~1122} del puntatore dei + \textit{dati urgenti} (vedi sez.~\ref{sec:TCP_urgent_data}) in cui questo + punta all'ultimo byte degli stessi; se disabilitato viene usata + l'interpretazione usata da BSD per cui esso punta al primo byte successivo. + Prende un valore logico e di default è disabilitato, perché abilitarlo può + dar luogo a problemi di interoperabilità. + +\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_synack\_retries}] indica il numero + massimo di volte che verrà ritasmesso il segmento SYN/ACK nella creazione di + una connessione (vedi sez.~\ref{sec:TCP_conn_cre}). Prende un valore intero + ed il valore di default è 5; non si deve superare il valore massimo di 255. + +\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_syncookies}] abilita i \textit{TCP + syncookies}.\footnote{per poter usare quasta funzionalità è necessario + avere abilitato l'opzione \texttt{CONFIG\_SYN\_COOKIES} nella compilazione + del kernel.} Prende un valore logico, e di default è disabilitato. Questa + funzionalità serve a fornire una protezione in caso di un attacco di tipo + \index{SYN~flood} \textit{SYN flood}, e deve essere utilizzato come ultima + risorsa dato che costituisce una violazione del protocollo TCP e confligge + con altre funzionalità come le estensioni e può causare problemi per i + client ed il reinoltro dei pacchetti. \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_syn\_retries}] imposta il numero - di tentativi (il default è 5) di ritrasmissione dei pacchetti SYN di inizio - connessione del \itindex{three~way~handshake} \textit{three way handshake} - (si ricordi quanto illustrato in sez.~\ref{sec:TCP_func_connect}). Il valore - non deve superare 255. + di tentativi di ritrasmissione dei pacchetti SYN di inizio connessione del + \itindex{three~way~handshake} \textit{three way handshake} (si ricordi + quanto illustrato in sez.~\ref{sec:TCP_func_connect}). Prende un valore + intero che di default è 5; non si deve superare il valore massimo di 255. -\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_timestamps}] un valore logico che - attiva l'uso dei \textit{TCP timestamps}, definiti - nell'\href{http://www.ietf.org/rfc/rfc1323.txt}{RFC~1323}. Di default è - abilitato. +\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_timestamps}] abilita l'uso dei + \textit{TCP timestamps}, come definiti + nell'\href{http://www.ietf.org/rfc/rfc1323.txt}{RFC~1323}. Prende un valore + logico e di default è abilitato. -\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_tw\_recycle}] un valore logico, - disattivo di default, che abilita un rapido riutilizzo dei socket in stato - \texttt{TIME\_WAIT}. Non è opportuno abilitare questa opzione che può - causare problemi con il NAT. +\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_tw\_recycle}] abilita il + riutilizzo rapido dei socket in stato \texttt{TIME\_WAIT}. Prende un valore + logico e di default è disabilitato. Non è opportuno abilitare questa opzione + che può causare problemi con il NAT. -\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_tw\_reuse}] +\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_tw\_reuse}] abilita il riutilizzo + dello stato \texttt{TIME\_WAIT} quando questo è sicuro dal punto di vista + del protocollo. Prende un valore logico e di default è disabilitato. \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_window\_scaling}] un valore - logico, attivo di default, che abilita la funzionalità del \textit{TCP - window scaling} definita - dall'\href{http://www.ietf.org/rfc/rfc1323.txt}{RFC~1323} + logico, attivo di default, che abilita la funzionalità del + \itindex{TCP~window~scaling} \textit{TCP window scaling} definita + dall'\href{http://www.ietf.org/rfc/rfc1323.txt}{RFC~1323}. Prende un valore + logico e di default è abilitato. Come accennato in + sez.~\ref{sec:TCP_TCP_opt} i 16 bit della finestra TCP comportano un limite + massimo di dimensione di 64Kb, ma esiste una opportuna opzione del + protocollo che permette di applicare un fattore di scale che consente di + aumentarne le dimensioni. Questa è pienamente supportata dallo stack TCP di + Linux, ma se lo si disabilita la negoziazione del + \itindex{TCP~window~scaling} \textit{TCP window scaling} con l'altro capo + della conessione non viene effettuata. \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_vegas\_cong\_avoid}] @@ -4488,6 +4526,10 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: \end{basedescript} + + + + % LocalWords: socket sez dotted decimal resolver Domain Name Service cap DNS % LocalWords: client fig LDAP Lightweight Access Protocol NIS Information Sun % LocalWords: like netgroup Switch Solaris glibc libc uclib NSS tab shadow uid diff --git a/tcpsock.tex b/tcpsock.tex index 2b460be..ff3a218 100644 --- a/tcpsock.tex +++ b/tcpsock.tex @@ -187,6 +187,7 @@ vengono anche dette \textit{long fat pipe options} dato che questo che viene dato alle connessioni caratterizzate da alta velocità o da ritardi elevati. In ogni caso Linux supporta pienamente entrambe le opzioni. + \subsection{La terminazione della connessione} \label{sec:TCP_conn_term} @@ -965,12 +966,12 @@ kernel, compreso Linux 2.0, che mostrano le differenze fra diverse implementazioni. In Linux il significato di questo valore è cambiato a partire dal kernel 2.2 -per prevenire l'attacco chiamato \textit{syn flood}. Questo si basa -sull'emissione da parte dell'attaccante di un grande numero di pacchetti SYN -indirizzati verso una porta, forgiati con indirizzo IP fasullo\footnote{con la - tecnica che viene detta \textit{ip spoofing}.} così che i SYN$+$ACK vanno -perduti e la coda delle connessioni incomplete viene saturata, impedendo di -fatto ulteriori connessioni. +per prevenire l'attacco chiamato \index{SYN~flood} \textit{SYN flood}. Questo +si basa sull'emissione da parte dell'attaccante di un grande numero di +pacchetti SYN indirizzati verso una porta, forgiati con indirizzo IP +fasullo\footnote{con la tecnica che viene detta \textit{ip spoofing}.} così +che i SYN$+$ACK vanno perduti e la coda delle connessioni incomplete viene +saturata, impedendo di fatto ulteriori connessioni. Per ovviare a questo il significato del \param{backlog} è stato cambiato a indicare la lunghezza della coda delle connessioni complete. La lunghezza