You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
5.9 KiB
Python
154 lines
5.9 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
TorGuard WireGuard Manager Uninstaller
|
|
Completely removes the WireGuard Manager, its configurations, services, and dependencies.
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import shutil
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
def print_step(emoji, message):
|
|
"""Print a step with emoji and message"""
|
|
print(f"\n{emoji} {message}")
|
|
|
|
def run_command(command, error_message, shell=False):
|
|
"""Run a shell command and handle errors"""
|
|
try:
|
|
if shell:
|
|
subprocess.run(command, check=True, shell=True)
|
|
else:
|
|
subprocess.run(command, check=True)
|
|
print("✅ Done!")
|
|
return True
|
|
except subprocess.CalledProcessError as e:
|
|
print(f"❌ Error: {error_message}")
|
|
if hasattr(e, 'stderr') and e.stderr:
|
|
print(f"Details: {e.stderr.decode()}")
|
|
return False
|
|
|
|
def remove_firewall_rules():
|
|
"""Remove firewall rules related to WireGuard Manager"""
|
|
print_step("🛑", "Removing firewall rules...")
|
|
rules = [
|
|
"ufw delete allow 1337/tcp",
|
|
"ufw --force disable"
|
|
]
|
|
for rule in rules:
|
|
run_command(rule, "Failed to remove firewall rule", shell=True)
|
|
|
|
def stop_and_disable_services():
|
|
"""Stops and removes the WireGuard Manager system service"""
|
|
print_step("🛑", "Stopping and disabling WireGuard Manager service...")
|
|
service_name = "wireguard-manager"
|
|
run_command(f"systemctl stop {service_name}", "Failed to stop WireGuard Manager service", shell=True)
|
|
run_command(f"systemctl disable {service_name}", "Failed to disable WireGuard Manager service", shell=True)
|
|
run_command(f"rm -f /etc/systemd/system/{service_name}.service", "Failed to remove service file", shell=True)
|
|
run_command("systemctl daemon-reload", "Failed to reload systemd", shell=True)
|
|
|
|
def remove_wireguard():
|
|
"""Removes WireGuard and its configurations"""
|
|
print_step("🗑️", "Removing WireGuard and its configurations...")
|
|
|
|
# Remove WireGuard kernel module
|
|
run_command("modprobe -r wireguard", "Failed to remove WireGuard kernel module", shell=True)
|
|
|
|
# Uninstall WireGuard packages
|
|
run_command("apt-get remove --purge -y wireguard wireguard-tools", "Failed to uninstall WireGuard", shell=True)
|
|
|
|
# Remove WireGuard configurations
|
|
run_command("rm -rf /etc/wireguard", "Failed to remove WireGuard configurations", shell=True)
|
|
|
|
def reset_network_config():
|
|
"""Resets networking configurations made by the installer"""
|
|
print_step("🔄", "Resetting network configurations...")
|
|
|
|
# Reset IP forwarding
|
|
run_command("sed -i 's/net.ipv4.ip_forward=1/#net.ipv4.ip_forward=1/' /etc/sysctl.conf", "Failed to reset sysctl.conf", shell=True)
|
|
run_command("sysctl -p", "Failed to apply sysctl changes", shell=True)
|
|
|
|
# Reset NAT rules
|
|
run_command("iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE", "Failed to remove NAT rule", shell=True)
|
|
run_command("iptables -D FORWARD -i wg0 -j ACCEPT", "Failed to remove iptables FORWARD rule", shell=True)
|
|
run_command("iptables -D FORWARD -o wg0 -j ACCEPT", "Failed to remove iptables FORWARD rule", shell=True)
|
|
|
|
# Reset iptables rules to default
|
|
run_command("iptables -F", "Failed to flush iptables rules", shell=True)
|
|
run_command("iptables -X", "Failed to delete custom chains", shell=True)
|
|
run_command("iptables -t nat -F", "Failed to flush NAT rules", shell=True)
|
|
run_command("iptables -t nat -X", "Failed to delete custom NAT chains", shell=True)
|
|
|
|
# Remove iptables-persistent package
|
|
run_command("apt-get remove --purge -y iptables-persistent", "Failed to remove iptables-persistent", shell=True)
|
|
|
|
def remove_wireguard_manager():
|
|
"""Deletes all files and directories related to the WireGuard Manager"""
|
|
print_step("🗑️", "Removing WireGuard Manager files...")
|
|
|
|
install_dir = Path("/opt/wireguard-manager")
|
|
config_dir = Path("/etc/wireguard-manager")
|
|
|
|
# Delete directories
|
|
if install_dir.exists():
|
|
shutil.rmtree(install_dir, ignore_errors=True)
|
|
if config_dir.exists():
|
|
shutil.rmtree(config_dir, ignore_errors=True)
|
|
|
|
# Remove WireGuard kernel module auto-load setting
|
|
run_command("rm -f /etc/modules-load.d/wireguard.conf", "Failed to remove WireGuard module auto-load config", shell=True)
|
|
|
|
def remove_python_env():
|
|
"""Removes the Python virtual environment"""
|
|
print_step("🐍", "Removing Python virtual environment...")
|
|
venv_path = Path("/opt/wireguard-manager/venv")
|
|
if venv_path.exists():
|
|
shutil.rmtree(venv_path, ignore_errors=True)
|
|
|
|
# Remove Python dependencies
|
|
run_command("apt-get remove --purge -y python3-pip python3-venv", "Failed to remove Python dependencies", shell=True)
|
|
|
|
def final_cleanup():
|
|
"""Performs final cleanup and system reset"""
|
|
print_step("🧹", "Performing final cleanup...")
|
|
|
|
# Clear APT cache
|
|
run_command("apt-get autoremove -y", "Failed to remove unnecessary packages", shell=True)
|
|
run_command("apt-get clean", "Failed to clean package cache", shell=True)
|
|
|
|
def main():
|
|
if os.geteuid() != 0:
|
|
print("❌ This script must be run as root (sudo)")
|
|
sys.exit(1)
|
|
|
|
print("""
|
|
🛑 TorGuard WireGuard Manager Uninstaller
|
|
========================================
|
|
This will completely remove WireGuard Manager, its configurations, services, and dependencies.
|
|
""")
|
|
|
|
confirmation = input("⚠️ Are you sure you want to proceed? This action is irreversible! (yes/no): ").strip().lower()
|
|
if confirmation != "yes":
|
|
print("❌ Uninstallation aborted.")
|
|
sys.exit(1)
|
|
|
|
stop_and_disable_services()
|
|
remove_firewall_rules()
|
|
remove_wireguard()
|
|
reset_network_config()
|
|
remove_wireguard_manager()
|
|
remove_python_env()
|
|
final_cleanup()
|
|
|
|
print("""
|
|
✅ Uninstallation Complete!
|
|
==========================
|
|
TorGuard WireGuard Manager and all associated configurations have been successfully removed.
|
|
|
|
If you need to reinstall, run the installer script again.
|
|
""")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|