Compartir a través de


Extensiones de nombre de archivo FTP <fileExtensions>

Información general

El elemento <fileExtensions> contiene una colección de elementos <add> que especifican extensiones de nombre de archivo únicas que IIS permitirá o denegará, en función de cómo se defina cada elemento <add>. Mediante el uso del elemento <fileExtensions>, puede ajustar los tipos de contenido que el servidor pondrá a disposición de los clientes FTP.

Por ejemplo, si establece el atributo allowUnlisted en false, se denegarán todas las solicitudes de archivos con extensiones que no estén incluidas en la lista de extensiones permitidas. Con el elemento <clear>, puede borrar la lista de extensiones de nombre de archivo que ya se han definido y, a continuación, puede especificar solo las extensiones de nombre de archivo que quiere permitir.

Nota:

Cuando el filtrado de solicitudes bloquea una solicitud FTP debido a que existe una extensión de nombre de archivo denegada, FTP 7 devolverá un error FTP al cliente y registrará el subestado único siguiente que identifica el motivo por el que se ha denegado la solicitud:

Subestado de FTP Descripción
11 Se ha denegado la extensión de nombre de archivo en función de las reglas de filtrado de solicitudes

Este subestado permite a los administradores de FTP analizar sus registros de IIS e identificar posibles amenazas.

Compatibilidad

Versión Notas
IIS 10.0 El elemento <fileExtensions> no se modificó en IIS 10.0.
IIS 8.5 El elemento <fileExtensions> no se modificó en IIS 8.5.
IIS 8.0 El elemento <fileExtensions> no se modificó en IIS 8.0.
IIS 7.5 El elemento <fileExtensions> del elemento <requestFiltering> se incluye como una característica de IIS 7.5.
IIS 7.0 El elemento <fileExtensions> del elemento <requestFiltering> se introdujo en FTP 7.0, que era una descarga independiente para IIS 7.0.
IIS 6,0 El servicio FTP de IIS 6.0 no admitía el filtrado de solicitudes.

Nota:

Los servicios FTP 7.0 y FTP 7.5 se lanzaron como versión extraordinaria para IIS 7.0, lo que requería descargar e instalar los módulos desde la siguiente dirección URL:

https://www.iis.net/expand/FTP

Con Windows 7 y Windows Server 2008 R2, el servicio FTP 7.5 se incluye como característica para IIS 7.5, por lo que la descarga del servicio FTP ya no es necesaria.

Configuración

Para admitir la publicación de FTP para el servidor web, debe instalar el servicio FTP. Para ello, siga estos pasos.

Windows Server 2012 o Windows Server 2012 R2

  1. En la barra de tareas, haga clic en Administrador del servidor.

  2. En Administrador del servidor, haga clic en el menú Administrar y, después, haga clic en Agregar roles y características.

  3. En el asistente para Agregar roles y características, haga clic en Siguiente. Seleccione el tipo de instalación y haga clic en Siguiente. Seleccione el servidor de destino y haga clic en Siguiente.

  4. En la página Roles de servidor, expanda Servidor web (IIS) y, a continuación, seleccione Servidor FTP.

    Nota:

    Para admitir la autenticación ASP.Membership o la autenticación del Administrador de IIS para el servicio FTP, también deberá seleccionar Extensibilidad de FTP, además de Servicio FTP.
    Screenshot of Web Server I I S and F T P Server node expanded with F T P Extensibility selected..

  5. Haga clic en Siguiente y, después, en la página Seleccionar características, vuelva a hacer clic en Siguiente.

  6. En la página Confirmar selecciones de instalación, haga clic en Instalar.

  7. En la página Resultados , haga clic en Cerrar.

Windows 8 o Windows 8.1

  1. En la pantalla Inicio, mueva el puntero hasta la esquina inferior izquierda, haga clic con el botón derecho en el botón Inicio y, a continuación, haga clic en Panel de control.

  2. En Panel de control, haga clic en Programas y características y después en Activar o desactivar las características de Windows.

  3. Expanda Internet Information Services y, después, seleccione Servidor FTP.

    Nota:

    Para admitir la autenticación ASP.Membership o la autenticación del Administrador de IIS para el servicio FTP, también deberá seleccionar Extensibilidad de FTP.
    Image of Internet Information Services node expanded with F T P Extensibility highlighted.

  4. Haga clic en OK.

  5. Haga clic en Cerrar.

