Firewall do Windows - bloqueando intervalos de endereços IP em massa - considerações de desempenho?

6

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.

    
por SimonGoldstone 01.09.2014 / 18:36

2 respostas

2

Fizemos isso com um servidor de jogo. Nós finalmente mudamos para um plugin no pfsense, mas não notamos nenhuma degradação de desempenho com alguns milhares de blocos de ip no firewall do windows. O bloqueio baseado em ip é uma das tarefas mais rudimentares que um firewall pode realizar. Além da sobrecarga de gerenciamento (você já tem um script para isso), eu não veria nenhuma razão para que houvesse um problema. FWIW, eu olhei usando route53 da amazon para isso, mas não serviu ao nosso propósito na época. Isso permitiria que você resolvesse um ip falso nesses países.

    
por 01.09.2014 / 19:21
2

Mesmo que nossos cenários sejam diferentes, eu gostaria de compartilhar: Eu tenho um pequeno VPS (1 CPU, 256MB RAM) executando alguns serviços no Linux, e o firewall tem milhares de regras negando blocos inteiros de endereços, abrangendo todo países, e eu não vi nenhuma desaceleração.

Eu acho que é menos exigente no servidor simplesmente deixar cair muitos pacotes do que deixá-los ir para o aplicativo e ser processado, apenas para enviar de volta a mensagem de erro. Deixá-los cair leva muito menos energia.

    
por 01.09.2014 / 18:48