Este documento descreve como configurar os Cisco Security Appliances ASA/PIX 8.x que usam expressões regulares com a Estrutura de Política Modular (MPF - Modular Policy Framework) para bloquear ou permitir determinados sites FTP pelo nome do servidor.
Este documento pressupõe que o Cisco Security Appliance esteja configurado e funcione corretamente.
As informações neste documento são baseadas nestas versões de software e hardware:
Cisco 5500 Series Adaptive Security Appliance (ASA) que executa a versão de software 8.0(x) e posterior
Cisco Adaptive Security Device Manager (ASDM) versão 6.x para ASA 8.x
As informações neste documento foram criadas a partir de dispositivos em um ambiente de laboratório específico. Todos os dispositivos utilizados neste documento foram iniciados com uma configuração (padrão) inicial. Se a sua rede estiver ativa, certifique-se de que entende o impacto potencial de qualquer comando.
Consulte as Convenções de Dicas Técnicas da Cisco para obter mais informações sobre convenções de documentos.
O MPF oferece uma maneira consistente e flexível de configurar os recursos do dispositivo de segurança. Por exemplo, você pode usar o MPF para criar uma configuração de tempo limite que seja específica para um aplicativo TCP específico, em vez de uma que se aplique a todos os aplicativos TCP.
O MPF suporta os seguintes recursos:
Normalização TCP, limites e timeouts de conexão TCP e UDP e aleatorização de número de sequência TCP
CSC
Inspeção de aplicações
IPS
Política de entrada de QoS
Política de saída de QoS
fila de prioridade de QoS
A configuração do MPF consiste em quatro tarefas:
Identifique o tráfego de Camada 3 e Camada 4 ao qual você deseja aplicar ações. Consulte Identificação de Tráfego Usando um Mapa de Classe de Camada 3/4 para obter mais informações.
(Somente inspeção de aplicativos.) Definir ações especiais para o tráfego de inspeção de aplicativos. Consulte Configurando Ações Especiais para Inspeções de Aplicativos para obter mais informações.
Aplique ações ao tráfego das Camadas 3 e 4. Consulte Definição de Ações Usando um Mapa de Políticas de Camada 3/4 para obter mais informações.
Ative as ações em uma interface. Consulte Aplicação de uma Política de Camada 3/4 a uma Interface Usando uma Política de Serviço para obter mais informações.
Uma expressão regular corresponde a strings de texto literalmente como uma string exata ou pelo uso de metacaracteres, para que você possa corresponder várias variantes de uma string de texto. Você pode usar uma expressão regular para corresponder ao conteúdo de determinado tráfego de aplicativo. Por exemplo, você pode fazer a correspondência de uma string de URL dentro de um pacote HTTP.
Observação: use Ctrl+V para escapar todos os caracteres especiais na CLI, como pontos de interrogação (?) ou guias. Por exemplo, digite d[Ctrl+V]g para inserir d?g na configuração.
Para criar uma expressão regular, use o comando regex. Além disso, o comando regex pode ser usado para vários recursos que exigem correspondência de texto. Por exemplo, você pode configurar ações especiais para inspeção de aplicativos com o uso do MPF que usa um mapa de política de inspeção. Consulte o comando policy-map type inspect para obter mais informações.
No mapa de política de inspeção, você pode identificar o tráfego que deseja controlar se criar um mapa de classe de inspeção que contenha um ou mais comandos match ou pode usar comandos match diretamente no mapa de política de inspeção. Alguns comandos match permitem que você identifique o texto em um pacote usando uma expressão regular. Por exemplo, você pode combinar strings de URL dentro de pacotes HTTP. Você pode agrupar expressões regulares em um mapa de classes de expressão regular. Consulte o comando class-map type regex para obter mais informações.
Esta tabela lista os metacaracteres que têm significados especiais.
Caractere | Descrição | Notas |
. | Ponto | Combina todo caractere único. Por exemplo, d.g corresponde a dog, dag, dtg e qualquer palavra que contenha esses caracteres, como doggonnit. |
exp) | Subexpressão | Uma subexpressão separa caracteres dos caracteres ao redor, para que você possa usar outros metacaracteres na subexpressão. Por exemplo, d(o|a)g corresponde a dog e dag, mas do|ag corresponde a do e ag. Uma subexpressão também pode ser usada com quantificadores de repetição para diferenciar os caracteres destinados à repetição. Por exemplo, ab(xy){3}z corresponde a abxyxyxyz. |
| | Alteração | Corresponde a qualquer expressão que ela separa. Por exemplo, dog|cat corresponde a dog ou cat. |
? | Ponto de interrogação | Um quantificador que indica que há 0 ou 1 da expressão anterior. Por exemplo, lo?se corresponde a lse ou lose. Observação: você deve inserir Ctrl+V e depois o ponto de interrogação ou a função de ajuda será chamada. |
* | Asterisco | Um quantificador que indica que há 0, 1 ou qualquer número da expressão anterior. Por exemplo, lo*se corresponde a lse, lose, loose e assim por diante. |
{x} | Repetir quantificador | Repita exatamente x vezes. Por exemplo, ab(xy){3}z corresponde a abxyxyxyz. |
{x,} | Quantificador de repetição mínimo | Repita pelo menos x vezes. Por exemplo, ab(xy){2,}z corresponde a abxyxyz, abxyxyz e assim por diante. |
[abc] | Classe de caracteres | Corresponde a qualquer caractere entre colchetes. Por exemplo, [abc] corresponde a a, b ou c. |
[^abc] | Classe de caractere negada | Corresponde a um único caractere que não está entre colchetes. Por exemplo, [^abc] corresponde a qualquer caractere que não seja a, b ou c. [^A-Z] corresponde a qualquer caractere que não seja uma letra maiúscula. |
[a-c] | Classe de intervalo de caracteres | Corresponde a qualquer caractere no intervalo. [a-z] corresponde a qualquer letra minúscula. Você pode misturar caracteres e intervalos: [abcq-z] corresponde a a, b, c, q, r, s, t, u, v, w, x, y, z, e assim faz [a-cq-z]. O caractere de traço (-) será literal somente se for o último ou o primeiro caractere entre colchetes: [abc-] ou [-abc]. |
"" | Aspas | Preserva os espaços à direita ou à esquerda na string. Por exemplo, " teste" preserva o espaço à esquerda quando procura uma correspondência. |
^ | Acento circunflexo | Especifica o início de uma linha. |
\ | Caractere de escape | Quando usado com um metacaractere, corresponde a um caractere literal. Por exemplo, \[ corresponde ao colchete esquerdo. |
char | Caractere | Quando o caractere não é um metacaractere, corresponde ao caractere literal. |
\r | Retorno de carro | Corresponde a um retorno de carro: 0x0d. |
\n | Nova linha | Corresponde a uma nova linha: 0x0a. |
\ t | Guia | Corresponde a uma tabulação: 0x09. |
\f | Formfeed | Corresponde a um feed de formulário: 0x0c. |
\xNN | Número hexadecimal com escape | Corresponde a um caractere ASCII que usa um hexadecimal com exatamente dois dígitos. |
\NNN | Número octal escapado | Corresponde a um caractere ASCII como octal com exatamente três dígitos. Por exemplo, o caractere 040 representa um espaço. |
Nesta seção, você encontrará informações para configurar os recursos descritos neste documento.
Nota: Use a Command Lookup Tool (somente clientes registrados) para obter mais informações sobre os comandos usados nesta seção.
Este documento utiliza a seguinte configuração de rede:
Observação: os sites FTP selecionados são permitidos ou bloqueados usando expressões regulares.
Este documento utiliza as seguintes configurações:
Configuração do ASA via CLI |
---|
ciscoasa#show run
: Saved
:
ASA Version 8.0(4)
!
hostname ciscoasa
domain-name cisco.com
enable password 8Ry2YjIyt7RRXU24 encrypted
passwd 2KFQnbNIdI.2KYOU encrypted
names
!
interface GigabitEthernet0/0
nameif outside
security-level 0
ip address 10.66.79.86 255.255.255.224
!
interface GigabitEthernet0/1
nameif inside
security-level 100
ip address 10.238.26.129 255.255.255.248
!
interface Management0/0
shutdown
no nameif
no security-level
no ip address
!
!--- Write regular expression (regex) to match the FTP site you want !--- to access. NOTE: The regular expression written below must match !--- the response 220 received from the server. This can be different !--- than the URL entered into the browser. For example, !--- FTP Response: 220 g1u0103c.austin.hp.com
regex FTP_SITE1 "([0-9A-Za-z])*[Hh][Pp]\.[Cc][Oo][Mm]"
regex FTP_SITE2 "([0-9A-Za-z])* CISCO SYSTEMS ([0-9A-Za-z])*"
!--- NOTE: The regular expression will be checked against every line !--- in the Response 220 statement (which means if the FTP server !--- responds with multiple lines, the connection will be denied if !--- there is no match on any one line).
boot system disk0:/asa804-k8.bin
ftp mode passive
pager lines 24
logging enable
logging timestamp
logging buffered debugging
mtu outside 1500
mtu inside 1500
no failover
icmp unreachable rate-limit 1 burst-size 1
asdm image disk0:/asdm-61557.bin
no asdm history enable
arp timeout 14400
global (outside) 1 interface
nat (inside) 1 0.0.0.0 0.0.0.0
route outside 0.0.0.0 0.0.0.0 10.66.79.65 1
timeout xlate 3:00:00
timeout conn 1:00:00 half-closed 0:10:00 udp 0:02:00 icmp 0:00:02
timeout sunrpc 0:10:00 h323 0:05:00 h225 1:00:00 mgcp 0:05:00 mgcp-pat 0:05:00
timeout sip 0:30:00 sip_media 0:02:00 sip-invite 0:03:00 sip-disconnect 0:02:00
timeout sip-provisional-media 0:02:00 uauth 0:05:00 absolute
dynamic-access-policy-record DfltAccessPolicy
http server enable
http 0.0.0.0 0.0.0.0 inside
http 0.0.0.0 0.0.0.0 outside
no snmp-server location
no snmp-server contact
snmp-server enable traps snmp authentication linkup linkdown coldstart
telnet timeout 5
ssh scopy enable
ssh timeout 5
console timeout 0
management-access inside
threat-detection basic-threat
threat-detection statistics access-list
no threat-detection statistics tcp-intercept
class-map type regex match-any FTP_SITES
match regex FTP_SITE1
match regex FTP_SITE2
!−−− Class map created in order to match the server names !−−− of FTP sites to be blocked by regex.
class-map type inspect ftp match-all FTP_class_map
match not server regex class FTP_SITES
!−−− Write an FTP inspect class map and match based on server !--- names, user name, FTP commands, and so on. Note that this !--- example allows the sites specified with the regex command !--- since it uses the match not command. If you need to block !--- specific FTP sites, use the match command without the not option.
class-map inspection_default
match default-inspection-traffic
policy-map type inspect dns preset_dns_map
parameters
message-length maximum 512
policy-map type inspect ftp FTP_INSPECT_POLICY
parameters
class FTP_class_map
reset log
!−−− Policy map created in order to define the actions !--- such as drop, reset, or log.
policy-map global_policy
class inspection_default
inspect dns preset_dns_map
inspect h323 h225
inspect h323 ras
inspect netbios
inspect rsh
inspect rtsp
inspect skinny
inspect esmtp
inspect sqlnet
inspect sunrpc
inspect tftp
inspect sip
inspect xdmcp
inspect icmp
inspect ftp strict FTP_INSPECT_POLICY
!--- The FTP inspection is specified with strict option !--- followed by the name of policy.
service-policy global_policy global
prompt hostname context
Cryptochecksum:40cefb1189e8c9492ed7129c7577c477
: end |
Conclua estas etapas para configurar as expressões regulares e aplicá-las ao MPF para bloquear os sites FTP específicos:
Determine o nome do servidor FTP.
O mecanismo de inspeção de FTP pode fornecer inspeção usando critérios diferentes, como comando, nome de arquivo, tipo de arquivo, servidor e nome de usuário. Este procedimento usa o servidor como critério. O mecanismo de inspeção de FTP usa a resposta 220 do servidor enviada pelo site FTP como o valor do servidor. Esse valor pode ser diferente do nome de domínio usado pelo site. Este exemplo usa o Wireshark para capturar pacotes FTP para o site que é inspecionado a fim de obter o valor de resposta 220 para usado em nossa expressão regular no passo 2.
Com base na captura, o valor 220 da resposta para ftp://hp.com é (por exemplo) q5u0081c.atlanta.hp.com.
Criar expressões regulares.
Escolha Configuration > Firewall > Objects > Regular Expressions e clique em Add na guia Regular Expression para criar expressões regulares, conforme descrito neste procedimento:
Crie uma expressão regular, FTP_SITE1, para corresponder à resposta 220 (como vista na captura de pacotes no Wireshark ou qualquer outra ferramenta usada) recebida do site ftp (por exemplo, ".* hp\.com.*"), e clique em OK.
Observação: você pode clicar em Construir para obter ajuda sobre como criar expressões regulares mais avançadas.
Quando a expressão regular for criada, clique em Aplicar.
Crie classes de expressão regular.
Escolha Configuration > Firewall > Objects > Regular Expressions e clique em Add na seção Regular Expression Classes para criar a classe conforme descrito neste procedimento:
Crie uma classe de expressão regular, FTP_SITES, para corresponder a qualquer uma das expressões regulares FTP_SITE1 e FTP_SITE2, e clique em OK.
Quando o mapa de classes for criado, clique em Aplicar.
Inspecione o tráfego identificado com mapas de classe.
Escolha Configuration > Firewall > Objects > Class Maps > FTP > Add, clique com o botão direito do mouse e escolha Add para criar um mapa de classe para inspecionar o tráfego FTP identificado por várias expressões regulares, conforme descrito neste procedimento:
Crie um mapa de classe, FTP_Block_Site, para corresponder a resposta 220 do FTP com as expressões regulares criadas.
Se quiser excluir os sites especificados na expressão regular, clique no botão de opção Sem Correspondência.
Na seção Valor, escolha uma expressão regular ou uma classe de expressão regular. Para este procedimento, escolha a classe que foi criada anteriormente.
Clique em Apply.
Defina as ações para o tráfego correspondente na política de inspeção.
Escolha Configuration > Firewall > Objects > Inspect Maps > FTP> Add para criar uma política de inspeção e defina a ação para o tráfego correspondente conforme necessário.
Digite o nome e uma descrição para a política de inspeção. (Por exemplo, FTP_INSPECT_POLICY.)
Clique em Details.
Clique na guia Inspeções. (1)
Clique em Add. (2)
Clique no botão de opção Multiple matches e escolha a classe de tráfego na lista suspensa. (3)
Escolha a ação de redefinição desejada para ativar ou desativar. Este exemplo habilita a redefinição de conexão FTP para todos os sites FTP que não correspondem aos nossos sites especificados. (4)
Clique em OK, clique em OK novamente e clique em Aplicar. (5)
Aplique a política de FTP de inspeção à lista de inspeção global.
Selecione Configuration > Firewall > Service Policy Rules.
No lado direito, selecione a política inspection_default e clique em Editar.
Na guia Rule Actions (Ações de Regras) (1), clique no botão Configure para FTP. (2)
Na caixa de diálogo Select FTP Inspect Map, marque a caixa de seleção Use strict FTP e clique no botão de opção FTP inspect map for fine control over inspection.
A nova política de inspeção de FTP, FTP_INSPECT_POLICY, deve estar visível na lista.
Clique em OK, clique em OK novamente e clique em Aplicar.
Use esta seção para confirmar se a sua configuração funciona corretamente.
A Output Interpreter Tool ( somente clientes registrados) (OIT) oferece suporte a determinados comandos show. Use a OIT para exibir uma análise da saída do comando show.
show running-config regex — Mostra as expressões regulares que foram configuradas.
ciscoasa#show running-config regex regex FTP_SITE1 "[Cc][Ii][Ss][Cc][Oo]\.[Cc][Oo][Mm]" regex FTP_SITE2 ".*hp\.com.*"
show running-config class−map — Mostra os mapas de classe que foram configurados.
ciscoasa#show running-config class-map class-map type regex match-any FTP_SITES match regex FTP_SITE1 match regex FTP_SITE2 class-map type inspect ftp match-all FTP_Block_Site match not server regex class FTP_SITES class-map inspection_default match default-inspection-traffic !
show running-config policy-map type inspect http — Mostra os mapas de política que inspecionam o tráfego HTTP que foi configurado.
ciscoasa#show running-config policy-map type inspect ftp ! policy-map type inspect ftp FTP_INSPECT_POLICY parameters mask-banner mask-syst-reply class FTP_Block_Site reset log !
Show running-config policy-map — Exibe todas as configurações do mapa de políticas, bem como a configuração do mapa de políticas padrão.
ciscoasa#show running-config policy-map ! policy-map type inspect dns preset_dns_map parameters message-length maximum 512 policy-map type inspect ftp FTP_INSPECT_POLICY parameters mask-banner mask-syst-reply class FTP_Block_Site reset log policy-map global_policy class inspection_default inspect dns preset_dns_map inspect h323 h225 inspect h323 ras inspect netbios inspect rsh inspect rtsp inspect skinny inspect esmtp inspect sqlnet inspect sunrpc inspect tftp inspect sip inspect xdmcp inspect ftp strict FTP_INSPECT_POLICY !
show running-config service-policy — Exibe todas as configurações de política de serviço em execução no momento.
ciscoasa#show running-config service-policy service-policy global_policy global
Esta seção fornece informações que podem ser usadas para o troubleshooting da sua configuração.
Você pode usar o comando show service-policy para verificar se o mecanismo de inspeção inspeciona o tráfego e os permite ou descarta corretamente.
ciscoasa#show service-policy Global policy: Service-policy: global_policy Class-map: inspection_default Inspect: dns preset_dns_map, packet 0, drop 0, reset-drop 0 Inspect: h323 h225 _default_h323_map, packet 0, drop 0, reset-drop 0 Inspect: h323 ras _default_h323_map, packet 0, drop 0, reset-drop 0 Inspect: netbios, packet 0, drop 0, reset-drop 0 Inspect: rsh, packet 0, drop 0, reset-drop 0 Inspect: rtsp, packet 0, drop 0, reset-drop 0 Inspect: skinny , packet 0, drop 0, reset-drop 0 Inspect: esmtp _default_esmtp_map, packet 0, drop 0, reset-drop 0 Inspect: sqlnet, packet 0, drop 0, reset-drop 0 Inspect: sunrpc, packet 0, drop 0, reset-drop 0 Inspect: tftp, packet 0, drop 0, reset-drop 0 Inspect: sip , packet 0, drop 0, reset-drop 0 Inspect: xdmcp, packet 0, drop 0, reset-drop 0 Inspect: ftp strict FTP_INSPECT_POLICY, packet 40, drop 0, reset-drop 2
Revisão | Data de publicação | Comentários |
---|---|---|
1.0 |
21-Jul-2009 |
Versão inicial |