Windows Server 2008 R2

  1. En la barra de tareas, haga clic en Inicio, seleccione Herramientas administrativas y, luego, haga clic en Administrador del servidor.

  2. En el panel de jerarquía del Administrador del servidor, expanda Roles y, luego, haga clic en Servidor web (IIS).

  3. En el panel Servidor web (IIS), desplácese hasta la sección Servicios de rol y, luego, haga clic en Agregar servicios de rol.

  4. En la página Seleccionar servicios de rol del Asistente para agregar servicios de rol, expanda Servidor FTP.

  5. Seleccione Servicio FTP.

    Nota:

    Para admitir la autenticación ASP.Membership o la autenticación del Administrador de IIS para el servicio FTP, también deberá seleccionar Extensibilidad de FTP.
    Image of F T P Server in Select Role Services page expanded showing F T P Service selected.

  6. Haga clic en Next.

  7. En la página Confirmar selecciones de instalación, haz clic en Instalar.

  8. En la página Resultados , haga clic en Cerrar.

Windows 7

  1. En la barra de tareas, haga clic en Inicio y, luego, haga clic en Panel de control.

  2. En Panel de control, haga clic en Programas y características y después en Activar o desactivar las características de Windows.

  3. Expanda Internet Information Services y, luego, Servidor FTP.

  4. Seleccione Servicio FTP.

    Nota:

    Para admitir la autenticación ASP.Membership o la autenticación del Administrador de IIS para el servicio FTP, también deberá seleccionar Extensibilidad de FTP.
    Image of Internet Information Services and F T P Server pane expanded displaying F T P Extensibility and F T P Service selected.

  5. Haga clic en OK.

Windows Server 2008 o Windows Vista

  1. Descargue el paquete de instalación desde la siguiente dirección URL:

  2. Siga las instrucciones del siguiente tutorial para instalar el servicio FTP:

Procedimientos

Nota:

El filtrado de solicitudes FTP no tenía interfaz de usuario en la versión FTP 7.0; la interfaz de usuario de filtrado de solicitudes FTP se agregó en la versión FTP 7.5.

Cómo denegar el acceso FTP a una extensión de nombre de archivo específica

  1. Abra el Administrador de Internet Information Services (IIS):

    • Si usa Windows Server 2012 o Windows Server 2012 R2:

      • En la barra de tareas, haga clic en Administrador del servidor, en Herramientas y, a continuación, en Administrador de Internet Information Services (IIS).
    • Si usa Windows 8 o Windows 8.1:

      • Mantenga presionada la tecla Windows, presione la letra X y haga clic en Panel de control.
      • Haga clic en Herramientas administrativas y, a continuación, haga doble clic en Administrador de Internet Information Services (IIS).
    • Si usa Windows Server 2008 o Windows Server 2008 R2:

      • En la barra de tareas, haga clic en Inicio, seleccione Herramientas administrativas y, a continuación, haga clic en Administrador de Internet Information Services (IIS).
    • Si usa Windows Vista o Windows 7:

      • En la barra de tareas, haga clic en Inicio y, luego, haga clic en Panel de control.
      • Haga doble clic en Herramientas administrativas y, a continuación, haga doble clic en Administrador de Internet Information Services (IIS).
  2. En el panel Conexiones, vaya al sitio o directorio para el que quiere modificar la configuración del filtrado de solicitudes.

  3. En el panel Inicio, haga doble clic en Filtrado de solicitudes FTP.

  4. En el panel Filtrado de solicitudes FTP, haga clic en la pestaña Extensiones de nombre de archivo.
    Image of F T P Request Filtering pane displaying File Name Extension tab.

  5. Haga clic en Denegar extensión de nombre de archivo... en el panel Acciones.

  6. En el cuadro de diálogo Denegar extensión de nombre de archivo, escriba la extensión de nombre de archivo que quiere bloquear. Por ejemplo, para evitar el acceso a los archivos con una extensión de nombre de archivo de .inc, se escribiría "inc" en el cuadro de diálogo.
    Image of Deny File Name Extension dialog box with file name typed in the File Name Extension field.

  7. Haga clic en OK.

Configuración

El elemento <fileExtensions> del elemento <requestFiltering> se configura en el nivel global, de sitio o de dirección URL.

Atributos

Atributo Descripción
allowUnlisted Atributo Boolean opcional.

