diff --git a/data/Dockerfiles/netfilter/docker-entrypoint.sh b/data/Dockerfiles/netfilter/docker-entrypoint.sh index 47370a1fe..98cab0a72 100755 --- a/data/Dockerfiles/netfilter/docker-entrypoint.sh +++ b/data/Dockerfiles/netfilter/docker-entrypoint.sh @@ -1,6 +1,6 @@ #!/bin/sh -backend=iptables +backend=nftables nft list table ip filter &>/dev/null nftables_found=$? diff --git a/data/Dockerfiles/netfilter/main.py b/data/Dockerfiles/netfilter/main.py index 2232d0d1d..5b718a94b 100644 --- a/data/Dockerfiles/netfilter/main.py +++ b/data/Dockerfiles/netfilter/main.py @@ -449,6 +449,11 @@ if __name__ == '__main__': tables = NFTables(chain_name, logger) else: logger.logInfo('Using IPTables backend') + logger.logWarn( + "DEPRECATION: iptables-legacy is deprecated and will be removed in future releases. " + "Please switch to nftables on your host to ensure complete compatibility." + ) + time.sleep(5) tables = IPTables(chain_name, logger) clear() diff --git a/data/Dockerfiles/netfilter/modules/Logger.py b/data/Dockerfiles/netfilter/modules/Logger.py index 0ba2f42ad..b5114539b 100644 --- a/data/Dockerfiles/netfilter/modules/Logger.py +++ b/data/Dockerfiles/netfilter/modules/Logger.py @@ -1,5 +1,6 @@ import time import json +import datetime class Logger: def __init__(self): @@ -8,17 +9,28 @@ class Logger: def set_redis(self, redis): self.r = redis + def _format_timestamp(self): + # Local time with milliseconds + return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + def log(self, priority, message): - tolog = {} - tolog['time'] = int(round(time.time())) - tolog['priority'] = priority - tolog['message'] = message - print(message) + # build redis-friendly dict + tolog = { + 'time': int(round(time.time())), # keep raw timestamp for Redis + 'priority': priority, + 'message': message + } + + # print human-readable message with timestamp + ts = self._format_timestamp() + print(f"{ts} {priority.upper()}: {message}", flush=True) + + # also push JSON to Redis if connected if self.r is not None: try: self.r.lpush('NETFILTER_LOG', json.dumps(tolog, ensure_ascii=False)) except Exception as ex: - print('Failed logging to redis: %s' % (ex)) + print(f'{ts} WARN: Failed logging to redis: {ex}', flush=True) def logWarn(self, message): self.log('warn', message) @@ -27,4 +39,4 @@ class Logger: self.log('crit', message) def logInfo(self, message): - self.log('info', message) + self.log('info', message) \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 86a4f401a..adff3931e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -502,7 +502,7 @@ services: - acme netfilter-mailcow: - image: ghcr.io/mailcow/netfilter:1.62 + image: ghcr.io/mailcow/netfilter:1.63 stop_grace_period: 30s restart: always privileged: true