Add usr/local/bin/coraza-spoa

Add        usr/local/bin/gitea
Add        usr/local/bin/setourip
This commit is contained in:
2026-08-18 17:46:20 +03:00
parent ce539ef0bc
commit b568cbc024
3 changed files with 112 additions and 0 deletions
Binary file not shown.
Binary file not shown.
+112
View File
@@ -0,0 +1,112 @@
#!/usr/bin/env python3
import sys
import os
import re
import subprocess
import ipaddress
def main():
# 1. Проверка прав root
if os.geteuid() != 0:
print("Ошибка: Скрипт должен запускаться с правами root (sudo).")
sys.exit(1)
# 2. Проверка аргументов
if len(sys.argv) != 3:
print("Использование: setourip -ник_админа IP_админа")
print("Пример: setourip -odina 188.187.103.53")
sys.exit(1)
raw_nick = sys.argv[1]
new_ip = sys.argv[2]
# Удаляем ведущий тире, если он был передан (-odina -> odina)
nick = raw_nick.lstrip('-')
# Валидация корректности IP-адреса
try:
ipaddress.ip_address(new_ip)
except ValueError:
print(f"Ошибка: '{new_ip}' не является валидным IP-адресом.")
sys.exit(1)
file_txt = "/etc/haproxy/whitelist-our-ips.txt"
file_yaml = "/etc/crowdsec/parsers/s02-enrich/whitelist-our-ips.yaml"
updated = False
# --- 3. Обновление TXT (HAProxy) ---
if os.path.exists(file_txt):
with open(file_txt, 'r', encoding='utf-8') as f:
content_txt = f.read()
# Ищем паттерн: #ник, перенос строки и следом IP
pattern_txt = re.compile(rf'(#{re.escape(nick)}\s*\n)\s*[0-9a-fA-F.:]+', re.MULTILINE)
if pattern_txt.search(content_txt):
new_content_txt = pattern_txt.sub(rf'\g<1>{new_ip}', content_txt)
with open(file_txt, 'w', encoding='utf-8') as f:
f.write(new_content_txt)
print(f"[OK] {file_txt} обновлен для '{nick}'.")
updated = True
else:
print(f"[WARNING] Ник #{nick} не найден в {file_txt}.")
else:
print(f"[ERROR] Файл {file_txt} не найден.")
# --- 4. Обновление YAML (CrowdSec) ---
if os.path.exists(file_yaml):
with open(file_yaml, 'r', encoding='utf-8') as f:
content_yaml = f.read()
# Ищем паттерн: - "IP" #ник (с учетом пробелов)
pattern_yaml = re.compile(rf'-\s*"[^"]*"\s*#{re.escape(nick)}')
if pattern_yaml.search(content_yaml):
new_content_yaml = pattern_yaml.sub(f'- "{new_ip}" #{nick}', content_yaml)
with open(file_yaml, 'w', encoding='utf-8') as f:
f.write(new_content_yaml)
print(f"[OK] {file_yaml} обновлен для '{nick}'.")
updated = True
else:
print(f"[WARNING] Ник #{nick} не найден в {file_yaml}.")
else:
print(f"[ERROR] Файл {file_yaml} не найден.")
# --- 5. Проверка конфигурации HAProxy ---
if updated:
print("\nПроверка конфигурации HAProxy...")
try:
# Выполняем синтаксическую проверку конфигурации HAProxy
check_res = subprocess.run(
["haproxy", "-c", "-f", "/etc/haproxy/haproxy.cfg"],
check=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
print("[OK] Конфигурация HAProxy корректна.")
except subprocess.CalledProcessError as e:
print(f"[CRITICAL ERROR] Ошибка в конфигурации HAProxy:\n{e.stderr}")
print("[CANCELLED] Перезагрузка сервисов ОТМЕНЕНА из-за ошибки в конфигурации HAProxy!")
sys.exit(1)
# --- 6. Перезагрузка сервисов ---
print("\nПерезагрузка сервисов...")
# Перезагрузка HAProxy
try:
subprocess.run(["systemctl", "reload", "haproxy"], check=True)
print("[OK] HAProxy успешно перезагружен (reload).")
except subprocess.CalledProcessError as e:
print(f"[ERROR] Не удалось перезагрузить HAProxy: {e}")
# Перезагрузка CrowdSec
try:
subprocess.run(["systemctl", "reload", "crowdsec"], check=True)
print("[OK] CrowdSec успешно перезагружен (reload).")
except subprocess.CalledProcessError as e:
print(f"[ERROR] Не удалось перезагрузить CrowdSec: {e}")
if __name__ == "__main__":
main()