#!/bin/sh dominio="@i-hunter.net" main() { clear echo "======= Gerenciamento auxiliar do MTA QMAIL =======" echo "===================================================" echo "Opcoes:" echo echo "1 - Listar todas as mensagens na fila." echo "2 - Listar todas as mensagens na fila Remota." echo "3 - Listar todas as mensagens na fila Local." echo "4 - Mostrar STATUS das filas do Qmail." echo "5 - Ver o conteudo de uma mensagem especifica." echo "6 - Apagar uma mensagem especifica da fila." echo "7 - Apagar mensagens com um Assunto (Subject: ) especifico." echo "8 - Apagar mensagens com Remetente (From: ) especifico." echo "9 - Apagar mensagens com Destinario (To: ) especifico." echo "10 - Apagar TODAS as mensagens das filas do Qmail." echo "11 - Sair." echo "15 - Avancado." echo -n "Qual opcao voce deseja? " read opcao case $opcao in 1) listar_todas ;; 2) listar_r ;; 3) listar_l ;; 4) status ;; 5) ver_msg ;; 6) apaga_msg ;; 7) subject ;; 8) from ;; 9) to ;; 10) apagar_todas ;; 11) exit ;; 15) menu_avancado ;; *) echo "Opcao desconhecida." ; echo ; main ;; esac } ###### funcoes auxiliares restart_qmail() { svc -k /service/qmail svc -u /service/qmail } status () { echo "" echo "Status atual do Qmail: " echo "" sleep 2 fila-qmail -s echo "" /var/qmail/bin/qmail-qstat echo "" svstat /service/qmail echo "" } remotas_locais() { echo "" echo -n " Mensagens Remotas ou Locais? [R/L]: " read ROL case ${ROL} in [Rr]) ROLRESP="R" ;; [Ll]) ROLRESP="L" ;; *) remotas_locais ;; esac } #### funcoes principais listar_todas() { echo "" echo "Listando as mensagens nas filas Remota e Local: " fila-qmail -l echo "" } listar_r() { echo"" echo "Listando as mensagens na fila Remota: " fila-qmail -R echo "" } listar_l() { echo "" echo "Listando as mensagens na fila Local: " fila-qmail -L echo "" } ver_msg() { echo "" echo " O numero de Identificacao da mensagem - Msg ID - pode ser" echo "identificado como o primeiro numero que precede um email," echo "quando as mensagens nas filas sao listadas." echo "" echo " Por exemplo:" echo " 762178 [14, R] - O primeiro numero, fora dos parenteses," echo " indica o numero da mensagem. Nesse caso, 762178." echo "" echo -n " Deseja visualizar o conteudo da mensagem numero: " read NROMSG echo "" fila-qmail -v${NROMSG} | less } apaga_msg() { echo "" echo " O numero de Identificacao da mensagem - Msg ID - pode ser" echo "identificado como o primeiro numero que precede um email," echo "quando as mensagens nas filas sao listadas." echo "" echo " Por exemplo:" echo " 762178 [14, R] - O primeiro numero, fora dos parenteses," echo " indica o numero da mensagem. Nesse caso, 762178." echo "" echo -n " Deseja apagar qual mensagem da fila? " read NROMSG fila-qmail -d${NROMSG} restart_qmail status } subject() { echo "" echo " Para maior praticidade, a pesquisa sera Case Insensitive," echo "nao diferenciando letras maiusculas de letras minusculas." echo "" echo -n " Deseja apagar todas as mensagens com qual Assunto [Subject: ] " read ASSUNTO remotas_locais fila-qmail -c -l | \ grep -i -B 4 "${ASSUNTO}" | \ grep ", ${ROLRESP}" | awk '{print "echo \"Apagando mensagem "$1"\" ; " "fila-qmail -d"$1}' > /tmp/XyZkPPty sh /tmp/XyZkPPty COUNT="`cat /tmp/XyZkPPty | wc -l`" rm -f /tmp/XyZkPPty echo "" echo " Foram apagadas ${COUNT} mensagens que continham" echo "a expressao '${ASSUNTO}' como parte do Assunto..." echo "" echo "Reiniciando o Qmail..." restart_qmail status } from() { echo "" echo " Para maior praticidade, a pesquisa sera Case Insensitive," echo "nao diferenciando letras maiusculas de letras minusculas." echo "" echo -n " Deseja apagar todas as mensagens de qual Remetente [From: ] " read FROM remotas_locais fila-qmail -c -l | \ grep -i -B 2 "${FROM}" | \ grep ", ${ROLRESP}" | awk '{print "echo \"Apagando mensagem "$1"\" ; " "fila-qmail -d"$1}' > /tmp/XyZkPPty sh /tmp/XyZkPPty COUNT="`cat /tmp/XyZkPPty | wc -l`" rm -f /tmp/XyZkPPty echo "" echo " Foram apagadas ${COUNT} mensagens que continham" echo "a expressao '${FROM}' como parte do endereco do Remetente..." echo "" echo "Reiniciando o Qmail..." restart_qmail status } to() { echo "" echo " Para maior praticidade, a pesquisa sera Case Insensitive," echo "nao diferenciando letras maiusculas de letras minusculas." echo "" echo -n " Deseja apagar todas as mensagens de qual Destinatario [To: ] " read TO remotas_locais fila-qmail -c -l | \ grep -i -B 3 "${TO}" | \ grep ", ${ROLRESP}" | awk '{print "echo \"Apagando mensagem "$1"\" ; " "fila-qmail -d"$1}' > /tmp/XyZkPPty sh /tmp/XyZkPPty COUNT="`cat /tmp/XyZkPPty | wc -l`" rm -f /tmp/XyZkPPty echo "" echo " Foram apagadas ${COUNT} mensagens que continham" echo "a expressao '${TO}' como parte do endereco do Remetente..." echo "" echo "Reiniciando o Qmail..." restart_qmail status } apagar_todas() { echo "" echo " Todas as mensagens de todas as filas do QMail serao apagadas." echo "" echo -n " Deseja mesmo continuar? [S/N] " read SIMNAO case ${SIMNAO} in [Ss]) fila-qmail -D && \ restart_qmail && \ status ;; *) echo "" echo "Saindo..." ;; esac } virus_dat_version() { echo "" /usr/local/bin/uvscan --version | grep -v "EVALUATION" echo "" } ############## Menu Avancado ############### ## Nao tem nada de Avancado mas nao deve ## ## ser usado por quem nao sabe como ele ## ## funciona... enfim, leiam as man pages ## ## do svc, do svscan, svstat e o resto do ## ## Daemontools inteiro... ## ############################################ menu_avancado() { clear echo "===== Controle dos servicos de e-mail =====" echo "" echo "Servico qmail-send [modulo nivel 1]:" echo "" echo "01 - Matar o qmail-send." echo "02 - Iniciar o qmail-send." echo "03 - Reprocessar as filas de email." echo "04 - STATUS do qmail-send e das filas de e-mail." echo "05 - Reiniciar o Qmail [qmail-send]." echo "06 - Verificar os logs do qmail-send." echo "07 - Verificar os logs do qmail-queue." echo "" echo "" echo "Servico Qmail SMTP:" echo "10 - Matar o daemon SMTP." echo "11 - Iniciar o daemon SMTP." echo "12 - STATUS do daemon SMTP." echo "13 - Reiniciar o daemon SMTP." echo "14 - Verificar os logs do SMTP." echo "" echo "" echo "Servico Qmail POP3:" echo "20 - Matar o daemon POP3." echo "21 - Iniciar o daemon POP3." echo "22 - STATUS do daemon POP3." echo "23 - Reiniciar o daemon POP3." echo "24 - Verificar os logs do POP3." echo "" echo "" echo "Anti Virus:" echo "30 - Logs dos ultimos virus encontrados." echo "31 - Logs do qmail-queue junto ao antivirus." echo "32 - Apagar todas as mensagens com virus do Quarantine." echo "33 - Apagar todas as mensagens com virus verificadas agora." echo "34 - Contar virus encontrados." echo "35 - Mostrar as definicoes (dat-version) de virus atuais." echo "" echo "" echo "Servico Courier-IMAP:" echo "36 - Para o servico IMAP (caso instalado)." echo "37 - Inicia o servico IMAP (caso instalado)." echo "38 - Verificar os logs do IMAP (caso instalado)." echo "" echo "" echo "50 - Sair." echo -n "Qual opcao voce deseja? " read opctao case $opctao in 01) kill_qsend ;; 02) up_qsend ;; 03) alrm_queue ;; 04) status ;; 05) qmailrestart ;; 06) qsend_logs ;; 07) queue_logs ;; 10) kill_smtp ;; 11) up_smtp ;; 12) status_smtp ;; 13) restart_smtp ;; 14) qsmtp_logs ;; 20) kill_pop3 ;; 21) up_pop3 ;; 22) status_pop3 ;; 23) restart_pop3 ;; 24) qpop3_logs ;; 30) virus_log ;; 31) queue_logs ;; 32) rm_quarantine ;; 33) rm_working ;; 34) virus_count ;; 35) virus_dat_version ;; 36) stop_imapd ;; 37) start_imapd ;; 38) vlogs_imapd ;; 50) exit ;; *) echo "Opcao desconhecida." ; echo ; main ;; esac } kill_qsend() { echo "" echo -n " Matando o Qmail [qmail-send]..." svc -k /service/qmail echo " OK" echo "" exit } up_qsend() { echo "" echo "Iniciando o Qmail [qmail-send]..." svc -u /service/qmail echo " O qmail-send foi iniciado e esta supervisionado." echo "" exit } alrm_queue() { echo "" echo " Reprocessando todas as mensagens nas filas Locais e Remotas" svc -a /service/qmail echo " Pronto." exit } qmailrestart() { echo "" echo -n " Forcando a reinicializacao do Qmail... " restart_qmail echo "OK" echo "" echo " O Qmail foi reiniciado e deve estar no ar,". echo " verifique o status do MTA:" status exit } qsend_logs() { echo "" echo -n " Quantas linhas de log do Qmail voce deseja analisar? " read linhaslog echo "" echo " Analisando as ultimas ${linhaslog} linhas dos logs do qmail: " echo "" tail -${linhaslog} /var/log/qmail/current exit } queue_logs() { echo "" echo -n " Quantas linhas de log do qmail-queue voce deseja analisar? " read logqueue echo "" echo " Analisando as ultimas ${logqueue} linhas dos logs do qmail-queue: " echo "" tail -${logqueue} /var/spool/qmailscan/qmail-queue.log exit } kill_smtp() { echo "" echo -n " Matando o Qmail SMTP [qmail-smtpd]..." svc -k /service/smtpd echo " OK" echo "" exit } up_smtp() { echo "" echo "Iniciando o Qmail SMTP [qmail-smtpd]..." svc -u /service/smtpd echo " O qmail-smtpd foi iniciado e esta sendo supervisionado." echo "" exit } status_smtp() { echo "" echo " Status do daemon SMTP [qmail-smtpd]: " svstat /service/smtpd exit } restart_smtp() { echo "" echo " Forcando a reinicializacao do daemon SMTP [qmail-smtpd]... " kill_smtp up_smtp } qsmtp_logs() { echo "" echo -n " Quantas linhas de logs do qmail-smtpd voce deseja analisar? " read smtplogs echo " Analisando as ultimas ${smtplogs} linhas de logs do qmail-smtpd: " echo "" tail -${smtplogs} /service/smtpd/log/main/current exit } kill_pop3() { echo "" echo -n " Matando o Qmail POP3 [qmail-pop3d]..." svc -k /service/pop3d echo " OK" echo "" exit } up_pop3() { echo "" echo "Iniciando o Qmail POP3 [qmail-pop3d]..." svc -u /service/pop3d echo " O qmail-pop3d foi iniciado e esta sendo supervisionado." echo "" exit } status_pop3() { echo "" echo " Status do daemon POP3 [qmail-pop3d]: " svstat /service/pop3d exit } restart_pop3() { echo "" echo "Forcando a reinicializacao do daemon POP3 [qmail-pop3d]... " kill_pop3 up_pop3 } qpop3_logs() { echo "" echo -n " Quantas linhas de logs do qmail-pop3d voce deseja analisar? " read pop3logs echo " Analisando as ultimas ${pop3logs} linhas de logs do qmail-pop3d: " echo "" tail -${pop3logs} /service/pop3d/log/main/current exit } virus_log() { echo "" echo -n " Quantas linhas de logs de virus encontrados voce deseja analisar? " read viruslog echo " Analisando as ultimas ${viruslog} linhas de logs sobre virus encontrados:" echo "" tail -${viruslog} /var/spool/qmailscan/viruses.log exit } rm_quarantine() { echo "" echo " Apagando todos os emails armazenados em quarentena... " find /var/spool/qmailscan/quarantine/ -name "*${dominio}*" -exec rm -f {} \; echo " Apagados!" exit } rm_working() { echo "" echo " Apagando todas as mensagens verificadas por virus ha pouco..." find /var/spool/qmailscan/working/ -name "*${dominio}*" -exec rm -f {} \; echo " Apagados!" exit } virus_count() { echo "" echo " Total de virus interceptados segundo os logs recentes: " cat /var/spool/qmailscan/viruses.log | grep uvscan | wc -l echo " Virus!" exit } stop_imapd() { echo "" if [ -x /usr/local/etc/rc.d/imapd.sh ]; then echo -n "Parando Courier-IMAP..." /usr/local/etc/rc.d/imapd.sh stop echo " OK" else echo "O courier-imap nao parece estar corretamente" echo "configurado via ports... Saindo." fi echo "" exit } start_imapd() { echo "" if [ -x /usr/local/etc/rc.d/imapd.sh ]; then echo -n "Iniciando Courier-IMAP..." /usr/local/etc/rc.d/imapd.sh start echo " OK" else echo "O courier-imap nao parece estar corretamente" echo "configurado via ports... Saindo." fi echo "" exit } vlogs_imapd() { echo "" echo -n " Quantas linhas de logs do courier-imap voce deseja analisar? " read imaplog echo " Analisando as ultimas ${imaplog} linhas de logs do courier-imap:" echo "" grep -i "imapd:" -C1 /var/log/maillog | tail -${imaplog} echo "" exit } # Inicia esse programa em shell main