update rbl to use database

This commit is contained in:
2024-09-04 15:53:04 -05:00
parent b725e539a1
commit bbe92e766d

View File

@@ -2,17 +2,62 @@ import shutil
import subprocess import subprocess
import signal import signal
import os import os
import psycopg2
import datetime
# PostgreSQL database connection details (assuming you have psql.creds file)
with open('psql.creds', 'r') as f:
config = {}
for line in f:
key, value = line.strip().split(' = ')
config[key] = value
def update_and_reload(): def update_and_reload():
"""Copies the VPN list, restarts rbldnsd (finding PID using ps aux), and logs the process.""" """
Retrieves VPN list from the database, restarts rbldnsd, and logs the process.
Also reports the number of VPN servers with exit IPs updated in the last 7 days.
"""
# Copy the VPN list # Connect to PostgreSQL database
conn = psycopg2.connect(
dbname=config['db_name'],
user=config['db_user'],
password=config['db_password'],
host=config['db_host'],
port=config['db_port']
)
cursor = conn.cursor()
# Fetch VPN servers with exit IPs updated in the last 7 days
seven_days_ago = datetime.datetime.now() - datetime.timedelta(days=7)
cursor.execute("""
SELECT COUNT(*) FROM ovpn_files
WHERE last_exit_ip_check >= %s
AND exit_ip IS NOT NULL
AND exit_ip ~ '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$'
""", (seven_days_ago,))
updated_servers_count = cursor.fetchone()[0]
print(f"VPN servers with exit IPs updated in the last 7 days: {updated_servers_count}")
# Fetch the list of VPN servers from the database (filter for valid IPs and not NULL)
cursor.execute("""
SELECT exit_ip, file_name FROM ovpn_files
WHERE exit_ip IS NOT NULL
AND exit_ip ~ '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$'
""")
vpn_list = cursor.fetchall()
# Write the VPN list to /etc/vpnlist.txt
try: try:
shutil.copy('/root/vpnlist.txt', '/etc/vpnlist.txt') with open('/etc/vpnlist.txt', 'w') as f:
print("VPN list copied successfully.") for ip, filename in vpn_list:
except shutil.Error as e: f.write(f"{ip} # {filename}\n")
print(f"Error copying VPN list: {e}") print("VPN list written to /etc/vpnlist.txt successfully.")
return # Exit if copy fails except IOError as e:
print(f"Error writing VPN list to /etc/vpnlist.txt: {e}")
cursor.close()
conn.close()
return # Exit if write fails
# Find the PID of rbldnsd using ps aux # Find the PID of rbldnsd using ps aux
try: try:
@@ -26,6 +71,8 @@ def update_and_reload():
print(f"Found rbldnsd process with PID: {pid}") print(f"Found rbldnsd process with PID: {pid}")
except (subprocess.CalledProcessError, ValueError) as e: except (subprocess.CalledProcessError, ValueError) as e:
print(f"Error finding rbldnsd PID: {e}") print(f"Error finding rbldnsd PID: {e}")
cursor.close()
conn.close()
return return
# Stop rbldnsd # Stop rbldnsd
@@ -34,6 +81,8 @@ def update_and_reload():
print("Sent termination signal to rbldnsd.") print("Sent termination signal to rbldnsd.")
except ProcessLookupError: except ProcessLookupError:
print("Error: rbldnsd process not found (might have already stopped).") print("Error: rbldnsd process not found (might have already stopped).")
cursor.close()
conn.close()
return return
# Start rbldnsd (make sure this matches your actual rbldnsd command) # Start rbldnsd (make sure this matches your actual rbldnsd command)
@@ -45,6 +94,9 @@ def update_and_reload():
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
print(f"Error restarting rbldnsd: {e}") print(f"Error restarting rbldnsd: {e}")
cursor.close()
conn.close()
print("VPN list updated and rbldnsd restarted successfully.") print("VPN list updated and rbldnsd restarted successfully.")
if __name__ == "__main__": if __name__ == "__main__":