Zabbix - LLD de portas abertas no server


Zabbix - LLD check portas abertas no server


Pessoal, neste artigo vou mostrar como criar um LLD no zabbix para pegar as portas abertas dos servidores que estão sendo monitorados.

Existem alguns pré-requisitos:
1) ter o serviço do NMAP instalado
2) O user zabbix poder executar o NMAP.

Então, bora para o que interessa, criando nosso LLD.

Primeiro vamos começar com a criação do LLD e depois vou colocar o script que é executado.

1) Vamos criar um Template com nome: "Template Port Scan" e associar ele aos templates;

2) Após criado o template, clique no menu "Discovery" do template, para criar o LLD.

3) Clique em "create discovery rule" e preencha da seguinte forma:
Nome: PORt SCAN $1
Type: Zabbix Agent
key: port[$IP_PORTSCAN]
update interval: 43200



OBS.: Coloquei para verificar duas vezes ao dia, pois normalmente um servidor não fica abrindo portas do nado.

4) Clique em "Item Prototypes" e depois em "Create item prototype" e preencha da seguinte forma:
Name: Server $1 - Port $2
Type: Zabbix Agent
Key: net.tcp.port[{$IP_PORTSCAN},{#PORT}]
Type Of Information: Numeric (unsigned)
Data Type: Decimal
update interval: 43200
Keep history: 14
Keep trends: 30
New Application: Port Scan



5) Criar uma trigger em "Trigger Prototypes" e clique em "Create trigger prototypes"
Name: Port Scan Test
Expression:

{Template Discovery:net.tcp.port[{$IP_SERVER},{#PORT}].last(0)}=0
 |
{Template Discovery:net.tcp.port[{$IP_SERVER},{#PORT}].nodata(43260)}#0


OBS.: A expressão informar que será alertado caso a porta fique down ou não tenha comunicação após 43260 segundos (1 minutos a mais do que o item).


Beleza, está criado o nosso LLD, temos que apenas associar a um host.  Crie um host de teste para começar a brincar.

Agora vamos configurar o userparameter com a seguinte linha.
UserParameter=port[*],/usr/local/share/zabbix/externalscripts/nmap.sh $1 2> /dev/null

E no local do script coloca o mesmo que está abaixo:

OBS.: O script cria um arquivo em /tmp/.nmapportHOST, para que não de um timeout a cada vez que for realizada a consulta.  Lembrando que SCAN (nmap) é executado 1 vez ao dia.
Se o arquivo não tiver sido criado não vai retornar nada, a partir do momento que o arquivo estiver criado, o script da um cat no arquivo que está montado para o zabbix receber os parametros solicitados.


#!/bin/bash

HOST="$1"
FILE="/tmp/.nmapport$HOST"

if [ -n "$1" ] && [ -e "$FILE" ] ; then
{
cat /tmp/.nmapport$HOST
exit
}
elif [ ! -e $FILE ]; then
{
for  (( i=1; i<=10; i++ ))
do
LLD="{ \"data\": ["

SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for port in `sudo nmap -sT -T4 -P0 "$HOST" | grep "^[0-9]"`
do
PORT=` echo "$port" | awk -F '/' '{ print $1}'`
PROTO=` echo "$port" | awk -F '/' '{ print $2}' | awk '{ print $1}'`
STATUS=` echo "$port" | awk '{ print $2}'`
DESCRIBE=` echo "$port" | awk '{ print $3}'`

LLD="$LLD { \"{#PORT}\":\"$PORT\"},"
LLD="$LLD { \"{#PROTO}\":\"$PROTO\"},"
LLD="$LLD { \"{#STATUS}\":\"$STATUS\"},"
LLD="$LLD { \"{#DESCRIBE}\":\"$DESCRIBE\"},"

echo "$HOST" >> /tmp/nmap.log
#echo "porta: $PORT => proto: $PROTO => status: $STATUS => describe: $DESCRIBE" >> /tmp/nmap.log
done
IFS=$SAVEIFS

GAMBI="$LLD""GAMBI"
GAMBI=`echo "$GAMBI" | sed -e 's/\(},GAMBI\)*$//g'`
LLD="$GAMBI }]}"

echo $LLD > $FILE

if [ $i -ge 8 ]; then
i=2
fi

sleep 86400
done
}
fi

Para testar eu recomendo diminuir os tempos em segundos, para que ele rode a cara 10 minutos.


Bom é isso pessoal, e esperem que seja util para vocês.




Comentários

Postagens mais visitadas deste blog

PUPPET - Gerenciamento e configuração centraliazada

PUPPET - criando classes- parte 2