IP Rotativo no CPanel + Exim [Solução Definitiva]

ip-rotativo-cpanel-exim
  • 28 de Set de 2014
  • 6541 Visualizações
  • 26 Comentários

Apresento para vocês meus caros colegas a solução definitiva para realizar rotação de IPs no servidor de hospedagem de sites com painel CPanel + Exim.

Antes de disponibilizar o código, eu testei por quase 1 ano. Sendo assim, garanto que realmente funciona. smiley

Bem, primeiro quero deixar bem claro algumas situações:

  • Esta solução é de minha autoria e testada no CPanel 11, Exim 4 e servidor linux CentOS 6. O uso do script que estou disponibilizando é de sua total responsabilidade.
  • Eu sou totalmente contra SPAM e as regras de boas maneiras de uso de e-mail devem ser obedecidas.
  • O intuito deste script é fazer com que o servidor trabalhe com melhor performance e não deve ser usado para praticar SPAM.

Se você estiver com a necessidade de rotacionar IPs no seu servidor, continue lento este artigo que você irá aprender sobre:

  • O que preciso saber antes de iniciar a configuração de rotação de IPs?
  • Por que devo rotacionar IPs em um servidor?
  • Precisa fazer alguma alteração de configuração no CPanel?
  • Como configurar o meu range de IPs no script de rotação?
  • Como posso definir o intervalo de tempo de rotação?

Você deve ficar ciente que a rotação de IPs não isenta as demais configurações do servidor para ter um bom nível de entrega de e-mail. Ou seja, ainda será necessário configurar corretamente o rDNS, regras de SPF e DKIM.

A união de todas essas configurações aliada a rotação de IPs, certamente você terá sucesso nas entregas de e-mail do seu servidor.

Ah! Antes que eu me esqueça, você terá, obrigatoriamente, acesso nível root via terminal ao servidor. 

Por que devo rotacionar IPs em um servidor?

Vamos supor que você envie 1.000 e-mails por hora e que o servidor possui apenas 1 IP. Logo, este único IP vai receber uma carga muito alta de envio, cerca de 24.000 por dia!

Quando se trata de um número baixo, não há problema algum. Na verdade nem precisa se preocupar.

Agora, imagine um servidor com 100 sites hospedados e cada site enviando 500 e-mails por hora. Teremos uma sobrecarga em um único IP muito grande, não acha?

Mas, se você adicionar mais um IP neste mesmo servidor, ficando 2, logo 1.000 disparos de e-mails serão rateados entre 2 IPs, ficando 500 para cada, teoricamente.

Por que teoricamente? Por que o script que disponibilizei para você possui uma função randômica para escolher o IP. Sendo assim, há possibilidade de ser sorteado mais um IP do que o outro e vice-versa. Dessa forma, o rateamento de disparo não é exato, e nem deve ser.

Mas você deve estar se perguntando qual seria o problema de enviar muitos e-mails de um único IP levando em consideração que estes e-mails seriam realmente autênticos e excluindo a possibilidade de SPAM.

Ora... ora! Os maiores servidores de e-mail como GMail, Hotmail, Yahoo, etc., possuem um limite de recebimento. Sendo assim, se você disparar uma carga alta de e-mail sob um único IP, e esta quantidade ultrapassar os limites estabelecidos por estes servidores, é capaz, ou quase certeza, de que eles irão ignorar os e-mails que ultrapassaram o limite.

E quando isso acontece meu amigo, eles ficarão sempre de olho nos seus envios, suspeitando-os! O Hotmail é mestre nisso.

Mas, mesmo rotacionando IPs você pode ultrapassar estes limites a depender do seu volume de envio.

Os servidores que citei, podem, também, bloquear todo o seu bloco de IP com essas ações.

Ou seja, você nunca estará 100% seguro, mas o que a rotação de IP faz é tentar amenizar estes futuros problemas. Digo isso por experiência própria. frown

Configurando o CPanel

Antes de mais nada, você precisa fazer algumas configurações (calma, coisa simples!) no CPanel.

1) Desativar a opção Send mail from account’s dedicated IP address
2) Ativar a opção Reference /etc/mailhelo for outgoing SMTP HELO
3) Ativar a opção Reference /etc/mailips for outgoing SMTP connections

Para alterar essas opções, acesse o seu WHM e localize no menu a esquerda a opção Service Configuration > Exim Configuration Manager.

Feito isso, no segundo menu horizontal, selecione Domain and IPs. As opções serão exibidas.

Para entender mais sobre essas configurações, acesse este link na documentação do CPanel.

A tão esperada solução definitiva de rotação de IPs para servidor CPanel + Exim!

Veja agora sem mais rodeios...

#!/bin/bash
#script to change the ip of outgoing e-mail exim
#you must add a line in crontab 
#*/15 * * * * sh /your_path/eximrandomips.sh
#powered by Tiago Matos - web developer :: www.tiagomatos.com

#path
path=/etc/mailips

#ip list
ips=("XXX.XXX.XXX.XXX" "XXX.XXX.XXX.XXX")

