Installazione e configurazione di Internet Information Services 5.0 su Windows 2000 Server

Introduzione:
Internet Information Services 5.0 (IIS) è un insieme dei servizi messi a disposizione da Windows 2000 Server per l'implementazione di funzionalità orientate ad Internet.
Sono compresi:

In questo articolo vedremo come installare e configurare IIS per la pubblicazione di uno o più siti web.
Per maggiore chiarezza, riportiamo di seguito la configurazione della rete utilizzata nell'articolo, ottenuta con il comando ipconfig /all.


[Figura 1: configurazione della rete utilizzata nell'articolo]

Si può notare che il server ha anche una funzione di DNS per la risoluzione dei nomi, il cui suffisso primario è internal.net.
Panoramica generale:
Internet Information Services viene installato di default con Windows 2000 Server; le impostazioni predefinite sono già sufficienti per la creazione di un sito web. Per verificarne il buon funzionamento dopo l'installazione, basta digitare l'indirizzo http://localhost nel browser: si verrà rimandati al sito preconfigurato di IIS.
Lo strumento per la gestione dei servizi di IIS è l'Internet Services Manager, ed presente tra gli Administrative Tools del pannello di controllo. Come tutti gli strumenti di amministrazione di Windows 2000, anche questo è uno snap-in della Microsoft Management Console, è quindi integrabile con qualsiasi altra console custom creata per gli scopi più disparati.


[Figura 2: schermata di Internet Services Manager]

Nell'installazione di default, sono già configurati due siti:

L'installazione del servizio comporta anche la creazione di due utenti:

Questi utenti vengono inseriti tra gli utenti locali del server o, nel caso il server sia anche Domain Controller, direttamente in Active Directory.
L'utente IUSR_nome del server è detto anche Anonymous User o Internet Guest Account.
In questo articolo, per comodità, renderemo inattivi i due siti di default, cliccando con il pulsante destro del mouse sulla definizione del sito e scegliendo il comando Stop.
Questo è consigliato nel caso il server venga utilizzato su Internet, in modo da pubblicare unicamente i siti che servono al nostro scopo.
Configurazione di un sito Web:
Per lavorare correttamente, un sito web ha bisogno di una cartella, detta Home Directory, nella quale sono riposti tutti i files del sito; è necessario quindi creare una cartella per ogni sito web che vogliamo gestire. Questo permette anche di lasciare inalterati i due siti di default, che si trovano nel path %systemdrive%/Inetpub/wwwroot.
Come esempio, si creeremo un sito di nome WebSite01, partendo proprio dalla creazione della cartella contenente i files di questo sito. E' possibile creare la cartella in un qualsiasi punto del file system.


[Figura 3: la cartella che ospiterà il sito web è stata creata]

Perché IIS funzioni correttamente, e per mantenere un buon livello di sicurezza, è necessario che la cartella abbia impostate particolari permissions a livello di file system:

Utente
Permissions assegnate
Administrators Full control
SYSTEM Full control
Internet Guest Account Read

Queste permissions permettono agli amministratori di sistema di poter gestire i files all'interno, al servizio di sistema di poter operare sulla cartella, e all'Internet Guest Account di poter operare in sola lettura sui files del sito.
Visto che ciascun utente che visiterà il sito web agirà nel contesto di sicurezza dell'Internet Guest Account, siamo sicuri che ciascun visitatore potrà unicamente leggere i files contenuti sul sito.


[Figura 4: permessi applicati sulla cartella che conterrà i files del sito]

Dopo aver copiato in questa cartella i files che compongono il sito web, possiamo configurare il sito nel tool Internet Services Manager. Facendo click con il pulsante destro sul nome del server, poi New/Web site, verrà eseguito un wizard che ci consentirà di configurare il nuovo sito web.


[Figura 5: Wizard per la creazione del sito]

Facendo click su Next, è possibile dare una descrizione al sito, in modo da facilitare l'amministrazione.


[Figura 6: Descrizione del sito web]

Nel prossimo passo è possibile decidere a quale indirizzo IP e a quale porta il sito web dovrà rispondere. Questi parametri li spiegheremo meglio più avanti.


[Figura 7: Indirizzo IP e porta del sito Web]

E' poi necessario specificare qual è la home directory del sito. Qui bisogna specificare il path della cartella creata in precedenza. Il parametro "Allow anonymous access to this web site" va lasciato spuntato, perché, per ora, si creerà un sito web che non richiede l'inserimento di credenziali da parte del visitatore (autenticazione).


[Figura 8: Path della home directory del sito]

Ora IIS permette di specificare le permissions al livello di IIS sulla home directory. Visto che a livello di file system si è specificato che IUSR_nome del server può solo leggere (Read), lasciando le permissions di default in questo passo (Read e Run Scripts) si raggiunge un buon livello di sicurezza.
Si può al limite togliere il permesso Run Scripts se non si intende inserire pagine ASP nel sito.


[Figura 9: Permissions impostate sul sito]

Cliccando su Next e poi su Finish, il wizard si completa e, in pochi semplici passi, abbiamo configurato il sito web. Il sito sarà presente in Internet Services Manager. Possiamo vedere il risultato del nostro lavoro aprendo il sito nel browser:


[Figura 10: il sito appena configurato è aperto nel browser]

Una cosa importante da notare è il default document . Nel'URL non abbiamo specificato nessuna pagina specifica del sito da visualizzare. In questo caso IIS va a cercare la pagina definita come default document per il sito richiesto. Se il default document viene trovato nel sito, IIS restituisce al browser quella pagina, altrimenti verrà visualizzato un errore. Il default document si imposta cliccando con il pulsante destro sul sito in questione, poi Properties e la tab Documents nella maschera che compare.


[Figura 11: il default document per il nostro sito]

Nel nostro caso IIS, non trovando una pagina specifica nell'URL, ha cercato innanzitutto un file di nome default.htm, l'ha trovato e l'ha restituito nel browser. Se non l'avesse trovato, avrebbe cercato un file di nome Default.asp. In caso di ulteriore esito negativo avrebbe restituito una pagina di errore.
Identificare correttamente un sito web IIS
Con quello che costano i server, non possiamo certamente permettere che il nostro hardware possa gestire un solo sito, vero? Capiterà quasi sicuramente che su di un singolo server vogliamo configurare più di un sito web; inoltre dobbiamo associare gli indirizzi IP dei nostri siti ai rispettivi nomi nel DNS.
Complichiamoci un po' la vita e creiamo, con gli stessi passi visti prima, un nuovo sito web di nome WebSite02, partendo dalla creazione della cartella sul file system, fino alla definizione in IIS. Noteremo subito che il sito è in stato Stopped, e otterremo un sonoro errore nel caso tentassimo lo Start.


[Figura 12: la configurazione di un nuovo sito web dà errore]

Il motivo dell'errore è semplice: IIS si ritrova due siti web configurati allo stesso modo, di conseguenza, alla richiesta di un client, non saprebbe distinguere quale tra i due siti visualizzare, perché:

  1. I due siti risiedono sullo stesso server, quindi l'URL http://192.168.234.200 andrebbe bene per raggiungere entrambi.
  2. I siti ascoltano entrambi sulla porta 80.
  3. I siti hanno lo stesso host header (degli host headers parleremo più in dettaglio in seguito).

Vediamo meglio questa cosa, che risulta molto importante per la configurazione corretta del web server. Nel caso di più siti configurati sullo stesso web server, IIS utilizza tre parametri per distinguere un sito dall'altro (illustrati in figura 6):

  1. L'indirizzo IP assegnato al sito.
  2. La porta sulla quale il sito ascolta.
  3. L'Host Header assegnato.

Il variare solo uno di questi parametri ci permette di distinguere un sito dall'altro; tutto sta nel decidere quale variazione si adatta meglio alle nostre esigenze.
Se vogliamo differenziare il sito per indirizzo IP è necessario che il nostro server abbia più indirizzi assegnati, e per farlo, abbiamo due possibilità: aggiungere ulteriori schede di rete al server, ciascuna con un indirizzo IP differente, o aggiungere ulteriori indirizzi IP alla scheda di rete già presente. Per semplicità, vedremo la seconda ipotesi:


[Figura 13: aggiunta di un nuovo IP alla scheda di rete esistente]

In questo modo la nostra unica scheda di rete avrà gli indirizzi 192.168.234.200 e 192.168.234.201, con subnet mask 255.255.255.0 in entrambi i casi. Fatto questo, è possibile specificare l'indirizzo IP di lavoro per ciascun sito:


[Figura 14: assegnazione IP al sito WebSite01]
 

[Figura 15: assegnazione IP al sito WebSite02]

Dopo questa operazione, sarà possibile eseguire lo Start di WebSite02, per ottenere i due siti web funzionanti:


[Figura 16: i due siti web funzionano correttamente con due diversi indirizzi IP]

Da qui si può capire che se specifichiamo (All Unassigned) nel parametro IP Address di un sito, significa che quel sito risponderà a tutti gli indirizzi IP assegnati a quel web server non però assegnati ad altri siti.
Come secondo metodo di configurazione, possiamo differenziare due siti web tramite la porta di lavoro. Questo ci permette di reimpostare (All unassigned) sul parametro IP address. Per esempio possiamo assegnare la porta 801 al sito WebSite01 e la porta 802 al sito WebSite02:


[Figura 17: modifica della porta per il sito WebSite01]
 

[Figura 18: modifica della porta per il sito WebSite02]

Per poter raggiungere i due siti, dobbiamo esplicitamente specificare la porta nell'URL del browser:


[Figura 19: come raggiungere i siti specificando la porta nell'indirizzo]

Da notare che, in questo caso, l'indirizzo IP nel browser è rimasto invariato (192.168.234.200). Questo metodo ha come svantaggio il fatto che il client che si collega deve conoscere in anticipo la porta sulla quale il sito lavora, e questo non è sempre possibile, soprattutto su Internet.
Terzo ed ultimo metodo per identificare un sito su IIS è l'utilizzo degli host headers. L'assegnazione di un host header, consiste nell'assegnare uno specifico URL ad un sito. Quando il client si collega, IIS verifica l'URL specificato nel browser e lo confronta con l'host header di ciascun sito. Se esiste un sito con host header uguale all'URL, quello sarà il sito mostrato al client, altrimenti verrà mostrato il sito web predefinito (se disponibile). Per configurare questa caratteristica, basta andare nelle proprietà del sito, cliccare sul pulsante Advanced, nella maschera Advanced Multiple Web Site Configuration selezionare l'entry relativa al nostro sito web e cliccare su Edit. In questo modo comparirà la maschera che ci permetterà di specificare l'host header per il nostro sito:


[Figura 20: configurazione di un host header]

In questo esempio andremo ad impostare:

Sito Web IIS
Host header
WebSite01 ws01.internal.net
WebSite02 ws02.internal.net

Possiamo ovviamente reimpostare le porte di listening dei due siti al valore di default 80.
Per far sì che tutto funzioni avremo però bisogno di un sistema di name resolution che associ l'URL che abbiamo specificato nell'host header all'indirizzo IP del web server.
Per fare questo, possiamo agire in due modi: o utilizzare il file hosts, che si trova nella cartella %systemroot%/system32/drivers/etc, inserendo le associazioni appropriate:


[Figura 21: configurazione del file hosts]

oppure, ancora meglio, utilizzare il servizio DNS di Windows 2000, nel caso di siti Internet o di siti Intranet dove presente questo servizio, inserendo due nuovi record nella nostra zona:


[Figura 22: configurazione del DNS per gli host headers]

Se il metodo di name resolution funziona correttamente, otterremo questo risultato:


[Figura 23: i siti web raggiunti tramite gli host headers]

Il metodo degli host headers è forse quello che comporta la minore configurazione. Tra l'altro è un metodo che permette facilmente l'hosting sullo stesso server di siti appartenenti a domini diversi. Necessita assolutamente di un sistema di name resolution e, nel caso di una Intranet dove non sia presente un servizio di DNS, la gestione del file hosts potrebbe risultare onerosa. Un'altra cosa da tenere in considerazione è che gli host headers non funzionano in caso di implementazioni di siti SSL (https://).
Diciamo, per completezza, che gli host headers sono supportati da Internet Explorer versione 3.0 o superiore e Netscape Navigator 2.0 o superiore.
Gestione del sito web
Ora che abbiamo configurato il nostro sito web (o i nostri siti web), possiamo decidere come verranno organizzati i files al suo interno.
Visto che ogni sito web ha una sua home directory, nessuno ci vieta di riporre tutti i files e tutte le cartelle al suo interno. IIS ci offre però anche la possibilità di creare Virtual Directories, che sono cartelle particolari che vengono viste come sottocartelle della home directory, ma in realtà non vi sono fisicamente presenti.
Questo ci è utile nel caso volessimo rendere disponibile una cartella che non è stata creata direttamente nella home, ma invece creata in un altro punto del file system, oppure risiede addirittura su un altro server come cartella condivisa. Per chiarire la cosa, creeremo una cartella in un punto qualsiasi del file system e la renderemo visibile direttamente da WebSite01. I permessi minimi che una virtual directory deve avere sono gli stessi delle home directories. Al limite, visto che le virtual directories sono oggetti generalmente indipendenti dalla home, è possibile aggiungere permission specifiche a seconda dell'utilizzo, le quali non andranno ad influire sulla security della home directory.


[Figura 24: la cartella che verrà impostata come virtual directory è stata creata]

Ora configuriamo questa cartella come virtual directory tramite un semplice wizard. Clicchiamo con il pulsante destro del mouse sul sito nel quale vogliamo creare la virtual directory, scegliamo New - Virtual Directory.


[Figura 25: wizard di configurazione di una virtual directory]

Ciccando su Next, viene chiesto l'alias della virtual directory. Per comodità specifichiamo lo stesso nome della cartella, ma possiamo in realtà specificare anche un nome diverso.


[Figura 26: alias della virtual directory]

Nel passo successivo specifichiamo il path della cartella che rappresenterà la virtual directory.


[Figura 27: path della cartella sul file system]

Come ultimo passo, stabiliamo i permessi sulla cartella, come per una home directory.


[Figura 28: permission sulla cartella a livello di IIS]

Ora, copiando i files HTML/ASP all'interno della cartella otteniamo il risultato seguente:


[Figura 29: navigazione all'interno della virtual directory]

Il simbolo della "scatoletta grigia" a fianco della virtual directory sta a significare che la cartella è anche una Application Root. Una application IIS è un insieme di pagine Active Server Pages (ASP) e componenti COM eseguiti in un contesto IIS. Questo è un argomento che riguarda più lo sviluppatore di siti web, ma come accenno, diciamo solo che potete decidere se impostare o meno una virtual directory come application root semplicemente andando nella schermata delle proprietà e cliccare sul pulsante Remove (se è già impostata l'application) o Create (se la virtual directory non è ancora impostata come application root). La stessa cosa è fattibile anche per una home directory, che, per default, viene impostata come application root.
Tips and tricks

  1. E' possibile avviare o arrestare i servizi di IIS anche da riga di comando, tramite il comando net:
    net start w3svc avvio del web server
    net start msftpsvc avvio del server FTP
    net start smtpsvc avvio del servizio di inoltro mail
    net start nntpsvc avvio del servizio newsgroup

    Allo stesso modo è possibile arrestare i servizi specificando net stop.

  2. IIS è stato oggetto di molte questioni inerenti la sicurezza (vedi CodeRed e Nimda). In qualsiasi installazione IIS applicate sempre il Service Pack 3 di Windows 2000, che contiene il security rollup package per IIS, e gli ultimi Hotfix segnalati da Microsoft al sito http://www.microsoft.com/technet/security.
  3. Come regola generale, attivate sempre e solo i servizi indispensabili, soprattutto se pubblicate un sito su Internet. E' inutile, ad esempio, attivare il servizio SMTP di IIS se quel server non viene utilizzato per l'inoltro di posta elettronica.
  4. Se utilizzate ASP.NET (o supportate sviluppatori ASP.NET) e vi capita di eseguire l'installazione di IIS dopo il setup del Framework .Net, è possibile rieseguire la configurazione di ASP.NET per IIS con il comando:
    %systemroot% / Microsoft.Net / Framework / versione / aspnet_regiis -i
    dove versione è la versione del framework in uso.
  5. Per eseguire il tuning di IIS in modo da ottimizzare le performances, vi segnalo questo documento: http://www.microsoft.com/technet/treeview/default.asp?url=/TechNet/prodtechnol/iis/maintain/optimize/perflink.asp

How do I configure a virtual server?
It is possible using Windows NT to bind multiple IP addresses to one network card and for each IP address it is possible to run a virtual domain server. The procedure below will add an IP address, add the new IP address as a domain and setup the new IIS virtual server.
To bind an additional IP address to your network card perform the following:
1. Start the Network Control Panel Applet (Start - Settings - Control Panel - Network)
2. Select the Protocols tab
3. Select TCP/IP and click Properties
4. On the "IP Address" tab click the Advanced button
5. In the IP Address section click Add
6. Enter the additional IP address and subnet mask you want the machine to respond to and click Add
7. Click OK until you leave the network control panel applet
8. Reboot the machine
You now need to configure the DNS server to respond to the new name.com with the new IP address
1. Start the DNS Manager
2. (Start - Programs - Administrative Tools - DNS Manager)
3. From the DNS menu, select New Server and enter the IP address of the DNS Server, e.g. 200.200.200.3, and click OK
4. The server will now be displayed with a CACHE sub part
5. Next we want to add the domain, e.g. savilltech.com, from the DNS menu, select New Zone
6. Select Primary and click Next
7. Enter the name, e.g. savilltech.com, and then press tab, and it will fill in the Zone File Name and click Next
8. Click Finish
9. Next a zone for reverse lookups has to be created, so select New Zone from the DNS menu
10. Select Primary and click Next, enter the name of the first 3 parts of the domain IP + in-addr.arpa, e.g. if the domain was 158.234.26, the entry would be 26.234.158.in-addr.arpa, in my example it would be 200.200.200.in-addr.arpa, click tab for the file name to be filled and click Next, then click Finish
11. From the DNS menu select new Host, enter the machine name and IP address, also select the create associated PTR record. Click Add and then Done.
12. Next create the www.<domain>.com record. From the DNS menu select new record
13. Select record type of CNAME, enter a alias name of www, and the actual host name, e.g. server.shadow.com. Click OK
14. Exit the DNS server
Next update the IIS server to support the new domain
1. Start the Internet Service Manager (Start - Programs - Microsoft Internet Server)
2. Double click on the Computer name of the web server which will display the properties
3. Click the Directories tab
4. Click the Add button
5. Enter the directory name and select the Home directory check box. Next check the "Virtual Server" box and enter the IP address you added in the first step. Click OK
6. Click OK to close
You will now be able to browse to this domain. Under Windows 2000 (IIS 5.0)
1. Start the Internet Service Manager (Start - Programs - Administrative Tools - Internet Services Manager)
2. Right click on the computer and select New - Web site
3. Click Next to the intro wizard
4. Enter a description and click Next
5. Select the IP address you added and click Next
6. Enter the path for the root directory and click Next
7. Select Permissions. Click Next
8. Click Finish to complete the creation.

How can I move my IIS server to another machine?
In the %systemroot%\system32\inetsrv directory there is a program called "iissync". This program will transfer over all your IIS settings to the new computer, including certificates, virtual domains, and for the most part, everything you need. Just open a dos prompt, and run "iissync \\newcomputername" and wait a bit.
The IISSYNC utility is used to synchronize Internet Information Server (IIS) metabase and Transaction Server packages on one Node with IIS on a Microsoft Cluster Server on the other Node.
I receive error 'The catalog is corrupt' when performing an Index Server search, what can I do?
Index Server catalogs can be caused by unsafe computer shutdowns, system crashes, or applications that write to or lock the catalog files while Index Server is active.
Normally, Index Server attempts to fix any corruption automatically; however, sometimes it is necessary to manually fix the corruption.
To do manually fix the corruption, stop and restart the Content Index service, For Index 1.x, stop and restart the World Wide Web service, under Windows 2000 start the Computer Management MMC snap-in, expand 'Server Applications and Services', right click on 'Indexing Service' and stop then start. This normally causes Index Server to rebuild the catalog.
If this does not work, stop Index Server again, locate the Catalog.wci folder, and delete the contents of the folder. This manually deletes the catalog. When you restart Index Server, the catalog is re-created.
This can also occur when a file is unfilterable and the Filter Retries is set to a number greater than 4. When this happens, the information that the filter process sends to the Content Index Service (CISVS) causes the CISVS to report that the in-memory catalog information is corrupt, even though the data on the drive is fine.
To correct set retry value to 4 or less:
1. Start the registry editor (regedit.exe)
2. Move to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ContentIndex
3. Double click FilterRetries
4. Change to 4 or below and click OK
5. Restart Index Server

How can I host multiple web sites on a single IP address?
A single IIS server can host multiple web sites and normally each web site is tied to a IP address however if the machine only has one IP address it can still be configured to host multiple web sites by specifying a host header name for each web site as follows (you should first ensure you have multiple DNS entries all pointing to the IP address of the machine):
1. Start the Internet Information Services MMC snap-in (Start - Programs - Administrative Tools - Internet Information Services)
2. Expand the server
3. Right click on the web site and select Properties
4. Next to the IP address (ensuring the actual IP address is selected) click the Advanced button
5. Select the IP address entry and click Edit
6. Enter the DNS host entry for the web site and set the port to 80, e.g. www.ntfaq.com
Click here to view image

How do I enable FTP resume?
IIS 5.0, the version that ships with Windows 2000 has a number of enhancements. One of which is the FTP resume mode which if a download is halted and you disconnect, upon reconnecting you will be asked if you wish to resume the download. This is very useful for downloads of large files.
This functionality does not work using the command level FTP provided with Windows NT 4.0, however software packages such as WS_FTP Pro from www.ipswitch.com allow this.
FTP Resume is turned on by default in Windows 2000 but as far as I know it is not possible in IIS 4.0 or lower.
1. Click OK
2. Click OK to the main dialog
3. Repeat for all other web sites
When the client connects the DNS name requested is passed in the header as the host name and that is what is mapped.
If the Web site requested in the host header is stopped, the client receives the default Web site. Therefore, it is recommended that an ISP use the default Web site as the ISP home page, rather than for a customer site. Multiple sites on a single Professional installation is not supported.
Also do not configure a header host name for the default web site as this may cause problems for other packages such as Proxy Server which expect the default web site to use port 80, IP address of "All Unassigned" and no host header name.