POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - FILTRO PARA CMAMAR O CLAMAV DIRETAMENTE DO POSTFIX
Publicado por Alessandro Dias 17/05/2005
[ Hits: 4.141 ]
Script adaptado de um script baixado, que controla o Clamav diretamente sem precisar usar o AMAVIS. Adaptado para registrar o IP do remetente de msgs com vírus, bloqueá-lo e Registrar em Relatorios/RESUMOS. Verifique no próprio script como intalá-lo.
#!/bin/sh
# ClamAV script; set a opcao ScanMail no clamav.conf
# by Deives Michellis "thefallen" - dmichellis@yahoo.com | thefallen@unitednerds.org
#
# Crie uma linha no master.cf com o formato:
#clamav unix - n n - - pipe
# flags=Rq user=clamav argv=/usr/libexec/postfix/clamav-filter.sh -f ${sender} -- ${recipient}
#
# e edite a linha do SMTP assim:
# smtp inet n - n - - smtpd
# -o content_filter=clamav:clamav
#
#
export PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games
#
# Config
#
INSPECT_DIR=/var/spool/filter
#SENDMAIL="/usr/sbin/sendmail -i "
SENDMAIL="/usr/bin/spamc -f -e /usr/sbin/sendmail -i "
MYHOSTNAME=`postconf -h myhostname`
REPORTHOST=`postconf -h myhostname`
#
# Exit codes <sysexits.h>
#
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
EX_DENIED=77
#
# Definicoes dos nomes temporarios
#
nome_arquivo=`date +%Y%m%d%H%M%S`
nome_arquivo=in.$$.$nome_arquivo
AVCMD="/usr/bin/clamdscan --disable-summary --stdout "
NOTIFY_VIRUS=yes
#NOTIFY_PORTMASTER=yes, no, resumo
NOTIFY_POSTMASTER=resumo
viruscan() {
VIRUS=`$AVCMD $nome_arquivo`
SAIDA=$?
VIRUS=`echo $VIRUS | cut -d" " -f2-`
if [ $SAIDA -eq 1 ]; then
postlog -t postfix/virus-filter message-id=$msgid reject: VIRUS from=\<$from\> to=\<$rcpts\> 2>/dev/null
if [ "$NOTIFY_VIRUS" = "yes" ]; then
echo "From: Virus Scanner <mailer-daemon@$MYHOSTNAME>
Subject: AVISO: Email rejeitado: VIRUS Detectado
To: $from
Seu email para ($rcpts) com assunto ($subj) foi rejeitado por conter virus.
--- AVISO: Seu IP serah bloqueado em 24horas!!! ---
Virus encontrados: $VIRUS
IP: $ip $ip2
Atualize seu Anti-virus e entre em contato com o administrador,
pelo endereco postmaster@rjo.ccom.eb.mil.br.
Caso vc tenha Excedido o tamanho do arquivo anexo, seu IP nao sera bloqueado.
Procure nao enviar msgs com anexo criptografado, para que o Anti-virus consiga trabalhar.
Equipe de Suporte - 2CTA
" | $SENDMAIL -f MAILER-DAEMON -- $from
fi
if [ "$NOTIFY_POSTMASTER" = "yes" ]; then
echo "From: Virus Scanner <mailer-daemon@$MYHOSTNAME>
Subject: Postmaster Copy: VIRUS Detectado
To: postmaster@$MYHOSTNAME
Um email de $from para ($rcpts) com assunto ($subj) foi rejeitado por conter virus.
Virus encontrados: $VIRUS
" | $SENDMAIL -f MAILER-DAEMON -- postmaster@$MYHOSTNAME
else
if [ "$NOTIFY_POSTMASTER" = "resumo" ]; then
DATA=`date +%d/%m/%Y-%H:%M:%S`
echo -e "- Data/Hora - $DATA - email id: $msgid\n De: $from Para: $rcpts\n Asunto:$subj\n Virus: $VIRUS\n Origem: $ip $ip2" \
>> /root/bin/Relatorios/RESUMO
fi
fi
##################### alterado por Cap Dias #######################
if [ "$VIRUS" != "Zip.ExceededFileSize FOUND" -a "$VIRUS" != "RAR.ExceededFileSize FOUND" -a "$VIRUS" != "Encrypted.Zip FOUND" ]; then
if [ "$ip" != "127.0.0.1" ]; then
EXISTE=`grep "$ip" /root/bin/ips_bloqueados`
if [ "$EXISTE" = "" -o "$EXISTE" = " " ]; then
#echo "$ip REJECT IP Bloqueado pelo Administrador!!!" >> /etc/postfix/ip-access
#postalias hash:/etc/postfix/ip-access
#---------------- IDENTIFICANDO MÁQUINAS CONHECIDAS -----------------#
case $MES in
10.67.4.30) echo -e "$ip - Utilizando Outlook - Bloqueado em $DATA - MX(EB.MIL.BR)" >> /root/bin/ips_bloqueados ;;
10.1.8.94) echo -e "$ip - Utilizando Outlook - Bloqueado em $DATA - MX(1RM.EB.MIL.BR)" >> /root/bin/ips_bloqueados ;;
10.133.3.4) echo -e "$ip - Utilizando Outlook - Bloqueado em $DATA - MX(7CTA.EB.MIL.BR)" >> /root/bin/ips_bloqueados ;;
10.56.84.58) echo -e "$ip - Utilizando Outlook - Bloqueado em $DATA - MX(6CTA.EB.MIL.BR)" >> /root/bin/ips_bloqueados ;;
10.45.1.80) echo -e "$ip - Utilizando Outlook - Bloqueado em $DATA - MX(5CTA.EB.MIL.BR)" >> /root/bin/ips_bloqueados ;;
10.78.4.99) echo -e "$ip - Utilizando Outlook - Bloqueado em $DATA - MX(4CTA.EB.MIL.BR)" >> /root/bin/ips_bloqueados ;;
10.25.108.50) echo -e "$ip - Utilizando Outlook - Bloqueado em $DATA - MX(1CTA.EB.MIL.BR)" >> /root/bin/ips_bloqueados ;;
10.67.14.1) echo -e "$ip - Utilizando Outlook - Bloqueado em $DATA - MX(CITEX.EB.MIL.BR)" >> /root/bin/ips_bloqueados ;;
10.67.104.29) echo -e "$ip - Utilizando Outlook - Bloqueado em $DATA - MX(SEF.EB.MIL.BR)" >> /root/bin/ips_bloqueados ;;
10.67.4.99) echo -e "$ip - Utilizando Outlook - Bloqueado em $DATA - MX(CCOM.EB.MIL.BR)" >> /root/bin/ips_bloqueados ;;
*) echo -e "$ip - Utilizando Outlook - Bloqueado em $DATA" >> /root/bin/ips_bloqueados ;;
esac
#--------------------------------------------------------------------#
cat /root/bin/ips_bloqueados | sort > /tmp/ips_bloqueados.tmp
cp -f /tmp/ips_bloqueados.tmp /root/bin/ips_bloqueados
rm -f /tmp/ips_bloqueados.tmp
sed -e "/#IPS_REJEITADOS/a\ \$IPTABLES -A INPUT -j REJECT -s $ip -p tcp --dport 25\\" /etc/rc.d/init.d/iptables > /tmp/iptables.tmp
cp -f /tmp/iptables.tmp /etc/rc.d/init.d/iptables
rm -f /tmp/iptables.tmp
# Restarta o IPTABLES
/etc/rc.d/init.d/iptables start
fi
else
EXISTE=`grep "$ip2" /root/bin/ips_bloqueados`
if [ "$EXISTE" = "" -o "$EXISTE" = " " ]; then
echo -e "$ip2 - Utilizando Webmail - Bloqueado em $DATA" >> /root/bin/ips_bloqueados
cat /root/bin/ips_bloqueados | sort > /tmp/ips_bloqueados.tmp
cp -f /tmp/ips_bloqueados.tmp /root/bin/ips_bloqueados
rm -f /tmp/ips_bloqueados.tmp
sed -e "/#IPS_REJ_WEBMAIL/a\ \$IPTABLES -A INPUT -j REJECT -s $ip2 -p tcp -m multiport --dport 25,134 \# webmail\\" /etc/rc.d/init.d/iptables > /tmp/iptables.tmp
cp -f /tmp/iptables.tmp /etc/rc.d/init.d/iptables
rm -f /tmp/iptables.tmp
sed -e "/#IPS_BLOQUEADOS/a\ deny from $ip2\\" /etc/apache/conf/httpd.conf > /tmp/httpd.conf.tmp
cp -f /tmp/httpd.conf.tmp /etc/apache/conf/httpd.conf
rm -f /tmp/httpd.conf.tmp
fi
fi
fi
###################################################################
exit 0
fi
############# Modificado pelo Cap Dias #########################
echo "
-------------------------------------------
Mensagem escaneada, nenhum vírus encontrado.
Anti-vírus ClamAV - 2CTA - Div Op - SGRT" >> $nome_arquivo
################################################################
}
#
# Clean up when done or when aborting.
#
trap "rm -rf $nome_arquivo*" 0 1 2 3 15
#
# Start processing.
#
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }
cat >$nome_arquivo || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }
#head -n 100 $nome_arquivo >> /tmp/teste
#echo "---------------------------" >> /tmp/teste
from=$2
if [ "$from" != "--" ]; then
shift
else
$from=""
fi
shift ; shift
dominio=`echo $from | cut -d"@" -f2`
email=`echo $from | cut -d"@" -f1`
subj=`head -n 200 $nome_arquivo | grep -i "^Subject:" | cut -d":" -f2- | head -n 1`
msgid=`head -n 200 $nome_arquivo | grep -i "^message-id" | cut -d: -f 2- | sed 's/^ *//' | head -n 1`
##################### alterado por Cap Dias #######################
host=`head -n 10 $nome_arquivo | grep -i "Received: from" | cut -d "[" -f 2 | cut -d "]" -f 1`
ip=`echo $host | cut -d " " -f 1` # pega apenas um IP
ip2=`echo $host | grep "Received" | cut -d " " -f 3`
if [ "$ip2" = "from" ]; then
ip2=`echo $host | grep "Received" | cut -d " " -f 4`
fi
###################################################################
saida="-f $from -- $@"
rcpts=$@
viruscan
$SENDMAIL $saida <$nome_arquivo
exit 0
Instalando BeEF Framework no Ubuntu
Kernel 4.0 para Ubuntu, Linux Mint, Lubuntu e derivados
Enviar via FTP todos as pastas / sub-pastas e arquivos, a partir do diretorio de origem inclusive
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Ubunto não reconhece rede ethernet (0)
Secure boot, artigo interessante, nada técnico. (3)
Instalação dualboot Windows 11 e Debian 13 (11)









