From c2f357fae1006940e87f42c5cf634e9b673260e8 Mon Sep 17 00:00:00 2001 From: igor Date: Wed, 25 Jun 2025 23:00:43 +0500 Subject: [PATCH] + --- DNS/PowerDNS_install.md | 16 ++ Logs/Vector_dev_install_telegram.md | 277 ++++++++++++++++++++++++++-- PostgreSQL/PostgreSQL_install.md | 10 +- PostgreSQL/backup/backup.sh | 53 ++++++ Proxy/HAProxy_install.md | 4 +- Proxy/Traefik_install.md | 29 ++- RClone/NFS_install.md | 60 ++++++ RClone/RClone_install_linux.md | 69 +++++++ RClone/WebDAV_install.md | 136 ++++++++++++++ Redis_install.md | 53 ++++++ Security/Certificates_config.md | 11 ++ Security/HashiCorp_Vault_install.md | 56 ++++-- Ubuntu.md | 30 +-- 13 files changed, 732 insertions(+), 72 deletions(-) create mode 100644 PostgreSQL/backup/backup.sh create mode 100644 RClone/NFS_install.md create mode 100644 RClone/RClone_install_linux.md create mode 100644 RClone/WebDAV_install.md create mode 100644 Redis_install.md diff --git a/DNS/PowerDNS_install.md b/DNS/PowerDNS_install.md index 4793619..df2c00e 100644 --- a/DNS/PowerDNS_install.md +++ b/DNS/PowerDNS_install.md @@ -246,6 +246,22 @@ dig @88.218.94.134 -p 53 powerdns.geovizor.top A ### Теперь можно настроить HTTPS для взаимодействия через API с сервером для динамического задания IP адресов ```sh +new_ip_address= +FILE=/etc/ddns/mesh.txt +if test -f "$FILE"; then + new_ip_address=`cat $FILE` + rm $FILE +fi + +len=${#new_ip_address} +if [ $len -gt 3 ] +then + echo "New IP address = $new_ip_address" +else + echo "Not find IP address" + exit +fi + API_KEY="40c89f2a-e2f3-4ff8-a245-3547111f6677" SERVER="156.244.31.209" ZONE="geovizor.top" diff --git a/Logs/Vector_dev_install_telegram.md b/Logs/Vector_dev_install_telegram.md index aa613d7..fe6718e 100644 --- a/Logs/Vector_dev_install_telegram.md +++ b/Logs/Vector_dev_install_telegram.md @@ -10,11 +10,6 @@ После создания вы получите токен (например, 8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws). Сохраните его, он понадобится для API. - - - - - # Настройка Vector для отправки логов в Gotify Эта инструкция описывает, как установить Vector, настроить его для чтения JSON-логов из файла `/opt/org_ccalm_main/logs/ccalm.log`, фильтрации строк с уровнем `ERROR` и отправки уведомлений в Gotify. @@ -23,7 +18,7 @@ ## 0. ✅ Подключаемся к инфраструктуре ```sh - ssh igor@ccalm.org -p 2200 + ssh ubuntu@almaty.ccalm.org -p 22 ``` ## Предварительные требования @@ -64,11 +59,29 @@ sources: ccalm_logs: type: file include: - - /opt/org_ccalm_main/logs/ccalm.log + - /opt/org_ccalm_main/logs/org-ccalm-main.log + read_from: beginning + + ccalm_translation_logs: + type: file + include: + - /opt/org_ccalm_translation/logs/org-ccalm-translation.log + read_from: beginning + + ccalm_dbms_logs: + type: file + include: + - /opt/org_ccalm_dbms/logs/org-ccalm-dbms.log + read_from: beginning + + ccalm_jwt_logs: + type: file + include: + - /opt/org_ccalm_jwt/logs/org-ccalm-jwt.log read_from: beginning transforms: - parse_json: + parse_json_ccalm: type: remap inputs: - ccalm_logs @@ -83,28 +96,209 @@ transforms: } . = merged - filter_errors: - type: filter - inputs: - - parse_json - condition: '.level == "ERROR"' - - format_telegram_json: + parse_json_translation: type: remap inputs: - - filter_errors + - ccalm_translation_logs + source: | + structured, err = parse_json(.message) + if err != null { + abort + } + merged, err = merge(., structured) + if err != null { + abort + } + . = merged + + parse_json_dbms: + type: remap + inputs: + - ccalm_dbms_logs + source: | + structured, err = parse_json(.message) + if err != null { + abort + } + merged, err = merge(., structured) + if err != null { + abort + } + . = merged + + parse_json_jwt: + type: remap + inputs: + - ccalm_jwt_logs + source: | + structured, err = parse_json(.message) + if err != null { + abort + } + merged, err = merge(., structured) + if err != null { + abort + } + . = merged + + filter_errors_ccalm: + type: filter + inputs: + - parse_json_ccalm + condition: '.level == "ERROR" || .level == "WARN"' + + filter_errors_translation: + type: filter + inputs: + - parse_json_translation + condition: '.level == "ERROR" || .level == "WARN"' + + filter_errors_dbms: + type: filter + inputs: + - parse_json_dbms + condition: '.level == "ERROR" || .level == "WARN"' + + filter_errors_jwt: + type: filter + inputs: + - parse_json_jwt + condition: '.level == "ERROR" || .level == "WARN"' + + format_telegram_json_ccalm: + type: remap + inputs: + - filter_errors_ccalm source: | msg, err = string(.message) if err != null { msg = "Unable to parse message" } - .message = "{\"chat_id\":\"307675888\",\"text\":\"ERROR: " + msg + "\"}" + marker_str = "" + if exists(.marker) { + m, err = string(.marker) + if err == null && length(m) > 0 { + marker_str = "Marker: ```text\n" + m + "```" + } + } + level_str = "" + icon_str = "" + if exists(.level) { + m, err = string(.level) + if err == null { + level_str = "level: ```text\n" + m + "```" + } + if m == "ERROR" { + icon_str = "‼" + } + if m == "WARN" { + icon_str = "⚠️" + } + } + .message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":2,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: ```text\n" + msg + "```\", \"parse_mode\":\"Markdown\"}" + + format_telegram_json_translation: + type: remap + inputs: + - filter_errors_translation + source: | + msg, err = string(.message) + if err != null { + msg = "Unable to parse message" + } + marker_str = "" + if exists(.marker) { + m, err = string(.marker) + if err == null && length(m) > 0 { + marker_str = "Marker: ```text\n" + m + "```" + } + } + level_str = "" + icon_str = "" + if exists(.level) { + m, err = string(.level) + if err == null { + level_str = "level: ```text\n" + m + "```" + } + if m == "ERROR" { + icon_str = "‼" + } + if m == "WARN" { + icon_str = "⚠️" + } + } + .message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":24,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: ```text\n" + msg + "```\", \"parse_mode\":\"Markdown\"}" + + format_telegram_json_dbms: + type: remap + inputs: + - filter_errors_dbms + source: | + msg, err = string(.message) + if err != null { + msg = "Unable to parse message" + } + marker_str = "" + if exists(.marker) { + m, err = string(.marker) + if err == null && length(m) > 0 { + marker_str = "Marker: ```text\n" + m + "```" + } + } + level_str = "" + icon_str = "" + if exists(.level) { + m, err = string(.level) + if err == null { + level_str = "level: ```text\n" + m + "```" + } + if m == "ERROR" { + icon_str = "‼" + } + if m == "WARN" { + icon_str = "⚠️" + } + } + .message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":9,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: ```text\n" + msg + "```\", \"parse_mode\":\"Markdown\"}" + + format_telegram_json_jwt: + type: remap + inputs: + - filter_errors_jwt + source: | + msg, err = string(.message) + if err != null { + msg = "Unable to parse message" + } + marker_str = "" + if exists(.marker) { + m, err = string(.marker) + if err == null && length(m) > 0 { + marker_str = "Marker: ```text\n" + m + "```" + } + } + level_str = "" + icon_str = "" + if exists(.level) { + m, err = string(.level) + if err == null { + level_str = "level: ```text\n" + m + "```" + } + if m == "ERROR" { + icon_str = "‼" + } + if m == "WARN" { + icon_str = "⚠️" + } + } + .message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":4,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: ```text\n" + msg + "```\", \"parse_mode\":\"Markdown\"}" + sinks: - telegram: + telegram_ccalm: type: http inputs: - - format_telegram_json + - format_telegram_json_ccalm uri: "https://api.telegram.org/bot8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws/sendMessage" method: post encoding: @@ -115,6 +309,47 @@ sinks: batch: max_events: 1 + telegram_translation: + type: http + inputs: + - format_telegram_json_translation + uri: "https://api.telegram.org/bot8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws/sendMessage" + method: post + encoding: + codec: text + request: + headers: + Content-Type: "application/json" + batch: + max_events: 1 + + telegram_dbms: + type: http + inputs: + - format_telegram_json_dbms + uri: "https://api.telegram.org/bot8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws/sendMessage" + method: post + encoding: + codec: text + request: + headers: + Content-Type: "application/json" + batch: + max_events: 1 + + telegram_jwt: + type: http + inputs: + - format_telegram_json_jwt + uri: "https://api.telegram.org/bot8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws/sendMessage" + method: post + encoding: + codec: text + request: + headers: + Content-Type: "application/json" + batch: + max_events: 1 EOF ``` @@ -156,6 +391,8 @@ sudo vector --config /etc/vector/vector.yaml 1. Включите и запустите сервис: ```sh sudo systemctl enable vector +``` +```sh sudo systemctl start vector ``` 2. Проверьте статус: @@ -171,7 +408,7 @@ sudo vector --config /etc/vector/vector.yaml 1. Убедитесь, что Gotify доступен по указанному URL. 2. Добавьте тестовую строку лога в `/opt/org_ccalm_main/logs/ccalm.log`: ```sh -echo '{"level": "ERROR", "message": "Database connection failed", "timestamp": "2025-05-18T12:28:00Z"}' | sudo tee -a /opt/org_ccalm_main/logs/ccalm.log +echo '{"level": "ERROR", "marker":"12345", "message": "Database connection failed 0", "timestamp": "2025-05-18T12:28:00Z"}' | sudo tee -a /opt/org_ccalm_jwt/logs/org-ccalm-jwt.log ``` 3. Проверьте Gotify (веб-интерфейс или приложение) — должно прийти уведомление с заголовком "CCALM Log Error" и сообщением "Database connection failed". diff --git a/PostgreSQL/PostgreSQL_install.md b/PostgreSQL/PostgreSQL_install.md index 203083a..95512d4 100644 --- a/PostgreSQL/PostgreSQL_install.md +++ b/PostgreSQL/PostgreSQL_install.md @@ -116,6 +116,8 @@ sudo mcedit /etc/postgresql/16/main/pg_hba.conf sudo netstat -tap | grep 5432 Создать Backup (при переносе со старой на новую версию может быть не совместим для этого нужно делать бакам в текстовом формате: plain): + pg_dump --host=192.168.200.17 --username=postgres salevizor > /home/igor/salevizor.sql + pg_dump bigfoott_shop>/home/igor/bigfoott_shop.sql --host=127.0.0.1 --username=bigfoott_root pg_dump ASDC_Locust>/home/igor/ASDC_Locust.sql --host=127.0.0.1 --username=postgres pg_dump zholak>/home/zholak/zholak.sql --host=127.0.0.1 --username=postgres @@ -284,6 +286,7 @@ sudo apt-get install phppgadmin Установка pgAdmin4 через докер контейнер ```sh + sudo mkdir -p /opt/pgAdmin4/backups && sudo mkdir -p /opt/pgAdmin4 && sudo chmod -R 777 /opt/pgAdmin4 && sudo chown -R $USER:$USER /opt/pgAdmin4 @@ -304,7 +307,7 @@ services: PGADMIN_DEFAULT_PASSWORD: 123456 volumes: - pgadmin_data:/var/lib/pgadmin - + - /opt/pgAdmin4/backups:/var/lib/pgadmin/storage volumes: pgadmin_data: EOF @@ -322,8 +325,9 @@ EOF sudo docker compose down ``` - - +```sh +open http://localhost:5050 +``` Проверить что не записан левый репозиторий для phppgadmin в /ect/opt/ diff --git a/PostgreSQL/backup/backup.sh b/PostgreSQL/backup/backup.sh new file mode 100644 index 0000000..841c1f3 --- /dev/null +++ b/PostgreSQL/backup/backup.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +# Конфигурация +DB_NAME="CCALM" +DB_HOST="127.0.0.1" +DB_USER="postgres" +BACKUP_DIR="/opt/backups/data" +TIMESTAMP=$(date +%Y%m%d_%H%M) +BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.backup" + +# Проверка существования директории для бэкапов +if [ ! -d "$BACKUP_DIR" ]; then + echo "Ошибка: Директория $BACKUP_DIR не существует. Создаю..." + mkdir -p "$BACKUP_DIR" + if [ $? -ne 0 ]; then + echo "Ошибка: Не удалось создать директорию $BACKUP_DIR" + exit 1 + fi +fi + +# Установка прав для пользователя webdav +chown rclone:rclone "$BACKUP_DIR" +chmod 755 "$BACKUP_DIR" + +# Экспорт пароля (если не используется .pgpass) +# Замените 'your_password' на реальный пароль или настройте .pgpass +export PGPASSWORD='309A86FF65A78FB428F4E38DFE35F730' + +# Выполнение pg_dump +echo "Создание резервной копии базы данных $DB_NAME в $BACKUP_FILE..." +pg_dump "$DB_NAME" \ + --host="$DB_HOST" \ + --username="$DB_USER" \ + --format=custom \ + --file="$BACKUP_FILE" + +# Проверка успешности выполнения +if [ $? -eq 0 ]; then + echo "Резервная копия успешно создана: $BACKUP_FILE" + # Установка прав для пользователя webdav + chown webdav:webdav "$BACKUP_FILE" + chmod 644 "$BACKUP_FILE" +else + echo "Ошибка: Не удалось создать резервную копию" + exit 1 +fi + +# Очистка старых бэкапов (например, старше 7 дней) +find "$BACKUP_DIR" -name "${DB_NAME}_*.backup" -mtime +7 -delete +echo "Старые бэкапы (старше 7 дней) удалены" + +# Перемещаю на другой сервер +rclone move /opt/backups/data mywebdav:/backups --progress --no-check-certificate \ No newline at end of file diff --git a/Proxy/HAProxy_install.md b/Proxy/HAProxy_install.md index 2d7e902..57f2db6 100644 --- a/Proxy/HAProxy_install.md +++ b/Proxy/HAProxy_install.md @@ -6,9 +6,9 @@ Connect to the required server: ```sh ssh administrator@10.101.1.3 -p 22 ``` -Connect to CCALM Turkish infrastructure: +Home server ```sh -ssh igor@88.218.94.134 -p 2200 +ssh igor@192.168.200.81 -p 22 ``` ---------------------------------------------------------------------------------------------------- ## Install haproxy diff --git a/Proxy/Traefik_install.md b/Proxy/Traefik_install.md index 536f163..913dfac 100644 --- a/Proxy/Traefik_install.md +++ b/Proxy/Traefik_install.md @@ -107,7 +107,7 @@ http: ccalm-api-auth: entryPoints: - websecure - rule: "Host(`ccalm.test`) && PathPrefix(`/api/authorization/v02/`)" + rule: "(Host(`ccalm.test`) || Host(`almaty.ccalm.test`)) && PathPrefix(`/api/authorization/v02/`)" service: org_ccalm_api_authorization_v02 tls: certresolver: myresolver @@ -117,7 +117,7 @@ http: ccalm-dbms: entryPoints: - websecure - rule: "Host(`ccalm.test`) && PathPrefix(`/api/dbms/v09/`)" + rule: "(Host(`ccalm.test`) || Host(`almaty.ccalm.test`)) && PathPrefix(`/api/dbms/v09/`)" service: org_ccalm_dbms_v09 tls: certresolver: myresolver @@ -127,7 +127,7 @@ http: ccalm-translation: entryPoints: - websecure - rule: "Host(`ccalm.test`) && PathPrefix(`/api/translation/v01/`)" + rule: "(Host(`ccalm.test`) || Host(`almaty.ccalm.test`)) && PathPrefix(`/api/translation/v01/`)" service: org_ccalm_translation_v01 tls: certresolver: myresolver @@ -137,7 +137,7 @@ http: ccalm-login: entryPoints: - websecure - rule: "Host(`ccalm.test`) && PathPrefix(`/login/`)" + rule: "(Host(`ccalm.test`) || Host(`almaty.ccalm.test`)) && PathPrefix(`/login/`)" service: org_ccalm_login_v01 tls: certresolver: myresolver @@ -145,7 +145,7 @@ http: ccalm-default: entryPoints: - websecure - rule: "Host(`ccalm.test`)" + rule: "(Host(`ccalm.test`) || Host(`almaty.ccalm.test`))" service: org_ccalm tls: certresolver: myresolver @@ -164,6 +164,13 @@ http: service: local_gotify tls: {} + vault: + entryPoints: + - websecure + rule: "Host(`vault.local`)" + service: local_vault + tls: {} + middlewares: strip-auth-prefix: stripPrefix: @@ -199,6 +206,16 @@ http: path: "/" interval: "5s" + # Бэкенд для local_vault + local_vault: + loadBalancer: + servers: + - url: "https://192.168.200.85:8200" + serversTransport: insecureTransport + healthCheck: + path: "/" + interval: "5s" + # Бэкенд для org_ccalm_api_authorization_v02 (HTTPS с отключенной проверкой SSL) org_ccalm_api_authorization_v02: loadBalancer: @@ -264,6 +281,8 @@ tls: keyFile: "/etc/traefik/certs/powerdns.local.key" - certFile: "/etc/traefik/certs/gotify.local.crt" keyFile: "/etc/traefik/certs/gotify.local.key" + - certFile: "/etc/traefik/certs/vault.local.crt" + keyFile: "/etc/traefik/certs/vault.local.key" - certFile: "/etc/traefik/certs/wildcard.local.crt" keyFile: "/etc/traefik/certs/wildcard.local.key" - certFile: "/etc/traefik/certs/wildcard.test.crt" diff --git a/RClone/NFS_install.md b/RClone/NFS_install.md new file mode 100644 index 0000000..6bd5234 --- /dev/null +++ b/RClone/NFS_install.md @@ -0,0 +1,60 @@ +```sh +sudo apt update && +sudo apt install nfs-kernel-server -y +``` + +```sh +sudo mkdir -p /mnt/data/org_ccalm_almaty && +sudo chown nobody:nogroup /mnt/data/org_ccalm_almaty +``` + +Открой файл /etc/exports: + +```sh +sudo mcedit /etc/exports +``` +Добавь строку: +```config +/mnt/backups 192.168.200.0/24(rw,sync,no_subtree_check,no_root_squash) +``` +Пояснение: +/mnt/backups — путь к расшариваемой папке +192.168.1.0/24 — подсеть, которой разрешён доступ +rw — чтение и запись +sync — синхронная запись (безопаснее) +no_subtree_check — оптимизация доступа + +Применение изменений +```sh +sudo exportfs -ra +``` + +```sh +sudo systemctl restart nfs-kernel-server +``` + +(Необязательно) Разрешить доступ через firewall +```sh +sudo ufw allow from 192.168.200.0/24 to any port nfs +``` +Проверка экспортируемых папок +```sh +sudo exportfs -v +``` + + +## Подключение к NFS на клиенте (например, другая машина/VM) +```sh +sudo apt install nfs-common && +sudo mount 192.168.200.80:/mnt/data/org_ccalm_almaty /mnt/nfs-backups +``` + +Чтобы монтировалось при загрузке, добавь строку в sudo mcedit /etc/fstab: +```sh +192.168.200.80:/mnt/data/org_ccalm_almaty /mnt/backups nfs defaults 0 0 +``` + +Обновляем: +```sh +sudo mount -a +``` \ No newline at end of file diff --git a/RClone/RClone_install_linux.md b/RClone/RClone_install_linux.md new file mode 100644 index 0000000..24c1f44 --- /dev/null +++ b/RClone/RClone_install_linux.md @@ -0,0 +1,69 @@ +Connecting to infrasturture + +```sh +sudo useradd -r -s /sbin/nologin -d /opt/backup -m rclone +``` + + +```sh + ssh ubuntu@almaty.ccalm.org -p 22 +``` + +```sh +sudo apt update && +sudo apt install rclone +``` + +```sh +rclone version +``` + +Создаём настройку в ~/.config/rclone/rclone.conf +```sh +rclone config +``` + +При настройке для текущего пользователя задал такие параметры: +```conf +[mywebdav] +type = webdav +url = https://webdav.geovizor.top/ +vendor = other +user = admin +pass = iV6-JPSK7UOcY8xYfvKs9MjZtVMR4pqdKKCoXXtCaw +``` + + +Перемещаю все файлы с ранее созданным конфигом: +```sh +rclone move /opt/backups/data mywebdav:/backups --progress --no-check-certificate +``` + + + + + + + + + +Предварительно нужно настроить подключение а потом можно вызывать команду для копирования: +```sh +rclone move /путь/к/локальной/директории webdav:/путь/на/сервере +``` + + +Копирую файлы с сервера: +```sh +rclone copy webdav:/ E:\webdav --no-check-certificate --progress +``` + +Инициация синхронизации со списком файлов +```sh +rclone bisync webdav:/ E:\webdav --no-check-certificate --resync --verbose --create-empty-src-dirs +``` + +Регулярная двусторонняя синхронизация +```sh +rclone bisync webdav:/ E:\webdav --no-check-certificate --modify-window 1s --progress --create-empty-src-dirs +``` diff --git a/RClone/WebDAV_install.md b/RClone/WebDAV_install.md new file mode 100644 index 0000000..aa96c47 --- /dev/null +++ b/RClone/WebDAV_install.md @@ -0,0 +1,136 @@ +https://github.com/hacdias/webdav + +```sh +ssh igor@192.168.200.81 -p 22 +``` + +```sh +sudo apt update && +sudo apt install golang-go +``` + +```sh +git clone https://github.com/hacdias/webdav.git && +cd webdav +``` + +```sh +go build -o webdav . +``` + +```sh +cd /opt/webdav && +sudo tee config.yml > /dev/null <<'EOF' +address: "0.0.0.0" +port: 8085 +directory: "." +permissions: "R" +debug: true +users: + - username: admin + password: "U8Z0a6YY7taZ965" + directory: "/mnt/backups" + permissions: "CRUD" +EOF +``` + +Пытаемся запустить +```sh +cd /opt/webdav && +./webdav --config config.yml +``` +Проверяем что работает: +```sh +open http://192.168.200.81:8085 +``` + +Находим и убиваем процесс +```sh +ps aux | grep webdav +``` + +```sh +pkill -f 'webdav --config config.yml' +``` + +Создаю пользователя webdav +```sh +sudo useradd -r -s /sbin/nologin -d /opt/webdav -m webdav && +sudo chown -R webdav:webdav /opt/webdav && +sudo chmod -R 750 /opt/webdav +``` + +```sh +sudo nano /etc/systemd/system/webdav.service +``` + +```sh +cd /etc/systemd/system/ && +sudo tee webdav.service > /dev/null <<'EOF' +[Unit] +Description=WebDAV Server +After=network.target + +[Service] +WorkingDirectory=/opt/webdav +ExecStart=/opt/webdav/webdav --config config.yml +User=webdav +Group=webdav +Restart=on-failure + +[Install] +WantedBy=multi-user.target +EOF +``` + +```sh +sudo systemctl daemon-reexec && +sudo systemctl enable webdav && +sudo systemctl start webdav +``` + +```sh +sudo systemctl status webdav +``` +```sh +sudo journalctl -u webdav -b +``` + +Теперь WebDAV доступен по адресу: +```sh +start https://yourdomain.com/webdav/ +``` + + +## Настройка HAProxy + +Edit haproxy configuration file: +```sh +sudo mcedit /etc/haproxy/haproxy.cfg +``` + +frontend HTTPS: +```config +frontend https-in + bind *:443 ssl crt /etc/ssl/private/yourdomain.pem + acl is_webdav path_beg /webdav + use_backend webdav_backend if is_webdav +``` + +В backend: +```config +backend webdav_backend + server webdav1 127.0.0.1:8085 +``` + +```sh + haproxy -f /etc/haproxy/haproxy.cfg -c +```` +```sh +sudo systemctl restart haproxy +``` + +Для винды можно подключить диск при помощи: +``` +open https://www.raidrive.com/ +``` \ No newline at end of file diff --git a/Redis_install.md b/Redis_install.md new file mode 100644 index 0000000..682ffe5 --- /dev/null +++ b/Redis_install.md @@ -0,0 +1,53 @@ +**************************************************************************************************** +Подключаемся к инфраструктуре +```sh + ssh ubuntu@almaty.ccalm.org -p 22 +``` +**************************************************************************************************** +Install Redis по мативам: https://timeweb.cloud/tutorials/redis/ustanovka-i-nastrojka-redis-dlya-raznyh-os +```sh + sudo apt-get update && + sudo apt install redis -y && + redis-cli --version +``` +```sh + sudo systemctl restart redis +``` +```sh + sudo systemctl status redis +``` +Config: +```sh + sudo mcedit /etc/redis/redis.conf +``` +И меняем в конфигурации на: supervised systemd +Также желательно проверить настройку чтобы слушался только IP: 127.0.0.1 +``` + bind 0.0.0.0 +``` +Также в поле SECURITY нужно установить пароль, сгенерированный при помощи: +``` + openssl rand 25 | openssl base64 -A +``` +Примерно такой должен быть получиться: +``` + requirepass 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw== +``` +Перезагружаем: +```sh + sudo systemctl restart redis-server +``` +Проверяем Redis: +```sh + redis-cli +``` +Или так проверяем: +```sh + redis-cli -h 127.0.0.1 -p 6379 -a 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw== +``` +И пишем: ping + +Проверяем какие порты прослушиваются на компе: +```sh + sudo netstat -lnp | grep redis +``` diff --git a/Security/Certificates_config.md b/Security/Certificates_config.md index 6095f3b..8435d3a 100644 --- a/Security/Certificates_config.md +++ b/Security/Certificates_config.md @@ -90,6 +90,17 @@ cat gotify.local.crt gotify.local.key > gotify.local.pem ``` Теперь можно устанавливать в HAProxy этот gotify.local.pem сертификат +Создаём и подписываем одной группой команд: +```sh +openssl version && +openssl genrsa -out vault.local.key 2048 && +openssl req -new -key vault.local.key -out vault.local.csr -subj "/CN=vault.local" -addext "subjectAltName=DNS:vault.local" && +openssl x509 -req -in vault.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out vault.local.crt -days 365 -sha256 -copy_extensions copy && +openssl x509 -in vault.local.crt -text -noout && +cat vault.local.crt vault.local.key vault.local.csr > vault.local.pem +``` + + Подписать корневым CA: diff --git a/Security/HashiCorp_Vault_install.md b/Security/HashiCorp_Vault_install.md index 2144f50..25195c4 100644 --- a/Security/HashiCorp_Vault_install.md +++ b/Security/HashiCorp_Vault_install.md @@ -8,9 +8,9 @@ Vault — это инструмент от HashiCorp для безопасног ```sh wsl ``` -Похоже vault из Москвы недоступен: +Connecting to infrastructure: ```sh -ssh root@45.144.64.218 -p 2200 +ssh igor@192.168.200.85 -p 22 ``` ### 1.1. Добавление репозитория HashiCorp @@ -51,7 +51,7 @@ ssh root@45.144.64.218 -p 2200 ```sh vault --version ``` -Выдало: Vault v1.18.5 (2cb3755273dbd63f5b0f8ec50089b57ffd3fa330), built 2025-02-24T09:40:28Z +Выдало: Vault v1.19.4 (322786e236e268532e4b189845971ba67b5cbb23), built 2025-05-14T13:04:47Z ## 2. Запуск Vault @@ -106,28 +106,40 @@ start http://127.0.0.1:8200 ``` Останавливаю нажатием Ctrl + C - ### 2.2. Настройка Vault в режиме сервера -1. Создайте конфигурационный файл: +Creating sel signed sertificate: ```sh - sudo mkdir -p /etc/vault && - sudo mcedit /etc/vault/config.hcl +sudo openssl req -new -x509 -days 365 -nodes \ + -out /etc/vault.d/vault.local.crt \ + -keyout /etc/vault.d/vault.local.key \ + -subj "/CN=yourdomain.local" ``` -2. Добавьте следующий конфиг: -```text +Set file owner +```sh +sudo chown -R vault:vault /etc/vault.d/ +``` + +1. Создайте конфигурационный файл, Добавьте следующий конфиг: +```sh +sudo mkdir -p /etc/vault && +cd /etc/vault && +sudo tee config.hcl > /dev/null <<'EOF' + storage "file" { path = "/opt/vault/data" } listener "tcp" { - address = "127.0.0.1:8200" - tls_disable = 1 + address = "0.0.0.0:8200" + tls_cert_file = "/etc/vault.d/vault.local.crt" + tls_key_file = "/etc/vault.d/vault.local.key" } disable_mlock = true ui = true +EOF ``` 3. Создайте папку для хранения данных: @@ -171,7 +183,9 @@ sudo mcedit /etc/systemd/system/vault.service sudo systemctl enable vault && sudo systemctl start vault ``` - +```sh +sudo systemctl restart vault +``` 7. Проверьте статус: ```sh sudo systemctl status vault @@ -213,7 +227,7 @@ It is possible to generate new unseal keys, provided you have a quorum of existing unseal keys shares. See "vault operator rekey" for more information. ``` -3. Разблокируйте Vault, используя один из ключей (потом ещё 3 раза выполнить эту команду): +3. Разблокируйте Vault, используя ключ (потом ещё 3 раза выполнить эту команду): ```sh vault operator unseal ``` @@ -225,6 +239,7 @@ existing unseal keys shares. See "vault operator rekey" for more information. 5. Создаём(включаем) новое хранилище ключ-значение через ssh ```sh + export VAULT_TOKEN=hvs.FDMfGORUazCHm7jGrSofBVbx && vault secrets enable -path=org-ccalm kv-v2 ``` @@ -357,5 +372,18 @@ token_type = default-service, значит Vault не хранит токены --- -Теперь HashiCorp Vault установлен и готов к использованию! 🚀 +Согласно уроку желательно корневой сертификат создавать на 10 лет допустим: https://www.youtube.com/watch?v=eSDpMUeV2lQ +Для полноценного использования pki нужно создать роль! +certstrap --depot-path root init \ + --organization "GEOVizor" \ + --organizational-unit "IT" \ + --country "KZ" \ + --province "ALM" \ + --locality "Almaty" \ + --common-name "DemoCA Root Certificate Authority v1" \ + --expires "30 years" \ + --curve P-256 \ + --path-length 2 \ + --passphrase "pace_icy_hum_ward" + diff --git a/Ubuntu.md b/Ubuntu.md index 513afca..47f8402 100644 --- a/Ubuntu.md +++ b/Ubuntu.md @@ -434,6 +434,8 @@ sudo tar cvpzf /media/usb/backup.tgz --exclude=/var/www --exclude=/etc/fstab --e 0 1 * * * wget -O /dev/null -q 'http://locust.kz/get/list.php' 0 1 * * * /opt/backups/backup.sh +/opt/backups/backup.sh + Проверяю таблицу: sudo crontab -l -u www-data **************************************************************************************************** @@ -2050,34 +2052,6 @@ admin admin поменял на admin deSert!123 Ошибка на мейке... install **************************************************************************************************** -Install Redis по мативам: https://timeweb.cloud/tutorials/redis/ustanovka-i-nastrojka-redis-dlya-raznyh-os - sudo apt-get update - sudo apt install redis - redis-cli --version - sudo systemctl status redis -Config: - sudo mcedit /etc/redis/redis.conf -И меняем в конфигурации на: supervised systemd -Также желательно проверить настройку чтобы слушался только IP: 127.0.0.1 - bind 0.0.0.0 - -Также в поле SECURITY нужно установить пароль, сгенерированный при помощи: - openssl rand 25 | openssl base64 -A -Примерно такой должен быть получиться: - requirepass 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw== - -Перезагружаем: - sudo systemctl restart redis-server -Проверяем Redis: - redis-cli -Или так проверяем: - redis-cli -h 127.0.0.1 -p 6379 -a 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw== -И пишем: ping - -Проверяем какие порты прослушиваются на компе: - sudo netstat -lnp | grep redis - -**************************************************************************************************** Для настройки локального сервера имен DNS сервер в место Bind9 теперь Dnsmasq так как он проще, понадобилось для haproxy sudo apt-get install dnsmasq sudo apt-get install resolvconf