#!/usr/bin/python """ the idea is to use the bcfg2 backend to generate a list of ip's and associated with heir security groups like bcfg2-info groups give the list of groups and bcfg2-client query -g "group" gives the list of bcfg2-client then resolve it like SER = "1.1.1.1,1.1.1.2,...." and so on this should allow us to genereate normal rules for every security group and stuff that into the ids to spot any non compliance with the firewall ruleset, possibly some other shit as well ? """ import os import re import socket import sys import cmd import getopt import fnmatch import logging import lxml.etree import traceback from code import InteractiveConsole import Bcfg2.Logger import Bcfg2.Options import Bcfg2.Server.Core import Bcfg2.Server.Plugin import Bcfg2.Client.Tools.POSIX def main(): optinfo = dict(profile=Bcfg2.Options.CORE_PROFILE, command_timeout=Bcfg2.Options.CLIENT_COMMAND_TIMEOUT) optinfo.update(Bcfg2.Options.INFO_COMMON_OPTIONS) setup = Bcfg2.Options.OptionParser(optinfo) setup.hm = "\n".join(["prepareIdsMetadata","Options:",setup.buildHelpMessage()]) setup.parse(sys.argv[1:]) Bcfg2.Logger.setup_logging('prepareIdsMetadata', to_syslog=False, level=0) bcfg2 = Bcfg2.Server.Core.BaseCore(setup) bcfg2.load_plugins() bcfg2.block_for_fam_events(handle_events=True) f = open("group.txt", "w") for group in list(bcfg2.metadata.groups.keys()): hosts = bcfg2.metadata.get_client_names_by_groups([group])
first = True if hosts : f.write(group.upper() + '="') for h in hosts: try: (hostname, aliases, ips) = socket.gethostbyname_ex(h) if first: f.write(ips[0]) first = False else: f.write(',' + ips[0]) except: pass f.write('"\n') f.close() if __name__ == '__main__': sys.exit(main())
Which will generate a text file (group.txt) containing something like that:
DEBIAN-SQUEEZE="10.5.1.21,10.5.1.22,10.5.1.23,10.5.1.24" SIP="10.21.81.249" MYSQLNDBAPI="10.4.16.101,10.4.16.102,10.4.16.103,10.4.16.104"
Which I can then add as groups in my suricata yaml config file, and then build rules specific to those host purpose :-) Some host appears in several groups since some of our groups are OS based (CentOS/Debian-Wheezy ... ), geographic (BE, US, ...) and purpose based (WEB, PROXY, DB, ...)
The obvious advantages are to keep everything consistent, get rid of duplicate information and automatic updates of the IDS whenever you add an hosts. bcfg2 also has a plugin for Nagios which is nice to use too to make sure no host is left behind.
Thanks to the people on #bcfg2 on freenode for their support.
Aucun commentaire:
Enregistrer un commentaire