#read current ip
mailips=`head -n 1 ${path}`
current_ip=${mailips##*: }

#delete current ip of ips array
for i in ${!ips[@]}; do
    if [ "${ips[$i]}" == ${current_ip} ]; then
        unset ips[$i]
    fi
done

#shuffle ips
ips_shuf=($(shuf -e ${ips[*]}))

#write new ip in mailips
echo "*:" ${ips_shuf[0]} > ${path}

Bom, aí está o script completo. É isso mesmo! Acredite! É o script completo... laugh

Na linha 08, eu determino o caminho (/etc/mailips) do arquivo que o CPanel usa para ler as personalizações de IPs de cada domínio hospedado no servidor. Mas neste caso, utilizei o critério global para todos os domínios.

A linha 11 é onde você deve mexer. Coloque os seus IPs seguindo essa sintaxe ("ip01" "ip02" "ip03" ...). Liste quantos IPs desejar, mas desde que eles existam no seu servidor.

A linha 14 e 15, eu faço a leitura do IP que já está em uso para que o script não sorteie novamente este mesmo IP.

Da 18 à 22, eu excluo da lista de IPs o IP usado atualmente.

A linha 25 é onde faço o sorteio do novo IP.

E por fim, na linha 28, eu imprimo o novo IP no arquivo citado na linha 08, o mailips.

E agora, o que faço com este arquivo?

Após configurado, salve o arquivo em um diretório seguro no seu servidor com o nome "eximrandomips.sh", sem as aspas.

E o intervalo de rotação?

Simples, basta você adicionar nas suas regras cron a seguinte linha:

*/15 * * * * sh /your_path/eximrandomips.sh

Neste caso, estou dizendo a minha tarefa cron, que execute o script de 15 em 15 minutos (*/15).

Lembre-se também de configurar o caminho completo do script. Se por exemplo você salvou o arquivo no diretório /root, ficará assim:

*/15 * * * * sh /root/eximrandomips.sh

Fácil não? Mamão com açúcar! surprise

E você tem uma solução melhor? Tem alguma dúvida/sugestão? Por favor, comente para que este post fique mais atrativo. Isso será bastante enriquecedor para o tema, te garanto!

Github: https://github.com/tiagomatosweb/ip-rotativo-cpanel-exim

TAGS: rotação de ip, cpanel, exim, tiagomatosweb

Deixe um comentário


26 Comentários

    • Fiz alguns teste e deram erro:

      head: cannot open `/etc/mailips' for reading: Permission denied
      /home/usuario/eximrandomips.sh: line 18: [: xxx.xxx.xxx.xxx: unary operator expected
      /home/usuario/eximrandomips.sh: line 18: [: xxx.xxx.xxx.xxx: unary operator expected
      /home/usuario/eximrandomips.sh: line 27: /etc/mailips: Permission denied

      • O erro é claro aí, "Permission denied". Você precisa dar permissão de escrita no arquivo.

        • e como eu daria permissão? obrigado pela ajuda!

          • Fala jovem, permissão de arquivos é o segredo o linux. Aconselho dá uma lida aqui https://www.centos.org/docs/4/html/rhel-sbs-en-4/s1-navigating-ownership.html

            • Opa Tiago. Apliquei o: chmod 777 /etc/mailips E o erro continua: /home/usuario/eximrandomips.sh: line 28: /etc/mailips: Permission denied

              • Verifique se o owner and group são root.

    • kkkkkkk, outra dúvida...

      tenho apenas 1 domínio, no qual vou usar para fazer uns testes de email marketing...
      salvei o arquivo na pasta local do domínio, então o caminho ficaria dessa forma correto? /public_html/eximrandomips.sh
      daí criei o cron apontando pra esse caminho.

      no caso se tivesse 2 domínios? eu teria que criar em cada dominio o CRON?

      obrigado MAIS UMA VEZ :)

      • Fala Fabricio, a regra de rotação é independente de domínio. Ela é uma regra pra o seu servidor.  Recomendo salvar este arquivo numa pasta inacessível pelo browser, pois você precisa dar permissão de escrita no arquivo e se você deixar público, qualquer um poderá escrever no seu arquivo.

    • outra dúvida que parece boba, mas ali na linha 14 onde se parece uma crase, é realmente uma crase?
      ou é um ' ou " ou ` ?

      • Isso, uma crase!

    • amigo, belo tuto.

      tenho uma dúvida, a respeito do SPF, eu precioso alterar no "Advanced Zone Editor"?

      exemplo:
      no meu está assim:

      v=spf1 +a +mx +ip4:XXX.XXX.XXX.XXX +ip4:XXX.XXX.XXX.XXX ~all

      eu preciso adicionar todos os IPS tbm nessa linha?

      v=spf1 +a +mx +ip4:XXX.XXX.XXX.XXX +ip4:XXX.XXX.XXX.XXX +ip4:XXX.XXX.XXX.XXX +ip4:XXX.XXX.XXX.XXX +ip4:XXX.XXX.XXX.XXX +ip4:XXX.XXX.XXX.XXX +ip4:XXX.XXX.XXX.XXX ~all

      obrigado pela ajuda!
      parabéns!

      • Olá Fabricio, sim você precisa adicionar todos os seus IP´s na regra de SPF.

    • Olá Tiago, Obrigado pela solução e quero colocar em prática! Mas me surgiu uma dúvida. No caso terei que alterar alguma coisa no DNS??? exemplo meus clientes que usam o IP principal no DNS avançado registro.br por exemplo, não precisa mexer nesse DNS correto? Seria apenas para envio esse script. Sei que a pergunta parece ser boba mas, prefiro perguntar =) Obrigado pela Solução Allan Almeida http://www.fastspeed.com.br

      • Olá Allan,

        Não precisa mexer no DNS não. Mas você tem que configurar seus IP´s para responderem certinho pro servidor (rDNS).

    • Thiago, boa tarde. Possuo um servidor com 50 IPs fazendo a rotação conforme seu tutorial bem feito. Parabéns pela iniciativa! Preciso de uma dica, entre os 50 IPs, voce me recomenda enviar de minuto em minuto, ou seja o mesmo IP poderá ser usado novamente apos 50 minutos ou posso dobrar para 2 minutos e este IP ser sorteado novamente daqui a 1h40min? Deu pra entender? Detalhe: Otimizei o servidor para enviar praticamente em tempo real, o volume de mensagens é de aproximadamente 100 mil emails por hora. Inclusive estou providenciando a compra de mais 50 IPs junto ao Datacenter para ficar com 100 IPs limpos de blacklist.

      • Olá Erivaldo, show de bola! O complicado, de acordo com meus estudos (não acredito 100% nisso...kkk ), é que deveremos encontrar uma média. Por exemplo: quando você disparar um e-mail e caiu no hotmail ele vai buscar toda a sua rede e vai saber quantos IP´s você tem. Daí ele vai estudar a sua frequência. Já vi casos do hotmail bloquear o IP limpo por que outro IP da mesma faixa estava sujo... em fim! O ideal é encontrar a sua média, mas eu começaria arriscando na sua primeira ideia de 50/50min.



        Lembre-se que isso não existe receita de bolo... Espero ter ajudado de qualquer forma!

    • Olá Tiago, preciso de sua ajuda, como sou só um curioso inteligente, me diga aonde mudar o script, não entendi esta parte, é através do Whm, ou tenho que acessar meus arquivos e alterar direto na pasta, ou então criar o script e inserir na pasta root??? Desculpe minha ignorancia, obrigado. Att, Frederico Braga

      • Olá Frederico, você tem que ter acesso root ao servidor. Você possui?

    • Fala amigo,

      após usar sua solução, recebo o seguinte retorno nos e-mails que envio:

      450 4.7.1 Client host rejected: cannot find your hostname, [xxx]: retry timeout exceeded

      Poderias me dar uma mão com isso?

      • Você fez as alterações no WHM?

    • Boa noite Tiago esse script eu posso colocar depois o interspire

      • Sim, o script não se correlaciona com o software!

    • olá, fiz as configurações no WHM: 1) Desativar a opção Send mail from account’s dedicated IP address 2) Ativar a opção Reference /etc/mailhelo for outgoing SMTP HELO 3) Ativar a opção Reference /etc/mailips for outgoing SMTP connections onde vejo as opções: Domain and IPs. ??? O que faço nelas? Depois disso, fiz a alteração no arquivo e ativei o cron, joguei no site no endereço corereto, mas não deu certo..

      • Olá Forato, a opção "Domain and IPs" é para você saber o range de IP´s do seu servidor. O cron, você insere no root, pois isso é uma tarefa do servidor e não de um usuário.

    • Ola.

      Normalmente os MX verificam o volume de envios pelo host e nao pelo IP, veja abaixo um exemplo de mensagem que aparece em meu servidor, esta mensagem apareceu enquanto eu testava a utilizacao de subdominios vinculados a IPs diferentes, que nao deu muito certo.

      Domain fozhost.info has exceeded the max emails per hour (450/300 (150%)) allowed. Message discarded.

      Atualmente para resolver os problemas com envios eu uso 1 dominio/ip e configuro o exim para alterar o host principal para cada dominio que solicitar o envio, com isso consegui manter envios separados com IP e dominio, mas no meu caso o servidor é dedicado e roda apenas os meus dominios que alimentam um sistema de email marketing.

      Minha intencao era eliminar os diversos dominios que uso para nao gerar mais custos com estes, no momento tenho 26 dominios por isso tentei o recurso dos subdominios.

      Voce saberia me dizer se é possivel utilizar desta pratica criando os subdominios e entao configurar para que funcione corretamente?

      • Oi Johnny, essa mensagem quer dizer que você ultrapassou o limite de envio detado pelo servidor. Teste alterar a oção em WHM -> Tweak Settings -> Max hourly emails per domain.

        O script de rotação de IP não tem ligação que a quantidade, ele apenas sorteia um IP aleatório para utilizar no envio dos emails.

        Espero ter ajudado.