Jump to content

Trocar DNS ao suspender uma conta


matt

Recommended Posts

Olá Senhores, algum de vocês já tem isso ou entende disso?

 

Eu precisava um script para quando suspender a conta do cliente no cpanel, ele alterar as zonas de DNS e MX para as padrão do servidor.

 

Isso seria útil porque:

 

- O cliente que utiliza o MX do google, continua usando o email mesmo com a conta suspensa e não paga a hospedagem

- Tenho vários clientes que utilizam direcionamentos de WWW para sites como Wix e outros e os sites não suspendem e não paga a hospedagem

 

Tem um post no fórum americano falando disso e tem até um exemplo de script lá, mas é necessário alguém que entenda de shell script para conferir o mesmo.

 

Link: http://forums.cpanel.net/f42/postsuspendacct-change-dns-simple-script-240711.html

 

SCRIPT DE EXEMPLO:

#!/usr/bin/perl
###### Matthew Harris ######
### Sunday October 30, 2011 ###
### Post Suspension DNS UP ###
######################

use strict;
use warnings;

use lib '/usr/local/cpanel';
use Cpanel::PublicAPI();
use Cpanel::AddonDomain();
use File::Copy;

get_accesshash();
my $cp = Cpanel::PublicAPI->new( 'user' => 'root', 'accesshash' => my $accesshash );
$ENV{'REMOTE_USER'} = 'root';

# variable declaration
my %OPTS = @ARGV;
my $user = $OPTS{'user'}; 

my $suspzone = "/var/named/suspended";
my(@add_ons, $maindom);

deps();
findaddons();
maindom();
backupaddons();
editmx();
rndcre();

sub deps{
	if(!-d $suspzone){
		mkdir($suspzone, 0755) or die "Unable to create $suspzone\n";
	}
}

sub findaddons{
	my $addons = $cp->cpanel_api2_request('whostmgr', { 'module' => 'AddonDomain', 'func' => 'listaddondomains', 'user' => "$user" },
		{
			'regex' => ".*",
		}
	);
	@add_ons = map $_->{domain}, @{$addons->{cpanelresult}{data}};
}

sub maindom{
        my $ownfile = '/etc/trueuserdomains';
        open my $fh, "<", $ownfile;
                my @contents = <$fh>;
                @contents = grep /$user/, @contents;
                ($maindom, undef) = split(':', $contents[0]);   
        close $fh;
}

sub backupaddons{
	foreach(@add_ons){
		my $zonefile = "$_.db";
		copy("/var/named/$zonefile", "$suspzone/$zonefile") or die "Could not backup zonefile: $!";
	}
        copy("/var/named/$maindom.db", "$suspzone/$maindom.db") or die "Could not backup zonefile: $!";
}

sub editmx{
	my($zonefile, $fh, @contents, @maincont, $main, $serial, $newserial);
	foreach(@add_ons){
		$zonefile = "/var/named/$_.db";
	        open $fh, "<", $zonefile;
	        @contents = <$fh>;
		@contents = grep !/MX/, @contents;
       		close $fh;
		open $fh, ">", $zonefile;
		foreach(@contents){
        		if($_ =~ /([0-9]{10}).*serial/){
                		$serial = $1;
                		$newserial = $serial + 1;
                		$_ =~ s/$serial/$newserial/g;
                		print $fh @contents;
        		}
		}
		close $fh;
	}
	my $maindomzone = "/var/named/$maindom.db";
	open $main, "<", "$maindomzone";
	@maincont = <$main>;
	@maincont = grep !/MX/, @maincont;
	close $main;
	open $main, ">", $maindomzone;
	   	foreach(@maincont){
                        if($_ =~ /([0-9]{10}).*serial/){
                                $serial = $1;
                                $newserial = $serial + 1;
                                $_ =~ s/$serial/$newserial/g;
                                print $main @maincont;
                        }
                }
	close $main;
}

sub rndcre{
	system("/usr/sbin/rndc reload");
}

sub get_accesshash{
	open my $hash, "<", "/root/.accesshash";
        	my @accesshash = <$hash>;
	close $hash;
	foreach(@accesshash){
        	$accesshash .= $_
	}
}

Alguém pode me dar uma opinião sobre isso?

Link to comment
Share on other sites

O problema em fazer isto é se o cliente paga e a conta é liberada novamente?

 

O cliente ficará com o serviço Offline devido a modificação na zona de DNS e acabará lhe gerando mais trabalho na reconfiguração, no caso dele efetuar o pagamento é claro.

 

O gancho que o cara fez acima faz isso, ele copia a zona original pra um lugar, depois quando reativar a conta ele restaura as zonas originais.

Link to comment
Share on other sites

O gancho que o cara fez acima faz isso, ele copia a zona original pra um lugar, depois quando reativar a conta ele restaura as zonas originais.

 

Possivelmente fosse mais simples mudar os DNS para dois servidores com wildcard que respondem por qualquer domínio apontando para uma página padrão. Assim você manteria a zona original no DNS original, e voltaria para eles quando o serviço fosse reestabelecido. 

Link to comment
Share on other sites

Possivelmente fosse mais simples mudar os DNS para dois servidores com wildcard que respondem por qualquer domínio apontando para uma página padrão. Assim você manteria a zona original no DNS original, e voltaria para eles quando o serviço fosse reestabelecido. 

 

Olá @rubensk quando você fala mudar os DNS, você se refere em mudar direto no registro.br, por exemplo?

Link to comment
Share on other sites

Olá @rubensk quando você fala mudar os DNS, você se refere em mudar direto no registro.br, por exemplo?

 

Sim, me refiro a mudar diretamente no registry, o que no caso de domínios .br é o Registro.br. Isso é suportado tanto pelo módulo EPP para Registro.br quanto nos módulos de registrar-resellers que costumam ser usados em WHMCS.

Link to comment
Share on other sites

Sim, me refiro a mudar diretamente no registry, o que no caso de domínios .br é o Registro.br. Isso é suportado tanto pelo módulo EPP para Registro.br quanto nos módulos de registrar-resellers que costumam ser usados em WHMCS.

 

Interessante. Mesmo assim eu teria que criar um Action Hook no WHMCS que ao suspender já altera os DNS´s né?

Link to comment
Share on other sites

Interessante. Mesmo assim eu teria que criar um Action Hook no WHMCS que ao suspender já altera os DNS´s né?

 

Sim, precisa. A estratégia seria similar, mas ajudaria a preservar a informação dos resource records da zona para o retorno quando o pagamento tiver baixa. 

 

Rubens

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

Do you agree with our terms?