Evitando o ataque de força bruta do Sendmail no Solaris 10

1

Eu quero bloquear dinamicamente conexões específicas que usam o mesmo endereço IP com base em uma taxa ou limite de conexão. Isso é possível usando o Solaris / IPF ou alguma extensão do sendmail? Quero limitar as tentativas de login do sendmail para impedir ataques de força bruta.

No Linux, ele é facilmente manipulado na camada de firewall do iptables, mas não consegui descobrir uma maneira de usar o ipf para limitá-lo na camada do firewall. O Sendmail tem um limite de taxa e conexão embutido, mas parece ser aplicado a todos os usuários, portanto, se estivermos experimentando um DOS ou DDOS, ele bloquearia todos os nossos usuários em vez de apenas o invasor.

    
por Andrew Case 15.05.2011 / 01:30

1 resposta

1

dê uma olhada aqui, estas são diretivas baseadas no sendmail que podem prevenir inundações e maus comportamentos, talvez isso ajude você a: link

Eu mesmo uso essas configurações:

    FEATURE('greet_pause',2)
    define('confTO_ICONNECT', '15s')dnl
    define('confTO_CONNECT', '3m')dnl
    define('confTO_HELO', '2m')dnl
    define('confTO_MAIL', '1m')dnl
    define('confTO_RCPT', '1m')dnl
    define('confTO_DATAINIT', '1m')dnl
    define('confTO_DATABLOCK', '1m')dnl
    define('confTO_DATAFINAL', '1m')dnl
    define('confTO_RSET', '1m')dnl
    define('confTO_QUIT', '1m')dnl
    define('confTO_MISC', '1m')dnl
    define('confTO_COMMAND', '1m')dnl
    define('confTO_STARTTLS', '2m')dnl
    define('confTO_IDENT', '0s')dnl
    define('confTO_RESOLVER_RETRANS', '7s')dnl
    define('confTO_RESOLVER_RETRY', '4')dnl
    define('confMAX_RCPTS_PER_MESSAGE', '15')dnl
    define('confMAX_DAEMON_CHILDREN','256')dnl
    define('confCONNECTION_RATE_THROTTLE','8')dnl
    define('confBAD_RCPT_THROTTLE', '1')dnl Sendmail v8.12+
    define('confQUEUE_LA', '10')dnl 
    define('confREFUSE_LA', '30')dnl 

Além disso, você pode procurar uma Implementação chamada greypit. Eu não estou realmente atualizado sobre esse tópico, mas o greypit deve ter limites de conexão base ip, talvez haja uma versão solaris por aí.

Outra maneira é a seguinte. Verifique se há grandes atividades ou logins falsos em seus registros e use a cláusula greet no acesso. Se você identificar um comportamento mal-intencionado, insira uma linha da seguinte maneira no seu acesso e gere novamente o seu acesso.db

GreetPause:bad.ip.dos.attacker.com            100

A partir de agora, cada solicitação do ip ou nome do host deve esperar 100 segundos antes de obter um helo.

Eu usei esse recurso ao contrário, mas ele também pode ser usado para bloquear conexões indesejadas.

O script que fez essas entradas era apenas um script do cron, mas importa-se com o bom trânsito e você tem que recriar manualmente o seu acesso.db:

#!/bin/sh
declare -a a
let count=0

accessmap="/tmp/access.test"
logfiles="/var/log/mail.log"
mailfile="/tmp/tmpmail.mail"
email="[email protected]"
## hole alle IP Eintraege aus sendmail access und packe sie in ein array mit prefix und postfix

for x in $(echo $(grep -e "^GreetP" $accessmap | cut -f 2 -d ":" | cut -f 1 -d " ")); do
        a[$count]=$(echo "^"$x"|");
        ((count++));
done


echo Number of elements: ${#a[@]} > $mailfile
#entferne whitespaces 
#entferne | am ende der Zeile

b=$(echo ${a[@]} | sed "s/ //g"| sed "s/|$//")

#nun steht in der Variable den string den wir zum filtern wollen!
#echo $b
buffer=0
buffer_changed=0

datum=$(date +%Y.%m.%d__%H:%M:%S)
for x in $(grep authid $logfiles |grep "AUTH=server"|cut -f 3 -d "[" | cut -f 1 -d "-" | sort | uniq |egrep -v -e "$b" | sed "s/ (may be forged)//"|sed "s/]//"|sed "s/, authid=/#/"
if [ $buffer -eq 0 ]; then
        buffer=1
        echo >> $accessmap
        echo "#Eintraege vom $datum" >> $accessmap
        echo >> $accessmap
        buffer_changed=1
fi

echo "GreetPause:$x"| sed "s/#/ \t\t0\t#/" >> $accessmap
done

if [ $buffer -eq 1 ]; then
        echo "Command: zgrep with filter $b" >> $mailfile
        echo  >> $mailfile
        echo  >> $mailfile
        echo  "accessmap GreetingPause:">> $mailfile
        cat $accessmap | grep -B 2 "GreetPause"  >> $mailfile
        echo  >> $mailfile
        mail -s "Acessmap changed" $email < $mailfile
fi
    
por 25.05.2011 / 00:11