Ir para o conteúdo
ou

Software livre Brasil

0 integrantes

Nenhum(a)

Red Hat Magazine

redirection forbidden: http://www.redhat.com/magazine/rss20.xml -> https://www.redhat.com/magazine/rss20.xml

Tela cheia Sugerir um artigo
 Feed RSS

torontux

5 de Maio de 2010, 0:00 , por Software Livre Brasil - | Ninguém está seguindo este artigo ainda.

SPF Sender Policy Framework no Qmail

27 de Abril de 2010, 0:00, por Software Livre Brasil - 0sem comentários ainda

O que é / para que serve?   A sigla significa "Sender Policy Framework", ou "Estrutura de Politicas de Remetente", é um sistema que evita que outros servidores de e-mail enviem emails não autorizados em nome de um domínio (sabe aqueles e-mails forjados? Pois é!). O SPF verifica no cabeçalho de internet se o SMTP (servidor de emails) utilizado para enviar a mensagem, está autorizado na relação de IP's que respondem pelo domínio do remetente. Também informa se o domínio autoriza ou não que outros IP's fora desta relação enviem emails em seu nome.

O SPF basicamente serve para dizer aos servidores de email espalhados pela Internet quais enderecos IP/servidores estao autorizados a enviar email (remetente) com o dominio designado.

   Assim, eu, como administrador do dominio exemplo.com.br, publicarei um registro SPF dizendo que os servidores 201.100.100.200 e 201.100.100.201 estao autorizados a enviar emails com remetentes @exemplo.com.br; quaisquer outros servidores tentando enviar emails como @exemplo.com.br são falsos, e tais emails devem ser rejeitados pelos MTA`s que tiverem o SPF implementado.

Trocando em miudos:

Quando alguém tentar manda um e-mail passando-se por um domínio, meu servidor Qmail vai verificar se o ip de origem tem a autorização de enviar e-mails desse domínio, caso não tenha, ele rejeita. Isso diminue muito os spams.

Mão na massa!
   teremos apenas 2 passos para implementar o SPF
  • configurar o servidor de DNS
  • configurar o Qmail
Configurando o servidor de DNS:
   Como já havia citado em outros posts é extreamente recomedável que você tenha um servidor de DNS em sua estrutura, você terá ganhos significativos em relação a performance. Caso seja o bind seu servidor adicione uma entrada do tipo TXT informando quais são os servidores que podem enviar e-mails desse domínio:

@               IN      TXT     "v=spf1 mx -all"

A sintaxe acima diz que apenas os servidores listados como MX do dominio estao autorizados a mandar email em nome do próprio, e que o registro é a "autoridade final" (-all), quer dizer, pode-se rejeitar a mensagem se não sair de algum MX do dominio. Para consultar digite:

host -t txt exemplo.com.br ou entre no nslookup, digite set type=txt e depois digite o domínio exemplo.com.br. Ambos os comandos tem o mesmo efeito!

Configurando o QMAIL:
   Como tudo no Qmail é um patch, este não poderia ser diferente. Não vou abordar aqui como aplicar patchs no Qmail tendo em vista que existem milhares de documentações sobre isso.

1 - Faça o download do patch, aplique e compile :
Site -- http://www.saout.de/misc/spf/qmail-spf-rc5.patch


Pronto!
Vamos agora criar os arquivos de configuração na pasta control do Qmail, eu geralmente uso a pasta /var/qmail/control.

spfbehavior
   Este arquivo é usado para habilitar o SPF, por default o valor é 0 (desabilitado), onde os valores vão de 0-6 conforme tabela:
 
echo "3" > /var/qmail/control/spfbehavior

0: Never do SPF lookups, don't create Received-SPF headers
1: Only create Received-SPF headers, never block
2: Use temporary errors when you have DNS lookup problems
3: Reject mails when SPF resolves to fail (deny)
4: Reject mails when SPF resolves to softfail
5: Reject mails when SPF resolves to neutral
6: Reject mails when SPF does not resolve to pass

Esse arquivo é o mais importante para o SPF funcionar tem que estar devidamente criado e com um valor dentro. Valores maiores que 3 são desaconselháveis.

spfrules
   Você pode criar uma linha com regras locais de uma forma parecida com uma "whitelist", exemplo:
   ip4:192.0.0.1/24  #Rede local
spfguess
   São as regras para os e-mails de domínios que não publicam regras SPF no DNS, exemplo:
v=spf1 a/24 mx/24 ptr ?all

spfexp
   É apenas o text que vai aparecer para o usuário caso o e-mail seja rejeitado:
     550 the expanded SPF explanation (#5.7.1)

Pronto!
Você já tem um servidor de e-mail com o SPF implementado. ;)

Leituras recomendadas:
http://wiki.qmailtoaster.com
http://www.unitednerds.org/thefallen/docs/index.php?area=Postfix&tuto=SPF
http://www.openspf.org/
http://www.saout.de/misc/spf/



QoS com HTB

27 de Abril de 2010, 0:00, por Software Livre Brasil - 0sem comentários ainda

    Essa semana estive procurando um tema para escrever baseado nas necessidades mais comuns de uma empresa, e por coincidência, precisei rever alguns scripts de controle de banda que havia criado. Como esse tema parece ser um pouco "misterioso" para alguns, decidi colocar algo aqui da maneira mais simples possível.
    Fiz uma síntese de alguns sites (colocarei os links no final) visando criar uma documentação menos formal e mais compreensível do assunto. Não abordaremos assuntos, tais como módulos de kernel e instalação pacotes tendo em vista que as distro atuais já vem com tudo habilitado nesse aspecto.
 
Em primeiro lugar, vamos a alguns conceitos básicos:

1 - Para funcionar o QoS tanto para download quanto para upload precisamos configurar as 2 placas de rede do servidor, pois só temos como tratar a entrega dos pacotes.
                      
         
2 - Basicamente, para criar o QoS você vai precisar mapear alguns pontos relacionados ao tráfego que será tratado:
  • Origem
  • Destino
  • Porta
  • Protocolo
    É possível criar regras através de TOS (Type Of Service, marcação de pacotes) para protocolos VoIP por exemplo, tendo em vista a utilização de milhares de portas aleatórias e a impossibilidade de mapeamento, contudo não vamos abordar neste post.

3 - O binário que executamos é o tc, ele vem dentro do pacote iproute2 (geralmente instalado por default)

Segue abaixo um exemplo de script todo comentado.


#!/bin/bash
 
# Primeiro apagamos qualquer regra de QoS das interfaces
# OBS: Se eh a primeira vez que vc executa vai aparecer um erro
#      mas eh normal, ele simplesmente diz que n existia regras.
  
/sbin/tc qdisc del dev eth0 root
/sbin/tc qdisc del dev eth1 root 
 
# Associa uma regra de enfileiramento (qdisc) HTB a interface eth0 (upload)
# e vincula a esta o manipulador "1:". Tal manipulador será usado em comandos
# abaixo para ajudar a criar a estrutura hierarquica. O "default 10" diz que
# todo trafego que nao estiver associado a uma classe especifica sera feito
# pela classe 10. 
     
tc qdisc add dev eth0 root handle 1: htb default 10

# Criando as classes com seus respectivos limites de banda...
# Essa é a classe mãe da interface, ou seja, é a classe com o
# total de banda, o total do seu link ou da sua placa de rede, da
# interface...
# aqui estou dizendo que o nosso link é de 2000kbps (2Mb)

tc class add dev eth0 parent 1: classid 1:1 htb rate 2000kbps

# Essas são as classes filhas, ou seja, onde você vai pre-definir varios 
# tipos de trafego. Vc vai segmentar seu link completo em pequenas fatias
# 
# rate = Velocidade da "fatia" ou seja, a banda garantida
# ceil = Transbordo, ateh onde vai caso tenhamos banda ociosa de outras classes
# prio = Prioridade de 1 a 7 , 1 mais alta e 7 a mais baixa
#
# OBS: A soma dos rates nao pode ultrapassar o link total 
 
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 500kbps ceil 800kbps prio 7

tc class add dev eth0 parent 1:1 classid 1:20 htb rate 500kbps ceil 1000kbps prio 6
 
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 500kbps ceil 1500kbps prio 2 
 
tc class add dev eth0 parent 1:1 classid 1:40 htb rate 500kbps ceil 2000kbps prio 1  
 
# Definimos em nossas classes filhas que caso exista banda disponivel em 
# outras classes concorrentes, existira o transbordo. Então é interessante
# que digamos ao SO o tempo para calculo de banda disponivel como segue abaixo
 
tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 5 # Colocamos 5 segundos
tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 5 # em todas as classes
tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 5
tc qdisc add dev eth0 parent 1:40 handle 40: sfq perturb 5 
 
# Vamos agora definir qual tipo de trafego vai por onde, vamos dizer quem
# usa quanto entende? ;)
# Criei essa variavel pra facilitar nossa vida tendo em vista que esse comando 
# vai se repetir todas as vezes
 
FILTER="tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32"
 
# Exemplo de regra por origem onde definimos que a maquina de ip 192.168.1.50
# vai fazer upload de 500kbps e caso exista banda disponível, vai fazer a 800kbps
 
$FILTER match ip src 192.168.1.50 flowid 1:10 (colocamos na classe 1:10)

# Exemplo de regra por porta de origem e destino onde o upload para essa 
# porta eh de 500kbps e caso exista banda disponivel 1Mb(colocamos na classe 1:20)  
 
$FILTER match ip sport 80 0xffff flowid 1:20  
$FILTER match ip dport 80 0xffff flowid 1:20
 
# Exemplo de regra por protocolo, nesse caso estamos enfileirando o protocolo GRE
# usado em VPNs pptp(colocamos na classe 1:30).
 
$FILTER match ip protocolo 47 0xff flowid 1:30

####################################################################
# Para realizar o QoS para os downloads vamos fazer as regras para 
# a outra interface eth1, vou apenas copiar as regras de cima alterando 
# a interface de rede. 
####################################################################
tc qdisc add dev eth1 root handle 1: htb default 10  

tc class add dev eth0 parent 1: classid 1:1 htb rate 2000kbps

tc class add dev eth0 parent 1:1 classid 1:10 htb rate 500kbps ceil 800kbps prio 7

tc class add dev eth0 parent 1:1 classid 1:20 htb rate 500kbps ceil 1000kbps prio 6
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 500kbps ceil 1500kbps prio 2
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 500kbps ceil 2000kbps prio 1

tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 5
tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 5
tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 5
tc qdisc add dev eth0 parent 1:40 handle 40: sfq perturb 5

FILTER="tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32"

$FILTER match ip src 192.168.1.50 flowid 1:10 (colocamos na classe 1:10)

$FILTER match ip sport 80 0xffff flowid 1:20

$FILTER match ip dport 80 0xffff flowid 1:20

$FILTER match ip protocolo 47 0xff flowid 1:30

# End
Pronto!! É isso...
Existe uma infinidade de documentações mais profundas sobre o assunto, contudo, este blog destina-se a facilitar as coisas. ;)

Seguem abaixo alguns links que usei como referência:

http://br-linux.org/tutoriais/001648.html
http://luxik.cdi.cz/~devik/qos/htb/
http://www.dicas-l.com.br/dicas-l/20050114.php



Script para apagar contas no QMAIL

27 de Abril de 2010, 0:00, por Software Livre Brasil - 0sem comentários ainda

    Tentando mais uma vez facilitar a vida dos administradores do Qmail, escrevi um script para apagar as contas dos usuários que não acessam seus e-mails durante um certo espaço de tempo. É um script simples e pequeno mas que ajuda muito na hora de fazer grandes "limpezas" em servidores.
   É muito comum ter em um servidor de e-mails contas inativas e tratando-se de servidores que armazenam milhares de contas, torna-se uma tarefa difícil (pra não dizer impossível) administrar isso. Particularmente não conheço nenhuma ferramenta no Qmail que gerencie este tipo de situação, contudo, temos o glorioso/poderoso SHELL SCRIPT pra resolver ;)



OBS: Se alguém conhece alguma ferramenta do Qmail para isso, por gentileza comente.



Antes de tudo devo explicar umas coisinhas básicas:

1 - O script foi desenvolvido para quem usa Vpopmail com Maildir e autenticação via CDB, pois todos os testes das contas baseam-se em dois arquivos chamados:

lastauth  -- Guarda a ultima autenticação do usuário;
vpasswd  -- Lista de usuários do domínio.

** No futuro talvez eu faça uma implementação para quem usa Vpopmail com MySQL.

2 - O script checa se a conta tem algum redirecionamento (os .qmail da vida), pois é natural que contas redirecionadas estejam a muito tempo sem acesso e pode ser que você queira manter o redirecionamento.

Vamos ao que interessa, segue abaixo o código comentado:

#!/bin/bash
#########################################
# Script para apagar contas no QMAIL                   #
# ---------------------------------------------------#
#  Autor: Toronto Garcez de Meneses Vercosa        #
#   Data: 10.03.2010                                               #
#########################################
#
# EXECUTE O SCRIPT ASSIM --> ./apaga_emails_antigos.sh
#
#
# Variaveis
#

RED="\033[01;31m"
GREEN="\033[01;32m"
FG_DEFAULT="\033[01;00m"
DATA_ATUAL=$(date +%s)
DOMINIO=$1
WHITE="\033[1;37m"

####################################################################
# Prazo de 6 meses (UNIX Time), altere para as suas necessidades
# usando o calculo de segundos, por exemplo:
#
# 3600 segundos(1 hora) * 24 = 86400 segundos(1 dia) * 30 (1 mes)
#
# No caso abaixo pegamos o valor de 1 mes (2592000 segundos) e multiplicamos
# por 6 que chegou no valor 15552000
#####################################################################
 
PRAZO=15552000 

#####################################################################
# coloque aqui o caminho para a sua arvore de dominios
##################################################################### 

PATH_DOMAINS=/home/vpopmail/domains/  # Depende da sua instalacao

#####################################################################
# coloque aqui o caminho para o aplicativo vdeluser do vpopmail
#####################################################################
VDELUSER=/var/qmail/vpopmail/bin/vdeluser

TAMANHO_GER=0

# Main

if [ $DOMINIO <> " " ]
  then
    if [ ! -e $PATH_DOMAINS$DOMINIO/vpasswd ]
       then
          echo "Este dominio nao existe!"
       else
          cat $PATH_DOMAINS$DOMINIO/vpasswd |grep -v "Postmaster"|grep -v "horde" |awk -F":" '{print $6}' |while read LINHAS
             do
                USUARIO=$(cat $PATH_DOMAINS$DOMINIO/vpasswd |grep $LINHAS -m 1 |awk -F":" '{print $1}')
                DATA_ARQUIVO=$(date +%s -r $LINHAS/lastauth)
                RESULTADO=`expr $DATA_ATUAL - $DATA_ARQUIVO`
             if  [ $RESULTADO -gt $PRAZO ]
                then
                  if [ -e $LINHAS/.qmail ]
                     then
                        echo -e Conta $USUARIO@$1 sem acesso a 6 meses $RED"REDIRECIONADA"$FG_DEFAULT
                   
                     else
                        TAMANHO_UNI=$(du -s $LINHAS |awk -F" " '{print $1}')
                        echo -e Conta $USUARIO@$1 sem acesso a 6 meses $GREEN "COMUM"$FG_DEFAULT Size...: $TAMANHO_UNI" KB"
                        TAMANHO_GER=`expr $TAMANHO_GER + $TAMANHO_UNI`
                        echo $TAMANHO_GER > /tmp/consumo_mail
                        $VDELUSER $USUARIO@$DOMINIO
                        echo -e ........................... $RED APAGADO $FG_DEFAULT
                  fi
          fi


            done
        echo -e $WHITE"Total de bytes liberados.............:"$(cat /tmp/consumo_mail)" KB" $FG_DEFAULT
        echo 0 > /tmp/consumo_mail
     fi

 else
    echo " "
    echo  "A sintaxe correta = ./apaga_emails_antigos.sh "
    echo " "
fi



Aplicando Patchs em Pacotes SRC.RPM

27 de Abril de 2010, 0:00, por Software Livre Brasil - 0sem comentários ainda

   Resolvi escrever algo sobre este assunto por causa do post anterior sobre a instalação do Qmail, onde utilizamos alguns pacotes "src.rpm" para a instalação do nosso MTA. Além disso, é muito comum precisarmos aplicar patchs em códigos-fonte e quando ele está "empacotado" para uma determinada distro, pode gerar uma certa confusão para o usuário.

  O processo no RedHat/CentOS e Fedora é bem simples! Siga os seguintes passos:



PASSO1 :

Instale o pacote com a sintaxe:

rpm -ivh pacote.src.rpm

Este comando colocará os arquivos dentro de uma pequena árvore de diretórios que vou explicar de forma rápida.

/usr/src/redhat/SPECS       --> Arquivo de especificações de compilação
/usr/src/redhat/SOURCES -->  Para onde vão os fontes e patchs
/usr/src/redhat/BUILD       -->  É para onde os fontes são extraídos para o processo de compilação
/usr/src/redhat/RPMS        -->  Para onde vão os pacotes construídos
/usr/src/redhat/SRPM        -->  Para onde vão os pacotes construídos também.

PASSO 2 :

Copie o patch para o diretório SOURCES com o seguinte comando:

cp arquivo.patch /usr/src/redhat/SOURCES/

PASSO 3 :

Depois edite o arquivo ".spec" que foi copiado para dentro do diretório /usr/src/redhat/SPECS, informando qual será o patch que será aplicado durante o processo de compilação. Para fazê-lo procure no arquivo por Patch onde você vai achar algo como isto:

Patch0:         qmailtoaster-1.3.1.patch.bz2
Patch1:         qmail-chkuser.patch.bz2


E adicione uma nova linha:

Patch2:         arquivo.patch

Depois procure pela seção %prep onde você vai achar algo parecido com isto:

%patch0 -p0
%patch1 -p1


E adicione uma nova linha:

%patch2 -p0

PASSO 4 :

Salve o arquivo e rode o rpmbuild com a seguinte sintaxe:

rpmbuild -ba SPECS/arquivo.spec

Pronto!!! O pacote vai ser gerando e colocado dentro do diretório RPMS, basta instalar e aproveitar!!



Instalação fácil do Qmail

27 de Abril de 2010, 0:00, por Software Livre Brasil - 0sem comentários ainda

   Conforme havia prometido, terminei o script para a instalação fácil e rápida de um servidor de e-mail completo, seguro, performático e flexível. O script foi preparado para instalar o qmailtoaster no redhat enterprise, contudo, acredito que funcionará muito bem no CentOS e provavelmente no Fedora.
 Utilizei alguns trechos de scripts feitos pelo próprio pessoal do QmailToaster corrigindo alguns bugs e implementando configurações adicionais.

LINK 1 PARA DOWNLOAD DO SCRIPT
http://www.4shared.com/file/246814941/5f6241c1/qmail_install101tar.html

LINK 2 PARA DOWNLOAD DO SCRIPT
http://www.brasilwebhost.com/torontux/qmail_install.1.01.tar.gz



Os seguintes serviços serão instalados automaticamente:

SMTP (Com autênticação)
IMAP/IMAP SSL --> Courier
POP3/POP3 SSL --> vpopmail
MySQL (Para o vpopmail)
Antivirus --> Clamav
Autoresponder (Para mensagens de férias)
Webmail --> Squirrel
SpamAssassin
Ezmlm --> (Listas)
Apache/PHP


OBS1: Lembre-se de deixar a máquina conectada na internet para a instalação, tendo em vista que todos os pacotes serão baixados automaticamente do site -- http://www.qmailtoaster.com/

OBS2: Para rodar o script é preciso ser o usuário root (O script verifica isso!)

OBS3: Apesar de tudo estar automatizado, algumas perguntas serão feitas como:

- Senha de root do MySQL
- Senha do usuário vpopmail do MySQL

Portanto lembre-se de definir isso previamente para não esquecer depois ;)

Baixe o pacote no link:
Descompacte ele em qualquer diretório, eu particularmente usei o /root/
Entre na pasta /root/qmail_install
Execute ./qmail_install.sh

Agora o script vai fazer uma série de perguntas pra você!

Serão testados:
  • Se o usuário é root;
  • conectividade com a internet;
  • instalação do bind.
É muito importante ter um servidor de DNS local por questões de desempenho e segurança.
Logo após estes testes iniciais o script perguntará se você pretende instalar as dependências. Esse passo é muito importante para o bom funcionamento do Qmail, digite "y" e aperte enter.
Todos os pacotes necessários serão selecionados e instalados automaticamente, basta apenas confirmar todas as vezes que o yum perguntar.

Além de RPM`s alguns pacotes Perl serão instalados e apesar do processo ser demorado (vai depender do seu link), é muito simples! Basta apenas confirmar todos os questionamentos.

Após instalar todas as dependências você precisa configurar o MySQL, tendo em vista que por padrão de instalação a senha de root está em branco.

Deseja configurar o MySQL?................... ( [n]/y )

Digite "y" e coloque a senha de root do banco e a senha da bases de dados vpopmail.

** SEM CONFIGURAR O MYSQL VOCÊ NÃO VAI CONSEGUIR ADICIONAR DOMÍNIOS **

O próximo passo é fazer o download dos fontes do qmail e instalar, o próprio script checa no site as versões atualizadas e faz os downloads. Após baixar tudo confirme a instalação de tudo e seu servidor de e-mail estará instalado!!

Abra um navegador e digite o seguinte endereço:

http:/ip do seu servidor/admin-toaster

User: admin
Pass: toaster



bem... o resto é com vcs! ;)