Especifica si el servidor web debe procesar los archivos que tienen extensiones de nombre de archivo no incluidas en la lista. Si establece este atributo en true, debe enumerar todas las extensiones de nombre de archivo que quiere denegar. Si establece este atributo en false, debe enumerar todas las extensiones de nombre de archivo que quiere permitir.

El valor predeterminado es true.

Elementos secundarios

Elemento Descripción
add Elemento opcional.

Agrega una extensión de nombre de archivo a la colección de extensiones de nombre de archivo.
clear Elemento opcional.

Quita todas las referencias a las extensiones de nombre de archivo de la colección <fileExtensions>.
remove Elemento opcional.

Quita una referencia a una extensión de nombre de archivo de la colección <fileExtensions>.

Ejemplo de configuración

En el ejemplo siguiente se muestran varios valores de configuración relacionados con la seguridad en el elemento <system.ftpServer> para un sitio FTP. Más concretamente, la configuración de <location> de este ejemplo muestra cómo:

  • Especificar una regla de autorización FTP de acceso de lectura y escritura para el grupo de administradores.
  • Especificar las opciones de filtrado de solicitudes FTP que deniegan los archivos *.exe, *.bat y *.cmd.
  • Especificar los límites de solicitudes FTP para una longitud máxima de contenido de 1000000 bytes y una longitud de dirección URL máxima de 1024 bytes.
  • Bloquear el acceso FTP al directorio virtual _vti_bin, que se usa con las Extensiones de servidor de FrontPage.
  • Especificar opciones de filtrado de IP de FTP que permitan el acceso desde 127.0.0.1 y lo denieguen desde el intervalo de direcciones IP 169.254.0.0/255.255.0.0.
<location path="ftp.example.com">
  <system.ftpServer>
    <security>
      <authorization>
        <add accessType="Allow" roles="administrators" permissions="Read, Write" />
      </authorization>
      <requestFiltering>
        <fileExtensions allowUnlisted="true">
          <add fileExtension=".exe" allowed="false" />
          <add fileExtension=".bat" allowed="false" />
          <add fileExtension=".cmd" allowed="false" />
        </fileExtensions>
        <requestLimits maxAllowedContentLength="1000000" maxUrl="1024" />
        <hiddenSegments>
          <add segment="_vti_bin" />
        </hiddenSegments>
      </requestFiltering>
      <ipSecurity enableReverseDns="false" allowUnlisted="true">
        <add ipAddress="127.0.0.1" allowed="true" />
        <add ipAddress="169.254.0.0" subnetMask="255.255.0.0" allowed="false" />
      </ipSecurity>
    </security>
  </system.ftpServer>
</location>

Código de ejemplo

En los ejemplos siguientes se especifican las opciones de filtrado de solicitudes FTP que deniegan los archivos *.exe, *.bat y *.cmd.

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.ftpServer/security/requestFiltering /+"fileExtensions.[fileExtension='.exe',allowed='False']" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.ftpServer/security/requestFiltering /+"fileExtensions.[fileExtension='.com',allowed='False']" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.ftpServer/security/requestFiltering /+"fileExtensions.[fileExtension='.cmd',allowed='False']" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.ftpServer/security/requestFiltering /+"fileExtensions.[fileExtension='.bat',allowed='False']" /commit:apphost

Nota:

