+ Responder ao Tópico



  1. #1
    johnny
    Visitante

    Padrão firewall sobe processamento...

    Pessoal,

    To com o seguinte problema.
    Rodo na minha maquina apache + MySQL + qmail.
    Basicamente ela é usada para o apache e MySQL.
    A questão é que quando ligo o fire durante o horário de maior acesso, o processamento sobe muito deixando o servidor lento.
    Pelo comendo "top" ele lista o apache como maior causador mas isso é estranho pois acontece somente quando ligo o irewall.
    Algum pode me dar uma dica de como estar monitorando isso e detecar o que realmente está causando esse problema?

    Obrigado!!!
    Johnny

  2. #2

    Padrão firewall sobe processamento...

    na verdade eu acho que é o mysql que ta comendo tanto processamento... isso podem ser várias coisas

    1 - conexoes que sao abertas e nao sao fechadas
    2 - o mysql nao foi "otimizado"
    3 - tem query SQL q nao foi bem elaborada e come processamento d+

    sem ver nada fica dificil atribuir a causa disso, da uma acessada no site do mysql e olha na documentacao dele que tem algumas opções de otimizacao e tem algumas variaveis de ambiente do mysql que mostram o quanto ele esta "trabalhando", tais como qtde de conexoes, tempo das querys,etc...



  3. #3
    johnny
    Visitante

    Padrão firewall sobe processamento...

    Mas esse problema está diretamente relacionado ao firewall.
    Se eu fico o dia todo com a aplicação só que sem o firewall ligado, o processamento fica normal. É só eu ligar o firewall que ele sobe mtooooo...

    Não tenho como monitorar quais portas estão sendo muito acessadas e gerando esse problema?

    Johnny

  4. #4

    Padrão firewall sobe processamento...

    hmmm soh qdo ativa o firewall??bom posta suas regras ai



  5. #5
    johnny
    Visitante

    Padrão firewall sobe processamento...

    Segue ai amigão.

    Note que para enviar e-mails, como o qmail abre portas aleatórias eu liberem um range de portas que aparentemente ele usa.
    Caso vc possa me ajudar a melhorar isso, tipo.. abrindo a porta somente quando ele for usar, seria legal.

    Mas a questão inicial é o motivo de subir o processamento da maquina quando ligo o menino...
    vlw!!

    ----
    #!/bin/bash

    ip_local="200.155.124.30"
    dns_pri="200.155.124.85"
    dns_sec="200.155.124.86"


    # LEVANTANDO MODULOS
    modprobe ip_tables
    modprobe ipt_LOG
    modprobe ipt_state

    # LIMPANDO FIREWALL
    /sbin/iptables -t filter -F
    /sbin/iptables -t nat -F
    /sbin/iptables -t mangle -F

    # APAGANDO CADEIAS DE TERCEIROS
    /sbin/iptables -X

    # DEFININDO A POLITICA (tudo fechado)
    /sbin/iptables -P INPUT DROP
    /sbin/iptables -P OUTPUT ACCEPT
    /sbin/iptables -P FORWARD DROP

    #DEFESA CONTRA ATAQUES DIVERSOS
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
    echo 1 > /proc/sys/net/ipv4/tcp_syncookies

    /sbin/iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
    /sbin/iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
    /sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    /sbin/iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
    /sbin/iptables -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP
    /sbin/iptables -A FORWARD -m unclean -j DROP


    # MAIS SEGURANCA
    /sbin/iptables -N VALID_CHECK
    /sbin/iptables -A VALID_CHECK -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
    /sbin/iptables -A VALID_CHECK -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
    /sbin/iptables -A VALID_CHECK -p tcp --tcp-flags ALL ALL -j DROP
    /sbin/iptables -A VALID_CHECK -p tcp --tcp-flags ALL FIN -j DROP
    /sbin/iptables -A VALID_CHECK -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
    /sbin/iptables -A VALID_CHECK -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
    /sbin/iptables -A VALID_CHECK -p tcp --tcp-flags ALL NONE -j DROP

    # REGRAS DIVERSAS

    /sbin/iptables -A INPUT -p ALL -s 127.0.0.1 -i lo -j ACCEPT
    /sbin/iptables -A INPUT -p ALL -s $ip_local -i lo -j ACCEPT
    /sbin/iptables -A INPUT -s 200.158.0.222 -j ACCEPT
    /sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    /sbin/iptables -A INPUT -p tcp --dport 1000:3000 -j ACCEPT
    /sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT
    /sbin/iptables -A INPUT -p udp -s $dns_pri --sport 53 -j ACCEPT
    /sbin/iptables -A INPUT -p udp -s $dns_sec --sport 53 -j ACCEPT
    /sbin/iptables -A INPUT -i eth0 -f -j LOG --log-prefix "Pacote INPUT fragmentado: "
    /sbin/iptables -A INPUT -i eth0 -f -j DROP
    /sbin/iptables -A INPUT -j LOG --log-prefix "Pacote INPUT descartado: "
    /sbin/iptables -A INPUT -j DROP


    /sbin/iptables -A FORWARD -m state --state INVALID -j DROP
    /sbin/iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
    /sbin/iptables -A FORWARD -j LOG --log-prefix "Pacote FORWARD descartado: "
    /sbin/iptables -A FORWARD -j DROP
    ----

  6. #6
    felco
    Visitante

    Padrão firewall sobe processamento...

    Mas com o firewall levantado continua funcionando sua aplicacao?



  7. #7

    Padrão firewall sobe processamento...

    Citação Postado originalmente por johnny
    /sbin/iptables -A INPUT -i eth0 -f -j LOG --log-prefix "Pacote INPUT fragmentado: "
    /sbin/iptables -A INPUT -j LOG --log-prefix "Pacote INPUT descartado: "
    /sbin/iptables -A FORWARD -j LOG --log-prefix "Pacote FORWARD descartado: "
    ----
    Acho q oq ta comendo processaomento sao essas regras ai, usar a opcao log sem setar limite eh loucura, alguem pode usar isso pra travar tua maquina de tanto processamento ou entaum lotar teu disco fazendo o firewall gravar logs desnecessarios.... se ainda quiser continuar a logar utilize a opcao limit em conjunto setando o numero de logs por segundo q podem ser gravados

  8. #8
    johnny
    Visitante

    Padrão firewall sobe processamento...

    Rapaz.. acho que resolveu mesmo

    Olha.. agora mais um detalhe.
    Nota que eu abri as portas para o SMTP se comunicar com otro servidores SMTP e entregar a msg.

    /sbin/iptables -A INPUT -p tcp --dport 1000:3000 -j ACCEPT

    O problema é que ele não mantém apenas nessas portas.. ele vai mudando.
    Teria alguma outra solução para esse caso, como ele abrir a porta quando for usar?

    abraço!
    Johnny



  9. #9

    Padrão firewall sobe processamento...

    acho q vc nem precisa dessa regra... tenta com isso, coloca bem no comeco do script

    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

  10. #10

    Padrão firewall sobe processamento...

    *agreed* com o ice, uma das coisas que comecem processamento sao LOG e DEBUG. Um simples exemplo disso foi quando aconteceu comigo em um base dados ldap, com um media de 500 registros (poucos) o tempo para percorrer ela era de aprox 1s ... eu achei lento demais, desliguei log, e tudo mais caiu para 0.3s é gritante a diferenca, infelizmente eu nao tive como testar em larga escala para dar uma margem realmente boa.

    tente optimizar seu firewall ao maximo... tente tirar os logs so por um dia para testar... se for isso, faca o que o ice falou, limite os logs ou entao logue somente o q vc realmente precisa.



  11. #11
    johnny
    Visitante

    Padrão firewall sobe processamento...

    Rapaz... funfou!!!
    Vlw mesmo ))

    Oq vc achou desse fire?
    Acaha q tem brechas.. tem sugestão para melhora-lo?

    abraço e obrigado pela força!

    João

  12. #12

    Padrão firewall sobe processamento...

    Sim. tem algumas coisas redudantes, quando voce jah poem a politica default em drop, nao precisa sair dropando quesitos especificos como:

    /sbin/iptables -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP
    /sbin/iptables -A FORWARD -m unclean -j DROP
    /sbin/iptables -A FORWARD -m state --state INVALID -j DROP
    Posso estar cego, mas voce cria uma chain chamada VALID_CHECK e nao a utiliza, waste of memory.

    Isso aqui é uma duplicidade:

    /sbin/iptables -A INPUT -p ALL -s 127.0.0.1 -i lo -j ACCEPT
    /sbin/iptables -A INPUT -p ALL -s $ip_local -i lo -j ACCEPT
    iptables -A INPUT -i lo -j ACCEPT

    resolve pois se esta entrando na interface de loopback é obvio q é local e somente local, logo nao precisa especificar o ip, voce tem 2 regras q poderiam ser escritas como uma, waste of processing.

    suas duas ultimsa regras na chain forward/input
    /sbin/iptables -A INPUT -j DROP
    /sbin/iptables -A FORWARD -j DROP
    sao inuteis, ou melhor, estao em duplicata, pois a politica default é DROP, e voce repete o DROP no final, é como voce escrever duas vezes -A INPUT -j DROP, logo waste of memory.


    Agora quanto a essa regra:

    /sbin/iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
    voce esta impondo um limite ao protocolo tcp, nao sei ate que ponto isso pode vai ser bom, inclusive na sua chain de forward, se voce tiver 1000 clientes atras desse firewall... sera q nao vai haver mais de uma conexao tcp por segundo, ainda tem o burst q é de 5 por default, mas pensa nisso, mas bom se nao der problema para voce sem galho, mais interessante seria voce ter isso na chain de input, mas bom isso varia de acordo com a sua infraestrutura, posso estar ate criticando essa parte errada, nao sei exatamente quais sao suas politicas.

    Bom nao leve para o lado pessoal hehe, é so uma critica as suas regras, de resto acho que esta tudo tranquilo a principio... so apontei os erros que eu encontrei, nao estou sugerindo melhorias a mais, pois como disse nao conheco a estrutura e nem como funciona, entao é so uma analise superficial. Lembre-se, isso é apenas a minha opniao.



  13. #13
    johnny
    Visitante

    Padrão firewall sobe processamento...

    Rapaz... vlw pela força viu....
    Ficaram algumas dúvidas.

    Sobre meu caso.. esse servidor está na web em um datacenter.
    Não tenho nada atrás dele.. ele está na web direto )

    Dúvida:
    Se minha politica está assim:
    /sbin/iptables -P INPUT DROP
    /sbin/iptables -P OUTPUT ACCEPT
    /sbin/iptables -P FORWARD DROP

    Tipo.. td que tiver para FORWARD OU IMPUT q seja DROP é redundancia?
    Ex:
    /sbin/iptables -A FORWARD -m state --state INVALID -j DROP
    /sbin/iptables -A INPUT -i eth0 -f -j DROP

    É isso mesmo neh?


    Agora sobre o que comentou..
    Meu servidor é um server web para apache com MySQL.Libero apenas SSH e DNS além da porta 80.
    Como poderia melhorar isso aqui:
    /sbin/iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT

    É muito bom ter sua ajuda )

    abraço!!!
    Johnny

  14. #14

    Padrão firewall sobe processamento...

    Citação Postado originalmente por johnny
    Tipo.. td que tiver para FORWARD OU IMPUT q seja DROP é redundancia?
    Ex:
    /sbin/iptables -A FORWARD -m state --state INVALID -j DROP
    /sbin/iptables -A INPUT -i eth0 -f -j DROP
    Nesse caso nao eh redundancia nao, como vc tem algumas portas abertas, pode ser q "entre" algum pacote invalido nelas, isso ai vai bloquear (mas coloque essas regras antes das de liberar)