SIDPS/idps/protection.py

50 lines
1.6 KiB
Python

import subprocess
import time
class Protection:
"""Classe pour activer la protection du système avec iptables"""
def __init__(self, activate = 0):
"""Initialisation de la protection avec une liste pour stockées les règles créer"""
self.rules = []
self.activate = int(activate)
def add_rule(self, rule, duration):
"""Ajouter une règle dans iptables
@param rule: Règle à ajouter
@param duration: Durée d'execution de la règle"""
print(f"Rule: {rule}, {duration}, {self.activate}")
if self.activate == 0:
return
print("Rule run")
try:
subprocess.run(rule.split(' '), check=True)
print(f"[iptables] Règle ajouter {rule}")
self.rules.append([rule, time.time(), duration])
except subprocess.CalledProcessError as e:
print(f"[iptables] Erreur suppression de la règle {rule}: {e}")
def del_rules(self):
"""Supprimer les règles obsolètes de l'iptables"""
if self.activate is False:
return
curr = time.time()
for i, elt in enumerate(self.rules, 0):
if elt[1] + elt[2] <= curr:
self.del_rule(self, elt[0].replace("-I", "-D"), i)
def del_rule(self, rule, i):
"""Supprimer une règle dans iptables"""
try:
subprocess.run(rule.split(' '), check=True)
print("[iptables] Règle supprimer {rule}")
self.rules.pop(i)
except subprocess.CalledProcessError as e:
print(f"[iptables] Erreur suppression de la règle {rule}: {e}")