DNS Dinâmico: criando seu próprio DDNS no cPanel – Parte 2: automatizando.

Na parte 1 deste texto eu expliquei como criar um “A RECORD” no seu domínio usando o cPanel que aponta para um IP qualquer na internet, imitando o funcionamento de um serviço de DNS dinâmico como o no-ip ou dyndns. Nesta segunda parte eu começo a explicar como automatizar a atualização desse registro. A automação do processo é dividida em duas partes para facilitar a implementação em dispositivos mais simples, como roteadores. E também facilita a implementação e o diagnóstico.

AVISO: O script que apresentarei a seguir tem problemas de segurança que você deve conhecer. Preste atenção a tudo o que é explicado antes de usá-lo.

Origem

A automação do processo de atualização da zona DNS no cPanel foi elaborada por Mitchel Haan e publicada em seu site [link morto] em abril de 2013. O site de Mitchel foi apagado em algum momento entre 5 e 23 de fevereiro de 2015 mas por sorte ainda existe uma cópia na Wayback Machine. De qualquer forma a versão que apresento a seguir é uma adaptação feita por Ethanpil.

Uso

A primeira coisa a fazer é preencher toda a seção de variáveis. As duas primeiras podem ser o que você quiser porque servem apenas para identificar você ao executar o script, evitando que terceiros possam remotamente executar o seu script indicando um IP sob controle deles.

As outras variáveis são relacionadas ao seu domínio e sua conta cPanel:

Note o “.” inicial na última variável. Não é erro de digitação. Sem ele o script não funciona.

Parâmetros do script

  • hostname – indispensável. É o nome do host cujo IP você quer atualizar;
  • myip – Endereço IP que você quer atribuir ao host indicado por hostname. Se você omitir, o script usará o IP que consta no cabeçalho da conexão http (o IP de quem executou o script).

Parâmetros são separados pelo caractere “&”. Cada valor é separado do respectivo parâmetro pelo caractere “=”. Estas são convenções universais e não do script.

Salve o script no servidor www. Digamos que tenha sido na raiz do domínio exemplo.com.br e o nome do arquivo seja atualiza.php.

Rode o script colocando em qualquer browser, exceto Internet Explorer:

http://nome_de_usuario:senha@exemplo.com.br/atualiza.php?hostname=teste&myip=189.70.37.12

Isso atualizará o host teste.exemplo.com.br para apontar para o IP 189.70.37.12

Se tudo estiver OK a resposta do script, no browser, será algo assim:

Na terceira parte desta série de textos eu vou abordar as maneiras de você enviar esse comando para o script automaticamente. Mas é importante que o que expliquei até aqui já esteja funcionando corretamente. Se não está, não adianta procurar a solução na Parte 3.

Para quem nunca viu um URL como o acima:

A sintaxe http://usuario:senha@dominio é uma forma muito antiga e conveniente de passar credenciais de autenticação HTTP básica no URL, permitindo até mesmo gravar a autenticação nos favoritos. O IE deixou de suportar isso a partir da versão 7 porque começou a ser usado para fins maliciosos

Problemas de segurança

1 – Isso não é jeito de tratar credenciais cPanel

O script foi criado com a intenção de rodar no mesmo servidor onde roda o domínio a atualizar. Entretanto isso é preocupante porque como você pode ver, as credenciais cPanel são escancaradas no script:

Qualquer invasor que tenha acesso meramente de leitura ao seu diretório www (e existem infindáveis meios de se conseguir isso) poderá eventualmente esbarrar nesse script e aí… “perdeu playboy”. Com as credenciais cPanel o invasor tem o controle de toda a conta, com todos os seus domínios, www, email, bancos de dados… No meu caso isso seria uma catástrofe.

Uma forma de minimizar esse problema é rodar esse script fora do domínio que ele atualiza. Por exemplo, se você já tem um servidor local rodando 24h, que não oferece nenhum serviço para a internet (menos vulnerável), você pode rodar o script nele. Uma “gambiarra” para conseguir isso em uma máquina Windows sem precisar fazer qualquer modificação no script é instalar o XAMPP.

Eu simulei isso no meu desktop e funcionou. Mas tenha o cuidado de manter o uso de https na variável $dyndnsCpanel. Dessa forma será bem mais difícil capturar as suas credenciais do cPanel interceptando a conexão entre seu servidor local e o seu domínio:

Se você usar http (nem estou certo de que o cPanel permita) as credenciais cPanel poderão ser interceptadas.

Outra forma de tentar minimizar o problema é obfuscar o código PHP. Obfuscação não vai impedir um invasor determinado a descobrir do que se trata, mas dificulta bastante. Se você der um nome ao script que não denuncie seu propósito e obfuscar o suficiente o conteúdo, aumenta muito as chances de que o invasor ache que não vale a pena perder tempo com isso. Deixando escancarado qualquer script kiddie vai ter um orgasmo. Como fazer essa obfuscação precisará ser tema para outro texto.

 2 – A conexão com o script pode ser interceptada

Estando o script em uma máquina remota, as credenciais de acesso ao mesmo podem ser interceptadas com relativa facilidade, porque são transmitidas claramente no URL:

http://nome_de_usuario:senha@exemplo.com.br/atualiza.php?hostname=teste&myip=189.70.37.12

Isso não é problema se no lugar de HTTP o seu domínio usa HTTPS, porque nesse caso até o URL é criptografado.

Mas se você não usa HTTPS qualquer pessoa observando o seu tráfego, como o operador do seu provedor de acesso via rádio, poderá assumir o controle de para onde aponta esse hostname. Dependendo do quanto ele seja esperto ele pode conseguir induzir você a fornecer senhas de acesso extras simulando em máquina controlada por ele o dispositivo que você quer acessar, entre outras coisas.  Se você rodar o script fora do seu domínio como explicado no item anterior pode minimizar esse problema também.

Nota: na primeira revisão deste texto eu afirmei que os serviços de DDNS gratuitos como o no-ip e dyndns também são vulneráveis a interceptação. Isso está parcialmente correto. O no-ip, por exemplo, suporta http e https, mas o simples fato de suportar os dois já é motivo para preocupação porque só Deus sabe que protocolo está usando o danado do roteador, modem ou dvr onde nós colocamos nossas credenciais. Somente interceptando nós mesmos a atualização para termos certeza.

7 comentários
  • Luciano - 464 Comentários

    Jefferson, eu uso um esquema diferente. Eu lembro quando postaram sobre este script na PICLISTBR, mas fiquei bastante receoso com o fato de deixar as credenciais do cPanel de certa forma vulneráveis.

    O que uso, embora dependa também de confiança de terceiros, pelo menos no tempo que uso e dado o tempo que o serviço existe, eu dei meu voto de confiança. Se não conhece, apresento-lhe o site: http://www.afraid.org/

    Ele oferece o serviço de DDNS, você pode escolher entre os que pertencem ao administrador do site ou algum dos inúmeros disponibilizados por terceiros (ai vai da confiança…). Registrei alguns sub-domínios usando um dos disponibilizados pelo admim e uso um dos clientes pra windows também disponibilizados por lá. Nos dispositivos que precisei usar, tenho o DDWRT que suporta url custom.

    Em um dos meus domínios, fui no cPanel e criei um sub-domínio meu, que redireciona para um dos que criei no afraid.

    Assim, caso amanhã um daqueles dominios do admim expirem, eu posso trocar por outro ou até mesmo registrar um meu, e apenas altero o meu redirecionamento, sem precisar mexer em uma vírgula do que já está configurado em meus dispositivos.

    Utilizo a pelo menos uns 5 anos e não tive qualquer problema até agora.

    • Jefferson - 6.464 Comentários

      Discutimos isso em agosto de 2014. O problema para mim, conforme eu disse na época:

      “Eu até pensei em usar o serviço de afraid.org, mas a “gambiarra” (apontar para meu domínio, que aponta para afraid.org, que aponta para o dispositivo) me incomoda.”

      Não estou dizendo que sua solução seja ruim. Você pelo menos a vem usando há cinco anos. Só por isso já é muito melhor que a que eu venho usando: nenhuma.

      Eu vou terminar esta série de textos sobre o uso do cPanel, mas pelo pouco que li até agora me parece que vou acabar usando a solução sugerida por Daniel Plácido: CloudFlare.

      • Luciano - 464 Comentários

        Pois é… o que fiz, que seja uma “gambiarra” eu não nego, mas pelo menos tá me atendendo bem e flexibilizou qualquer mudança, para que ela seja menos traumática, do ponto de ter que reconfigurar (aka, trocar a url) em vários dispositivos. E ainda assim, do jeito que está, se amanhã eu resolver usar este script, basta mudar a configuração deste sub-dominio para que ele não seja mais um redirecionamento e sim i A RECORD e os dispositivos nem vão notar a diferença.

        Quanto ao fato do tratamento das credencias cPanel, uma coisa que me passou pela cabeça que melhora um pouco a eminencia de um desastre, é se o seu host permitir a sub-locação de espaço. O DreamHost permite isso, que eu crie uma crie uma sub-conta dentro de minha conta, sendo que esta sub-conta pode ter seu próprio cPanel, com as configurações e serviços determinadas por mim.

        Neste caso é menos pior se puder usar uma sub-conta com o seu cPanel em separado da conta principal, desta forma se alguem interceptar as credenciais, terá acesso somente a esse sub-domínio, onde não terá nada de interessante pra vandalizar. No máximo ele “envenenaria” o IP.

        • Jefferson - 6.464 Comentários

          O Dreamhost permite isso em qualquer conta? O Hostgator só permite isso se eu comprar um “Reseller Plan” que custa no mínimo 25 dólares por mês (conta aluminium). Não está tão caro já que pago 12 dólares pela conta baby, mas ainda assim é o dobro.

          • Luciano - 464 Comentários

            Não sei te dizer exatamente, mas acredito que seja pra qualquer plano host. Não sei lhe dizer, porque eu na verdade o que uso do DreamHost é exatamente um reseller de um amigo que me fornece o espaço para o meu blog. Logo eu tenho acesso a um cPanel meu, separado desse meu amigo que me fornece o espaço.

            Diretamente da Wiki do DreamHost:

            http://wiki.dreamhost.com/Reselling

            Does DreamHost offer a resellers program?

            Reseller dh slice.jpg

            If you have an active account with a hosting plan, you can resell services to clients. There are a few things to consider if you are looking into becoming a reseller:
            You are solely responsible for managing your clients’ accounts yourself.
            There is no re-branding of DreamHost services allowed.
            DreamHost does not bill your clients for you, as you are in charge of billing them directly for the services provided.
            Customer and technical support for your clients must be provided by you.
            As long as you are willing to handle these items yourself for your clients, you can successfully use your DreamHost panel to resell services to your clients.

  • Jefferson - 6.464 Comentários

    Encontrei dois problemas no script.

    1 – A definição do parâmetro TTL na verdade não funciona. Não foi implementada. Por isso removi a checagem do parâmetro

    // Get and validate ttl
    $ttl = $_GET['ttl'];
    if (!is_numeric($ttl) || $ttl < 60)
    	$ttl = 300;
    

    2 – No XAMPP o script retorna um monte de avisos por causa da falta de inicialização da constante DYNDNS_ALLHOSTS, por isso eu acrescentei:

    define('DYNDNS_ALLHOSTS', "");
    
  • Gilberto Alves Rodrigues - 1 Comentário

    Existe uma solução dessas para zPanel?

Deixe um comentário para Luciano Cancelar resposta

Você pode usar estas tags HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

  

  

  

:) :( ;) O_o B) :lol: :huh: :S :D :-P 8-O :yahoo: :rtfm: :dashhead1: :clapping: more »