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