HIAWATHA

NOME

hiawatha - webserver avanzato e sicuro


SINOSSI

hiawatha [opzioni]

Opzioni:
          -c <percorso>: percorso dove sono posizionati i files di configurazione.
          -d: non eseguire in background.
          -k: verifica la configurazione ed esci.
          -h: visualizza l'help ed esci.
          -v: visualizza la versione e le informazioni di compilazione ed esci.

DESCRIZIONE

Hiawatha è un webserver per Unix orientato alla sicurezza. E' stato scritto con in mente gli obbiettivi di 'essere sicuro' e 'facile da usare'. Hiawatha ha tantissime caratteristiche che nessun altro webserver ha. Sebbene la maggior parte siano iniziate come un esperimento, molre di loro hanno dimostrato di essere piuttosto efficaci.

Hiawatha è stato testato e funziona perfettamente su sistemi Linux, BSD, MacOS X e Cygwin.


FILES DI CONFIGURAZIONE

Hiawatha dispone dei seguenti files di configurazione:

cgi-wrapper.conf
Cfr. cgi-wrapper per ulteriori informazioni.

hiawatha.conf
Cfr. le sezioni SERVER CONFIGURATION, BINDING CONFIGURATION, VIRTUAL HOST CONFIGURATION, DIRECTORY CONFIGURATION, FASTCGI CONFIGURATION, URL TOOLKIT e XSLT per ulteriori informazioni.

mimetype.conf
Cfr. il capitolo MIMETYPES per ulteriori informazioni.

.hiawatha
Cfr. il capitolo USER SETTINGS PER DIRECTORY per ulteriori informazioni.


SEZIONI

Le cofigurazioni relative a binding, directory, FastCGI, virtual host e URL toolkit devono essere posizionati dentro a delle sezioni. Una sezione è definita come segue:

Section {
       ...

}

dove la parola "Section" deve essere sostituita con "Binding", "Directory", "FastCGIserver", "VirtualHost" oppure "UrlToolkit".


CONFIGURAZIONE DEL SERVER

Il file di configurazione globale del server Hiawatha.

set variabile = valore
Con l'istruzione 'set', possiamo dichiarare una variabile. Assicuriamoci che il nome della variabile non vada in conflitto con qualsiasi altra opzione di configurazione. Le variabili sono case-sensitive e non possono essere re-dichiarate.
Esempio: set local_net = 192.168.1.0/24
AccessList = allow local_net, deny 0.0.0.0/0
(cfr AccessList per ulteriori informazioni su questa opzione)


AnonymizeIP = yes | no
Anonymize gli indirizzi IP prima di scriverli nei log degli accessi e degli errori o prima di inviarli allo Hiawatha Monitor.
Default = no
Esempio: AnonymizeIP = yes


BanlistMask = (allow | deny) <ip-address>[/netmask][, (allow | deny) <ip-address>[/netmask], ...]
Impedisce che degli indirizzi IP siano bannati in caso di comportamento scorretto.
Di default, tutti gli IP possono essere bannati. Gli IP che sono 'denied' dalla banlist non saranno bannati.
Esempio: BanlistMask = allow 192.168.1.2, deny 192.168.0.0/16


BanOnDeniedBody = <ban-time>
Numero di secondi di blocco ('ban') di un IP in caso 'request body' vietato. Vedi anche DenyBody.
Default = 0
Esempio: BanOnDeniedBody = 120


BanOnFlooding = <number>/<time>:<ban-time>
Quando un client invia più di <number> richieste in <time> secondi, l'IP sarà bannato per <ban-time> secondi.
Default = -/-:0
Esempio: BanOnFlooding = 10/1:15


BanOnGarbage = <ban-time>
Durata in secondi del blocco ('ban') di un IP in caso di una richiesta HTTP malformata (400 Bad Request).
I browsers normalmente non inviano mai una richiesta HTTP malformata.
Quindi in caso di codice errore 400, probabilmente qualcuno sta tentando di fare qualcosa di non molto simpatico.
Default = 0
Esempio: BanOnGarbage = 60


BanOnInvalidURL = <ban-time>
Numero di secondi di blocco di un IP in caso di un URL non valido.
Default = 0
Esempio: BanOnInvalidURL = 60


BanOnMaxPerIP = <ban-time>
Definisce per quanti secondi un client dovrà essere bloccato quando dovesse superare il numero massimo di connessioni simultanee.
Vedi anche ConnectionsPerIP.
Default = 2
Esempio: BanOnMaxPerIP = 5


BanOnMaxReqSize = <ban-time>
Definisce per quanti secondi un IP dovrà essere bloccato nel caso di una richiesta HTTP troppo grande (413 Request Entity Too Large).
Vedi anche MaxRequestSize.
Default = 0
Esempio: BanOnMaxReqSize = 10


BanOnSQLi = <ban-time>
Definisce per quanti secondi un IP dovrà essere bloccato nel caso venga rilevato un tentativo di SQL-injection.
Vedi anche PreventSQLi.
Default = 0
Esempio: BanOnSQLi = 60


BanOnTimeout = <ban-time>
Definisce per quanti secondi un IP dovrà essere bloccato nel caso di un timeout prima che la prima richiesta sia stata inviata.
Vedi anche TimeForRequest.
Default = 0
Esempio: BanOnTimeout = 30


BanOnWrongPassword = <number>:<ban-time>
Definisce per quanti secondi un IP dovrà essere bloccato nel caso di un numero <number> di password errate durante un'autenticazione HTTP.
Default = -:
Esempio: BanOnWrongPassword = 3:120


