Add usr/local/bin/coraza-spoa
Add usr/local/bin/gitea Add usr/local/bin/setourip
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -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()
|
||||
Reference in New Issue
Block a user