Permitindo que o apache escreva com o iptables [duplicado]

3

Desde há alguns dias recebo ataques DDOS no meu servidor. Eu instalei o mod_evasive no apache e funciona direito! Ele grava o log e envia o email com os IPs.

Mas há um problema: o Apache não adiciona a regra DROP no iptables (ou pelo menos não aparece)

Estou usando o apache no Plesk, o arquivo de configuração é como:

DOSHashTableSize 3097
DOSPageCount 1 
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 600
DOSSystemCommand "sudo /sbin/iptables -A INPUT -s %s -j DROP"
DOSEmailNotify "[email protected]"
DOSLogDir "/var/log/evasive/"

Aqui está o meu arquivo "sudoers":

apache ALL=(ALL) NOPASSWD: /sbin/iptables -A INPUT -s [0-9.]* -j DROP

Mas isso não ajuda.

Obrigado antecipadamente.

    
por Leandro Vidal 22.03.2011 / 11:07

2 respostas

3

Permitir que o apache execute o iptables com privilégios de root soa como uma ideia muito ruim - presumo que você tenha acesso root. Se fosse eu, estaria usando um programa proxy (como o fail2ban) para filtrar os logs e escrever as regras.

I've write in visudo this:

E você verificou que é o que foi implantado em / etc / sudoers?

Da página do manual:

If a Cmnd has associated command line arguments, then the arguments in the Cmnd must match exactly those given by the user on the command line (or match the wildcards if there are any)

Você usou um regex em vez de curingas. Experimente:

apache ALL=(ALL) NOPASSWD: /sbin/iptables -A INPUT --dport 80 -s * -j DROP

Embora uma idéia melhor seja envolver a funcionalidade em um script em vez de chamar iptables diretamente. (note que eu configurei explicitamente a porta para evitar que você se bloqueie - presumo que você tenha acesso ssh).

    
por 22.03.2011 / 11:21
2

Em " visudo ", mude ALL para root e pule os argumentos para o iptables:

apache ALL=(root) NOPASSWD: /sbin/iptables

Certifique-se de que o primeiro apache seja o nome do usuário que está executando o servidor da web. (Verifique com ps -ef|egrep -e 'apache|http'

Em seguida, altere seu DOSSystemCommand para

DOSSystemCommand "sudo -u root /sbin/iptables -A INPUT -s %s -j DROP"

Melhor solução: crie um script de propriedade do root que ninguém mais possa modificar, faça o script executar o iptables e peça ao apache que chame esse script (ative esse script em vez do iptables no sudo).

    
por 22.03.2011 / 11:57