| | |
| | | import configparser |
| | | import re |
| | | import logging |
| | | import logging.handlers |
| | | import subprocess |
| | | import asyncio |
| | | import time |
| | |
| | | sys.exit(1) |
| | | |
| | | # Configure logging |
| | | log_handler = logging.handlers.WatchedFileHandler(LOGFILE) |
| | | formatter = logging.Formatter( |
| | | '%(asctime)s %(module)s:%(funcName)s:%(message)s', |
| | | '%b %d %H:%M:%S') |
| | | log_handler.setFormatter(formatter) |
| | | logger = logging.getLogger(__name__) |
| | | logging.basicConfig(filename=LOGFILE, |
| | | format='%(asctime)s %(module)s:%(funcName)s:%(message)s', |
| | | datefmt='%H:%M:%S') |
| | | logger.addHandler(log_handler) |
| | | logger.setLevel(logging.INFO) |
| | | |
| | | # functions |
| | |
| | | await self.bad_ip_queue.put({'ip' : bad_ip, 'maxtries': maxtries, 'reason' : reason}) |
| | | logger.debug('queue size: {}'.format(self.bad_ip_queue.qsize())) |
| | | else: |
| | | logger.info('line match {}. But IP in ingore list'.format(bad_ip)) |
| | | logger.info('line match {}. But IP in ignore list'.format(bad_ip)) |
| | | size = stat.st_size |
| | | |
| | | async def ban_ips(self): |
| | |
| | | record time when this IP has been seen in ip_seen_at = { ip:{'time':<time>,'count':<counter} } |
| | | and ban with pf |
| | | """ |
| | | logger.info('ban_ips sarted') |
| | | logger.info('ban_ips started') |
| | | while True: |
| | | ip_item = await self.bad_ip_queue.get() |
| | | logger.debug('ban_ips awake') |
| | |
| | | """ |
| | | check old ip in ip_seen_at : remove older than watch_while |
| | | """ |
| | | logger.info('clean_ips sarted with sleeptime={}'.format(self.sleeptime)) |
| | | logger.info('clean_ips started with sleeptime={}'.format(self.sleeptime)) |
| | | while True: |
| | | await asyncio.sleep(self.sleeptime) |
| | | await asyncio.sleep(self.watch_while) |
| | | to_remove = [] |
| | | for recorded_ip, data in self.ip_seen_at.items(): |
| | | if time.time() - data['time'] >= self.watch_while: |