Compartilhar via


Visão geral do suporte ao Firewall do FTP <firewallSupport>

Visão geral

O elemento <ftpServer/firewallSupport> do elemento de <site> é usado para configurar a maneira como o serviço do FTP funciona com firewalls por site.

Esse elemento permite que os administradores de servidor configurem o endereço externo do firewall que o serviço do FTP enviará para clientes FTP, quando conexões passivas estiverem sendo usadas.

Quando conexões passivas são negociadas usando o comando FTP PASV, o servidor de FTP envia uma resposta que contém o endereço IP e a porta do servidor. Ao especificar o atributo externalIp4Address, você poderá direcionar os clientes FTP para se comunicarem com o firewall, o que deve rotear o tráfego do cliente para o servidor do FTP. Ao especificar um endereço IP externo para o firewall por site, isso permite rotear o tráfego de firewall para cada site do FTP por meio de um firewall diferente.

Observação

Embora o endereço IP externo possa ser configurado por site, você também poderá especificar o intervalo de portas do canal de dados que o serviço do FTP usará no elemento <system.ftpServer/firewallSupport> global.

Compatibilidade

Versão Observações
IIS 10.0 O elemento <firewallSupport> não foi modificado no IIS 10.0.
IIS 8.5 O elemento <firewallSupport> não foi modificado no IIS 8.5.
IIS 8.0 O elemento <firewallSupport> não foi modificado no IIS 8.0.
IIS 7.5 O elemento <firewallSupport> do elemento <ftpServer> é fornecido como um recurso do IIS 7.5.
IIS 7.0 O elemento <firewallSupport> do elemento <ftpServer> foi introduzido no FTP 7.0, que era um download separado para o IIS 7.0.
IIS 6,0 N/D

Observação

Os serviços do FTP 7.0 e FTP 7.5 eram fornecidos fora de banda para o IIS 7.0, o que exigia o download e a instalação de módulos do seguinte URL:

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

Com o Windows 7 e o Windows Server 2008 R2, o serviço do FTP 7.5 é fornecido como um recurso para o IIS 7.5 e, portanto, o download do serviço do FTP não é mais necessário.

Instalação

Para dar suporte à publicação do FTP para seu servidor Web, instale o serviço do FTP. Para fazer isso, execute as etapas a seguir.

Windows Server 2012 R2 ou Windows Server 2012

  1. Na barra de tarefas, clique em Gerenciador do Servidor.

  2. No Gerenciador do Servidor, selecione o menu Gerenciar e selecione Adicionar Funções e Recursos.

  3. No assistente Adicionar Funções e Recursos, clique em Avançar. Selecione o tipo de instalação e clique em Avançar. Selecione o servidor de destino e selecione Avançar.

  4. Na página Funções do Servidor, expanda Servidor Web (IIS) e selecione Servidor de FTP.

    Observação

    Para dar suporte à autenticação do ASP.Membership ou do Gerenciador do IIS para o serviço do FTP, você precisará selecionar a Extensibilidade de FTP além do Serviço do FTP.
    Screenshot of F T P Service and F T P Extensibility selected under F T P Server in the expanded Web Server (I I S) list. .

  5. Selecione Avançar e, em seguida, na página Selecionar recursos, selecione Avançar novamente.

  6. Na página Confirmar seleções de instalação, clique em Instalar.

  7. Na página Resultados , clique em Fechar.

Windows 8 ou Windows 8.1

  1. Na tela Iniciar, mova o ponteiro até o canto inferior esquerdo, clique com o botão direito do mouse no botão Iniciar e clique em Painel de Controle.

  2. Em Painel de Controle, selecione Programas e Recursos e selecione Ativar ou desativar Recursos do Windows.

  3. Expanda os Serviços de Informações da Internet e selecione Servidor de FTP.

    Observação

    Para dar suporte à autenticação do ASP.Membership ou do Gerenciador do IIS para o serviço do FTP, você também precisará selecionar Extensibilidade de FTP.
    Screenshot of F T P Extensibility and F T P Service selected in a Windows 8 interface.

  4. Clique em OK.

  5. Clique em Fechar.

Windows Server 2008 R2

  1. Na barra de tarefas, selecione Iniciar, acesse as Ferramentas Administrativas e selecione Gerenciador do Servidor.

  2. No painel de hierarquia do Gerenciador do Servidor, expanda Funções e clique em Servidor Web (IIS).

  3. No painel Servidor Web (IIS), role até a seção Serviços de Função e clique em Adicionar Serviços de Função.

  4. Na página Selecionar Serviços de Função do Assistente para Adicionar Serviços de Função, expanda Servidor do FTP.

  5. Selecione Serviço do FTP.

    Observação

    Para dar suporte à autenticação do ASP.Membership ou do Gerenciador do IIS para o serviço do FTP, você também precisará selecionar Extensibilidade de FTP.
    Screenshot of F T P service and F T P Extensibility selected in an expanded F T P Server list.

  6. Clique em Avançar.

  7. Na página Confirmar Seleções de Instalação, clique em Instalar.

  8. Na página Resultados , clique em Fechar.

