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 scriptcheckaggr.py
, default:./checkaggr.py
-
cleanupconfirmation
: pede confirmação antes de executar o comandoclean
, configurado comofalse
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çãoadd
, 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
.