Um dos nossos serviços é uma extranet para uso exclusivo de nossos 200 funcionários em todo o Reino Unido. Estamos vendo um grande número de tentativas de login da China, Rússia, Ucrânia e Nigéria. Eu tenho grandes listas de intervalos IP que gostaria de bloquear. Existem milhares de entradas.
(Para o propósito desta discussão, eu não estou interessado em abrir um debate sobre os erros e acertos de bloquear países inteiros. Esse é o requisito que eu tenho - e eu preciso cumpri-lo.)
Escrevi um script do Powershell que atualiza a lista a cada 24 horas e preenche o Firewall do Windows com regras de bloqueio. Mas estou nervoso em ativá-lo.
A minha pergunta é: qual a eficiência do Windows Firewall em lidar com milhares de regras de bloqueio dessa maneira? Por exemplo, se meu script continha 10.000 regras de bloqueio (ou mesmo 100.000), ele funcionaria de forma eficaz ou paralisada?
Embora eu queira manter meu servidor da Web o mais protegido possível, preciso garantir que o servidor da Web esteja lidando com solicitações rapidamente.
UPDATE
Eu decidi dar uma chance e executar o script do PowerShell. Eu fui para uma técnica ligeiramente diferente. Em vez de criar 6700 regras (abrangendo milhões de IPs), criei uma regra e coloquei todos os intervalos IP incorretos na seção mãe de todos os endereços remotos.
Resultado : funciona perfeitamente. Bloqueia a maior parte da China, Rússia, Taiwan, Ucrânia e Nigéria, que é onde estamos obtendo a maioria das tentativas de invasão de hackers. E não há diferença perceptível no desempenho. Parece que estamos atendendo a mesma quantidade de solicitações sem qualquer alteração. Uma para o Firewall do Windows. Parece ser capaz de lidar com milhares de blocos IP com muita eficiência.
UPDATE 2 - FEEDBACK
O roteiro está em vigor há alguns dias, então achei que você gostaria de receber alguns comentários sobre como está indo. Eu configurei o script como um trabalho agendado para ser executado diariamente, atualizando o firewall com novos intervalos de IP, lidos de um arquivo CSV. Isso tudo funciona perfeitamente, o firewall funciona muito rapidamente. No entanto, há uma palavra de cautela: o script em si leva aprox. 4-5 minutos para executar, durante os quais o tempo de CPU é excedido e as solicitações da Web são extremamente lentas.
Portanto, recomendo executar o script durante a noite ou durante uma janela de manutenção em que você não esteja esperando carga pesada.
A solução para mim é executar o script em momentos diferentes em cada um dos meus servidores de carga balanceada, para que não haja degradação no desempenho durante a execução.
Aqui está o script:
$csv = Import-Csv -Path 'C:\Scripts\IP Block List.csv'
$data = @()
$csv | ForEach-Object { $data += $_.From + "-" + $_.To }
Set-NetFirewallRule -Name "BlockAllIPsInList" -RemoteAddress $data
E aqui está um arquivo CSV de amostra:
From,To
1.2.3.4,1.2.3.255
Portanto, neste exemplo, ele bloquearia tudo, de 1.2.3.4 a 1.2.3.255 inclusive
Com um pouco de trabalho, o script também pode ser modificado para funcionar com os formatos CIDR. Espero que isso ajude.