Skip to content

RZL Rogério

Um site do Rogér(io)

  • Blog
  • Sobre

Monitorando a expiração de um domínio

Posted on 31 de julho de 2021 - 31 de julho de 2021 by rzlrogerio

Bom, esse é um ponto que muitas empresas deixam passar, pois os serviços de gerenciamento de domínios, como o RegistroBr e outros, enviam notificações por correio eletrônico, porém muitas vezes acabam passando por regras de “lixo eletrônico”, fora o fato que e-mail não é monitoria.

Então esse script é bem simples; ele verifica a data de expiração de um domínio, seja ele mantido no Brasil ou em outros países e usando a mesmo padrão apresentado anteriormente envia um alarme para o Zabbix.

Obs.: vejam que em todos os scripts eu tento manter o mais simples possível, deixando claro quais foram os comandos utilizados.

#!/bin/sh

GRP_ID="107"
GRUPO="dominios_intranet"

TEMPLATE_ID="14909"
NAME_TEMPLATE="TPL-intranet-registro-DOMS"

## Agente de envio
ZBXPRX="zbxtrapper01.intranet"
ZBXSND=$(which zabbix_sender)

# Exportando o proxy
PROXY="techtools-proxy.intranet"
PRX_ID="10334"

LISTA_DOMS="/usr/local/bin/monits/lista-dominios.txt"

DOMS=$(cat $LISTA_DOMS | rev | awk -F'.' '{ print $1"."$2"."$3  }' | rev | sed 's/www.//g' | sort -u)

# 30 dias em segundos
LIMIT="2592000"

fn_send_zabbix()
{
  $ZBXSND -z $ZBXPRX -s $dom-DOM -k status-dom -o "$VALUE"
}

fn_make_host()
{
  JSON_AUTH=`mktemp --suffix=-ZABBIX-CERT-AUTH`
  JSON_ITEM=`mktemp --suffix=-ZABBIX-CERT-ITEM`

  # Endpoint do Zabbix
  ZABBIX_API="http://zabbix.intranet/zabbix/api_jsonrpc.php"

  # Usuari0 e senha no zabbix e rundeck
  USER="usuario_zabbix"
  PASS="senha"

cat > $JSON_AUTH <<END
{
  "jsonrpc": "2.0",
  "method": "user.login",
  "params": {
    "user": "$USER",
    "password": "$PASS"
  },
  "id": 1,
  "auth": null
}
END

  # Fazendo o post e salvando o cookie
  COOKIE=$(curl -s -i -X POST -H 'Content-Type:application/json' -d@$JSON_AUTH $ZABBIX_API | grep jsonrpc | jq -r .result)

# Agora criamos o item
cat > $JSON_ITEM <<END
{
  "jsonrpc": "2.0",
  "method": "host.create",
  "params": {
    "host": "$dom-DOM",
    "interfaces": [
    {
      "type": 1,
      "main": 1,
      "useip": 1,
      "ip": "127.0.0.1",
      "dns": "$dom-DOM",
      "port": "10050"
    }
    ],
    "groups": [
    {
      "groupid": "$GRP_ID"
    }
    ],
    "templates": [
      {
      "templateid": "$TEMPLATE_ID"
     }
    ]
  },
  "id": 1,
  "auth": "$COOKIE"
  }
END

  # Criando o item
  curl -s -i -H 'Content-Type: application/json-rpc' -d@$JSON_ITEM $ZABBIX_API
  sleep 1

  # como zabbix nao tem criacao com o proxy - update na seq
  WS_UPDATE="http://zabbix.intranet/zabbix-balancer/ws/update-zabbix-proxy.php"

  # Executando o update
  curl -s --data "proxy_hostid=$PRX_ID&host=$dom-DOM" -X POST $WS_UPDATE
  sleep 1
}

fn_get_expire_international()
{
  DOMS=`cat $LISTA_DOMS | grep -v br | rev | awk -F'.' '{ print $1"."$2 }' | rev | sort -u`

  for dom in `echo $DOMS`
  do
    fn_make_host
    DT=`whois $dom | grep expires | awk '{ print $2 }'`
    test -z $DT
    if [ `echo $?` != 0 ]
    then
      EXP=`curl -s https://www.whois.com/whois/$dom | grep -i expire | awk -F'Expires On' '{ print $2  }' | awk -F'</div><div' '{ print $2  }' | cut -f2 -d">"`

      ANO=`echo $EXP | awk -F'-' '{ print $1 }'`
      MES=`echo $EXP | awk -F'-' '{ print $2 }'`
      DIA=`echo $EXP | awk -F'-' '{ print $3 }'`

      EXP="$MES/$DIA/$ANO 00:00:00"
      TIME_EXP=$(date -d "${EXP}" +"%s")
      NOW=`date +%s`

      DIF=`echo "$TIME_EXP - $NOW" | bc -l`
      if [ $DIF -lt $LIMIT ]
      then
        VALUE="Whois.com: O dominio $dom vai expirar em menos de 30 dias ou ja esta expirado - Expiracao em: $DIA/$MES/$ANO"
        fn_send_zabbix
      else
        VALUE="ok"
        fn_send_zabbix
      fi
    else
      VALUE="O dominio $dom nao foi encontrado no Whois.com"
      fn_send_zabbix
    sleep 10
    fi
  done
}

fn_get_expire()
{
  DOMS=`cat $LISTA_DOMS | grep br | rev | awk -F'.' '{ print $1"."$2"."$3 }' | rev | sort -u`

  for dom in `echo $DOMS`
  do
    fn_make_host
    DT=`whois $dom | grep expires | awk '{ print $2 }'`
    test -z $DT
    if [ `echo $?` != 0 ]
    then
      ANO=`echo $DT | cut -c1-4`
      MES=`echo $DT | cut -c5-6`
      DIA=`echo $DT | cut -c7-8`

      EXP="$MES/$DIA/$ANO 00:00:00"
      TIME_EXP=$(date -d "${EXP}" +"%s")
      NOW=`date +%s`

      DIF=`echo "$TIME_EXP - $NOW" | bc -l`
      if [ $DIF -lt $LIMIT ]
        then
          VALUE="RegistroBR: O dominio $dom vai expirar em menos de 30 dias ou ja esta expirado - Expiracao em: $DIA/$MES/$ANO"
          fn_send_zabbix
        else
          VALUE="ok"
          fn_send_zabbix
      fi
    else
      VALUE="O dominio $dom nao foi encontrado no RegistroBR"
      fn_send_zabbix
    sleep 10
    fi
  done
}

fn_gc()
{
  rm -f $JSON_AUTH $JSON_ITEM
}
# main
fn_get_expire

Obs.: O arquivo “/usr/local/bin/monits/lista-dominios.txt” deve ter um domínio por linha, exemplo:

www.google.com
www.microsoft.com.br

É isso ai.

Navegação de Post

Vamos falar de monitoria de sistemas

Posts recentes

  • Monitorando a expiração de um domínio
  • Vamos falar de monitoria de sistemas
  • Ok, voltei a publicar…

Comentários

    Proudly powered by WordPress | Theme: micro, developed by DevriX.