munin-node: allow by regex for ipv4

Parce que c'est quand-même plus propre avec des cidr, donc on le fait pour les
ipv6, au moins. Malheureusement, un bug dans munin/un plugin netaddr de Perl
rend l'usage des cidr ipv4 et ipv6 simultanés buggés.
Cf: https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=20;bug=645292

Source vers la fonction de conversion cidr ipv4 -> regex:
https://chris-lamb.co.uk/posts/matching-ips-regexes-concidrd-harmful
This commit is contained in:
Daniel STAN 2014-02-13 23:05:06 +01:00
parent ed57d8d5de
commit 696fd6a0b6
2 changed files with 75 additions and 5 deletions

View file

@ -51,15 +51,28 @@ http://munin.projects.linpro.no/wiki/munin-node.conf
@# Nom d'hôte reporté au serveur munin
print "host_name %s" % munin_hostname
@
@# Attention: allow_cidr ne peut être utilisé à la fois avec des IPv4 et IPv6
@# (merci munin et debian). Comme c'est vachement mieux d'utiliser des cidr
@# plutôt que des regexp, on utilise les regexp uniquement pour les IPv4
@# utilisant une fonction de conversion et la directive allow.
def allow(cidr):
"""On fait des regex pour les IPv4 uniquement. Retirer ce kludge
quand cidr_allow sera supporté pour les deux types d'IPs.
Cf https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=20;bug=645292"""
if ':' in cidr:
print "cidr_allow " + cidr
else:
print "allow " + cidr_to_regex(cidr)
if not has("users"):
@# On autorise tout adm et localhost
@allow ^127\.0\.0\.1$
@cidr_allow 127.0.0.0/8
@cidr_allow ::1/128
allow('127.0.0.0/8')
allow('::1/128')
for net in config.NETs['adm'] + config.prefix['adm']:
print "cidr_allow " + net
allow(net)
else:
@# On autorise seulement le serveur munin
for ip in ips_of_metadata(metadata.query.by_profiles(['munin-server'])):
print "cidr_allow %s/%d" % (ip, (128 if ':' in ip else 32))
allow(ip + (128 if ':' in ip else 32))