def __init__(self, connection): self.connection = connection self.timestamp = -1 self.prefix_tree = None self.process_ids = [] self.rules = None self.prefixes = set() self.prefix_file = "/root/monitor_prefixes.json" self.monitors = None self.flag = True self.redis = redis.Redis(host=REDIS_HOST, port=REDIS_PORT) ping_redis(self.redis) # EXCHANGES self.config_exchange = Exchange( "config", type="direct", durable=False, delivery_mode=1 ) # QUEUES self.config_queue = Queue( "monitor-config-notify", exchange=self.config_exchange, routing_key="notify", durable=False, auto_delete=True, max_priority=2, consumer_arguments={"x-priority": 2}, ) self.config_request_rpc() # setup Redis monitor listeners self.setup_redis_mon_listeners() log.info("started")
def __init__(self, connection): self.connection = connection self.prefix_tree = None self.autoignore_rules = None # https: // docs.celeryproject.org / projects / kombu / en / stable / reference / kombu.asynchronous.timer.html # https://docs.celeryproject.org/projects/kombu/en/stable/_modules/kombu/asynchronous/timer.html#Timer self.rule_timer_threads = {} self.timestamp = -1 # DB variables self.ro_db = DB( application_name="autoignore-readonly", user=DB_USER, password=DB_PASS, host=DB_HOST, port=DB_PORT, database=DB_NAME, reconnect=True, autocommit=True, readonly=True, ) self.wo_db = DB( application_name="autoignore-write", user=DB_USER, password=DB_PASS, host=DB_HOST, port=DB_PORT, database=DB_NAME, ) # EXCHANGES self.config_exchange = Exchange("config", type="direct", durable=False, delivery_mode=1) # QUEUES self.config_queue = Queue( "autoignore-config-notify", exchange=self.config_exchange, routing_key="notify", durable=False, auto_delete=True, max_priority=3, consumer_arguments={"x-priority": 3}, ) # redis db self.redis = redis.Redis(host=REDIS_HOST, port=REDIS_PORT) ping_redis(self.redis) signal_loading("autoignore", True) self.config_request_rpc() signal_loading("autoignore", False)
def __init__(self, connection: Connection) -> NoReturn: self.connection = connection self.timestamp = -1 self.rules = None self.prefix_tree = None self.mon_num = 1 setattr(self, "publish_hijack_fun", self.publish_hijack_result_production) if TEST_ENV == "true": setattr(self, "publish_hijack_fun", self.publish_hijack_result_test) self.redis = redis.Redis(host=REDIS_HOST, port=REDIS_PORT) ping_redis(self.redis) self.rtrmanager = None if RPKI_VALIDATOR_ENABLED == "true": while True: try: self.rtrmanager = RTRManager( RPKI_VALIDATOR_HOST, RPKI_VALIDATOR_PORT ) self.rtrmanager.start() log.info( "Connected to RPKI VALIDATOR '{}:{}'".format( RPKI_VALIDATOR_HOST, RPKI_VALIDATOR_PORT ) ) break except Exception: log.info( "Could not connect to RPKI VALIDATOR '{}:{}'".format( RPKI_VALIDATOR_HOST, RPKI_VALIDATOR_PORT ) ) log.info("Retrying RTR connection in 5 seconds...") time.sleep(5) # EXCHANGES self.update_exchange = Exchange( "bgp-update", channel=connection, type="direct", durable=False, delivery_mode=1, ) self.update_exchange.declare() self.hijack_exchange = Exchange( "hijack-update", channel=connection, type="direct", durable=False, delivery_mode=1, ) self.hijack_exchange.declare() self.hijack_hashing = Exchange( "hijack-hashing", channel=connection, type="x-consistent-hash", durable=False, delivery_mode=1, ) self.hijack_hashing.declare() self.handled_exchange = Exchange( "handled-update", channel=connection, type="direct", durable=False, delivery_mode=1, ) self.config_exchange = Exchange( "config", channel=connection, type="direct", durable=False, delivery_mode=1, ) self.pg_amq_bridge = Exchange( "amq.direct", type="direct", durable=True, delivery_mode=1 ) # QUEUES self.update_queue = Queue( "detection-update-update", exchange=self.pg_amq_bridge, routing_key="update-insert", durable=False, auto_delete=True, max_priority=1, consumer_arguments={"x-priority": 1}, ) self.hijack_ongoing_queue = Queue( "detection-hijack-ongoing", exchange=self.hijack_exchange, routing_key="ongoing", durable=False, auto_delete=True, max_priority=1, consumer_arguments={"x-priority": 1}, ) self.config_queue = Queue( "detection-config-notify-{}".format(uuid()), exchange=self.config_exchange, routing_key="notify", durable=False, auto_delete=True, max_priority=3, consumer_arguments={"x-priority": 3}, ) self.config_request_rpc() log.info("started")
def __init__(self, connection: Connection) -> NoReturn: self.connection = connection self.timestamp = -1 self.rules = None self.prefix_tree = None self.mon_num = 1 self.redis = redis.Redis(host=REDIS_HOST, port=REDIS_PORT) ping_redis(self.redis) # EXCHANGES self.update_exchange = Exchange( "bgp-update", channel=connection, type="direct", durable=False, delivery_mode=1, ) self.update_exchange.declare() self.hijack_exchange = Exchange( "hijack-update", channel=connection, type="direct", durable=False, delivery_mode=1, ) self.hijack_exchange.declare() self.hijack_hashing = Exchange( "hijack-hashing", channel=connection, type="x-consistent-hash", durable=False, delivery_mode=1, ) self.hijack_hashing.declare() self.handled_exchange = Exchange( "handled-update", channel=connection, type="direct", durable=False, delivery_mode=1, ) self.config_exchange = Exchange( "config", channel=connection, type="direct", durable=False, delivery_mode=1, ) self.pg_amq_bridge = Exchange("amq.direct", type="direct", durable=True, delivery_mode=1) # QUEUES self.update_queue = Queue( "detection-update-update", exchange=self.pg_amq_bridge, routing_key="update-insert", durable=False, auto_delete=True, max_priority=1, consumer_arguments={"x-priority": 1}, ) self.update_unhandled_queue = Queue( "detection-update-unhandled", exchange=self.update_exchange, routing_key="unhandled", durable=False, auto_delete=True, max_priority=2, consumer_arguments={"x-priority": 2}, ) self.hijack_ongoing_queue = Queue( "detection-hijack-ongoing", exchange=self.hijack_exchange, routing_key="ongoing", durable=False, auto_delete=True, max_priority=1, consumer_arguments={"x-priority": 1}, ) self.config_queue = Queue( "detection-config-notify-{}".format(uuid()), exchange=self.config_exchange, routing_key="notify", durable=False, auto_delete=True, max_priority=3, consumer_arguments={"x-priority": 3}, ) self.update_rekey_queue = Queue( "detection-update-rekey", exchange=self.update_exchange, routing_key="hijack-rekey", durable=False, auto_delete=True, max_priority=1, consumer_arguments={"x-priority": 1}, ) self.config_request_rpc() log.info("started")
parser.add_argument( "-p", "--prefixes", type=str, dest="prefixes_file", default=None, help="Prefix(es) to be monitored (json file with prefix list)", ) parser.add_argument( "-r", "--hosts", type=str, dest="hosts", default=None, help="Directory with csvs to read", ) args = parser.parse_args() hosts = args.hosts if hosts: hosts = set(hosts.split(",")) ping_redis(redis) try: with Connection(RABBITMQ_URI) as connection: parse_ripe_ris(connection, args.prefixes_file, hosts) except Exception: log.exception("exception") except KeyboardInterrupt: pass
def __init__(self, connection: Connection) -> NoReturn: self.connection = connection self.file = "/etc/artemis/config.yaml" self.sections = {"prefixes", "asns", "monitors", "rules"} self.supported_fields = { "prefixes", "policies", "origin_asns", "neighbors", "mitigation", "community_annotations", } self.supported_monitors = { "riperis", "exabgp", "bgpstreamhist", "bgpstreamlive", "betabmp", } self.available_ris = { "rrc01", "rrc02", "rrc03", "rrc04", "rrc05", "rrc06", "rrc07", "rrc08", "rrc09", "rrc10", "rrc11", "rrc12", "rrc13", "rrc14", "rrc15", "rrc16", "rrc17", "rrc18", "rrc19", "rrc20", "rrc21", "rrc22", "rrc23", "rrc00", } self.available_bgpstreamlive = {"routeviews", "ris"} # reads and parses initial configuration file with open(self.file, "r") as f: raw = f.read() self.data, _flag, _error = self.parse(raw, yaml=True) self.redis = redis.Redis(host=REDIS_HOST, port=REDIS_PORT) ping_redis(self.redis) # EXCHANGES self.config_exchange = Exchange( "config", type="direct", channel=connection, durable=False, delivery_mode=1, ) self.config_exchange.declare() # QUEUES self.config_modify_queue = Queue( "config-modify-queue", durable=False, max_priority=4, consumer_arguments={"x-priority": 4}, ) self.config_request_queue = Queue( "config-request-queue", durable=False, max_priority=4, consumer_arguments={"x-priority": 4}, ) self.hijack_learn_rule_queue = Queue( "conf-hijack-learn-rule-queue", durable=False, max_priority=4, consumer_arguments={"x-priority": 4}, ) self.load_as_sets_queue = Queue( "conf-load-as-sets-queue", durable=False, max_priority=4, consumer_arguments={"x-priority": 4}, ) log.info("started")