
Gostaria de saber quanto CPU
/ memory
minhas regras atuais iptables
consomem.
Eu tentei procurar em ps
e htop
, mas mesmo com os threads do kernel exibidos e não vi nada relacionado a iptables
.
Estou usando o conntrack
módulo com estas configurações específicas do módulo: xt_recent.ip_pkt_list_tot=1
xt_recent.ip_list_tot=4096
. Eu acho que 4096
é bem alto. E então, na minha configuração do iptables, estou usando dois tipos de listas de bloqueio: BLACKLIST
e PORTSCAN
.
-A INPUT -i eth0 -p icmp -j ACCEPT
-A INPUT -i eth0 -s 1.2.3.4/32 -j ACCEPT
-A INPUT -i eth0 -m recent --rsource --name BLACKLIST --seconds 14400 --update -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -i eth0 -m recent --rsource --name PORTSCAN --seconds 3600 --update -j DROP
-A INPUT -i eth0 -p udp -m udp --dport 5060 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 5061 -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 5062:5100 -j ACCEPT
-A INPUT -i eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -m recent --rsource --name PORTSCAN --set -j DROP
-A INPUT -i eth0 -j DROP
-A INPUT -j DROP
Estou tendo problemas de rede no servidor, onde suspeito que minhas iptables
regras possam desempenhar um papel. Por exemplo:
- Minhas
ssh
sessões estão sendo interrompidas com bastante frequência. - Ping relata perda de pacotes de 0,2%
quando estou conectando em portas permitidas, ou seja,
5060
leva muito mais tempo quandoPORTSCAN
tem muitos itens, em comparação quando está vazioQual seria a melhor maneira de solucionar esse problema?
- há alguma otimização que eu possa fazer nas minhas regras do iptables?
- Como posso ver quanto da minha CPU está sendo consumida
iptables
?
Responder1
Processo do Kernel Linux:
Muitas funções do Kernel, como Iptables, são processadas no nível do Kernel como tarefas kworker e são visíveis em gerenciadores de tarefas como top. Conforme mencionado nos comentários, você pode calcular o uso de CPU e memória comparando o uso total de recursos com e sem carregar as iptables
regras. Note que ipset
já consome memória mesmo que você não utilize em uma regra.
Trabalhadoré um processo de espaço reservado para threads de trabalho do kernel, que executa a maior parte do processamento real para o kernel, especialmente em casos onde há interrupções, temporizadores, E/S, etc. Estes normalmente correspondem à grande maioria de qualquer tempo de "sistema" alocado para executar processos. Não é algo que possa ser removido com segurança do sistema de qualquer forma e não tem nenhuma relação com os aplicativos de desktop (exceto se esses programas fizerem chamadas de sistema, o que pode exigir que o kernel faça alguma coisa). Também kworker
significa um processo do kernel Linux fazendo "trabalho" (processando chamadas do sistema). Você pode ter vários deles em sua lista de processos: kworker/0:1
o do primeiro núcleo da CPU, kworker/1:1
o do segundo, etc. Todos os processos do Kernel são iniciados como filhos dokthreaddprocesso no espaço do Kernel.
Processo pai:O ID do processo kthreadd
é 2 e os trabalhadores deste kernel podem ser listados com:
pstree 2 -l -p
# or
ps --ppid 2 -u
# or
ps --ppid 2 -o pid,user,%mem,command,time,etime,cpu,pcpu,nice,pcpu,vsz
Este último pode ser usado com um script bash + cron para observar as alterações... alternativamente para uma análise temporizada direta, perf
pode ser usado ( apt-get install linux-tools-common linux-tools-3.11.0-15-generic
)
# Record 10 seconds of backtraces on all your CPUs:
sudo perf record -g -a sleep 10
# Analyse your recording:
sudo perf report
Navegue no gráfico de chamadas com←,→,↑,↓e Enter.