Pular para o conteúdo

Script de controle de firewall centralizado

    O controle de firewall centralizado fornece uma maneira centralizada de gerenciar o firewall em vários servidores ou loadbalancers executando iptables. Desta forma, você pode rapidamente permitir, bloquear, deletar e pesquisar abuse rangers e etc com um comando em vários servidores. Acessa esses servidores através de SSH.

    Suporta IPv4 e IPv6.

    Testado no Debian 6.x / 7.x / 8.x / 9.x, mas deve funcionar em qualquer distro.

    Pré-requisitos

    Para usar as funções precheck, protected e findip para IPv6, você precisa do módulo python netaddr instalado. O IPv4 não precisa disso, pois usa a correspondência de prefixo na forma binária do IP.

    Debian: apt-get install python3-netaddr

    É mais eficiente usar ipset além de iptables. O Ipset pode ser usado para gerenciar listas que o iptables pode se referir e usar. Assim, isto trabalha mais rápido e a manipulação da lista também é mais flexível e o método preferido de usar esse script.

    Debian: apt-get install ipset

    Uma vez que este script se conecta aos servidores fornecidos com SSH, esse acesso deve estar presente antes que ele possa ser usado.

    Configurações

    Copie o exemplo de configuração de cfc.cfg-example para cfc.cfg pela primeira vez.

    As seguintes configurações podem ser definidas no arquivo de configuração:

      • action: define a ação ao adicionar uma regra, default: DROP
      • checkaggrbin: caminho para o script checkaggr.py, default: ./checkaggr.py
      • cleanupconfirmation: pede confirmação antes de executar o comando clean, configurado como false para cron use, default: true
      • date: defina o formato da data para os comentários do firewall, default: $(date +%d%m%Y) -> 22062016
      • dateipset: defina o formato da data para os comentários do ipset firewall, deixe isso como padrão para evitar quebrar algumas das funções, default: $(date +%Y%m%d) -> 20160622
      • ipsetname: define o nome da lista IPSET, default: blockedips
      • ipsetservers: define os servidores que usam IPSET em vez de iptables, default: "lvs05.example.com lvs06.example.com"
      • fwchain: nome da cadeia de firewall para add/del/search, default: INPUT
      • masklimit: tamanho máximo dos intervalos de IP que podem ser adicionados, default: /21
      • precheck: verifique se o IP que está prestes a ser adicionado já está no firewall ou se faz parte de um maior intervalo agregado; pode ser um pouco lento em firewalls grandes no IPv6 (~25 segundos para pesquisar 500 intervalos de IP por servidor), default: true
      • protected: habilitar os intervalos protegidos adicionados, default: true
      • protectedranges: intervalos de IP que são excluídos da função add, geralmente os intervalos de propriedade da rede local, default: "172.16.0.0/12 10.0.0.0/8 192.168.0.0/16"
      • pythonbin: localização do binário Python utilizado, default: /usr/bin/python3
    • servers: define os servidores que usam apenas iptables, default: "lvs01.example.com lvs02.example.com lvs03.example.com lvs04.example.com"

    As funções IPv6 são marcadas com o sufixo 6.

    Utilização

    Ao inserir IPs/intervalos com os seguintes comandos, faça isso na notação CIDR, isso será validado e não aceitará mais nada.

    add:

    cfc.sh add n.n.n.n/NN ''
    cfc6.sh add ''
    

    Adiciona o determinado IP (intervalo) aos firewalls com a ação configurada para todo o tráfego a partir dessa origem. Faz um comentário por padrão com a data atual, mas você pode adicionar um comentário opcional usando aspas simples para adicionar um motivo ou owner desse intervalo como um exemplo. Também pode ser pesquisado nesse comentário mais tarde.

    addstring:

    cfc.sh addstring :
    cfc6.sh addstring :
    

    Adiciona um bloco de string de caracteres ao iptables para um determinado protocolo e porta de destino. Um exemplo prático seria bloquear um User-Agent destinado a um grupo de servidores web, de modo que uma conexão TCP destinada a porta 80 com a string: Firefox/28.0, todo o tráfego recebido que corresponda a essa string para a porta TCP 80 seria bloqueado:

    cfc.sh addstring tcp:80 'Firefox/28.0'
    

    Cuidado, pois isso pode ter grandes consequências se a string não for específica o suficiente!

    clean:

    cfc.sh clean
    

    Limpa todas as regras CFC firewall anteriores a ‘n’ quantidade de dias. Tenha em mente que isso dependerá do formato de data padrão! Assim, se você personalizou o formato da data, você precisará ajustar o script na seção clean.

    del:

    cfc.sh del n.n.n.n/NN
    cfc6.sh del
    

    Exclui o IP fornecido (intervalo) / regra dos firewalls

    delstring:

    cfc.sh delstring :
    cfc6.sh delstring :
    

    Exclui um bloco de string no iptables para um determinado protocolo e porta de destino.

    find:

    cfc.sh find
    cfc6.sh find
    

    Procura os firewalls para a string dada (case in-sensitive), isso pode ser (parte de) um IP / intervalo / comentário.

    findip:

    cfc.sh findip n.n.n.n/NN
    cfc6.sh findip
    

    Procura os firewalls se o IP fornecido (intervalo) já faz parte de uma regra adicionada; pode ser um pouco lento em grandes firewalls para IPv6 (~25 segundos para pesquisar 500 intervalos de IP por servidor). O IPv4 usa a correspondência de prefixo na forma binária do IP em vez disso, que é aproximadamente 500% mais rápido, isso também é usado para os recursos de precheck e protectedranges.

    ipsethostinit:

    cfc.sh ipsethostinit
    cfc6.sh ipsethostinit
    

    Adiciona uma lista IPSET ao host especificado e uma regra iptables referindo-se a ela usando os parâmetros definidos no cfc.cfg. Isso só precisa ser feito uma vez antes de adicionar regras de firewall.

    last:

    cfc.sh last
    cfc6.sh last
    

    Mostra as últimas entradas adicionadas aos firewalls.

    .

    Publicado originalmente no HoC em 11 de fevereiro de 2018.

    Este conteúdo foi traduzido com permissão. HoC não é afiliado com este site.

    Autor: Priyanshu Sahay
    Tradução por Tiago Souza

    .

    Deixe um comentário

    O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

    Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.