Windows 7

  1. Na barra de tarefas, selecione Iniciar e selecione Painel de Controle.

  2. Em Painel de Controle, selecione Programas e Recursos e selecione Ativar ou desativar Recursos do Windows.

  3. Expanda os Serviços de Informações da Internet e, em seguida Servidor do FTP.

  4. Selecione Serviço do FTP.

    Observação

    Para dar suporte à autenticação do ASP.Membership ou do Gerenciador do IIS para o serviço do FTP, você também precisará selecionar Extensibilidade de FTP.
    Screenshot of F T P Extensibility and F T P Service selected in a Windows 7 interface.

  5. Clique em OK.

Windows Server 2008 ou Windows Vista

  1. Baixe o pacote de instalação do seguinte URL:

  2. Siga as instruções no seguinte passo a passo para instalar o serviço do FTP:

Instruções

Como configurar um site do FTP para usar o endereço IP externo para o firewall

  1. Abra o Gerenciador do IIS (Serviços de Informações da Internet):

    • Caso você esteja usando o Windows Server 2012 ou o Windows Server 2012 R2:

      • Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador do IIS (Serviços de Informações da Internet).
    • Se você estiver usando o Windows 8 ou Windows 8.1:

      • Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
      • Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador do IIS (Serviços de Informações da Internet).
    • Caso você esteja usando o Windows Server 2008 ou o Windows Server 2008 R2:

      • Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador do IIS (Serviços de Informações da Internet).
    • Se você estiver usando o Windows Vista ou Windows 7:

      • Na barra de tarefas, selecione Iniciar e selecione Painel de Controle.
      • Clique duas vezes em Ferramentas Administrativas e clique duas vezes em Gerenciador do IIS (Serviços de Informações da Internet).
  2. No painel Conexões, expanda o nome do servidor, expanda o nó Sites e selecione o nome do site.

  3. No painel Página Inicial do site, clique duas vezes no Suporte ao Firewall do FTP.

  4. Na caixa Endereço IP Externo do Firewall, digite o endereço IPv4 do adaptador de rede voltado para a Internet do firewall.
    Screenshot of the F T P Firewall Support pane with the Data Channel Port Range set to a value of 0 dash 0.

  5. No painel Ações, clique em Aplicar.

Observação

O intervalo de portas do canal de dados deve ser configurado no elemento <system.ftpServer/firewallSupport> global.

Para obter informações adicionais sobre como definir as configurações de firewall para o serviço FTP, consulte o seguinte tópico no site do IIS.NET da Microsoft:

Configurações do Firewall do FTP
https://www.iis.net/learn/publish/using-the-ftp-service/configuring-ftp-firewall-settings-in-iis-7

Configuração

O elemento <firewallSupport> é configurado no nível do site ou nos padrões do site.

Atributos

Atributo Descrição
externalIp4Address Atributo de cadeia de caracteres opcional.

Especifica o endereço IPv4 externo para o firewall.

Nenhum valor padrão.

Elementos filho

Nenhum.

Exemplo de configuração

O exemplo a seguir exibe um elemento <firewallSupport> para um site do FTP que configura o serviço do FTP para usar 10.0.0.1 para o endereço IPv4 externo do firewall.

<site name="ftp.example.com" id="5">
  <application path="/">
    <virtualDirectory path="/" physicalPath="c:\inetpub\www.example.com" />
  </application>
  <bindings>
    <binding protocol="ftp" bindingInformation="*:21:" />
  </bindings>
  <ftpServer>
    <firewallSupport externalIp4Address="10.0.0.1" />
    <security>
      <authentication>
        <basicAuthentication enabled="true" />
        <anonymousAuthentication enabled="false" />
      </authentication>
    </security>
  </ftpServer>
</site>

Exemplo de código

Os exemplos a seguir configuram um site do FTP para usar 10.0.0.1 para o endereço IPv4 externo do firewall.

AppCmd.exe

appcmd.exe set config -section:system.applicationHost/sites /[name='ftp.example.com'].ftpServer.firewallSupport.externalIp4Address:"10.0.0.1" /commit:apphost

Observação