CacheRProxyExtensions = <estensione>[, <estensione>, ...]
Abilita la cache interna per le richieste reverse proxy per queste estensioni.
Esempio: CacheRProxyExtensions = css, gif, html, jpg, js, png, txt
(E' necessario che Hiawatha NON sia stato compilato con -DENABLE_CACHE=off oppure con -DENABLE_RPROXY=off)


CacheSize = <dimensione in megabytes>
Dimensione del file di cache interno di Hiawatha. La dimensione massima è 100 (megabytes).
Default = 10
Esempio: CacheSize = 25
(E' necessario che Hiawatha NON sia stato compilato con -DENABLE_CACHE=off)


CacheMaxFilesize = <dimensione in kilobytes>
Dimensione massima di un file in cui Hiawatha memorizzerà la propria cache interna.
Default = 256
Esempio: CacheMaxFilesize = 128
(E' necessario che Hiawatha NON sia stato compilato con -DENABLE_CACHE=off)


CGIextension = <estensione>[, <estensione>, ...]
Estensioni di default di un programma CGI.
Esempio: CGIextension = cgi


CGIhandler = <CGI handler>:<extension>[, <extension>, ...]
Specifica il gestore ('handler') per una certa estensione CGI. Un gestore è un eseguibile che 'eseguirà' lo script CGI.
Esempio: CGIhandler = /usr/bin/php4-cgi:php,php4


CGIwrapper = <CGI wrapper>
Specifica il wrapper per processi CGI. Un CGI wrapper sicuro è incluso nel pacchetto Hiawatha
(cfr. cgi-wrapper per ulteriori informazioni).
Default = /usr/sbin/cgi-wrapper
Esempio: CGIwrapper = /bin/cgi-wrapper


ConnectionsPerIP = <numero>
Numero massimo di connessioni simultanee per IP.
Default = 10
Esempio: ConnectionsPerIP = 5


ConnectionsTotal = <numero>
Numero massimo di connessioni simultanee.
Default = 100
Esempio: ConnectionsTotal = 250


DHsize = 1024|2048|4096
Configura la dimensione della chiave Diffie-Hellman.
Default = 2048
Esempio: DHsize = 4096


ExploitLogfile = <filename con percorso completo>
Logfile per tutti i tentativi di exploit: CSRF, denied bodies, SQL injection and XSS
Default = /var/log/hiawatha/exploit.log
Esempio: ExploitLogfile = /var/log/exploit_attempts.log


GarbageLogfile = <filename con percorso completo>
File di log da usare per tutte le richieste HTTP malformate.
Esempio: GarbageLogfile = /var/log/hiawatha/garbage.log


HideProxy = <indirizzo-ip>[/netmask][, <indirizzo-ip>[/netmask], ...]
Una richiesta inviata dall'IP fornito sarà ricercata in una intestazione X-Forwarded-For.
Quando trovata, l'ultimo indirizzo IP di quel campo sarà utilizzato come indirizzo IP del client.
Assicuriamoci di utilizzare solo 'reverse proxies' affidabili in questa lista di IP.
Questa opzione non influenza il settaggio dell'opzione ConnectionsPerIP.
Esempio: HideProxy = 192.168.10.20


Include <filename>|<cartella>
Include un altro file di configurazione o i files di configurazione in una cartella.
Esempo: Include /etc/hiawatha/hosts.conf


KickOnBan = yes|no
In caso di blocco ('ban'), chiude tutte le ulteriori connessioni che arrivano dallo stesso IP.
Default = no
Esempio: KickOnBan = yes


KillTimedoutCGI = yes|no
Se un processo CGI va in timeout (vedi TimeForCGI per ulteriori informazioni), Hiawatha invierà un segnale TERM al processo CGI, aspetterà 1 secondo e poi invierà un segnale KILL al processo CGI.
Questa opzione non ha effetto su job FastCGI.
Default = yes
Esempio: KillTimedoutCGI = no


LogfileMask = (allow|deny) <indirizzo-ip>[/netmask][, (allow|deny) <indirizzo-ip>[/netmask], ...]
Definisce un elenco di IP le cui richieste HTTP saranno registrate nel log.
Se un IP non si combina ('match') con gli IP elencati allora la richiesta sarà registrata nel log.
Esempio: LogfileMask = deny 10.0.0.0/24


LogFormat = hiawatha|common|extended
Definisce il formato di un file di log:

hiawatha = formato di default usato da Hiawatha;
common = Common Log Format;
extended = Extended Common Log Format.

Default = hiawatha
Esempio: LogFormat = extended


MaxServerLoad = <valore>
Quando il server è sottoposto ad un carico maggiore di <valore>, Hiawatha lascerà cadere le connessioni in ingresso. Questa opzione è disponibile solo con Linux.
Esempio: MaxServerLoad = 0.7


MaxUrlLength = <valore>
La lunghezza massima di una URL accettata dal webserver come valida. In caso contrario (non accettata) Hiawatha ritornerà un codice di errore 414. Questa verifica è disabilitata se <valore> è definito come 'none'.
Default = 1000
Esempio: MaxUrlLength = 500


MimetypeConfig = <file_di_configurazione>
Percorso del file di configurazione del mimetype. Se il percorso è omesso, verrà usata la cartella del file di configurazione di Hiawatha.
Default = mimetype.conf
Esempio: MimetypeConfig = /etc/mime.types


MinSSLversion = SSL3.0|TLS1.0|TLS1.1|TLS1.2
Specifica la versione minima di SSL per le connessioni HTTPS. Al di sotto di questa versione Hiawatha rifiuterà la connessione.
Default = TLS1.0
Esempio: MinSSLversion = TLS1.1
(è necessario che Hiawatha sia compilato con -DENABLE_SSL=on)


MonitorServer = <indirizzo-ip>
Specifica l'indirizzo IP del server monitor. Questo abilita la registrazione di informazioni statistiche. Usa un header CGI X-Hiawatha-Monitor per registrare un evento.
Esempio: MonitorServer = 192.168.1.2


PIDfile = <filename>
Il nome del file in cui Hiawatha scriverà il proprio process-ID (PID). Non lo dovremmo cambiare a meno di sapere esattamente quello che stiamo facendo (il CGI-wrapper e il pannello delle preferenze di MacOS X si aspettano di trovare il PID file nella locazione di default).
Default = /var/run/hiawatha.pid
Esempio: PIDfile = /data/hiawatha.pid


Platform = cygwin | windows
Se settato a 'windows', Hiawatha convertirà lo Unix-style del percorso ai programmi CGI in un percorso Windows-style.
Default = windows
Esempio: Platform = cygwin
(Questa opzione e disponibile solo nella versione Windows (Cygwin) di Hiawatha).


RebanDuringBan = yes|no
Resetta (azzera) il ban timer quando un client tenta di riconnetersi durante un ban.
Default = no
Esempio: RebanDuringBan = yes


ReconnectDelay = <time>
Definisce per quanti secondi Hiawatha terrà in memoria l'indirizzo IP della connessione supponendo di conseguenza che il client sia ancora connesso.
In combinazione con ConnectionsPerIP, questo settaggio può essere usato per prevenire il flood.
Nota che sarà usato il ban timer del BanOnMaxPerIP, non quello del BanOnFlooding.
Questa opzione potrebbe generare un po' di carico extra al server.
Default = 0
Esempio: ReconnectDelay = 3


RequestLimitMask = (allow|deny) <indirizzo-ip>[/netmask][, (allow|deny) <indirizzo-ip>[/netmask], ...]
Definisce per quali clients i settaggi ConnectionsPerIP, MaxRequestSize and TimeForRequest non devono essere considerati.
Se un IP è ammesso oppure non è nella lista, allora i settaggi saranno usati.
Esempio: RequestLimitMask = deny 192.168.0.1


ServerId = <userid>|<userid>:<groupid>[,<groupid>, ...]
La userid e il groupid (o i groupid) che il server utilizzerà. Se viene specificato solo uno userid, allora il groupid(s) sarà automaticamente cercato in /etc/passwd e in /etc/group.
Lo userid e il groupid dell'utente root non sono permessi. Lo userid o il groupid può anche essere un nome non solo un numero.
Default = 65534:65534
Esempio: ServerId = www-data


ServerString = <testo>
Il testo che segue la scritta 'Server:' nel HTTP header della risposta. Utilizza 'none' per rimuovere completamente la Server string dall'header HTTP.
Default = Hiawatha v<version>
Esempio: ServerString = myWebserver


SetResourceLimits = yes|no
Permetti a Hiawatha di configurare i limiti delle risorse e il numero di threads e di descrittori di file (file descriptors).
Default = yes
Esempio: SetResourceLimits = no


SocketSendTimeout = <time>
Configura il valore SO_SNDTIMEO per tutte le connessioni socket di tutti i clients.
Usa lo 0 per disabilitare questa opzione.
Default = 3
Esempio: SocketSendTimeout = 10


SystemLogfile = <percorso_completo_al_file>
File di log per tutti i messaggi di systema e di errore.
Default = /var/log/hiawatha/system.log
Esempio: SystemLogfile = /var/log/hiawatha.sys


ThreadKillRate = <numero>
All'inizio, Hiawatha il numero di threads specificato da ThreadPoolSize. Quando più threads fossero richiesti, Hiawatha li crea "al volo". Nel momento in cui questi extra threads non sono più necessari, un numero massimo <numero> di threads sono eliminati per 10 secondi.
Default = 1
Esempio: ThreadKillRate = 10


ThreadPoolSize = <size>
Dimensione iniziale del "thread pool".
Default = 25
Esempio: ThreadPoolSize = 50


Throttle = (<main-mimetype>/[<sub-mimetype>]|.<extension>):<speed in kB/s>
Controlla la velocità di upload speed di certi files.
Esempio: Throttle = audio/mpeg:30
Throttle = .mp:50


Tomahawk = <numero della porta>, <Hash MD5 della password>
I parametri rappresentano la porta e la password per il Tomahawk.
Si può usare il telnet per connettesi a Tomahawk (localhost:<numero della porta>).
Una volta connessi a Tomahawk, digitare 'help' per ulteriori informazioni.
Esempio: Tomahawk = 81,41d0c72bd73afaa2c207064d81d5a
(E' necessario che Hiawatha sia stato compilato con l'opzione -DENABLE_TOMAHAWK=on)


TunnelSSH = <ip-address>[, <ip-address>, ...]
Questa opzione permette di collegarsi al demone SSH del nostro server quando la porta 22 non fosse disponibile.
Il parametro di questa opzione è l'indirizzo IP della locazione da cui ci vogliamo connettere al server.
Con PuTTY e WinSCP, useremo la tipologia HTTP proxy e abilitiamo l'opzione 'Consider proxying local host connections'.
Utilizzeremo 'localhost' come hostname e l'hostname del nostro server come proxy hostname.
Esempio: TunnelSSH = 123.45.67.89


UserDirectory = <directory>
Il nome della cartella web all'interno della home directory dell'utente. (Vedi UserWebsites per ulteriori informazioni).
Default = public_html
Esempio: UserDirectory = website


WaitForCGI = yes|no
Permette a Hiawatha di aspettare la fine dei processi CGI dopo aver ricevuto l'ultimo byte di output (via waitpid() call) oppure no (SIGCHLD settato a SIG_IGN).
Default = yes
Esempio: WaitForCGI = no


WorkDirectory = <cartella>
Definisce la cartella dove Hiawatha può memorizzare files temporanei di un upload o del Monitor.
Da notare che Hiawatha cambierà per sicurezza la proprietà e diritti di accesso a questa cartella.
Quindi NON usare cartelle già esistenti come ad esempio /tmp.
Default = /var/lib/hiawatha
Esempio: WorkDirectory = /tmp/hiawatha


WrapUserCGI = yes | no
Usa sempre il CGI-wrapper quando si devono gestire scripts CGI nei siti dell'utente (cfr UserWebsites per altre informazioni).
Lo userid del proprietario del sito web sarà utilizzato.
Default = no.
Esempio: WrapUserCGI = yes


CONFIGURAZIONE DEI BINDING (BINDING CONFIGURATION)

Un binding è dove un client può connettersi (ad una porta su una interfaccia di rete).


BindingId = <binding_id>
Il binding ID può essere usato per agganciare un virtual host ad un binding (vedi RequiredBinding per ulteriori informazioni).
Esempio: BindingId = LAN


EnableAccf = yes|no
Abilita l' "HTTP accept filter". Questa opzione è disponibile solo su FreeBSD e richiede che il modulo accf_http sia caricato nel kernel.
Default = no
Esempio: EnableAccf = yes


EnableAlter = yes|no
Abilita i metodi PUT e DELETE nelle richieste HTTP per questo binding (vedi AlterList e UploadDirectory per ulteriori informazioni).
Default = no
Esempio: EnableAlter = yes


EnableTRACE = yes|no
Abilita il metodo TRACE nelle richieste HTTP per questo binding.
Default = no
Esempio: EnableTRACE = yes


Interface = <indirizzo IP>
L'indirizzo IP dell'interfaccia che deve essere utilizzata.
Default = 0.0.0.0 (IPv4)
Esempio: Interface = 192.168.0.1


MaxKeepAlive = <numero>
Numero massimo di stay-alive dopo la prima richiesta. Dopo di che la connessione viene chiusa.
Naturalmente il browser si può riconnettere. Ma questo fornisce agli altri utenti la possibilità di connettersi in caso di un webserver particolarmente "affollato".
Default = 50
Esempio: MaxKeepAlive = 100


MaxRequestSize = <size>
The maximum size of a request in kilobytes the webserver is allowed to receive. This does not include PUT requests.
Default = 64
Esempio: MaxRequestSize = 256


MaxUploadSize = <size>
La dimensione massima in megabyte che il webserver è autorizzato a ricevere da una richiesta PUT.
Il limite massimo configurabile è 2047 megabyte.
Default = 1
Esempio: MaxUploadSize = 15


Port = <port number>
Il numero della porta che sarà usata dal binding. Questo è un parametro obbligatorio.
Esempio: Port = 80


RequiredCA = <CA certificate file>[, <CA CRL file>]
Utilizza il certificato CA presente in questo file per autenticare gli utenti.
Gli utenti privi di un certificato rcavato da uno dei CA elencati, non saranno ammessi.
Esempio: RequiredCA = /etc/ssl/cacert.pem, /etc/ssl/cacrl.pem
(requires that Hiawatha was not compiled with -DENABLE_SSL=off)


SSLcertFile = <SSL private key and certificate file>
Cripta le connessioni del binding corrente con la chiave privata SSL e il certificato presenti nel file specificato.
Anche i certificati intermedi vanno a finire in questo file.
Accertati che l'ordine combaci con la catena di SSL: prima i certificato dell'host e per ultimi i certificati CA.
Esempio: SSLcertFile = my_domain.pem
(requires that Hiawatha was not compiled with -DENABLE_SSL=off)


TimeForRequest = [<time1>, ]<time2>
Numero massimo di secondi a disposizione di un client per inviare la sua richiesta HTTP.
Il valore time1 è usato per la prima richiesta, mentre il time2 per le richieste successive (Keep-Alive time).
Se il valore time2 è omesso, time1 è usato per tutte le richieste.
Default = 5, 30
Esempio: TimeForRequest = 2, 45


CONFIGURAZIONE DI UN VIRTUAL HOST

Questa è la sezione in cui si configurano i domini (virtuali) che il webserver gestirà.
Il primo dominio NON deve essere inserito in questa sezione in quanto essendo il dominio di default non è virtuale, ma reale.
E' una buona pratica di prudenza configurare l'indirizzo IP del webserver come "Hostname" del sito di default che ha come unica pagina una pagina vuota.
In questo modo gli strumenti automatici di scansione dei siti web, non saranno in grado di trovare alcuna vulnerabilità.


AccessList = (allow|deny|pwd) <ip-address>[/netmask][, (allow|deny|pwd) <ip-address>[/netmask], ...]
Define which IPs have access to the website. If an IP does not match an entry in the list, access is granted. 'all' is an alias for 0.0.0.0/0.
The IP address of the machine that connects and the IP address specified in the X-Forwarded-For header field (deny only) will be used to find a match.
'allow' gives access, 'deny' denies access and 'pwd' gives access if a valid password has been given (see PasswordFile for more information).
Esempio: AccessList = deny 10.0.0.13, allow 10.0.0.0/24, deny all


AccessLogfile = <filename with full path>[,daily|monthly|weekly]
File di log per le richieste HTTP. Hiawatha li può ruotare su base giornaliera, settimanale o mensile.
Default = /var/log/hiawatha/access.log
Esempio: AccessLogfile = /var/log/hiawatha.acc, weekly


Alias = <softlink>:<directory>
Un alias è un softlink ad una cartella. Ogni richiesta a <websiteroot>/<softlink> sarà rediretta a <directory>.
Esempio: Alias = /doc:/usr/share/doc


AllowDotFiles = <yes|no>
Permette ad Hiawatha di effettuare l'upload di files il cui nome comincia con un punto (in ambiente Unix sono i files "nascosti"). Le richieste per i files .hiawatha sono sempre bloccate.
Default = no
Esempio: AllowDotFiles = yes


AlterGroup = <groupname>[, <groupname>, ...]
Il <groupname> è il nome del gruppo di cui un utente deve far parte per poter usare i metodi HTTP PUT e DELETE. (vedi PasswordFile e AlterList per ulteriori informazioni).
Esempio: AlterGroup = publishers


AlterList = (allow|deny|pwd) <ip-address>[/netmask][, (allow|deny|pwd) <ip-address>[/netmask], ...]
Definisce quali IP hanno il permesso per poter usare i metodi HTTP PUT e DELETE. Se un IP non corrisponde ad uno degli elementi della lista, allora l'utilizzo dei due metodi viene negato.
Il termine 'all' è un alias per intendere 0.0.0.0/0.0.
L'indirizzo IP della macchima che si connette e l'IP specificato nel campo intestazione (header) X-Forwarded-For (solo negazione, deny only) sarà utilizzato per cercare un eventuale corrispondenza.
Attenzione ai tentativi di effettuare l'upload di script CGI! Utilizza l'opzione "ExecuteCGI = no" in una sezione Directory per disabilitarre l'esecuzione di un CGI. (vedi EnableAlter, AlterGroup and AlterMode per ulteriori informazioni).
Esempio: AlterList = deny 10.0.0.13, allow 10.0.0.0/24, deny all


AlterMode = <filemode>
I file che sono creati via PUT, avranno i permessi configurati a <filemode> (vedi AlterList per ulteriori informazioni).
Default = 640
Esempio: AlterMode = 664


BanByCGI = yes|no[, <max_secondi>]
Permette ad un'applicazione CGI di bannare un client via l'intestazione CGI (CGI header) X-Hiawatha-Ban: <max_secondi>.
Il parametro <max_secondi> rappresenta il numero massimo di secondi di "ban" che un'applicazione CGI è autorizzata ad usare nei confronti di un client.
Default = no
Esempio: BanByCGI = yes


CustomHeader = <chiave>: <valore>
Configura un'intestazione HTTP personalizzata per ogni risposta.
Esempio: CustomHeader = Access-Control-Allow-Origin: *


DenyBody = <espressione_regolare>< id="DenyBody">
Se il corpo della richiesta corrisponde all'espressione regolare, Hiawatha ritorna un codice "403 Forbidden".
Esempio: DenyBody = ^.*%3Cscript.*%3C%2Fscript%3E.*$


EnablePathInfo = yes|no
Accetta degli URL del tipo /index.php/parametro nel caso che /index.php esista e che l'estensione .php sia stata configurata essere un programma CGI.
In questo caso '/parametro' sarà inserito nella variabile d'ambiente PATH_INFO.
Default = no
Esempio: EnablePathInfo = yes


EnforceFirstHostname = yes|no
Se il nome host usato nella URL non è uguale al primo ndella lista dei settaggi degli Hostname, allora Hiawatha invierà un redirect 301 con quel nome host. Questa opzione è igorata se il primo nome host inizia con un carattere jolly.
Default = no
Esempio: EnforceFirstHostname = yes


ErrorHandler = <error code>:<filename>[?key=value&...]
Quando si verificasse un errore con codice 401, 403, 404, 501 o 503, il file specificato sarà inviato al browser.
Il WebsiteRoot e l' ErrorHandler insieme, devono formare il percorso completo al file.
Il codice d'errore generato può essere ricavato alla variabile d'ambiente HTTP_GENERATED_ERROR.
Per sostituire il codice HTTP ritornato in uno script CGI, bisogna usare l'intestazione HTTP "Status" , come ad esempio "Status: 404".
Esempio: ErrorHandler = 404:/error.php?code=404


ErrorLogfile = <filename with full path>
Nome del file di log che verrà scritto con lo stdiut dei processi CGI.
Default = /var/log/hiawatha/error.log
Esempio: ErrorLogfile = /var/log/hiawatha.err


ErrorXSLTfile = <percorso-completo-al-file-XSLT>
In caso di errore, Hiawatha utilizza il file XSLT per generare il messaggio d'errore.
Nel caso un file non fosse definito, Hiawatha utilizzerà un messaggio d'errore standard.
Un esempio di file XML generato in caso d'errore, può essere trovato nella cartella extra/error.xml all'interno del pacchetto dei sorgenti.
Esempio: ErrorXSLTfile = /etc/hiawatha/error.xslt
(E' necessario che Hiawatha non sia stato compilato con l'opzione -DENABLE_XSLT=off)


ExecuteCGI = yes|no
Permette l'esecuzione di programmi CGI.
Default = no
Esempio: ExecuteCGI = yes


FileHashes = <File che contiene l'hash di files>
Fornisce ad Hiawatha il percorso ad un file che contiene un hash SHA256 per ogni singolo file nella cartella radice.
Prima di servire un file, Hiawatha verifica l'hash di quel file confrontandolo con quelli presenti nel file-hash.
Se non esiste corrispondenza, l'accesso è negato. Questo sistema protegge contro la modifica di file o l'upload di malware.
Anche gli script FastCGI sono verificati nella stessa maniera se il server FastCGI può essere raggiunta via un socket UNIX.
Il file di hash può essere creato utilizzando l'opzione -s del comando wigwam.
Esempio: FileHashes = /etc/hiawatha/hashes/my_website.txt


FollowSymlinks = yes|no
Permette a Hiawatha di seguire i link simbolici a file e cartella. I link simbolici che risiedono all'interno della cartella radice o che sono proprietà dell'utente root sono sempre seguiti.
Nota bene che questo non si applica ai link simbolici CGI che sono eseguiti via FastCGI, in quanto Hiawatha non è in grado di cercare link simbolici che risiedono su server FastCGI remoti.
Default = no
Esempio: FollowSymlinks = yes


Hostname = <hostname>, [<hostname>, ...]
Nome (o nomi) dell'host che Hiawatha gestirà. E' possibile usare un carattere jolly come iniziale, ad eccezione del primo nome host (un nome valido è richiesto in caso di un errore 301).
Il parametro Hostname è obbligatorio.
Esempio: Hostname = www.my-domain.com, *.my-domain.com, www.some-alias.com


IgnoreDotHiawatha = yes|no
Specifica se Hiawatha deve ignorare o meno i files .hiawatha.
Default = no
Esempio: IgnoreDotHiawatha = yes


LoginMessage = <text>
Definisce il messaggio che sarà visualizzato nella finestra di login in caso di un'autenticazione HTTP (vedi il parametro PasswordFile per ulteriori informazioni).
Quando si usasasse l'autenticazione Digest HTTP, il LoginMessage non dovrebbe contenere il carattere ':'.
Default = Private page
Esempio: LoginMessage = Hugo's MP3 collection


MonitorRequests = yes|no
Rende disponibile al Hiawatha Monitor tutte le informazioni disponibili relative all'host corrente.
Default = no
Esempio: MonitorRequests = yes


NoExtensionAs = <extension>
Se il file richiesto non ha un'estensione, viene trattato come se la sua estensione fosse <extension>.
Esempio: NoExtensionAs = cgi


PasswordFile = ((Basic|Digest):<passwordfile>)|none[,<groupfile>]
Quando questa opzione viene settata, l'autenticazione HTTP viene abilitata. Utilizzare il percorso completo al file delle password quando il file delle password fosse da utilizzare anche per delle sottocartelle. Le password possono essere create utilizzando il programma wigwam(1). Il "realm" per l'autenticazione Digest HTTP deve essere uguale al testo configurato via LoginMessage. Il <groupfile> contiene i nomi dei gruppi seguiti dai nomi degli utenti che sono membri di quel gruppo. Il formato delle righe nel groupfile è: <groupname>:<username>[ <username> ...]
Esempio: PasswordFile = basic:/var/www/.passwords,/var/www/.groups


PreventCSRF = yes|no
Previene una Cross-site Request Forgery ignorando tutti i cookie inviati da un browser quando si seguisse un link diretto all'esterno del sito corrente. Questa configurazione potrebbe causare dei problemi per gli utenti che usassero degli strumenti per nascondere/rimuovere la stringa dell'intestazione Referer HTTP durante la navigazione. Nota bene che questa protezione non è sicura al 100%.
Default = no
Esempio: PreventCSRF = yes


PreventSQLi = yes|no
Previene le SQL-injection individuando i tentativi di iniezione e vietando la corrispondente richiesta attraverso un codice di risposta HTTP 409.
Nonostante venga fatto il massimo sforzo, è fondamentale comprendere che l'individuazione dei tentativi di SQL-injection non è garantita al 100%.
Notiamo inoltre che questa opzione potrebbe avere ripercussioni negative sull'efficienza del server web. Da usarsi quindi con cautela.
Vedi anche l'opzione BanOnSQLi.
Default = no
Esempio: PreventSQLi = yes


PreventXSS = yes|no
Previene il cross-site scripting via URL sostituendo i caratteri <, >, " e ' presenti nella URL con un segno di sottolineatura _.
Default = no
Esempio: PreventXSS = yes


RequiredBinding = <binding_id>[, <binding_id>, ...]
Di default un host virtuale può essere raggiunto attraverso un binding qualunque. Invece, utilizzando questa opzione, è possibile specificare quali binding(s) sono utilizzabili per visitare quel host virtuale (si veda il capitolo BINDING CONFIGURATION per ulteriori informazioni).
Esempio: RequiredBinding = LAN


RandomHeader = <lunghezza>
Aggiunge una intestazione HTTP X-Random alla risposta per una connessione HTTPS.
L'intestazione contiene una stringa casuale. La lunghezza della stringa è un numero a caso fra 1 e <lunghezza>.
Questa intestazione aiuta a prevenire il fatto che un attaccante possa indovinare quale file sia stato richiesto basandosi sulla lunghezza della risposta. Il valore di <lunghezza> deve essere compreso fra 10 e 1000.
Esempio: RandomHeader = 250


RequiredCA = ...
Usa questa opzione all'interno di un blocco di host virtuale se si desidera utilizzare le capacità SNI di Hiawatha.
Si veda l'opzione RequiredCA nel capitolo BINDING CONFIGURATION per ulteriori informazioni.


RequiredGroup = <groupname>[, <groupname>, ...]
Il <groupname> è il nome del gruppo a cui un utente deve appartenere per ottenere l'accesso (si veda PasswordFile per ulteriori informazioni).
Esempio: RequiredGroup = webadmins,staff


RequireSSL = yes|no[,HSTS time]
Specifica che un dominio deve essere visitato attraverso una connessione SSL. Nel caso sia visitato via una semplice connessione HTTP, Hiawatha effettuerà un redirect (via un codice 301) verso un URL HTTPS.
L' HSTS time rappresenta il valore di max-age dell'intestazione HTTP Strict-Transport-Security.
Default = no,31536000
Esempio: RequireSSL = yes,2678400
(E' necessario che Hiawatha non sia stato compilato con l'opzione -DENABLE_SSL=off)


ReverseProxy [!]<pattern> http[s]://<hostname>[:<port>][/<path>] [<timeout>] [keep-alive]
Inoltra la richiesta con una URL che corrisponde all'espressione regolare <pattern> ad un altro server web. In questo caso <path> è messo davanti alla URL originale.
Si noti che la selezione del reverse proxy viene prima della gestione dell' URL toolkit. Qualora <hostname> fosse un indirizzo IP, il valore dell'intestazione HTTP Host rimane invariato. In caso contrario, viene sostituita con il valore di <hostname>.
La connessione viene chiusa dopo <timeout> secondi, che per default è fissato a 5 secondi.
Di default, Hiawatha non utilizza connessioni keep-alive verso il server web finale. Si può abilitare questo comportamento aggiungendo keep-alive alla riga della configurazione.
Esempio: ReverseProxy ^/icons http://resources.lan/images


RunOnAlter = <path to program>
Esegue un programma dopo che un client ha inviato una richiesta PUT o DELETE. Informazioni riguardo alla richiesta sono poi messe in variabili d'ambiente, proprio come gli script CGI.
Esempio: RunOnAlter = /usr/local/sbin/alter-script


Setenv <key> = <value>
Definisce le opzioni d'ambiente per i programmi CGI.
Esempio: Setenv PHPRC = /var/www/conf


ScriptAlias = <softlink>:<script>
Uno script alias è un softlink virtuale verso uno script CGI. Ogni richiesta verso <websiteroot>/<softlink> sarà reindirizzata verso <script>.
Esempio: ScriptAlias = /script.cgi:/usr/lib/script.cgi


ShowIndex = yes|no|<percorso-completo-ad-un-file-XSLT>|xml
Ritorna il listato di una cartella in formato HTML nel caso un file index non esistesse.
Se si desidera cambiare completamento il layout, bisogna specificare il percorso ad un file XSLT.
Se il file XSLT non fosse disponibile oppure fosse stata impostata l'opzione xml, Hiawatha visualizzerà l'XML della cartella.
Un esempio di output XML è reperibile in extra/index.xml all'interno del pacchetto dei sorgenti.

Default = no
Esempio: ShowIndex = /etc/hiawatha/index.xslt

(E' necessario che Hiawatha non sia stato compilato con l'opzione -DENABLE_XSLT=off)


SSLcertFile = ...
Si utilizzi questa opzione in un blocco di un virtualhost se si vuol far uso delle capacità SNI di Hiawatha.
Si veda l'opzione SSLcertFile nel capitolo BINDING CONFIGURATION per ulteriori informazioni.


StartFile = <filename>
Indica il nome di file che deve essere inviato al browser quando venga richiesta una cartella.
Default = index.html
Esempio: StartFile = start.php


TimeForCGI = <secondi>
Tempo massimo in secondi, concesso ad un processo CGI per completare il proprio lavoro.
Default = 5
Esempio: TimeForCGI = 15


TriggerOnCGIstatus = yes|no
Visualizza un messaggio d'errore HTTP o invoca un ErrorHandler quando un processo CGI emette una riga con un'intestazione con uno Status HTTP.
Default = no
Esempio: TriggerOnCGIstatus = yes


UserWebsites = yes|no
Attiva i website utente per questo host (virtuale). Si tratta della URL /~user/.
Default = no
Esempio: UserWebsites = yes


UseFastCGI = <fcgi_server_id>[, <fcgi_server_id>, ...]
Definisce il server FastCGI da utilizzare con l'host virtuale che si sta configurando.
Il primo server FastCGI che corrisponde (compresa l'estensione), sarà quello usato (vedi ONFIGURAZIONE FASTCGI per ulteriori informazioni).
Questa opzione setta automaticamente il parametro ExecuteCGI su yes per il virtual host.
Esempio: UseFastCGI = PHP5


UseGZfile = yes|no
Se disponibile, a fronte della richiesta di un <file-richiesto>, verrà restituito il corrispondente <file-richiesto>.gz .
Default = no
Esempio: UseGZfile = yes

(opzione obsoleta?)


UseToolkit = <toolkit_id>[, <toolkit_id>, ...]
Esegue delle operazioni speciali sulla URL, come ad esempio un rewriting attraverso un espressione regolare (si veda il capitolo URL TOOLKIT per ulteriori informazioni).
Esempio: UseToolkit = my_toolkit

(Si richiede che Hiawatha non sia stato compilato con l'opzione -DENABLE_TOOLKIT=off)


UseXSLT = yes|no
Attiva le trasformazioni XSL (si veda il capitolo XSLT per ulteriori informazioni).
Default = no
Esempio: UseXSLT = yes

(Si richiede che Hiawatha non sia stato compilato con l'opzione -DENABLE_XSLT=off)


VolatileObject = <percorso-completo-ad-un-file>
Il file indicato, sarà completamente caricato in memoria prima di essere inviato al browser. A causa di questo, il file non potrà essere più grande di 1MB.
Si usi questa opzione per files che cambiano rapidamente, come ad esempio le immagini da webcam.
Esempio: VolatileObject = /var/www/webcam.gif


WebDAVapp = <yes|no>
Abilita il support per le applicazioni WebDAV.
Default: WebDAVapp = no
Esempio: WebDAVapp = yes


WebsiteRoot = <directory>
Specifica la home directory per l'host virtuale.
Esempio: WebsiteRoot = /home/webmaster/website


WrapCGI = <wrap_id>
Specifica l'ID di un CGI-wrapper per questo host virtuale (vedi cgi-wrapper(1) ulteriori informazioni).
Esempio: WrapCGI = test


CONFIGURAZIONE DI UNA CARTELLA

Questo capitolo spiega quali opzioni possono essere configurate per una specifica cartella.
Queste opzioni avranno la precedenza sulle configurazioni dell'host (virtuale).


Path = <path|sub-path>
Il percorso (path) per arrivare ad una cartella. La presenza dell'opzione Path è obbligatoria.
Si noti che solo il la prima Directory che abbia una corrispondenza con Path sarà utilizzata.
Se Path termina con una barra (/), Hiawatha cercherà ovunque nel percorso indicato un file richiesto per una corrispondenza.
Se il Path non ternasse con una barra, Hiawatha comincerà a cercare una corrispondenza dall'inizio del percorso.
Esempio: Path = /var/www/cgi-bin -oppure- Path = /public_html/


RunOnDownload = <percorso-al-programma>
Esegue un programma quando un client richiede una risorsa statica. Questo non include programmi CGI.
Le informazioni riguardo la richiesta si trovano nelle variabili d'ambiente, proprio come i CGI.
Esempio: RunOnDownload = /var/www/log_download


UploadSpeed = <velocità>,<numero-massimo-di-connessioni>
Definisce la velocità di upload in kB/s per tutti i file presenti nella cartella indipendentemente dall'estensione o dal mimetype. La velocità di upload per connessione sarà divisa per il numero di connessioni.
Esempio: UploadSpeed = 20,4

AccessList , AlterGroup , AlterList , AlterMode , ExecuteCGI , WrapCGI , FollowSymlinks , PasswordFile , RequiredGroup , Setenv , ShowIndex , StartFile , TimeForCGI and UseGZfile


CONFIGURAZIONE FASTCGI

Questo capitolo spiega come usare uno o più server FastCGI.


ConnectTo = <ip-address>:<port number>|<path>[, <ip-address>:<port number>|<path>, ...]
Definisce l'indirizzo IP e la porta TCP oppure il socket UNIX a cui Hiawatha si deve connettere per raggiungere il server FastCGI.
Esempi:
ConnectTo = 127.0.0.1:2004 (IPv4)
ConnectTo = [::1]:2004 / ::1.2004 (IPv6)
ConnectTo = /tmp/hiawatha.sock (UNIX socket)


Extension = <estensione>[, <estensione>, ...]
L'estensione dello script che il server FastCGI è in grado di interpretare. Se nessuna estensione viene specificata, tutte le richieste saranno inviate al server FastCGI.
Esempio: Extension = php


FastCGIid = <fcgi_server_id>
Associa ad ogni server FastCGI un identificativo unico. Si utilizzi questo identificativo nella configurazione del FastCGI nel contesto di un host vistuale.
Esempio: FastCGIid = PHP5


ServerRoot = <percorso>
Se il server FastCGI viene eseguito in un ambiente chroot, si utilizzi questo settaggio per specificare la cartella chroot.
Esempio: ServerRoot = /var/www/chroot


SessionTimeout = <tempo-in-minuti>
Definisce la massima durata di una sessione CGI per questo server FastCGI. Sarà usata solamente quando si specifichino multipli ConnectTo.
Default = 15
Esempio: SessionTimeout = 30


URL TOOLKIT

In questo capitolo viene spiegato come utilizzare gli URL toolkit. Per utilizzare gli URL toolkit Hiawatha non deve essere stato compilato con l'opzione -DENABLE_TOOLKIT=off.
I principali comandi utilizzabili in un toolit sono i seguenti:


Call <toolkit_id>
Esegue la sezione del toolkit <toolkit_id> e poi continua con la sezione corrente.
Esempio: Call other_rule_set


Header <chiave> [!]<pattern> <azione>
Esegue un'azione quando l'intestazione HTTP <key> corrisponde all'espressione regolare <pattern>, dove <azione> può essere una delle seguenti voci:
Call, DenyAccess, Exit, Goto, Redirect, Return, Skip e Use.
Un pattern negativo (cioé con davanti un punto esclamativo) non può essere usato con l'azione di Redirect.


Match [!]<pattern> <azione>
Esegue l'azione quando l'URL corrisponde all'espressione regolare <pattern>, dove <azione> può essere una delle seguenti:
Ban, Call, DenyAccess, Exit, Expire, Goto, Redirect, Return, Rewrite, Skip, UseFastCGI.
Si utilizzi MatchCI per eseguire una regex che non tenga conto di MAIUSCOLE/minuscole. Un pattern negato (cioé con davanti un punto esclamativo) non può essere usato con le azioni di redirect e rewrite.


RequestURI exists|isfile|isdir Return|Exit
Se la URL richiesta esiste sul server allora non continuare con questo URL toolkit.
Esempio: RequestURI isfile Return


ToolkitId = <toolkit_id>
Il toolkit ID può essere usato per collegate le regole del toolkit con un host virtuale. Si veda anche l'opzione UseToolkit.
Esempio: ToolkitId = my_toolkit


UseSSL <azione>
Esegue una certa azione quando il client si connetta attraverso una connessione sicura SSL, dove <azione> può essere una delle seguenti:
Call, Exit, Goto, Return, Skip.

Un punto esclamativo posto di fronte ad un pattern (negative pattern matching) fa si che Hiawatha esegua l'azione quando il pattern non corrisponda. Le istruzioni <azione> menzionate sopra sono descritte qui:

Ban <secondi></br/> Esegue il ban (impedisce ogni tentativo di accesso) del client per <secondi> secondi.


DenyAccess
Nega l'accesso al file richiesto (riportando un errore 403) e termina l'esecuzione del toolkit.


Exit
Termina l'esecuzione del toolkit.


Expire <time> seconds|minutes|hours|days|weeks|months [public|private] [Exit|Return]
Aggiunge un'intestazione HTTP Expires con valore pari al timestamp corrente + <time>.
L'opzione public/private (il default è private) definisce il valore dell'intestazione Cache-Control
Il comportamento di default per Hiawatha è quello di continuare dopo un azione Expire.


Goto <toolkit_id>
Esegue <toolkit_id> e termina l'esecuzione del toolkit corrente.


Redirect <url>
Ridirige, con un codice 301, il browser verso l'URL specificato e termina l'esecuzione del toolkit.


Return
Ritorna dalla sezione corrente dell'UrlToolkit.


Rewrite <replacement> [<max_loop>] [Continue|Return]
Riscrive l'URL corrente usando <replacement>.
Esempi:
Match ^/pics/(.*) Rewrite /images/$1 sostituirà /pics/logo.gif con /images/logo.gif.
Match a Rewrite b 3 sostituirà /aaaaa.html con /bbbaa.html.

Il valore di default di <max_loop> è 1, mentre il massimo è 20.

L'esecuzione di Rewrite terminerà il processamento del toolkit a meno che non siano state impostate le opzioni Continue oppure Return.


Skip <numero>
Salta le seguenti <numero> linee (ToolkitId escluso).
Esempio: Skip 2


Use <url>
Sostituisce l'URL corrente con <url> e termina il processamento del toolkit.


UseFastCGI <fcgi_id>
Utilizza un server FastCGI con identificativo <fcgi_id> e termina il processamento del toolkit.

L'URL originale è memorizzato nella variabile d'ambiente SCRIPT_URL. Prima di usare le regole di un URL toolkit, si utilizzi il programma 'wigwam' per verificare i risultati delle vostre regole.

Esempio:

    VirtualHost {
           ...
           UseToolkit = my_toolkit
    }

    UrlToolkit {
           ToolkitId = fix_PHP
           Match ^/index.php4(.*) DenyAccess
           Match ^/index.php5(.*) Rewrite /index.php$1
    }

    UrlToolkit {
           ToolkitId = my_toolkit
           Call fix_PHP
           RequestURI isfile Return
           Match ^/(.*) Rewrite /index.php?page=$1
    }

XSLT

Se richiediamo un file XML, Hiawatha può eseguire una trasformazione XSL nel caso un foglio XSLT sia presente. Per un certo file XML (.xml) richiesto, nella directory corrente deve esistere un file '.xslt' oppure 'index.xslt' o in alternativa, nella WebsiteRoot, deve esserci un file 'index.xslt'. In caso contrario (non ci sono files .xslt corretti), verrà restituito il file XML stesso senza modificazioni. Le variabili d'ambiente che sono disponibili durante l'esecuzione CGI sono disponibli come parametri XSLT. Le variabili passate sulla URL hanno nome che inizia con 'GET_', le variabili POST iniziano con 'POST_' e i cookies iniziano con 'COOKIE_'.


CGI OUTPUT CACHE

Hiawatha può mantenere una cache dell'risultato di una applicazione CGI. Se e per quanto tempo questa cache debba essere mantenuta, dipende dall'applicazione stessa.
L'applicazione può utilizzare le seguenti intestazioni CGI per controllare il comportamento della cache riguardo al proprio output.
Per poter utilizzare questa caratteristica, è necessario che Hiawatha non sia stato compilato con l'opzione -DENABLE_CACHE=off.


X-Hiawatha-Cache: <secondi>>
Il risultato, ovvero l'output del programma può essere mantenuto in cache per <secondi&gt secondi. Il valore minimo è 2 mentre il massimo è 3600 (un'ora).
Esempio: X-Hiawatha-Cache: 600


X-Hiawatha-Cache-Remove: <url>
L'output di <url> deve essere rimosso dalla cache. Si utilizzi questa intestazione quando si sia aggiornata una pagina in cache del proprio CMS.
Si utilizzi il termine all come URL per eliminare la cache relativa a tutto il sito web corrente.
Esempio: X-Hiawatha-Cache-Remove: /about


SETTAGGI UTENTE PER CARTELLA

Un utente può sovrascrivere, per una certa cartella, i settaggi indicati qui sotto:

AccessList ,
AlterGroup ,
AlterList ,
AlterMode ,
ErrorHandler ,
LoginMessage ,
PasswordFile ,
RequiredGroup ,
Setenv ,
ShowIndex ,
StartFile and
UseToolkit (valido solo nella cartella radice di un sito)

Questo può essere fatto inserendo uno o più di questi settaggi in un file .hiawatha dentro a quella cartella. Hiawatha non cercherà alcun .hiawatha nella cartella root del disco.


MIMETYPES

Definisce i mimetypes dei file in /etc/hiawatha/mimetypes.conf.

<mimetype> <extension> [<extension> ...]
Esempio: image/jpeg jpg jpeg jpe


SIGNALS

TERM
Spegne il webserver.

HUP
Chiude tutti i file di log rimasti aperti.

USR1
Riabilita tutti gli IP bannati.

USR2
Svuota la cache interna (è necessario che Hiawatha non sia stato compilato con l'opzione -DENABLE_CACHE=off).


FILES

/usr/sbin/hiawatha
/etc/hiawatha/hiawatha.conf
/etc/hiawatha/mime.types
/etc/hiawatha/cgi-wrapper.conf


VEDI ANCHE

cgi-wrapper(1), wigwam(1)


AUTORE

Hugo Leisink hugo@hiawatha-webserver.org - http://www.hiawatha-webserver.org/

Pagina originale: https://www.hiawatha-webserver.org/manpages/hiawatha


 [Segnala un errore o un'imprecisione] Ultimo aggiornamento: 11-12-2016 14:38