Como posso evitar que o iptables conte bytes e pacotes em cadeias vazias?

4

Antecedentes

Ocasionalmente, tenho regras de firewall que preciso usar para janelas de manutenção, mas não quero ativas (e, portanto, consumindo ciclos de CPU ou diminuindo a velocidade da interface de rede) o resto do tempo. Eu adiciono as regras quando eu preciso delas, e então quero limpar o slate e parar o iptables de contar pacotes e bytes fluindo pelas cadeias de filtros .

Problema: a tabela de filtros continua contando mesmo assim

A primeira vez que eu verifico iptables no modo verbose, as contagens de pacotes e bytes são sempre zero. Por exemplo:

$ sudo iptables -L -n -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

No entanto, assim que a tabela de filtros for inicializada, a limpeza da tabela ou a redefinição dos contadores não impedirá que a tabela continue contando pacotes e bytes. Por exemplo:

$ sudo iptables -F; sleep 5; sudo iptables -L -n -v
Chain INPUT (policy ACCEPT 395 packets, 577K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 199 packets, 11135 bytes)
 pkts bytes target     prot opt in     out     source               destination

Solução Atual

Embora eu suspeite que o uso real da CPU não seja tão alto para uma tabela vazia, parece um desperdício ter o kernel inspecionando pacotes ou contando bytes com os quais não me importo. Para impedir que a tabela de filtros consuma os ciclos da CPU quando não há regras ativas, estou fazendo o seguinte:

$ sudo iptables -F; sudo iptables -X; sudo modprobe -r iptable_filter

Isso remove as regras e a tabela de filtros, permitindo que o módulo de filtro iptables seja removido do kernel em execução. Depois que eu fizer isso, os contadores permanecerão zerados até que eu inicialize novamente a tabela.

A questão real

Minha pergunta em duas partes é:

  1. Se os contadores de cadeias vazias até mesmo têm um impacto mensurável no desempenho. Intuitivamente, parece que eles estariam em uma interface de rede ocupada, mas não tenho ideia de como medir se o impacto existe.
  2. Supondo que é um impacto, se há uma maneira mais elegante de impedir que iptables contatem bytes / pacotes em cadeias vazias do que descarregar os módulos do kernel relacionados.
por CodeGnome 12.12.2013 / 15:03

2 respostas

4

Você não pode a menos que você corrija o kernel. E você tem coisas melhores para fazer.

Os contadores são incrementados __nf_ct_refresh_acct se o O parâmetro do_acct é diferente de zero. Essa função é chamada por meio de dois wrappers: nf_ct_refresh_acct , que aumenta os contadores e nf_ct_refresh , o que não. A escolha do wrapper é feita de acordo com o tipo de protocolo: protocolos que podem rastrear, os que não podem fazer.

A quantidade de computação é pequena. São apenas duas adições sincronizadas. Os processadores modernos têm pipelines de instruções muito profundos, o que torna as instruções condicionais caras: o processador tenta prever qual ramificação será usada para iniciar executando as próximas instruções antes de determinar o resultado do teste, e se a previsão estiver errada, muito trabalho precisa ser descartado. As adições requerem sincronização entre as CPUs, porque todas as CPUs precisam estar atualizando o mesmo contador; na arquitetura multicore típica, isso significa que o núcleo precisa bloquear a linha de cache que contém os contadores. Se o recurso fosse opcional, a CPU teria que ler o valor da configuração, que não requer acesso exclusivo, portanto, é um pouco menos caro. Ainda assim, seria um ganho extremamente pequeno, equilibrado pela perda um pouco menos pequena para a maioria dos usuários que querem os contadores. Não vale a pena ter uma opção para desativar esse recurso.

    
por 13.12.2013 / 01:59
-2
  1. Não.
  2. Não há, então não se preocupe com isso.
por 12.12.2013 / 16:33