# Application-level gateway

In informatica un Application-level gateway o ALG è una componente di sicurezza dei firewall in una rete di computer, che permette di aggiungere filtri NAT personalizzati al gateway per fornire una migliore traduzione degli indirizzi IP e delle porte nel caso in cui si usino certi protocolli del livello applicazione come FTP, BitTorrent, SIP, RTSP, trasferimento dei file con applicazioni di messaggistica istantanea.

## Descrizione
### Principi di funzionamento

Fa da intermediario tra la Rete Internet e l'Application Server: ogni richiesta viene interpretata, tradotta, in modo da essere compresa dall'Application Server e depurata, in modo da prevenire il passaggio di contenuti maliziosi o malformati; la richiesta viene poi mandata all'Application Server, la cui risposta verrà processata allo stesso modo.
L'Application-level gateway fa uso di due tipi di proxy:
* Proxy specifici dell'applicazione. Vengono accettati solamente i pacchetti generati da servizi che i proxy sono progettati a copiare, filtrare e inoltrare. Per es. solo un proxy Telnet può copiare, filtrare e inoltrare traffico generato da Telnet. Questo può costituire anche uno svantaggio, se una rete dipende solo da un application-level gateway perché i pacchetti (in arrivo e in uscita) non potranno accedere a servizi per cui non è disponibile un proxy.
* Filtraggio a livello di applicazione. Ogni pacchetto che attraversa la rete viene esaminato e filtrato, verificando i contenuti del pacchetto fino al livello di applicazione (l'ultimo livello del modello OSI). In questo modo è possibile filtrare comandi e informazioni destinate all'applicazione.

### Funzioni

Un ALG può fornire le seguenti funzioni:
* Permette l'uso di porte dinamiche (o effimere) da parte del client per comunicare con le porte conosciute dall'application server, anche se il Firewall permette il passaggio di traffico solo da un numero limitato di porte. In assenza di un ALG, sarebbe necessario che l'amministratore di rete configuri il firewall in modo da aprire esplicitamente un grande numero di porte, rendendo così la rete vulnerabile ad attacchi.
* Permette di convertire gli indirizzi del livello di rete in indirizzi accettabili dagli host.
* Riconosce comandi specifici dell'applicazione e fornisce controlli di sicurezza su di essi.
* Permette la sincronizzazione di flussi multipli e sessioni tra due host. Per esempio, una applicazione FTP potrebbe utilizzare diverse connessioni per il trasferimento dei dati e per l'invio e il controllo dei comandi. Potrebbe quindi accadere che durante il trasferimento di grandi file la connessione per il controllo dei comandi venga interrotta poiché rimane inattiva per molto tempo. Un ALG impedisce che questo accada prima del completamento del trasferimento dell'intero file.
Queste funzioni si possono ottenere grazie alla tecnica di analisi dei pacchetti detta deep packet inspection. Le stesse funzioni potrebbero essere ottenute usando un proxy server, ma questo richiederebbe una iniziale apposita configurazione dei client.

### Limitazioni

L'application-level gateway presenta degli svantaggi, che ne limitano il suo utilizzo:
* Ritardi causati dal tempo impiegato per analizzare i pacchetti.
* Problemi di velocità e di instradamento.
* Molte applicazioni non sono progettate per gli ALG, come Email e Web.

## Implementazione
### ALG in Microsoft Windows

Il servizio Application Level Gateway in Microsoft Windows fornisce il supporto a plugin di terze parti per consentire il passaggio di protocolli attraverso il Firewall di Windows. I plugin ALG inoltre possono aprire porte e cambiare i dati contenuti nei pacchetti.

### ALG in Linux

Il framework Netfilter del Kernel di Linux, che serve ad implementare NAT in Linux, fornisce funzionalità e moduli per molte ALG:
* FTP
* IRC
* TFTP
* SIP