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 signal
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():
"""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:
shutil.copy('/root/vpnlist.txt', '/etc/vpnlist.txt')
print("VPN list copied successfully.")
except shutil.Error as e:
print(f"Error copying VPN list: {e}")
return # Exit if copy fails
with open('/etc/vpnlist.txt', 'w') as f:
for ip, filename in vpn_list:
f.write(f"{ip} # {filename}\n")
print("VPN list written to /etc/vpnlist.txt successfully.")
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
try:
@@ -26,6 +71,8 @@ def update_and_reload():
print(f"Found rbldnsd process with PID: {pid}")
except (subprocess.CalledProcessError, ValueError) as e:
print(f"Error finding rbldnsd PID: {e}")
cursor.close()
conn.close()
return
# Stop rbldnsd
@@ -34,6 +81,8 @@ def update_and_reload():
print("Sent termination signal to rbldnsd.")
except ProcessLookupError:
print("Error: rbldnsd process not found (might have already stopped).")
cursor.close()
conn.close()
return
# Start rbldnsd (make sure this matches your actual rbldnsd command)
@@ -45,6 +94,9 @@ def update_and_reload():
except subprocess.CalledProcessError as e:
print(f"Error restarting rbldnsd: {e}")
cursor.close()
conn.close()
print("VPN list updated and rbldnsd restarted successfully.")
if __name__ == "__main__":