Visualizar logs de fluxo NSG do Observador de Rede do Azure usando ferramentas de código aberto

Cuidado

Este artigo faz referência ao CentOS, uma distribuição do Linux que está se aproximando do status de EOL (fim da vida útil). Considere seu uso e planejamento adequadamente. Para obter mais informações, confira as Diretrizes de Fim do Suporte do CentOS.

Os logs de fluxo do Grupo de Segurança de Rede fornecem informações que podem ser usadas para entender a entrada e a saída de tráfego IP em Grupos de Segurança de Rede. Esses logs de fluxo exibem os fluxos de entrada e saída baseados por regras. A NIC de fluxo se aplica às informações de 5 tuplas sobre o fluxo (IP de origem/destino, porta de origem/destino e protocolo) e se o tráfego foi permitido ou negado.

Esses logs de fluxo podem ser difíceis de serem analisados e de obter ideias de forma manual. No entanto, há várias ferramentas de código livre que podem ajudar a visualizar esses dados. Este artigo fornece uma solução para visualizar esses logs usando o Elastic Stack, que permite indexar e visualizar rapidamente seus logs de fluxo em um painel do Kibana.

Cenário

Neste artigo, configuramos uma solução que permite visualizar os logs de fluxo do Grupo de Segurança de Rede usando o Elastic Stack. Um plug-in de entrada do Logstash obtém os logs de fluxo diretamente do blob de armazenamento configurado para conter os logs de fluxo. Em seguida, usando o Elastic Stack, os logs de fluxo são indexados e usados para criar um painel do Kibana para visualizar as informações.

O diagrama mostra um cenário que permite visualizar os logs de fluxo do grupo de segurança de rede usando o Elastic Stack.

Etapas

Habilitar os registros em logs do fluxo do Grupo de Segurança de Rede

Nessa situação, você deve habilitar o Registro em Log do Fluxo do Grupo de Segurança de Rede em um ou mais Grupos de Segurança de Rede em sua conta. Para obter instruções sobre como habilitar os logs de fluxo da Segurança de Rede, consulte o seguinte artigo Introdução ao log de fluxo para Grupos de Segurança de Rede.

Configurar o Elastic Stack

Ao conectar os logs de fluxo NSG ao Elastic Stack, podemos criar um painel Kibana que nos permitirá pesquisar, criar grafos, analisar e derivar informações de nossos logs.

Instalar Elasticsearch

As seguintes instruções são usadas para instalar o Elasticsearch em VMs do Ubuntu no Azure. Para obter instruções sobre como instalar a pesquisa elástica nas distribuições RHEL/CentOS, consulte Instalar o Elasticsearch com RPM.

  1. O Elastic Stack da versão 5.0 e superior exige o Java 8. Execute o comando java -version para verificar sua versão. Se você não tiver o Java instalado, consulte a documentação sobre os JDKs com suporte do Azure.

  2. Baixe o pacote de binários correto para seu sistema:

    curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.0.deb
    sudo dpkg -i elasticsearch-5.2.0.deb
    sudo /etc/init.d/elasticsearch start
    

    Outros métodos de instalação podem ser encontrados em Instalação do Elasticsearch

  3. Verifique se o Elasticsearch está sendo executado com o comando:

    curl http://127.0.0.1:9200
    

    Você deverá ver uma resposta semelhante à seguinte:

    {
    "name" : "Angela Del Toro",
    "cluster_name" : "elasticsearch",
    "version" : {
        "number" : "5.2.0",
        "build_hash" : "8ff36d139e16f8720f2947ef62c8167a888992fe",
        "build_timestamp" : "2016-01-27T13:32:39Z",
        "build_snapshot" : false,
        "lucene_version" : "6.1.0"
    },
    "tagline" : "You Know, for Search"
    }
    

Para obter mais instruções sobre a instalação da Pesquisa elástica, consulte as Instruções de instalação.

Instalar Logstash

