quarta-feira, 19 de agosto de 2015

Como monitorar servidor DHCP - CentOS 7

Precisava monitorar os pools de um servidor DHCP rodando em CentOS7 via snmp.

Enfrentei vários problemas e depois de muita pesquisa, consegui reunir um passo-a-passo que me ajudou muito...



1- Inicio, 

Usei o seguinte link para baixar a aplicação escrita em perl:

https://github.com/ohitz/dhcpd-snmp

Dai, vieram os problemas, típicos de quem trabalha com Linux



2- Primeiro problema: 


Testei a aplicação em localhost e estava funcionando corretamente, mas descobri que pelo meu software externo de monitoramento não estava conseguindo acessar o serviço snmp no CentOS.

Descobri que o CentOS 7 tem um novo serviço chamado FirewallD que substitui o tradicional IPTables

http://www.fr.net.br/2015/08/how-to-configure-firewalld-in.html


3- Segundo problema


Resolvido o problema do filtro para o snmp, veio o segundo problema: apesar do acesso snmp ao servidor Linux estar correto, a aplicação para monitorar os pools DHCP me retornava um erro:

snmpwalk -v2c -c .1.3.6.1.4.1.21695.1.2
 No Such Instance currently exists at this OID

Mas se eu parasse o serviço snmp e rodasse em modo debug:

snmpd -f -Lo -Ducd-snmp/pass

A aplicação funcionava, depois de muita pesquisa achei o seguinte link:

http://www.net-snmp.org/wiki/index.php/Tut:Extending_snmpd_using_shell_scripts

Onde ele me indicou que o problema poderia estar no SELinux que estava negando acesso.

type=AVC msg=audit(1439914111.962:7978): avc:  denied  { execute } for  pid=28856 comm......

4- Terceiro problema


Como não estava propenso a desabilitar o SELinux tive que resolver este problema de negação de acesso seguindo este caminho:

http://wiki.centos.org/HowTos/SELinux

 5-Quarto problema


Mas para isto eu tinha que achar o pacote que continha o programa audit2allow, pois não estava querendo editar arquivos do SELinux manualmente.

Como encontrar pacotes centos:

http://www.bilatu.net/forum/viewtopic.php?t=549


Depois foi fácil rodar os seguintes comandos:

yum install policycoreutils-python
grep snmpd_t /var/log/audit/audit.log | audit2allow -m dhcpd-snmp > dhcpd-snmp.te
ls -l
less dhcpd-snmp.te
grep snmpd_t /var/log/audit/audit.log | audit2allow -M dhcpd-snmp
semodule -i dhcpd-snmp.pp
semodule -l

6- Resultado:


snmpwalk -v2c -c .1.3.6.1.4.1.21695.1.2.2
SNMPv2-SMI::enterprises.21695.1.2.2.1.1 = INTEGER: 1
SNMPv2-SMI::enterprises.21695.1.2.2.1.2 = INTEGER: 2
SNMPv2-SMI::enterprises.21695.1.2.2.2.1 = STRING: "POOL1"
SNMPv2-SMI::enterprises.21695.1.2.2.2.2 = STRING: "POOL2"
SNMPv2-SMI::enterprises.21695.1.2.2.3.1 = INTEGER: 2047
SNMPv2-SMI::enterprises.21695.1.2.2.3.2 = INTEGER: 2047
SNMPv2-SMI::enterprises.21695.1.2.2.4.1 = INTEGER: 102
SNMPv2-SMI::enterprises.21695.1.2.2.4.2 = INTEGER: 60
SNMPv2-SMI::enterprises.21695.1.2.2.5.1 = INTEGER: 762
SNMPv2-SMI::enterprises.21695.1.2.2.5.2 = INTEGER: 836
SNMPv2-SMI::enterprises.21695.1.2.2.6.1 = INTEGER: 1945
SNMPv2-SMI::enterprises.21695.1.2.2.6.2 = INTEGER: 1987


7-Pegadinha

Foi necessário rodar o audit2allow ao menos duas vezes pois, segundo este link (meio obscuro por sinal) o audit2allow somente libera um tipo acesso por vez e é preciso liberar getattr, read, ioctl e execute, entre outros..

https://lists.isc.org/pipermail/dhcp-users/2014-March/017693.html

[root@localhost 20150819]# cat dhcpd-snmp.te

module dhcpd-snmp 1.0;

require {
        type unconfined_t;
        type admin_home_t;
        type snmpd_t;
        type dhcpd_state_t;
        class dir relabelto;
        class file { read relabelto execute getattr };
}

#============= snmpd_t ==============

#!!!! This avc is allowed in the current policy
allow snmpd_t admin_home_t:file execute;
allow snmpd_t dhcpd_state_t:file read;

#!!!! This avc is allowed in the current policy
allow snmpd_t dhcpd_state_t:file getattr;

#============= unconfined_t ==============

#!!!! This avc is allowed in the current policy
allow unconfined_t snmpd_t:dir relabelto;

#!!!! This avc is allowed in the current policy
allow unconfined_t snmpd_t:file relabelto;

8- Projeto futuro


Depois de estabilizado o meu ambiente vou usar o ultimo link para melhorar o meu monitoramento pois preciso separar os agent.remote-id....


ADENDO:
Desabilitar o envio de log para o arquivo messages:

[root@localhost log]# cat /etc/sysconfig/snmpd
# snmpd command line options
# '-f' is implicitly added by snmpd systemd unit file
OPTIONS="-LS0-5d -Lf /dev/null -p /var/run/snmpd.pid"

link: http://cybergav.in/tag/disable-snmp-connection-from-udp-messages/

ADENDO2:

> I have 4 leases in my dhcpd.leses file that contain a 'ends never;' lines. 
> Why would that be and where do these leases come from?

Probably BOOTP Clients--BOOTP does not have the noting of "lease"--BOOTP
is forever.
 
Inserir no arquivo dhcpd.conf a seguinte linha:
 
deny bootp; 

0 comentários: