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.