As seguintes instruções são usadas para instalar o Logstash no Ubuntu. Para obter instruções sobre como instalar este pacote no RHEL/CentOS, consulte o artigo Instalação a partir de Repositórios de Pacotes - yum.

  1. Para instalar o Logstash, execute os seguintes comandos:

    curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb
    sudo dpkg -i logstash-5.2.0.deb
    
  2. Em seguida, precisamos configurar o Logstash para acessar e analisar os logs de fluxo. Crie um arquivo logstash.conf usando:

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. Adicione o seguinte conteúdo ao arquivo:

    input {
       azureblob
         {
             storage_account_name => "mystorageaccount"
             storage_access_key => "VGhpcyBpcyBhIGZha2Uga2V5Lg=="
             container => "insights-logs-networksecuritygroupflowevent"
             codec => "json"
             # Refer https://learn.microsoft.com/azure/network-watcher/network-watcher-read-nsg-flow-logs
             # Typical numbers could be 21/9 or 12/2 depends on the nsg log file types
             file_head_bytes => 12
             file_tail_bytes => 2
             # Enable / tweak these settings when event is too big for codec to handle.
             # break_json_down_policy => "with_head_tail"
             # break_json_batch_count => 2
         }
       }
    
       filter {
         split { field => "[records]" }
         split { field => "[records][properties][flows]"}
         split { field => "[records][properties][flows][flows]"}
         split { field => "[records][properties][flows][flows][flowTuples]"}
    
      mutate{
       split => { "[records][resourceId]" => "/"}
       add_field => {"Subscription" => "%{[records][resourceId][2]}"
                     "ResourceGroup" => "%{[records][resourceId][4]}"
                     "NetworkSecurityGroup" => "%{[records][resourceId][8]}"}
       convert => {"Subscription" => "string"}
       convert => {"ResourceGroup" => "string"}
       convert => {"NetworkSecurityGroup" => "string"}
       split => { "[records][properties][flows][flows][flowTuples]" => ","}
       add_field => {
                   "unixtimestamp" => "%{[records][properties][flows][flows][flowTuples][0]}"
                   "srcIp" => "%{[records][properties][flows][flows][flowTuples][1]}"
                   "destIp" => "%{[records][properties][flows][flows][flowTuples][2]}"
                   "srcPort" => "%{[records][properties][flows][flows][flowTuples][3]}"
                   "destPort" => "%{[records][properties][flows][flows][flowTuples][4]}"
                   "protocol" => "%{[records][properties][flows][flows][flowTuples][5]}"
                   "trafficflow" => "%{[records][properties][flows][flows][flowTuples][6]}"
                   "traffic" => "%{[records][properties][flows][flows][flowTuples][7]}"
                   "flowstate" => "%{[records][properties][flows][flows][flowTuples][8]}"
                    "packetsSourceToDest" => "%{[records][properties][flows][flows][flowTuples][9]}"
                    "bytesSentSourceToDest" => "%{[records][properties][flows][flows][flowTuples][10]}"
                    "packetsDestToSource" => "%{[records][properties][flows][flows][flowTuples][11]}"
                    "bytesSentDestToSource" => "%{[records][properties][flows][flows][flowTuples][12]}"
                    }
       convert => {"unixtimestamp" => "integer"}
       convert => {"srcPort" => "integer"}
       convert => {"destPort" => "integer"}
      }
    
      date{
        match => ["unixtimestamp" , "UNIX"]
      }
     }
    output {
      stdout { codec => rubydebug }
      elasticsearch {
        hosts => "localhost"
        index => "nsg-flow-logs"
      }
    }
    

Para obter mais informações sobre a instalação do Logstash, consulte a documentação oficial.

Instalar o plugin de entrada do Logstash para o armazenamento de blobs do Azure

Este plug-in do Logstash permite que você acesse diretamente os logs do fluxo da conta de armazenamento designada. Para instalar esse plug-in, no diretório de instalação padrão do Logstash, execute o comando:

sudo /usr/share/logstash/bin/logstash-plugin install logstash-input-azureblob

Para iniciar o Logstash, execute o comando:

sudo /etc/init.d/logstash start

Para obter mais informações sobre esse plug-in, consulte a documentação.

Instalar Kibana

Para obter instruções sobre como instalar o Kibana em sistemas RHEL/CentOS, consulte Instalar o Kibana com RPM. Para obter instruções sobre como instalar o Kibana em sistemas Ubuntu/Debian usando um pacote de repositório, consulte Instalar o Kibana a partir do repositório APT.