Debe asegurarse de establecer el parámetro de confirmación en apphost cuando use AppCmd.exe para configurar estas opciones. Esto confirma los valores de configuración en la sección de ubicación adecuada del archivo ApplicationHost.config.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();
         ConfigurationSection requestFilteringSection = config.GetSection("system.ftpServer/security/requestFiltering", "Default Web Site");
         ConfigurationElement fileExtensionsElement = requestFilteringSection.GetChildElement("fileExtensions");
         ConfigurationElementCollection fileExtensionsCollection = fileExtensionsElement.GetCollection();

         ConfigurationElement addElement = fileExtensionsCollection.CreateElement("add");
         addElement["fileExtension"] = @".exe";
         addElement["allowed"] = false;
         fileExtensionsCollection.Add(addElement);

         ConfigurationElement addElement1 = fileExtensionsCollection.CreateElement("add");
         addElement1["fileExtension"] = @".com";
         addElement1["allowed"] = false;
         fileExtensionsCollection.Add(addElement1);

         ConfigurationElement addElement2 = fileExtensionsCollection.CreateElement("add");
         addElement2["fileExtension"] = @".cmd";
         addElement2["allowed"] = false;
         fileExtensionsCollection.Add(addElement2);

         ConfigurationElement addElement3 = fileExtensionsCollection.CreateElement("add");
         addElement3["fileExtension"] = @".bat";
         addElement3["allowed"] = false;
         fileExtensionsCollection.Add(addElement3);

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim requestFilteringSection As ConfigurationSection = config.GetSection("system.ftpServer/security/requestFiltering", "Default Web Site")
      Dim fileExtensionsElement As ConfigurationElement = requestFilteringSection.GetChildElement("fileExtensions")
      Dim fileExtensionsCollection As ConfigurationElementCollection = fileExtensionsElement.GetCollection

      Dim addElement As ConfigurationElement = fileExtensionsCollection.CreateElement("add")
      addElement("fileExtension") = ".exe"
      addElement("allowed") = False
      fileExtensionsCollection.Add(addElement)

      Dim addElement1 As ConfigurationElement = fileExtensionsCollection.CreateElement("add")
      addElement1("fileExtension") = ".com"
      addElement1("allowed") = False
      fileExtensionsCollection.Add(addElement1)

      Dim addElement2 As ConfigurationElement = fileExtensionsCollection.CreateElement("add")
      addElement2("fileExtension") = ".cmd"
      addElement2("allowed") = False
      fileExtensionsCollection.Add(addElement2)

      Dim addElement3 As ConfigurationElement = fileExtensionsCollection.CreateElement("add")
      addElement3("fileExtension") = ".bat"
      addElement3("allowed") = False
      fileExtensionsCollection.Add(addElement3)

      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var requestFilteringSection = adminManager.GetAdminSection("system.ftpServer/security/requestFiltering", "MACHINE/WEBROOT/APPHOST/Default Web Site");
var fileExtensionsElement = requestFilteringSection.ChildElements.Item("fileExtensions");
var fileExtensionsCollection = fileExtensionsElement.Collection;

var addElement = fileExtensionsCollection.CreateNewElement("add");
addElement.Properties.Item("fileExtension").Value = ".exe";
addElement.Properties.Item("allowed").Value = false;
fileExtensionsCollection.AddElement(addElement);

var addElement1 = fileExtensionsCollection.CreateNewElement("add");
addElement1.Properties.Item("fileExtension").Value = ".com";
addElement1.Properties.Item("allowed").Value = false;
fileExtensionsCollection.AddElement(addElement1);

var addElement2 = fileExtensionsCollection.CreateNewElement("add");
addElement2.Properties.Item("fileExtension").Value = ".cmd";
addElement2.Properties.Item("allowed").Value = false;
fileExtensionsCollection.AddElement(addElement2);

var addElement3 = fileExtensionsCollection.CreateNewElement("add");
addElement3.Properties.Item("fileExtension").Value = ".bat";
addElement3.Properties.Item("allowed").Value = false;
fileExtensionsCollection.AddElement(addElement3);

adminManager.CommitChanges();

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set requestFilteringSection = adminManager.GetAdminSection("system.ftpServer/security/requestFiltering", "MACHINE/WEBROOT/APPHOST/Default Web Site")
Set fileExtensionsElement = requestFilteringSection.ChildElements.Item("fileExtensions")
Set fileExtensionsCollection = fileExtensionsElement.Collection

Set addElement = fileExtensionsCollection.CreateNewElement("add")
addElement.Properties.Item("fileExtension").Value = ".exe"
addElement.Properties.Item("allowed").Value = False
fileExtensionsCollection.AddElement(addElement)

Set addElement1 = fileExtensionsCollection.CreateNewElement("add")
addElement1.Properties.Item("fileExtension").Value = ".com"
addElement1.Properties.Item("allowed").Value = False
fileExtensionsCollection.AddElement(addElement1)

Set addElement2 = fileExtensionsCollection.CreateNewElement("add")
addElement2.Properties.Item("fileExtension").Value = ".cmd"
addElement2.Properties.Item("allowed").Value = False
fileExtensionsCollection.AddElement(addElement2)

Set addElement3 = fileExtensionsCollection.CreateNewElement("add")
addElement3.Properties.Item("fileExtension").Value = ".bat"
addElement3.Properties.Item("allowed").Value = False
fileExtensionsCollection.AddElement(addElement3)

adminManager.CommitChanges()