PF OpenBSD afirma

1

Nós temos um servidor OpenBSD usado como firewall usando o famoso pf. O firewall está conectado ao formulário da Internet de um lado e a uma rede local do outro. Estamos enfrentando uma falha de conexão devido ao fato de que o pf está atingindo seu número máximo de estados (que é 20.000), isso acontece por menos de uma hora e depois pensa que volta ao normal. Existe alguma maneira de determinar os hosts que estão abrindo esses estados. Aumentar o número de estados no pf.conf ajuda?

Muito obrigado

    
por Abbass 15.03.2011 / 18:03

2 respostas

5

Existem várias coisas que você pode fazer aqui.

Para ver quais hosts são responsáveis pelo grande número de entradas da tabela de estados, você pode fazer pfctl -vs state .

Para adicionar mais entradas à tabela de estados, você pode fazer o que sugeriu ( set limit states para um número maior), mas se houver um problema subjacente, você provavelmente não desejará fazer isso.

Você também pode considerar ajustar os valores de tempo limite de estado ( set timeout ), possivelmente usando tempos limite adaptáveis, para se livrar de estados antigos / antigos mais rapidamente.

Veja o página de manual para pf.conf e o manpage para pfctl para mais informações

    
por 15.03.2011 / 18:15
2

[Ref: Atingir o limite da tabela de estados do PF ]

As tabelas de estado PF definem o limite de conexões que foram autorizadas, e, portanto, limita o número de conexões novas que o firewall aceitar. Você pode ter excesso de largura de banda disponível, mas se não houver capacidade nas Tabelas de Estado, então seu firewall se torna um gargalo.

Os limites configurados para informações de estado são acessíveis por meio de "pfctl"

# pfctl -sm
states        hard limit    10000   
src-nodes     hard limit    10000
frags         hard limit     5000
tables        hard limit     1000
table-entries hard limit   200000

Os limites acima estabelecem a memória alocada às estruturas definidas, de tal forma que eles estão sempre disponíveis, e também limita o crescimento do dito estruturas de dados. Se o tráfego do seu firewall exceder as configurações acima, o desempenho será efetuado.

Agora é importante monitorar os efeitos do seu tráfego nos contadores para os limites acima. A saída genérica "-s info *" nos dá pistas onde investigar possíveis gargalos em nosso firewall.

# pfctl -si
Status: Enabled for XXXXXXXXXXXXXXXX          Debug: Urgent

State Table                          Total             Rate
  current entries                       34
  searches                        96379206           15.2/s
  inserts                           726196            0.1/s
  removals                          726162            0.1/s

No gateway acima, conectado a dois laptops usados com pouca frequência, as entradas atuais são muito baixas em relação ao limite de disco rígido 10000 acima. Obviamente, as entradas atuais irão fluir devido ao uso, e em um gateway mais ocupado pode fluir significativamente.

[Ref: Atingir o limite da tabela de estados do PF , Tempo de limite máximo do estado aberto do BSD ]

Um contador importante para monitorar a partir de pfctl -si é a " memória " contador. Os mesmos detalhes devem ser disponibilizados através do systat pf

De um gateway ativo que vincula nossos 6 sites, obtemos o seguinte de um padrão instalar, nenhuma modificação nas tabelas de estado.

# pfctl -si | grep memory
  memory                          209230            0.1/s

O contador destaca quantas vezes o PF falhou em pelo menos um dos "pools (9)" Quanto maior o número, maior a freqüência de incidências em que os pacotes chegam no firewall, provavelmente, foram descartados devido a um dos limites de hardware.

Nosso exemplo acima mostra 209.230 vezes o limite de memória hit .

A próxima revisão é verificar com as alocações de memória do Kernel, usando "vmstat". Para restringir nossa busca aos efeitos na tabela de estados pf nós verificamos a entrada para pfstatepl .

Abaixo, pegamos as linhas com estado ou Fail (assim podemos obter os cabeçalhos das colunas)

# vmstat -m | grep -E "state|Fail"
Name      Size  Requests  Fail   InUse Pgreq Pgrel Npage Hiwat Minpg Maxpg  Idle
pfstatepl  296  213123877 209235  5075  1050     0  1050 1050     0   2308   526
pfstatekeypl 
pfstateitempl

pfstatepl é o rótulo da memória alocada para o struct pf_state (/usr/src/sys/net/pf_ioctl.c) As falhas parecem ser significativas.

pfctl -vvsi | congestionamento grep

    
por 27.09.2011 / 03:09

Tags