Defina o parâmetro commit para apphost quando usar AppCmd.exe para definir essas configurações. Isso confirma os conjuntos de configurações para a seção de local apropriado no arquivo 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 sitesSection = config.GetSection("system.applicationHost/sites");
         ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();

         ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"ftp.example.com");
         if (siteElement == null) throw new InvalidOperationException("Element not found!");
         ConfigurationElement ftpServerElement = siteElement.GetChildElement("ftpServer");

         ConfigurationElement firewallSupportElement = ftpServerElement.GetChildElement("firewallSupport");
         firewallSupportElement["externalIp4Address"] = @"10.0.0.1";

         serverManager.CommitChanges();
      }
   }
   
   private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)
   {
      foreach (ConfigurationElement element in collection)
      {
         if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))
         {
            bool matches = true;
            for (int i = 0; i < keyValues.Length; i += 2)
            {
               object o = element.GetAttributeValue(keyValues[i]);
               string value = null;
               if (o != null)
               {
                  value = o.ToString();
               }
               if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
               {
                  matches = false;
                  break;
               }
            }
            if (matches)
            {
               return element;
            }
         }
      }
      return null;
   }
}

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 sitesSection As ConfigurationSection = config.GetSection("system.applicationHost/sites")
      Dim sitesCollection As ConfigurationElementCollection = sitesSection.GetCollection

      Dim siteElement As ConfigurationElement = FindElement(sitesCollection, "site", "name", "ftp.example.com")
      If (siteElement Is Nothing) Then
         Throw New InvalidOperationException("Element not found!")
      End If
      Dim ftpServerElement As ConfigurationElement = siteElement.GetChildElement("ftpServer")

      Dim firewallSupportElement As ConfigurationElement = ftpServerElement.GetChildElement("firewallSupport")
      firewallSupportElement("externalIp4Address") = "10.0.0.1"

      serverManager.CommitChanges()
   End Sub

   Private Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement
      For Each element As ConfigurationElement In collection
         If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then
            Dim matches As Boolean = True
            Dim i As Integer
            For i = 0 To keyValues.Length - 1 Step 2
               Dim o As Object = element.GetAttributeValue(keyValues(i))
               Dim value As String = Nothing
               If (Not (o) Is Nothing) Then
                  value = o.ToString
               End If
               If Not String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then
                  matches = False
                  Exit For
               End If
            Next
            If matches Then
               Return element
            End If
         End If
      Next
      Return Nothing
   End Function


End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST");
var sitesCollection = sitesSection.Collection;

var siteElementPos = FindElement(sitesCollection, "site", ["name", "ftp.example.com"]);
if (siteElementPos == -1) throw "Element not found!";
var siteElement = sitesCollection.Item(siteElementPos);
var ftpServerElement = siteElement.ChildElements.Item("ftpServer");

var firewallSupportElement = ftpServerElement.ChildElements.Item("firewallSupport");
firewallSupportElement.Properties.Item("externalIp4Address").Value = "10.0.0.1";

adminManager.CommitChanges();

function FindElement(collection, elementTagName, valuesToMatch) {
   for (var i = 0; i < collection.Count; i++) {
      var element = collection.Item(i);
      if (element.Name == elementTagName) {
         var matches = true;
         for (var iVal = 0; iVal < valuesToMatch.length; iVal += 2) {
            var property = element.GetPropertyByName(valuesToMatch[iVal]);
            var value = property.Value;
            if (value != null) {
               value = value.toString();
            }
            if (value != valuesToMatch[iVal + 1]) {
               matches = false;
               break;
            }
         }
         if (matches) {
            return i;
         }
      }
   }
   return -1;
}

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST")
Set sitesCollection = sitesSection.Collection

siteElementPos = FindElement(sitesCollection, "site", Array("name", "ftp.example.com"))
If siteElementPos = -1 Then
   WScript.Echo "Element not found!"
   WScript.Quit
End If
Set siteElement = sitesCollection.Item(siteElementPos)
Set ftpServerElement = siteElement.ChildElements.Item("ftpServer")

Set firewallSupportElement = ftpServerElement.ChildElements.Item("firewallSupport")
firewallSupportElement.Properties.Item("externalIp4Address").Value = "10.0.0.1"

adminManager.CommitChanges()

Function FindElement(collection, elementTagName, valuesToMatch)
   For i = 0 To CInt(collection.Count) - 1
      Set element = collection.Item(i)
      If element.Name = elementTagName Then
         matches = True
         For iVal = 0 To UBound(valuesToMatch) Step 2
            Set property = element.GetPropertyByName(valuesToMatch(iVal))
            value = property.Value
            If Not IsNull(value) Then
               value = CStr(value)
            End If
            If Not value = CStr(valuesToMatch(iVal + 1)) Then
               matches = False
               Exit For
            End If
         Next
         If matches Then
            Exit For
         End If
      End If
   Next
   If matches Then
      FindElement = i
   Else
      FindElement = -1
   End If
End Function