As instruções a seguir foram testadas no Ubuntu e podem ser usadas em diferentes distribuições do Linux, pois não são específicas do Ubuntu.

  1. Execute os seguintes comandos para instalar o Kibana:

    curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-5.2.0-linux-x86_64.tar.gz
    tar xzvf kibana-5.2.0-linux-x86_64.tar.gz
    
  2. Para executar o Kibana, use os comandos:

    cd kibana-5.2.0-linux-x86_64/
    ./bin/kibana
    
  3. Para exibir a interface da Web do Kibana, navegue até http://localhost:5601

  4. Para esse cenário, o padrão de índice usado para os logs do fluxo é "nsg-flow-logs". Você pode alterar o padrão de índice na seção "saída" do arquivo logstash.conf.

  5. Se você quiser exibir o painel Kibana remotamente, crie uma regra NSG de entrada permitindo o acesso à porta 5601.

Criar um painel Kibana

Um painel de exemplo para exibir detalhes e tendências em seus alertas é mostrado na imagem a seguir:

figura 1

Baixe o arquivo do painel, o arquivo de visualizaçãoe o arquivo de pesquisa salva.

Na guia Management (Gerenciamento) do Kibana, navegue até Saved Objects (Objetos Salvos) e importe todos os três arquivos. Em seguida, na guia Painel, você pode abrir e carregar o painel de exemplo.

Você também pode criar suas próprias visualizações e painéis personalizados para métricas de seu próprio interesse. Leia mais sobre como criar visualizações do Kibana a partir da documentação oficial do Kibana.

Visualizar logs de fluxo NSG

O painel de exemplo fornece várias visualizações dos logs de fluxo:

  1. Fluxos por Decisão/Direção ao Longo do Tempo - grafos da série de tempo mostrando o número de fluxos durante o período de tempo. Você pode editar a unidade de tempo e o alcance das duas visualizações. Os Fluxos por Decisão mostram a proporção de permitir ou negar decisões tomadas, enquanto os Fluxos por Direção mostram a proporção do tráfego de entrada e de saída. Com estes elementos visuais, você pode examinar as tendências de tráfego ao longo do tempo e procure por picos ou padrões incomuns.

    Captura de tela mostra um painel de exemplo com fluxos por decisão e direção ao longo do tempo.

  2. Fluxos por Porta de Origem/Destino - gráficos de pizza mostrando a divisão dos fluxos pelas respectivas portas. Com esta exibição, você pode ver as portas usadas com mais frequência. Se você clicar em uma porta específica no gráfico de pizza, o restante do painel será filtrado para os fluxos dessa porta.

    Captura de tela mostra um painel de exemplo com fluxos por porta de destino e de origem.

  3. Número de Fluxos e Hora do Primeiro Log - métricas mostrando o número de fluxos registrados e a data do primeiro log capturado.

    Captura de tela mostra um painel de exemplo com o número de fluxos e a hora de log mais antiga.

  4. Fluxos por NSG e Regra - um grafo de barras que mostra a distribuição de fluxos em cada NSG, e a distribuição de regras em cada NSG. , você pode ver quais NSGs e regras geraram mais tráfego.

    Captura de tela mostra um painel de exemplo com fluxos por N S G e regra.

  5. Os 10 Principais IPs de Origem/Destino - gráficos de barras mostrando os 10 principais IPs de origem e de destino. Você pode ajustar esses gráficos para mostrar mais ou menos IPs principais. A partir daí, você pode ver os IPs que ocorrem com mais frequência e a decisão de tráfego (permitir ou negar) que está sendo tomada em relação a cada IP.

    Captura de tela mostra um painel de exemplo com fluxos dos dez principais endereços de origem e destino I P.

  6. Flow Tuples - essa tabela mostra as informações contidas em cada tupla de fluxo e o NGS e a regra correspondente.

    Captura de tela mostra tuplas de fluxo em uma tabela.

Usando a barra de consulta na parte superior do painel, você pode filtrar o conteúdo do painel com base nos parâmetros dos fluxos, como a ID da assinatura, grupos de recursos, regra ou qualquer outra variável de interesse. Para saber mais sobre as consultas e os filtros do Kibana, consulte a documentação oficial

Conclusão

Combinando os logs de fluxo do Grupo de Segurança de Rede com o Elastic Stack, podemos encontrar uma maneira poderosa e personalizável para visualizar o tráfego de rede. Esses painéis permitem que você obtenha e compartilhe rapidamente insights sobre o tráfego da rede, filtre e investigue quaisquer anomalias em potencial. Com o Kibana, você pode personalizar esses painéis e criar visualizações específicas para atender às necessidades de segurança, auditoria e conformidade.

Próximas etapas

Para saber como visualizar os logs de fluxo NSG com o Power BI, veja Como visualizar logs de fluxos NSG com Power BI