Advertisement
dev017

protection.py

Aug 9th, 2023
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import subprocess
  2. import os
  3.  
  4. def check_root():
  5.     if os.getuid() != 0:
  6.         print(".:: Please, run this program as root!")
  7.         exit(1)
  8.  
  9. def read_config():
  10.     config_file = "/etc/antiflood.cfg"
  11.     if not os.path.exists(config_file):
  12.         print("\e[1;77m:: Creating Anti Flood config file (/etc/antiflood.cfg)... \e[0m")
  13.         with open(config_file, "w") as f:
  14.             f.write("antibrute=y\n")
  15.             f.write("ports=21,22,23,25,110,143,443\n")
  16.             f.write("seconds=60\n")
  17.             f.write("hitcount=6\n")
  18.             f.write("udpflood=y\n")
  19.             f.write("icmp=y\n")
  20.             f.write("chains=y\n")
  21.             f.write("sourceip=y\n")
  22.             f.write("rst=y\n")
  23.             f.write("invalid=y\n")
  24.             f.write("new=y\n")
  25.             f.write("mss=y\n")
  26.             f.write("sourceipsec=y\n")
  27.             f.write("bogus=y\n")
  28.             f.write("spoof=n\n")
  29.         print("\e[1;92mDone\e[0m")
  30.  
  31. def start():
  32.     check_root()
  33.     read_config()
  34.     config = {}
  35.     with open("/etc/antiflood.cfg") as f:
  36.         for line in f:
  37.             key, value = line.strip().split("=")
  38.             config[key] = value
  39.  
  40.     if config.get("antibrute", "").lower() in ["y", "yes"] and subprocess.call(["/sbin/iptables", "-L"]) == 1:
  41.         ports = config["ports"]
  42.         seconds = config["seconds"]
  43.         hitcount = config["hitcount"]
  44.         subprocess.call(["/sbin/iptables", "-A", "INPUT", "-p", "tcp", "-m", "multiport", "--dports", ports, "-m", "conntrack", "--ctstate", "NEW", "-m", "recent", "--set", "--name", "antibrute"])
  45.         subprocess.call(["/sbin/iptables", "-A", "INPUT", "-p", "tcp", "-m", "multiport", "--dports", ports, "-m", "conntrack", "--ctstate", "NEW", "-m", "recent", "--update", "--seconds", seconds, "--hitcount", hitcount, "-j", "DROP", "--name", "antibrute"])
  46.  
  47.     if config.get("udpflood", "").lower() in ["y", "yes"] and subprocess.call(["/sbin/iptables", "-L"]) == 1:
  48.         subprocess.call(["/sbin/iptables", "-N", "udpflood"])
  49.         subprocess.call(["/sbin/iptables", "-A", "INPUT", "-p", "udp", "-j", "udpflood"])
  50.         subprocess.call(["/sbin/iptables", "-A", "udpflood", "-p", "udp", "-m", "limit", "--limit", "50/s", "-j", "RETURN"])
  51.         subprocess.call(["/sbin/iptables", "-A", "udpflood", "-j", "DROP"])
  52.  
  53.     if config.get("icmp", "").lower() in ["y", "yes"] and subprocess.call(["/sbin/iptables", "-t", "mangle", "-L"]) == 1:
  54.         subprocess.call(["/sbin/iptables", "-t", "mangle", "-A", "PREROUTING", "-p", "icmp", "-j", "DROP"])
  55.  
  56.     if config.get("chains", "").lower() in ["y", "yes"] and subprocess.call(["/sbin/iptables", "-t", "mangle", "-L"]) == 1:
  57.         subprocess.call(["/sbin/iptables", "-t", "mangle", "-A", "PREROUTING", "-f", "-j", "DROP"])
  58.  
  59.     if config.get("sourceip", "").lower() in ["y", "yes"] and subprocess.call(["/sbin/iptables", "-L"]) == 1:
  60.         subprocess.call(["/sbin/iptables", "-A", "INPUT", "-p", "tcp", "-m", "connlimit", "--connlimit-above", "111", "-j", "REJECT", "--reject-with", "tcp-reset"])
  61.  
  62. if __name__ == "__main__":
  63.     start()
  64.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement