From 332e1b84e9d6c92152171443ebee89452e3db9db Mon Sep 17 00:00:00 2001 From: igor Date: Tue, 20 May 2025 20:16:22 +0500 Subject: [PATCH 1/3] =?UTF-8?q?=D0=9F=D0=BE=20=D0=B4=D0=B8=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D1=8F=D0=BC=20=D1=80=D0=B0=D1=81?= =?UTF-8?q?=D0=BA=D0=B8=D0=B4=D0=B0=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RabbitMQ_install.md | 0 ...rabbitmq_replication_setup_instructions.md | 682 ++++++++--------- Gotify_install.md => Chats/Gotify_install.md | 277 +++---- Zulip_install.md => Chats/Zulip_install.md | 76 +- DNS/PowerDNS_install.md | 9 +- DNS/Ubuntu_config.md | 52 ++ Unbound_install.md => DNS/Unbound_install.md | 188 ++--- Logs/Vector_dev_install.md | 171 +++++ Logs/Vector_dev_install_telegram.md | 197 +++++ Nginx_install.md | 46 +- .../Uptime_Kuma_install.md | 134 ++-- .../Wazuh_install.md | 0 .../HAProxy_install.md | 520 ++++++------- .../Traefik_install.md | 23 +- .../Traefik_install_CCALM.md | 0 .../Certificates_config.md | 11 + .../HashiCorp_Vault_install.md | 722 +++++++++--------- .../HashiCorp_Vault_install_windows.md | 272 +++---- 18 files changed, 1920 insertions(+), 1460 deletions(-) rename RabbitMQ_install.md => Brokers/RabbitMQ_install.md (100%) rename rabbitmq_replication_setup_instructions.md => Brokers/rabbitmq_replication_setup_instructions.md (95%) rename Gotify_install.md => Chats/Gotify_install.md (96%) rename Zulip_install.md => Chats/Zulip_install.md (96%) create mode 100644 DNS/Ubuntu_config.md rename Unbound_install.md => DNS/Unbound_install.md (95%) create mode 100644 Logs/Vector_dev_install.md create mode 100644 Logs/Vector_dev_install_telegram.md rename Uptime_Kuma_install.md => Observing/Uptime_Kuma_install.md (84%) rename Wazuh_install.md => Observing/Wazuh_install.md (100%) rename HAProxy_install.md => Proxy/HAProxy_install.md (97%) rename Traefik_install.md => Proxy/Traefik_install.md (92%) rename Traefik_install_CCALM.md => Proxy/Traefik_install_CCALM.md (100%) rename Certificates_config.md => Security/Certificates_config.md (87%) rename HashiCorp_Vault_install.md => Security/HashiCorp_Vault_install.md (96%) rename HashiCorp_Vault_install_windows.md => Security/HashiCorp_Vault_install_windows.md (97%) diff --git a/RabbitMQ_install.md b/Brokers/RabbitMQ_install.md similarity index 100% rename from RabbitMQ_install.md rename to Brokers/RabbitMQ_install.md diff --git a/rabbitmq_replication_setup_instructions.md b/Brokers/rabbitmq_replication_setup_instructions.md similarity index 95% rename from rabbitmq_replication_setup_instructions.md rename to Brokers/rabbitmq_replication_setup_instructions.md index 6b105b3..33d2302 100644 --- a/rabbitmq_replication_setup_instructions.md +++ b/Brokers/rabbitmq_replication_setup_instructions.md @@ -1,341 +1,341 @@ -Here’s a step-by-step guide to setting up a **RabbitMQ cluster with replication** correctly: - ---- - -## **Step 1: Prepare the Servers** - -Ensure you have at least **three** nodes (recommended for HA) with: - -- Ubuntu 22.04 (or a supported OS) -- Sufficient CPU/RAM based on workload -- Open necessary firewall ports (**5672, 15672, 25672**) - -Set hostnames for clarity: - -```bash -sudo hostnamectl set-hostname rabbitmq-node1 # Change for each node -``` - ---- - -## **Step 2: Install Erlang and RabbitMQ** - -Run the following on **all nodes**: - -### **1. Add the RabbitMQ Repository** - -```bash -sudo apt update -sudo apt install -y curl gnupg -curl -fsSL https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | sudo tee /usr/share/keyrings/rabbitmq-key.asc -echo "deb [signed-by=/usr/share/keyrings/rabbitmq-key.asc] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list -``` - -### **2. Install Erlang and RabbitMQ** - -```bash -sudo apt update -sudo apt install -y rabbitmq-server -``` - -### **3. Enable RabbitMQ** - -```bash -sudo systemctl enable --now rabbitmq-server -``` - ---- - -## **Step 3: Configure Clustering** - -### **1. Stop RabbitMQ on All Nodes** - -```bash -sudo systemctl stop rabbitmq-server -``` - -### **2. Configure Cookie for Clustering** - -Run on **all nodes** (same cookie ensures clustering works): - -```bash -echo "MY_CLUSTER_COOKIE" | sudo tee /var/lib/rabbitmq/.erlang.cookie -sudo chmod 600 /var/lib/rabbitmq/.erlang.cookie -``` - -Replace `"MY_CLUSTER_COOKIE"` with a strong, identical value on all nodes. - ---- - -## **Step 4: Join Nodes to the Cluster** - -Perform this on **nodes 2 and 3**, joining them to **node1**: - -```bash -sudo rabbitmqctl stop_app -sudo rabbitmqctl join_cluster rabbit@rabbitmq-node1 -sudo rabbitmqctl start_app -``` - -Check cluster status: - -```bash -sudo rabbitmqctl cluster_status -``` - ---- - -## **Step 5: Enable High Availability (HA) Mirroring** - -To replicate all queues, run on **any one node**: - -```bash -rabbitmqctl set_policy ha-all "^.*" '{"ha-mode":"all","ha-sync-mode":"automatic"}' -``` - -This ensures all queues are **replicated across all nodes**. - ---- - -## **Step 6: Enable Management UI** - -Run on **each node** to enable the web interface: - -```bash -sudo rabbitmq-plugins enable rabbitmq_management -``` - -Access at: -**http://[NODE_IP]:15672** -(Default login: `guest/guest`, change this for security.) - ---- - -## **Step 7: Test the Cluster** - -Run on **each node**: - -```bash -rabbitmqctl list_queues -``` - -Queues should be visible and synchronized. - ---- - -## **Step 8: Enable Auto-Recovery** (Optional) - -Edit `/etc/rabbitmq/rabbitmq.conf` on **each node** and add: - -```ini -cluster_formation.peer_discovery_backend = classic_config -cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-node1 -cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-node2 -cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq-node3 -``` - -Then restart RabbitMQ: - -```bash -sudo systemctl restart rabbitmq-server -``` - ---- - -## **Step 9: Secure the Cluster** (Recommended) - -### **1. Create an Admin User** - -```bash -rabbitmqctl add_user admin StrongPassword123! -rabbitmqctl set_user_tags admin administrator -rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" -``` - -Then **disable the guest account**: - -```bash -rabbitmqctl delete_user guest -``` - -### **2. Enable TLS (Optional)** - -For security, configure TLS in `/etc/rabbitmq/rabbitmq.conf`. Refer to RabbitMQ’s [TLS guide](https://www.rabbitmq.com/ssl.html). - ---- - -## **Step 10: Setup Monitoring (Optional)** - -Install **Prometheus & Grafana** or use **RabbitMQ Prometheus plugin**: - -```bash -sudo rabbitmq-plugins enable rabbitmq_prometheus -``` - ---- - -Now your RabbitMQ cluster is fully set up with **replication and high availability**! 🚀 - ---- - -
-
-
-
- -# Instructions to fix **unexpected** configuration errors - -If you can't find the RabbitMQ config file under `/etc/rabbitmq`, it may not exist by default. You need to **create it manually**. Here's how: - -## **1️⃣ Create the Configuration File** - -RabbitMQ uses either a **`.conf` file** (modern format) or a **`.config` file** (legacy format). The recommended format is `.conf`. - -Create the file if it doesn't exist: - -```bash -sudo nano /etc/rabbitmq/rabbitmq.conf -``` - -Then add the following cluster configuration: - -``` -cluster_formation.peer_discovery_backend = classic_config -cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-main -cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-replica -``` - -Save and exit (`CTRL+X`, then `Y`, then `Enter`). - ---- - -## **2️⃣ Set Correct Permissions** - -Ensure the RabbitMQ user can read it: - -```bash -sudo chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.conf -sudo chmod 644 /etc/rabbitmq/rabbitmq.conf -``` - ---- - -## **3️⃣ Restart RabbitMQ** - -After modifying the configuration, restart the RabbitMQ service: - -```bash -sudo systemctl restart rabbitmq-server -``` - -Check the status: - -```bash -sudo systemctl status rabbitmq-server -``` - ---- - -## **4️⃣ Verify the Cluster Configuration** - -After restarting, verify that clustering is working: - -```bash -rabbitmqctl cluster_status -``` - -If the nodes are listed correctly, your setup is working. - ---- - -## **5️⃣ If Using the Legacy `.config` Format** - -Some older installations use an **Erlang-based configuration file** (`rabbitmq.config`). If you prefer that, create: - -```bash -sudo nano /etc/rabbitmq/rabbitmq.config -``` - -Add this: - -```erlang -[ - {rabbit, [ - {cluster_formation, [ - {peer_discovery_backend, classic_config}, - {classic_config, [ - {nodes, ['rabbit@rabbitmq-main', 'rabbit@rabbitmq-replica']} - ]} - ]} - ]} -]. -``` - -Then restart RabbitMQ: - -```bash -sudo systemctl restart rabbitmq-server -``` - ---- - -### **🔍 Troubleshooting** - -❌ **RabbitMQ doesn't restart?** -Check logs for errors: - -```bash -sudo journalctl -u rabbitmq-server --no-pager | tail -50 -``` - -❌ **Cluster not forming?** -Try forcing a node to join manually: - -```bash -rabbitmqctl stop_app -rabbitmqctl join_cluster rabbit@rabbitmq-main -rabbitmqctl start_app -``` - ---- - -
-
-
-
- -# Instructions to fix **unexpected** management UI authentication errors - -stackoverflow answer [link](https://stackoverflow.com/a/40845332/27251837) - -## Answer - -### ❌ **Cannot login with guest/guest credentials** - -I had the same Problem.. - -I installed RabbitMQ and Enabled Web Interface also but still couldn't sign in with any user i newly created, this is because you need to be administrator to access this. - -Do not create any config file and mess with it.. - -This is what i did then, - -1. Add a new/fresh user, say user test and password test: - -```bash -rabbitmqctl add_user test test -``` - -2. Give administrative access to the new user: - -```bash -rabbitmqctl set_user_tags test administrator -``` - -3. Set permission to newly created user: - -```bash -rabbitmqctl set_permissions -p / test ".*" ".*" ".*" -``` - -That's it, enjoy :) +Here’s a step-by-step guide to setting up a **RabbitMQ cluster with replication** correctly: + +--- + +## **Step 1: Prepare the Servers** + +Ensure you have at least **three** nodes (recommended for HA) with: + +- Ubuntu 22.04 (or a supported OS) +- Sufficient CPU/RAM based on workload +- Open necessary firewall ports (**5672, 15672, 25672**) + +Set hostnames for clarity: + +```bash +sudo hostnamectl set-hostname rabbitmq-node1 # Change for each node +``` + +--- + +## **Step 2: Install Erlang and RabbitMQ** + +Run the following on **all nodes**: + +### **1. Add the RabbitMQ Repository** + +```bash +sudo apt update +sudo apt install -y curl gnupg +curl -fsSL https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | sudo tee /usr/share/keyrings/rabbitmq-key.asc +echo "deb [signed-by=/usr/share/keyrings/rabbitmq-key.asc] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list +``` + +### **2. Install Erlang and RabbitMQ** + +```bash +sudo apt update +sudo apt install -y rabbitmq-server +``` + +### **3. Enable RabbitMQ** + +```bash +sudo systemctl enable --now rabbitmq-server +``` + +--- + +## **Step 3: Configure Clustering** + +### **1. Stop RabbitMQ on All Nodes** + +```bash +sudo systemctl stop rabbitmq-server +``` + +### **2. Configure Cookie for Clustering** + +Run on **all nodes** (same cookie ensures clustering works): + +```bash +echo "MY_CLUSTER_COOKIE" | sudo tee /var/lib/rabbitmq/.erlang.cookie +sudo chmod 600 /var/lib/rabbitmq/.erlang.cookie +``` + +Replace `"MY_CLUSTER_COOKIE"` with a strong, identical value on all nodes. + +--- + +## **Step 4: Join Nodes to the Cluster** + +Perform this on **nodes 2 and 3**, joining them to **node1**: + +```bash +sudo rabbitmqctl stop_app +sudo rabbitmqctl join_cluster rabbit@rabbitmq-node1 +sudo rabbitmqctl start_app +``` + +Check cluster status: + +```bash +sudo rabbitmqctl cluster_status +``` + +--- + +## **Step 5: Enable High Availability (HA) Mirroring** + +To replicate all queues, run on **any one node**: + +```bash +rabbitmqctl set_policy ha-all "^.*" '{"ha-mode":"all","ha-sync-mode":"automatic"}' +``` + +This ensures all queues are **replicated across all nodes**. + +--- + +## **Step 6: Enable Management UI** + +Run on **each node** to enable the web interface: + +```bash +sudo rabbitmq-plugins enable rabbitmq_management +``` + +Access at: +**http://[NODE_IP]:15672** +(Default login: `guest/guest`, change this for security.) + +--- + +## **Step 7: Test the Cluster** + +Run on **each node**: + +```bash +rabbitmqctl list_queues +``` + +Queues should be visible and synchronized. + +--- + +## **Step 8: Enable Auto-Recovery** (Optional) + +Edit `/etc/rabbitmq/rabbitmq.conf` on **each node** and add: + +```ini +cluster_formation.peer_discovery_backend = classic_config +cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-node1 +cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-node2 +cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq-node3 +``` + +Then restart RabbitMQ: + +```bash +sudo systemctl restart rabbitmq-server +``` + +--- + +## **Step 9: Secure the Cluster** (Recommended) + +### **1. Create an Admin User** + +```bash +rabbitmqctl add_user admin StrongPassword123! +rabbitmqctl set_user_tags admin administrator +rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" +``` + +Then **disable the guest account**: + +```bash +rabbitmqctl delete_user guest +``` + +### **2. Enable TLS (Optional)** + +For security, configure TLS in `/etc/rabbitmq/rabbitmq.conf`. Refer to RabbitMQ’s [TLS guide](https://www.rabbitmq.com/ssl.html). + +--- + +## **Step 10: Setup Monitoring (Optional)** + +Install **Prometheus & Grafana** or use **RabbitMQ Prometheus plugin**: + +```bash +sudo rabbitmq-plugins enable rabbitmq_prometheus +``` + +--- + +Now your RabbitMQ cluster is fully set up with **replication and high availability**! 🚀 + +--- + +
+
+
+
+ +# Instructions to fix **unexpected** configuration errors + +If you can't find the RabbitMQ config file under `/etc/rabbitmq`, it may not exist by default. You need to **create it manually**. Here's how: + +## **1️⃣ Create the Configuration File** + +RabbitMQ uses either a **`.conf` file** (modern format) or a **`.config` file** (legacy format). The recommended format is `.conf`. + +Create the file if it doesn't exist: + +```bash +sudo nano /etc/rabbitmq/rabbitmq.conf +``` + +Then add the following cluster configuration: + +``` +cluster_formation.peer_discovery_backend = classic_config +cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-main +cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-replica +``` + +Save and exit (`CTRL+X`, then `Y`, then `Enter`). + +--- + +## **2️⃣ Set Correct Permissions** + +Ensure the RabbitMQ user can read it: + +```bash +sudo chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.conf +sudo chmod 644 /etc/rabbitmq/rabbitmq.conf +``` + +--- + +## **3️⃣ Restart RabbitMQ** + +After modifying the configuration, restart the RabbitMQ service: + +```bash +sudo systemctl restart rabbitmq-server +``` + +Check the status: + +```bash +sudo systemctl status rabbitmq-server +``` + +--- + +## **4️⃣ Verify the Cluster Configuration** + +After restarting, verify that clustering is working: + +```bash +rabbitmqctl cluster_status +``` + +If the nodes are listed correctly, your setup is working. + +--- + +## **5️⃣ If Using the Legacy `.config` Format** + +Some older installations use an **Erlang-based configuration file** (`rabbitmq.config`). If you prefer that, create: + +```bash +sudo nano /etc/rabbitmq/rabbitmq.config +``` + +Add this: + +```erlang +[ + {rabbit, [ + {cluster_formation, [ + {peer_discovery_backend, classic_config}, + {classic_config, [ + {nodes, ['rabbit@rabbitmq-main', 'rabbit@rabbitmq-replica']} + ]} + ]} + ]} +]. +``` + +Then restart RabbitMQ: + +```bash +sudo systemctl restart rabbitmq-server +``` + +--- + +### **🔍 Troubleshooting** + +❌ **RabbitMQ doesn't restart?** +Check logs for errors: + +```bash +sudo journalctl -u rabbitmq-server --no-pager | tail -50 +``` + +❌ **Cluster not forming?** +Try forcing a node to join manually: + +```bash +rabbitmqctl stop_app +rabbitmqctl join_cluster rabbit@rabbitmq-main +rabbitmqctl start_app +``` + +--- + +
+
+
+
+ +# Instructions to fix **unexpected** management UI authentication errors + +stackoverflow answer [link](https://stackoverflow.com/a/40845332/27251837) + +## Answer + +### ❌ **Cannot login with guest/guest credentials** + +I had the same Problem.. + +I installed RabbitMQ and Enabled Web Interface also but still couldn't sign in with any user i newly created, this is because you need to be administrator to access this. + +Do not create any config file and mess with it.. + +This is what i did then, + +1. Add a new/fresh user, say user test and password test: + +```bash +rabbitmqctl add_user test test +``` + +2. Give administrative access to the new user: + +```bash +rabbitmqctl set_user_tags test administrator +``` + +3. Set permission to newly created user: + +```bash +rabbitmqctl set_permissions -p / test ".*" ".*" ".*" +``` + +That's it, enjoy :) diff --git a/Gotify_install.md b/Chats/Gotify_install.md similarity index 96% rename from Gotify_install.md rename to Chats/Gotify_install.md index bb05b45..6f655a8 100644 --- a/Gotify_install.md +++ b/Chats/Gotify_install.md @@ -1,138 +1,139 @@ -# 📌 Установка Gotify в Docker на Ubuntu 24.04 - -## 1. Установка Docker и Docker Compose -Если Docker не установлен, установим его: -```sh - sudo apt update && sudo apt upgrade -y - sudo apt install -y docker.io docker-compose - sudo systemctl enable --now docker -``` -Проверим версию: -```sh - docker --version - docker-compose --version -``` - ----------------------------------------------------------------------------------------------------- - -## 2. Создание директории для Gotify -Лучшее место для сторонних сервисов — `/opt`: -```sh - sudo mkdir -p /opt/gotify - cd /opt/gotify -``` - -## 3. Создаём самоподписанный сертификат -```sh - sudo mkdir -p /opt/gotify/certs && cd /opt/gotify/certs - openssl req -x509 -newkey rsa:4096 -keyout gotify.key -out gotify.crt -days 365 -nodes -subj "/CN=your.domain.com" -``` ----------------------------------------------------------------------------------------------------- - -## 3. Создание `docker-compose.yml` -Создадим конфигурацию: -```sh - sudo mcedit /opt/gotify/docker-compose.yml -``` -Добавляем: -```yaml -services: - gotify: - image: gotify/server - container_name: gotify - restart: unless-stopped - volumes: - - "./certs:/certs" - - "./data:/app/data" - ports: - - "8080:443" # HTTPS - environment: - - GOTIFY_DEFAULTUSER_NAME=admin - - GOTIFY_DEFAULTUSER_PASS=s23uBXreliGIAVOohXhW - - TZ=Asia/Almaty - - GOTIFY_SERVER_SSL_ENABLED=true - - GOTIFY_SERVER_SSL_CERTFILE=/certs/gotify.crt - - GOTIFY_SERVER_SSL_CERTKEY=/certs/gotify.key - networks: - - gotify-net - -networks: - gotify-net: - driver: bridge -``` -💡 **Что здесь важно?** -- **`security_opt: - no-new-privileges:true`** → запрещает повышать привилегии в контейнере. -- **`volumes: ./data:/app/data`** → сохраняет данные вне контейнера. -- **`restart: unless-stopped`** → перезапускает Gotify, если он внезапно упадёт. -- **`ports: - "8080:80"`** → Gotify будет доступен на порту `8080`. - -🔑 **Замените пароль** (`supersecretpassword`) на свой! - ---- - -## 4. Запуск Gotify -Запускаем контейнер: -```sh - cd /opt/gotify - sudo docker compose down - sudo docker-compose up -d -``` -Проверяем статус: -```sh - sudo docker ps -``` -Вы должны увидеть работающий контейнер `gotify`. - ---- - -## 5. Проверка работы -Открываем браузер и переходим: -👉 **https://192.168.200.84:8080** -👉 **https://gotify.locust.kz:8443** - -Логинимся: -- **Имя**: `admin` -- **Пароль**: тот, что указан в `GOTIFY_DEFAULTUSER_PASS` - ---- - -## 6. Автоматический запуск при загрузке -Docker уже настроен на автозапуск, но проверим: -```sh - sudo systemctl enable --now docker -``` -Чтобы Gotify запускался автоматически: -```sh - cd /opt/gotify - sudo docker-compose restart -``` - ---- - -## 7. Логи и управление -Просмотр логов: -```sh - sudo docker-compose logs -f -``` -Перезапуск контейнера: -```sh - sudo docker-compose restart -``` -Остановка: -```sh - sudo docker-compose down -``` - ---- - -## 8. Удаление Gotify (если потребуется) -```sh - cd /opt/gotify - sudo docker-compose down - sudo rm -rf /opt/gotify -``` - ---- - -## ✅ Готово! -Теперь Gotify работает на порту `80` с безопасными настройками (`no-new-privileges:true`). 🚀 +# 📌 Установка Gotify в Docker на Ubuntu 24.04 + +## 1. Установка Docker и Docker Compose +Если Docker не установлен, установим его: +```sh + sudo apt update && sudo apt upgrade -y + sudo apt install -y docker.io docker-compose + sudo systemctl enable --now docker +``` +Проверим версию: +```sh + docker --version + docker-compose --version +``` + +---------------------------------------------------------------------------------------------------- + +## 2. Создание директории для Gotify +Лучшее место для сторонних сервисов — `/opt`: +```sh + sudo mkdir -p /opt/gotify + cd /opt/gotify +``` + +## 3. Создаём самоподписанный сертификат +```sh + sudo mkdir -p /opt/gotify/certs && cd /opt/gotify/certs + openssl req -x509 -newkey rsa:4096 -keyout gotify.key -out gotify.crt -days 365 -nodes -subj "/CN=your.domain.com" +``` +---------------------------------------------------------------------------------------------------- + +## 3. Создание `docker-compose.yml` +Создадим конфигурацию: +```sh + sudo mcedit /opt/gotify/docker-compose.yml +``` +Добавляем: +```yaml +services: + gotify: + image: gotify/server + container_name: gotify + restart: unless-stopped + volumes: + - "./certs:/certs" + - "./data:/app/data" + ports: + - "8080:443" # HTTPS + environment: + - GOTIFY_DEFAULTUSER_NAME=admin + - GOTIFY_DEFAULTUSER_PASS=s23uBXreliGIAVOohXhW + - TZ=Asia/Almaty + - GOTIFY_SERVER_SSL_ENABLED=true + - GOTIFY_SERVER_SSL_CERTFILE=/certs/gotify.crt + - GOTIFY_SERVER_SSL_CERTKEY=/certs/gotify.key + - GIN_MODE=debug + networks: + - gotify-net + +networks: + gotify-net: + driver: bridge +``` +💡 **Что здесь важно?** +- **`security_opt: - no-new-privileges:true`** → запрещает повышать привилегии в контейнере. +- **`volumes: ./data:/app/data`** → сохраняет данные вне контейнера. +- **`restart: unless-stopped`** → перезапускает Gotify, если он внезапно упадёт. +- **`ports: - "8080:80"`** → Gotify будет доступен на порту `8080`. + +🔑 **Замените пароль** (`supersecretpassword`) на свой! + +--- + +## 4. Запуск Gotify +Запускаем контейнер: +```sh + cd /opt/gotify + sudo docker compose down + sudo docker-compose up -d +``` +Проверяем статус: +```sh + sudo docker ps +``` +Вы должны увидеть работающий контейнер `gotify`. + +--- + +## 5. Проверка работы +Открываем браузер и переходим: +👉 **https://192.168.200.84:8080** +👉 **https://gotify.locust.kz:8443** + +Логинимся: +- **Имя**: `admin` +- **Пароль**: тот, что указан в `GOTIFY_DEFAULTUSER_PASS` + +--- + +## 6. Автоматический запуск при загрузке +Docker уже настроен на автозапуск, но проверим: +```sh + sudo systemctl enable --now docker +``` +Чтобы Gotify запускался автоматически: +```sh + cd /opt/gotify + sudo docker-compose restart +``` + +--- + +## 7. Логи и управление +Просмотр логов: +```sh + sudo docker-compose logs -f +``` +Перезапуск контейнера: +```sh + sudo docker-compose restart +``` +Остановка: +```sh + sudo docker-compose down +``` + +--- + +## 8. Удаление Gotify (если потребуется) +```sh + cd /opt/gotify + sudo docker-compose down + sudo rm -rf /opt/gotify +``` + +--- + +## ✅ Готово! +Теперь Gotify работает на порту `80` с безопасными настройками (`no-new-privileges:true`). 🚀 diff --git a/Zulip_install.md b/Chats/Zulip_install.md similarity index 96% rename from Zulip_install.md rename to Chats/Zulip_install.md index 8f5a5bd..8b6c352 100644 --- a/Zulip_install.md +++ b/Chats/Zulip_install.md @@ -1,38 +1,38 @@ -Открываю нужный сервер -```sh -wsl -``` - -```sh -curl -sSX POST https://istt-kz.zulipchat.com/api/v1/fetch_api_key \ - --data-urlencode username=ivanov.i@istt.kz \ - --data-urlencode password=fsUHb3hf3QCdpBLsKyhL -``` -Выдало: -```json -{ - "result":"success", - "msg":"", - "api_key":"91kQqr13HCwFP2HeARWPHxrfksYPH82p", - "email":"ivanov.i@istt.kz", - "user_id":880555 -} -``` - -```sh -curl -X POST https://istt-kz.zulipchat.com/api/v1/messages \ - -u "ivanov.i@istt.kz:91kQqr13HCwFP2HeARWPHxrfksYPH82p" \ - -d "type=stream" \ - -d "to=general" \ - -d "topic=Тест5" \ - -d "content=Привет из консоли!" -``` - -```sh -curl -X POST https://istt-kz.zulipchat.com/api/v1/messages \ - -u "ivanov.i@istt.kz:91kQqr13HCwFP2HeARWPHxrfksYPH82p" \ - -d "type=private" \ - -d "to=ivanov.i@istt.kz" \ - -d "topic=Тест5" \ - -d "content=Привет из консоли!" -``` +Открываю нужный сервер +```sh +wsl +``` + +```sh +curl -sSX POST https://istt-kz.zulipchat.com/api/v1/fetch_api_key \ + --data-urlencode username=ivanov.i@istt.kz \ + --data-urlencode password=fsUHb3hf3QCdpBLsKyhL +``` +Выдало: +```json +{ + "result":"success", + "msg":"", + "api_key":"91kQqr13HCwFP2HeARWPHxrfksYPH82p", + "email":"ivanov.i@istt.kz", + "user_id":880555 +} +``` + +```sh +curl -X POST https://istt-kz.zulipchat.com/api/v1/messages \ + -u "ivanov.i@istt.kz:91kQqr13HCwFP2HeARWPHxrfksYPH82p" \ + -d "type=stream" \ + -d "to=general" \ + -d "topic=Тест5" \ + -d "content=Привет из консоли!" +``` + +```sh +curl -X POST https://istt-kz.zulipchat.com/api/v1/messages \ + -u "ivanov.i@istt.kz:91kQqr13HCwFP2HeARWPHxrfksYPH82p" \ + -d "type=private" \ + -d "to=ivanov.i@istt.kz" \ + -d "topic=Тест5" \ + -d "content=Привет из консоли!" +``` diff --git a/DNS/PowerDNS_install.md b/DNS/PowerDNS_install.md index e4704d4..4793619 100644 --- a/DNS/PowerDNS_install.md +++ b/DNS/PowerDNS_install.md @@ -206,7 +206,8 @@ sudo pdnsutil add-record locust.ge @ NS 3600 ns2.geovizor.top For deleting record please run command: ```sh -pdnsutil delete-rrset locust.ge locust.ge.locust.ge NS +sudo pdnsutil delete-rrset locust.ge locust.ge.locust.ge NS +sudo pdnsutil delete-rrset geovizor.top gotify A ``` @@ -223,7 +224,7 @@ Minimum = 3600 (1 час) Проверим список зон ```sh sudo pdnsutil list-all-zones && -sudo pdnsutil list-zone locust.kz +sudo pdnsutil list-zone geovizor.top ``` Проверяем отвечалет ли: ```sh @@ -364,7 +365,7 @@ journalctl -u pdns-recursor --no-pager | tail -n 50 ``` ---------------------------------------------------------------------------------------------------- -## ********** По идее отключать не нужно так как systemd-resolved использует другой IP: 127.0.0.54:53 (Отключаю systemd-resolved иначе он будет конфликтовать с PowerDNS) ********** +## ********** По идее systemd-resolved отключать не нужно так как он использует другой IP: 127.0.0.54:53 ********** Редактирую /etc/netplan/ для того чтобы прописать поднятый DNS сервер на 127.0.0.1 (не знаю сработает ли так как отключу systemd-resolved) ```sh @@ -613,7 +614,7 @@ open http://192.168.200.85:9191/login ---------------------------------------------------------------------------------------------------- -Настраиваем запус на постоянную работу через Gunicorn и systemd +Настраиваем запуск на постоянную работу через Gunicorn и systemd ```sh cd /opt/web/powerdns-admin && diff --git a/DNS/Ubuntu_config.md b/DNS/Ubuntu_config.md new file mode 100644 index 0000000..ee40403 --- /dev/null +++ b/DNS/Ubuntu_config.md @@ -0,0 +1,52 @@ +Чтобы в Ubuntu все домены с маской *.local отправлялись на DNS-сервер 192.168.200.85 (где работает PowerDNS на порту 53), тебе нужно настроить DNS-резолвинг так, чтобы: + +Все запросы к доменам, оканчивающимся на .local, отправлялись на указанный DNS. + +Остальные домены резолвились через системный DNS как обычно. + +✅ Способ 1: Использовать systemd-resolved (рекомендуется для Ubuntu 18.04+, особенно 20.04 и 22.04) +Ubuntu по умолчанию использует systemd-resolved, который поддерживает пер-доменное направление DNS-запросов. + +Шаги: +Создай файл в /etc/systemd/resolved.conf.d/: +```sh +ssh igor@192.168.200.84 -p 22 +``` + +Создаю директорию +```sh +sudo mkdir -p /etc/systemd/resolved.conf.d && +sudo mcedit /etc/systemd/resolved.conf.d/local-dns.conf +``` + +Прописываю содержимое: +```conf +[Resolve] +DNS=192.168.200.85 +Domains=~local +``` + +Перезапускаю +```sh +sudo systemctl restart systemd-resolved && +``` + +Проверяю настройки +```sh +resolvectl status +``` + +Проверяем +```sh +ping gotify.local +``` +Проверяем сертификат: +```sh +curl https://gotify.local +``` + +Добавляем корневой сертификат для домена local. +```sh +sudo cp rootCA.crt /usr/local/share/ca-certificates/rootCA.crt && +sudo update-ca-certificates +``` diff --git a/Unbound_install.md b/DNS/Unbound_install.md similarity index 95% rename from Unbound_install.md rename to DNS/Unbound_install.md index 2145027..ebee21a 100644 --- a/Unbound_install.md +++ b/DNS/Unbound_install.md @@ -1,94 +1,94 @@ -```sh - sudo apt update && - sudo apt install unbound -y && - unbound -V -``` - -```sh - sudo systemctl start unbound && - sudo systemctl enable unbound && - sudo systemctl status unbound -``` -On Windows configuration is: - -```yaml -server: - verbosity: 4 - qname-minimisation: no - interface: 127.0.0.1 - do-ip6: no - do-ip4: yes - logfile: "C:\unbound.log" - domain-insecure: "test." - domain-insecure: "local." - domain-insecure: "pizza." - auto-trust-anchor-file: "C:\Program Files\Unbound\root.key" - private-address: ::/0 - harden-dnssec-stripped: no - harden-referral-path: no - -# Явно указываем, что зона "test." не локальная -local-zone: "test." transparent - -forward-zone: - name: "test." - forward-addr: 192.168.200.85@5300 - -forward-zone: - name: "local." - forward-addr: 192.168.200.85@5300 - -forward-zone: - name: "pizza." - forward-addr: 10.101.1.31@53 - -forward-zone: - name: "srv." - forward-addr: 10.101.1.31@53 - -remote-control: - control-enable: yes - control-interface: 127.0.0.1 - control-use-cert: no -``` - -On Linux conf file devide on anoter files -```sh - sudo mcedit /etc/unbound/unbound.conf -``` - -```sh - cd /etc/unbound/ && - sudo mc -``` - -Получить полный список локальных зон можно так: unbound-control -```sh - unbound-control list_local_zones -``` - -```sh - sudo systemctl restart unbound -``` - -```sh - sudo systemctl status unbound.service -``` -```sh - sudo journalctl -xeu unbound.service -``` - -Check on errors: -```sh - sudo unbound-checkconf /etc/unbound/unbound.conf -``` - - -Прописываем для определенного интерфейса: -```sh - sudo resolvectl dns wlp14s0 127.0.0.1 -``` -Проверяем что стоит в качестве NDS резольвера -```sh - resolvectl status -``` +```sh + sudo apt update && + sudo apt install unbound -y && + unbound -V +``` + +```sh + sudo systemctl start unbound && + sudo systemctl enable unbound && + sudo systemctl status unbound +``` +On Windows configuration is: + +```yaml +server: + verbosity: 4 + qname-minimisation: no + interface: 127.0.0.1 + do-ip6: no + do-ip4: yes + logfile: "C:\unbound.log" + domain-insecure: "test." + domain-insecure: "local." + domain-insecure: "pizza." + auto-trust-anchor-file: "C:\Program Files\Unbound\root.key" + private-address: ::/0 + harden-dnssec-stripped: no + harden-referral-path: no + +# Явно указываем, что зона "test." не локальная +local-zone: "test." transparent + +forward-zone: + name: "test." + forward-addr: 192.168.200.85@5300 + +forward-zone: + name: "local." + forward-addr: 192.168.200.85@5300 + +forward-zone: + name: "pizza." + forward-addr: 10.101.1.31@53 + +forward-zone: + name: "srv." + forward-addr: 10.101.1.31@53 + +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + control-use-cert: no +``` + +On Linux conf file devide on anoter files +```sh + sudo mcedit /etc/unbound/unbound.conf +``` + +```sh + cd /etc/unbound/ && + sudo mc +``` + +Получить полный список локальных зон можно так: unbound-control +```sh + unbound-control list_local_zones +``` + +```sh + sudo systemctl restart unbound +``` + +```sh + sudo systemctl status unbound.service +``` +```sh + sudo journalctl -xeu unbound.service +``` + +Check on errors: +```sh + sudo unbound-checkconf /etc/unbound/unbound.conf +``` + + +Прописываем для определенного интерфейса: +```sh + sudo resolvectl dns wlp14s0 127.0.0.1 +``` +Проверяем что стоит в качестве NDS резольвера +```sh + resolvectl status +``` diff --git a/Logs/Vector_dev_install.md b/Logs/Vector_dev_install.md new file mode 100644 index 0000000..12f0a13 --- /dev/null +++ b/Logs/Vector_dev_install.md @@ -0,0 +1,171 @@ +# Настройка Vector для отправки логов в Gotify + +Эта инструкция описывает, как установить Vector, настроить его для чтения JSON-логов из файла `/opt/org_ccalm_main/logs/ccalm.log`, фильтрации строк с уровнем `ERROR` и отправки уведомлений в Gotify. + +--- +## 0. ✅ Подключаемся к инфраструктуре + +```sh + ssh igor@ccalm.org -p 2200 +``` + +## Предварительные требования +- ОС: Ubuntu/Debian (для других ОС уточните, чтобы адаптировать команды). +- Файл логов: `/opt/org_ccalm_main/logs/ccalm.log` с JSON-строками (поля `level` и `message`). +- Gotify: Доступный сервер Gotify с URL и токеном (например, `https://gotify.example.com/message?token=`). +- Доступ к терминалу с правами `sudo`. + + +## Шаг 1: Установка Vector + +Пробуем скачать deb пакет с сайта +```sh +curl -L https://packages.timber.io/vector/0.43.1/vector_0.43.1-1_amd64.deb -o vector_0.43.1-1_amd64.deb && +sudo dpkg -i vector_0.43.1-1_amd64.deb && +sudo apt-get install -f && +vector --version +``` + +## Шаг 2: Создание конфигурации Vector +Vector использует YAML для конфигурации. Настроим чтение логов, фильтрацию `ERROR` и отправку в Gotify. + +1. Создайте файл конфигурации `/etc/vector/vector.yaml`: +```sh +cd /etc/vector && +sudo tee vector.yaml > /dev/null <<'EOF' +data_dir: "/var/lib/vector" + +sources: + ccalm_logs: + type: file + include: + - /opt/org_ccalm_main/logs/ccalm.log + read_from: beginning + +transforms: + parse_json: + type: remap + inputs: + - ccalm_logs + source: | + structured, err = parse_json(.message) + if err != null { + abort + } + merged, err = merge(., structured) + if err != null { + abort + } + . = merged + + filter_errors: + type: filter + inputs: + - parse_json + condition: '.level == "ERROR"' + + format_telegram_json: + type: remap + inputs: + - filter_errors + source: | + msg, err = string(.message) + if err != null { + msg = "Unable to parse message" + } + .message = "{\"title\":\"CCALM Main Error Log\",\"message\":\"ERROR: " + msg + "\"}" + + +sinks: + gotify: + type: http + inputs: + - filter_errors + uri: "https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ" + method: post + encoding: + codec: json + template: '{"title":"CCALM Main Error Log","message":"Test message 00","priority":5}' + request: + headers: + Content-Type: "application/json" + Host: "gotify.geovizor.top" + Content-Length: "{{ content_length }}" + tls: + verify_certificate: false + verify_hostname: false +EOF +``` + +Пробую отправку через curl +```sh +curl -X POST -k "https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ" \ + -H "Content-Type: application/json" \ + -d '{"message": "Test message", "priority": 5}' +``` + + +Проверяем что gotify работает: +```sh +curl -k -X POST -H "Content-Type: application/json" -H "Host: gotify.geovizor.top" -d '{"message":"Test message 00","priority":5}' --http1.1 https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ -v +``` + +### Объяснение конфигурации +- **Source (`ccalm_logs`)**: Читает логи из файла, парсит JSON, поддерживает многострочные логи. +- **Transform (`filter_errors`)**: Фильтрует логи с `level: "ERROR"`. +- **Sink (`gotify`)**: Отправляет отфильтрованные логи в Gotify через HTTP POST. + +## Шаг 3: Проверка конфигурации +Проверьте корректность YAML: +```sh +vector --config /etc/vector/vector.yaml validate +``` +Ожидаемый вывод: `Configuration is valid`. + +## Шаг 4: Запуск Vector +### Тестовый запуск (для отладки) +```sh +sudo vector --config /etc/vector/vector.yaml +``` + +### Запуск как сервиса +1. Включите и запустите сервис: +```sh + sudo systemctl enable vector + sudo systemctl start vector +``` +2. Проверьте статус: +```sh + sudo systemctl status vector +``` + + + +## Шаг 5: Проверка отправки в Gotify +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 +``` +3. Проверьте Gotify (веб-интерфейс или приложение) — должно прийти уведомление с заголовком "CCALM Log Error" и сообщением "Database connection failed". + +## Шаг 6: Отладка +- Логи Vector: `/var/log/vector/vector.log` или stdout (в тестовом режиме). +- Проверьте логи при проблемах: +```sh + cat /var/log/vector/vector.log +``` + +## Дополнительные настройки +- **Права доступа к файлу логов**: +```sh + sudo chown vector:vector /opt/org_ccalm_main/logs/ccalm.log + sudo chmod 644 /opt/org_ccalm_main/logs/ccalm.log +``` +- **Если JSON-формат отличается**: Если поле `level` называется иначе (например, `log_level`), замените `.level` на `.log_level` в `condition`. +- **HTTP вместо HTTPS**: Если Gotify использует HTTP, замените `https://` на `http://` в `uri`. + +## Примечания +- Убедитесь, что Gotify настроен и токен действителен. +- Если логи не отправляются, проверьте сетевую доступность Gotify и правильность URL/токена. +- Для чтения только новых логов удалите `read_from: beginning` в конфигурации. \ No newline at end of file diff --git a/Logs/Vector_dev_install_telegram.md b/Logs/Vector_dev_install_telegram.md new file mode 100644 index 0000000..aa613d7 --- /dev/null +++ b/Logs/Vector_dev_install_telegram.md @@ -0,0 +1,197 @@ +Шаг 1: Создание Telegram-бота +Зарегистрируйте бота через BotFather: + +Откройте Telegram и найдите @BotFather. +Отправьте команду /start. +Отправьте /newbot, чтобы создать нового бота. +Следуйте инструкциям: +Укажите имя бота (например, MyLogBot). +Укажите username бота, заканчивающийся на bot (например, @MyLogAllBot). +После создания вы получите токен (например, 8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws). Сохраните его, он понадобится для API. + + + + + + + +# Настройка Vector для отправки логов в Gotify + +Эта инструкция описывает, как установить Vector, настроить его для чтения JSON-логов из файла `/opt/org_ccalm_main/logs/ccalm.log`, фильтрации строк с уровнем `ERROR` и отправки уведомлений в Gotify. + +--- +## 0. ✅ Подключаемся к инфраструктуре + +```sh + ssh igor@ccalm.org -p 2200 +``` + +## Предварительные требования +- ОС: Ubuntu/Debian (для других ОС уточните, чтобы адаптировать команды). +- Файл логов: `/opt/org_ccalm_main/logs/ccalm.log` с JSON-строками (поля `level` и `message`). +- Gotify: Доступный сервер Gotify с URL и токеном (например, `https://gotify.example.com/message?token=`). +- Доступ к терминалу с правами `sudo`. + + +## Шаг 1: Установка Vector + +Пробуем скачать deb пакет с сайта + +```sh +curl -L https://packages.timber.io/vector/0.46.X/vector_0.46.1-1_amd64.deb -o vector_0.46.1-1_amd64.deb && +sudo dpkg -i vector_0.46.1-1_amd64.deb && +sudo apt-get install -f && +vector --version +``` + +That make deleting: +```sh +sudo apt remove --purge vector +``` + + + +## Шаг 2: Создание конфигурации Vector +Vector использует YAML для конфигурации. Настроим чтение логов, фильтрацию `ERROR` и отправку в Gotify. + +1. Создайте файл конфигурации `/etc/vector/vector.yaml`: +```sh +cd /etc/vector && +sudo tee vector.yaml > /dev/null <<'EOF' +data_dir: "/var/lib/vector" + +sources: + ccalm_logs: + type: file + include: + - /opt/org_ccalm_main/logs/ccalm.log + read_from: beginning + +transforms: + parse_json: + type: remap + inputs: + - ccalm_logs + source: | + structured, err = parse_json(.message) + if err != null { + abort + } + merged, err = merge(., structured) + if err != null { + abort + } + . = merged + + filter_errors: + type: filter + inputs: + - parse_json + condition: '.level == "ERROR"' + + format_telegram_json: + type: remap + inputs: + - filter_errors + source: | + msg, err = string(.message) + if err != null { + msg = "Unable to parse message" + } + .message = "{\"chat_id\":\"307675888\",\"text\":\"ERROR: " + msg + "\"}" + +sinks: + telegram: + type: http + inputs: + - format_telegram_json + uri: "https://api.telegram.org/bot8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws/sendMessage" + method: post + encoding: + codec: text + request: + headers: + Content-Type: "application/json" + batch: + max_events: 1 + +EOF +``` + +curl https://api.telegram.org/bot8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws/getUpdates + + +Пробую отправку через curl +```sh +curl -X POST -k "https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ" \ + -H "Content-Type: application/json" \ + -d '{"message": "Test message", "priority": 5}' +``` + + +Проверяем что gotify работает: +```sh +curl -k -X POST -H "Content-Type: application/json" -H "Host: gotify.geovizor.top" -d '{"message":"Test message 00","priority":5}' --http1.1 https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ -v +``` + +### Объяснение конфигурации +- **Source (`ccalm_logs`)**: Читает логи из файла, парсит JSON, поддерживает многострочные логи. +- **Transform (`filter_errors`)**: Фильтрует логи с `level: "ERROR"`. +- **Sink (`gotify`)**: Отправляет отфильтрованные логи в Gotify через HTTP POST. + +## Шаг 3: Проверка конфигурации +Проверьте корректность YAML: +```sh +vector --config /etc/vector/vector.yaml validate +``` +Ожидаемый вывод: `Configuration is valid`. + +## Шаг 4: Запуск Vector +### Тестовый запуск (для отладки) +```sh +sudo vector --config /etc/vector/vector.yaml +``` + +### Запуск как сервиса +1. Включите и запустите сервис: +```sh + sudo systemctl enable vector + sudo systemctl start vector +``` +2. Проверьте статус: +```sh + sudo systemctl status vector +``` +```sh + sudo systemctl stop vector +``` + + +## Шаг 5: Проверка отправки в Gotify +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 +``` +3. Проверьте Gotify (веб-интерфейс или приложение) — должно прийти уведомление с заголовком "CCALM Log Error" и сообщением "Database connection failed". + +## Шаг 6: Отладка +- Логи Vector: `/var/log/vector/vector.log` или stdout (в тестовом режиме). +- Проверьте логи при проблемах: +```sh + cat /var/log/vector/vector.log +``` + +## Дополнительные настройки +- **Права доступа к файлу логов**: +```sh + sudo chown vector:vector /opt/org_ccalm_main/logs/ccalm.log + sudo chmod 644 /opt/org_ccalm_main/logs/ccalm.log +``` +- **Если JSON-формат отличается**: Если поле `level` называется иначе (например, `log_level`), замените `.level` на `.log_level` в `condition`. +- **HTTP вместо HTTPS**: Если Gotify использует HTTP, замените `https://` на `http://` в `uri`. + +## Примечания +- Убедитесь, что Gotify настроен и токен действителен. +- Если логи не отправляются, проверьте сетевую доступность Gotify и правильность URL/токена. +- Для чтения только новых логов удалите `read_from: beginning` в конфигурации. \ No newline at end of file diff --git a/Nginx_install.md b/Nginx_install.md index 0753298..a251c20 100644 --- a/Nginx_install.md +++ b/Nginx_install.md @@ -19,27 +19,33 @@ sudo apt-get install nginx -y ``` Самой важной строкой является Common Name (введите FQDN или свое имя). Как правило, в эту строку вносят доменное имя, с которым нужно связать сервер. В случае если доменного имени нет, внесите в эту строку IP-адрес сервера. ```sh - sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096 + sudo openssl dhparam -out /etc/nginx/dhparam.pem 2048 ``` + И вписываем в него: ```sh cd /etc/nginx/sites-available/ && sudo tee ccalm.org > /dev/null <<'EOF' server { - listen 8081 ssl http2; - listen [::]:8081 ssl http2; - - server_name ccalm.org; - - ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; - ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; - ssl_dhparam /etc/nginx/dhparam.pem; + listen 8081; + listen [::]:8081; root /opt/www/org_ccalm; - index index.html index.htm; + index index.html; + + server_name ccalm.org www.ccalm.org; location / { - try_files $uri $uri/ =404; # Попытка найти файл или возвращение 404 + try_files $uri $uri/ =404; + + # Оптимизация для быстрой отдачи статики + sendfile on; # Использует sendfile() ядра Linux для ускорения + tcp_nopush off; # Отключает задержку Nagle (если нужна мгновенная отправка) + } + location ~ /index\.html$ { + add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate"; + add_header Pragma "no-cache"; + add_header Expires 0; } } EOF @@ -50,8 +56,6 @@ EOF sudo ln -s /etc/nginx/sites-available/ccalm.org /etc/nginx/sites-enabled/ ``` - - ```sh sudo systemctl restart nginx ``` @@ -79,17 +83,17 @@ journalctl -u nginx.service -n 50 cd /etc/nginx/sites-available/ && sudo tee geovizor.top > /dev/null <<'EOF' server { - listen 8081; - listen [::]:8081; + listen 8081; + listen [::]:8081; - root /opt/www/istransit.kz; - index index.html; + root /opt/www/istransit.kz; + index index.html; - server_name istransit.kz www.istransit.kz; + server_name istransit.kz www.istransit.kz; - location / { - try_files $uri $uri/ =404; - } + location / { + try_files $uri $uri/ =404; + } location ~ /index\.html$ { add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate"; add_header Pragma "no-cache"; diff --git a/Uptime_Kuma_install.md b/Observing/Uptime_Kuma_install.md similarity index 84% rename from Uptime_Kuma_install.md rename to Observing/Uptime_Kuma_install.md index 6e6d56d..afa357a 100644 --- a/Uptime_Kuma_install.md +++ b/Observing/Uptime_Kuma_install.md @@ -1,66 +1,68 @@ -# Установка Uptime Kuma в Ubuntu 24.04 с помощью Docker Compose - -## 1. Установка необходимых пакетов -Обновите систему и установите Docker и Docker Compose: - -```sh -sudo apt update && sudo apt upgrade -y -sudo apt install -y docker.io docker-compose -``` - -## 2. Создание директории для Uptime Kuma -```sh - sudo mkdir -p /opt/uptime-kuma - cd /opt/uptime-kuma -``` - -## 3. Создание `docker-compose.yml` -Создайте файл `docker-compose.yml`: - -```sh - sudo mcedit /opt/uptime-kuma/docker-compose.yml -``` - -Вставьте следующий конфигурационный файл: - -```yaml -services: - uptime-kuma: - image: louislam/uptime-kuma:latest - container_name: uptime-kuma - restart: always - ports: - - "3001:3001" - volumes: - - ./data:/app/data -``` - -## 4. Запуск контейнера -```sh - sudo docker-compose up -d -``` - -## 5. Проверка работы Uptime Kuma -Откройте браузер и перейдите по адресу: - -```sh -start http://192.168.200.84:3001 -``` - -## 6. Управление контейнером -- **Остановить Uptime Kuma:** -```sh - sudo docker-compose down -``` -- **Перезапустить контейнер:** -```sh - sudo docker-compose restart -``` -- **Просмотреть логи:** - -```sh - sudo docker-compose logs -f -``` - -Готово! Uptime Kuma установлен и запущен в Docker на Ubuntu 24.04. 🚀 - +# Установка Uptime Kuma в Ubuntu 24.04 с помощью Docker Compose + +## 1. Установка необходимых пакетов +Обновите систему и установите Docker и Docker Compose: + +```sh +sudo apt update && sudo apt upgrade -y +sudo apt install -y docker.io docker-compose +``` + +## 2. Создание директории для Uptime Kuma +```sh + sudo mkdir -p /opt/uptime-kuma + cd /opt/uptime-kuma +``` + +## 3. Создание `docker-compose.yml` +Создайте файл `docker-compose.yml`: + +```sh + sudo mcedit /opt/uptime-kuma/docker-compose.yml +``` + +Вставьте следующий конфигурационный файл: +В кодфиге прописан корневой сертификат чтобы node.js ему доверял +```yaml +services: + uptime-kuma: + image: louislam/uptime-kuma:latest + container_name: uptime-kuma + restart: always + ports: + - "3001:3001" + volumes: + - ./data:/app/data + - /usr/local/share/ca-certificates:/usr/local/share/ca-certificates:ro + environment: + - NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/rootCA.crt +``` + +## 4. Запуск контейнера +```sh + sudo docker-compose up -d +``` + +## 5. Проверка работы Uptime Kuma +Откройте браузер и перейдите по адресу: + +```sh +start http://192.168.200.84:3001 +``` + +## 6. Управление контейнером +- **Остановить Uptime Kuma:** +```sh + sudo docker-compose down +``` +- **Перезапустить контейнер:** +```sh + sudo docker-compose restart +``` +- **Просмотреть логи:** + +```sh + sudo docker-compose logs -f +``` + +Готово! Uptime Kuma установлен и запущен в Docker на Ubuntu 24.04. 🚀 diff --git a/Wazuh_install.md b/Observing/Wazuh_install.md similarity index 100% rename from Wazuh_install.md rename to Observing/Wazuh_install.md diff --git a/HAProxy_install.md b/Proxy/HAProxy_install.md similarity index 97% rename from HAProxy_install.md rename to Proxy/HAProxy_install.md index f0bc7e4..2d7e902 100644 --- a/HAProxy_install.md +++ b/Proxy/HAProxy_install.md @@ -1,260 +1,260 @@ -# 📌 Установка HAProxy на Ubuntu 20.04 -**************************************************************************************************** -На основе инструкции из https://itsecforu.ru/2019/07/15/⏳-настройка-балансировщика-нагрузки-h/ - -Connect to the required server: -```sh -ssh administrator@10.101.1.3 -p 22 -``` -Connect to CCALM Turkish infrastructure: -```sh -ssh igor@88.218.94.134 -p 2200 -``` ----------------------------------------------------------------------------------------------------- -## Install haproxy -```sh - sudo apt-get update && sudo apt-get install haproxy -y -```` -Создаём резервную копию файла: -```sh -sudo cp /etc/haproxy/haproxy.cfg{,.bak} -```` -Редактируем конфигурацию (Описание конфигурационного файла HAProxy https://habr.com/ru/sandbox/34354/) -```sh - mcedit /etc/haproxy/haproxy.cfg -``` -В конец файла добавляем пока только для перенаправления (для балансироки больше IP адресов): -```conf -frontend frontend-http - bind *:80 - mode http - - # ACL для определения запросов на проверку Let's Encrypt - acl is_certbot path_beg /.well-known/acme-challenge/ - - # Если это не запрос Let's Encrypt, перенаправляем на HTTPS - http-request redirect scheme https code 301 unless is_certbot - - # Отправляем запросы Let's Encrypt на backend-certbot - use_backend backend-certbot if is_certbot - -frontend LOADBALANCER-01 - bind *:80 - bind *:443 ssl crt /etc/haproxy/ssl/mqtt.kz.pem crt /etc/ssl/certs/bigfoottrade_kz.pem - mode http #режим работы HAProxy, в http режиме происходит анализ Layer 7 трафика - option httpclose #Закрывает пассивные соединения - - http-request set-header x-Forwarded-for %[src] - http-request set-header x-Forwarded-uri %[url] - - acl v_geoserver2 hdr(host) -i geoserver2.ccalm.org - use_backend geoserver2_ccalm_org if v_geoserver2 - - #Если различные нестандартные порты то так - acl v_locust_kz hdr_reg(host) -i ^locust\.kz(:.*)?$ - use_backend b_locust_kz if v_locust_kz - - #Перенаправление одной страницы по адресу http://geoserver2.ccalm.org/data/ на другой backend - acl v_geo_data hdr(host) -i geoserver2.ccalm.org/data - use_backend WEBSERVERS-01 if v_geo_data - - default_backend WEBSERVER - -backend WEBSERVER - balance roundrobin - server web1 127.0.0.1:8080 check inter 5s ssl verify none - option httpchk GET /index.html - - - backend geoserver2_ccalm_org - balance roundrobin - server web1 192.168.0.90:80 check - option httpchk - - listen stats - bind *:8989 - stats enable - stats uri / - stats realm Haproxy\ Statistics - stats auth igor:i123456 - -frontend f-RabbitMQ -mode tcp -bind 10.1.7.73:21000 -default_backend b-RabbitMQ - -backend b-RabbitMQ -mode tcp -server srv1 10.10.16.21:20000 -``` -Для перенаправления незащищённого HTTP трафика можно: xxxxxxxxxxxxxxx - -Для использования SSL и перенаправляние по обычному сокету для начала нужно настроить pem файл объеденив crt и key (и незабыть изменить порт Apache с 433) -cat /etc/ssl/certs/bigfoottrade_kz.crt /etc/ssl/certs/bigfoottrade_kz_ca.crt /etc/ssl/private/bigfoottrade_kz.key > /etc/haproxy/ssl/bigfoottrade_kz.pem -cat AAA_Certificate_Services.crt GoGetSSL_RSA_DV_CA.crt istransit_kz.crt istransit_kz.key > istransit_kz.pem - - SSLCertificateFile - SSLCertificateKeyFile - -Для включения WEB статистики на 9000 порту добавить в конец конфигурации: -listen stats -bind *:8989 -stats enable -stats uri /stats -stats realm Haproxy\ Statistics -stats auth igor:i123456 -Тестирую файл конфигурации: -```sh - haproxy -f /etc/haproxy/haproxy.cfg -c -```` -Также можно в журнале посмотреть что написал HAProxy: -```sh - sudo journalctl -u haproxy --no-pager | tail -n 50 -```` -Перезагружаем: -```sh - sudo systemctl restart haproxy -```` - -Посмотреть что в журнале можно так: -Посмотреть что в журнале можно так: -```sh - journalctl -u haproxy --since "1 minutes ago" - journalctl -u haproxy --since "30 minutes ago" | grep "backend" - tail -f /var/log/haproxy.log -``` - - - -administrator@app:~$ journalctl -u haproxy --since "30 minutes ago" | grep "backend" -backend 'transit_acquiring_v01_kz' has no server available! -backend 'transit_translation_v02_kz' has no server available! -backend 'transit_mobile_kz' has no server available! -backend 'transit_manager_kz' has no server available! -backend 'transit_warehouse_kz' has no server available! -backend 'transit_kgd_kz' has no server available! -backend 'transit_monitoring_kz' has no server available! - - - - - - - -И теперь должно открываться но адресу: http://data.ccalm.org:8989/ -Обязательно проверить как установился SSL чекером: https://www.leaderssl.ru/tools/ssl_checker - - -# 📌 Бесплатный SSL сертификат Let’s Encrypt для HAPROXY -**************************************************************************************************** -Бесплатный SSL сертификат Let’s Encrypt для HAPROXY https://serversforhackers.com/c/letsencrypt-with-haproxy -```sh - sudo apt-get update - sudo apt-get install certbot -y -```` -Для удаления PPA нужно выполнить: -```sh - sudo apt-get remove certbot - sudo add-apt-repository --remove ppa:certbot/certbot - apt-get install -f - apt autoremove -``` -Если включён файрволл то разрешаем порт: -```sh - sudo ufw allow 9080/tcp -``` -Проверяем что автообновление в certbot работает для этого выполняем команду: -```sh - sudo systemctl status certbot.timer -``` -Затем пытаемся выполнить пробный прогон при помощи команды: -```sh - sudo certbot renew --dry-run -``` - -Согласно инструкции модифицируем конфигурационный файл haproxy добавив во frontend это: -``` - # ACL for detecting Let's Encrypt validtion requests - acl is_certbot path_beg /.well-known/acme-challenge/ - use_backend backend-certbot if is_certbot -``` -А также ещё один backend: -``` - # Certbot backend - # Contains certbot stand-alone webserver - backend backend-certbot - mode http - server certbot 127.0.0.1:9080 -``` -Перезагрузить и выполнить команду: - -```sh - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d powerdns.geovizor.top --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geovizor.top --email irigm@mail.ru --agree-tos --non-interactive - - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d locust.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d gotify.locust.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d git.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d ru.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d rug.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive - - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d kz.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d kzg.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive - - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d locust.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d test.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d data.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geoserver2.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geoserver.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d stations.istt.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d uspdmanager.istt.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d tourist.istt.kz --email irigm@mail.ru --agree-tos --non-interactive - - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d monitoring.infracos.kz --email irigm@mail.ru --agree-tos --non-interactive - - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d aistransit.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d istransit.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d test.istransit.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d main.istransit.kz --email irigm@mail.ru --agree-tos --non-interactive - - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d transit.istt.kz --email irigm@mail.ru --agree-tos --non-interactive - - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geovizor.com --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d mqtt.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d observer.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d rigor.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d pal.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d elektronnaya-ochered.kz --email irigm@mail.ru --agree-tos --non-interactive - certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d mcp.kz --email irigm@mail.ru --agree-tos --non-interactive -``` - -После генерации файлы будут в: - /etc/letsencrypt/live/geoserver2.ccalm.org/fullchain.pem - /etc/letsencrypt/live/geoserver2.ccalm.org/privkey.pem - -Для обновления создаём файл /etc/letsencrypt/renew.sh (по моему этот скрипт не нужен так как рабтает сервис certbot.timer): - #!/bin/bash - certbot renew --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 --post-hook "/etc/haproxy/prepare.sh" --quiet - -Но для HAProxy нужно чтобы 2 файла были объединены поэтому добавляю спец скрипт /etc/haproxy/prepare.sh: - #!/bin/bash - - # Loop through all Let's Encrypt certificates - for CERTIFICATE in `find /etc/letsencrypt/live/* -type d`; do - - CERTIFICATE=`basename $CERTIFICATE` - - # Combine certificate and private key to single file - cat /etc/letsencrypt/live/$CERTIFICATE/fullchain.pem /etc/letsencrypt/live/$CERTIFICATE/privkey.pem > /etc/haproxy/ssl/$CERTIFICATE.pem - - done - systemctl reload haproxy.service - -Обновляем конфигурацию HAProxy добавив в frontend: - bind *:443 ssl crt /etc/haproxy/ssl/mqtt.kz.pem - -Устанавливаем права - chmod +x /etc/haproxy/renew.sh - chmod +x /etc/haproxy/prepare.sh -И добавляем задание в cron "crontab -e" ниже текст это раз в 24 часа в 00:00:00 ночи: - 0 0 * * * /bin/sh /etc/letsencrypt/renew.sh +# 📌 Установка HAProxy на Ubuntu 20.04 +**************************************************************************************************** +На основе инструкции из https://itsecforu.ru/2019/07/15/⏳-настройка-балансировщика-нагрузки-h/ + +Connect to the required server: +```sh +ssh administrator@10.101.1.3 -p 22 +``` +Connect to CCALM Turkish infrastructure: +```sh +ssh igor@88.218.94.134 -p 2200 +``` +---------------------------------------------------------------------------------------------------- +## Install haproxy +```sh + sudo apt-get update && sudo apt-get install haproxy -y +```` +Создаём резервную копию файла: +```sh +sudo cp /etc/haproxy/haproxy.cfg{,.bak} +```` +Редактируем конфигурацию (Описание конфигурационного файла HAProxy https://habr.com/ru/sandbox/34354/) +```sh + mcedit /etc/haproxy/haproxy.cfg +``` +В конец файла добавляем пока только для перенаправления (для балансироки больше IP адресов): +```conf +frontend frontend-http + bind *:80 + mode http + + # ACL для определения запросов на проверку Let's Encrypt + acl is_certbot path_beg /.well-known/acme-challenge/ + + # Если это не запрос Let's Encrypt, перенаправляем на HTTPS + http-request redirect scheme https code 301 unless is_certbot + + # Отправляем запросы Let's Encrypt на backend-certbot + use_backend backend-certbot if is_certbot + +frontend LOADBALANCER-01 + bind *:80 + bind *:443 ssl crt /etc/haproxy/ssl/mqtt.kz.pem crt /etc/ssl/certs/bigfoottrade_kz.pem + mode http #режим работы HAProxy, в http режиме происходит анализ Layer 7 трафика + option httpclose #Закрывает пассивные соединения + + http-request set-header x-Forwarded-for %[src] + http-request set-header x-Forwarded-uri %[url] + + acl v_geoserver2 hdr(host) -i geoserver2.ccalm.org + use_backend geoserver2_ccalm_org if v_geoserver2 + + #Если различные нестандартные порты то так + acl v_locust_kz hdr_reg(host) -i ^locust\.kz(:.*)?$ + use_backend b_locust_kz if v_locust_kz + + #Перенаправление одной страницы по адресу http://geoserver2.ccalm.org/data/ на другой backend + acl v_geo_data hdr(host) -i geoserver2.ccalm.org/data + use_backend WEBSERVERS-01 if v_geo_data + + default_backend WEBSERVER + +backend WEBSERVER + balance roundrobin + server web1 127.0.0.1:8080 check inter 5s ssl verify none + option httpchk GET /index.html + + + backend geoserver2_ccalm_org + balance roundrobin + server web1 192.168.0.90:80 check + option httpchk + + listen stats + bind *:8989 + stats enable + stats uri / + stats realm Haproxy\ Statistics + stats auth igor:i123456 + +frontend f-RabbitMQ +mode tcp +bind 10.1.7.73:21000 +default_backend b-RabbitMQ + +backend b-RabbitMQ +mode tcp +server srv1 10.10.16.21:20000 +``` +Для перенаправления незащищённого HTTP трафика можно: xxxxxxxxxxxxxxx + +Для использования SSL и перенаправляние по обычному сокету для начала нужно настроить pem файл объеденив crt и key (и незабыть изменить порт Apache с 433) +cat /etc/ssl/certs/bigfoottrade_kz.crt /etc/ssl/certs/bigfoottrade_kz_ca.crt /etc/ssl/private/bigfoottrade_kz.key > /etc/haproxy/ssl/bigfoottrade_kz.pem +cat AAA_Certificate_Services.crt GoGetSSL_RSA_DV_CA.crt istransit_kz.crt istransit_kz.key > istransit_kz.pem + + SSLCertificateFile + SSLCertificateKeyFile + +Для включения WEB статистики на 9000 порту добавить в конец конфигурации: +listen stats +bind *:8989 +stats enable +stats uri /stats +stats realm Haproxy\ Statistics +stats auth igor:i123456 +Тестирую файл конфигурации: +```sh + haproxy -f /etc/haproxy/haproxy.cfg -c +```` +Также можно в журнале посмотреть что написал HAProxy: +```sh + sudo journalctl -u haproxy --no-pager -n 50 -f +```` +Перезагружаем: +```sh + sudo systemctl restart haproxy +```` + +Посмотреть что в журнале можно так: +Посмотреть что в журнале можно так: +```sh + journalctl -u haproxy --since "1 minutes ago" + journalctl -u haproxy --since "30 minutes ago" | grep "backend" + tail -f /var/log/haproxy.log +``` + + + +administrator@app:~$ journalctl -u haproxy --since "30 minutes ago" | grep "backend" +backend 'transit_acquiring_v01_kz' has no server available! +backend 'transit_translation_v02_kz' has no server available! +backend 'transit_mobile_kz' has no server available! +backend 'transit_manager_kz' has no server available! +backend 'transit_warehouse_kz' has no server available! +backend 'transit_kgd_kz' has no server available! +backend 'transit_monitoring_kz' has no server available! + + + + + + + +И теперь должно открываться но адресу: http://data.ccalm.org:8989/ +Обязательно проверить как установился SSL чекером: https://www.leaderssl.ru/tools/ssl_checker + + +# 📌 Бесплатный SSL сертификат Let’s Encrypt для HAPROXY +**************************************************************************************************** +Бесплатный SSL сертификат Let’s Encrypt для HAPROXY https://serversforhackers.com/c/letsencrypt-with-haproxy +```sh + sudo apt-get update + sudo apt-get install certbot -y +```` +Для удаления PPA нужно выполнить: +```sh + sudo apt-get remove certbot + sudo add-apt-repository --remove ppa:certbot/certbot + apt-get install -f + apt autoremove +``` +Если включён файрволл то разрешаем порт: +```sh + sudo ufw allow 9080/tcp +``` +Проверяем что автообновление в certbot работает для этого выполняем команду: +```sh + sudo systemctl status certbot.timer +``` +Затем пытаемся выполнить пробный прогон при помощи команды: +```sh + sudo certbot renew --dry-run +``` + +Согласно инструкции модифицируем конфигурационный файл haproxy добавив во frontend это: +``` + # ACL for detecting Let's Encrypt validtion requests + acl is_certbot path_beg /.well-known/acme-challenge/ + use_backend backend-certbot if is_certbot +``` +А также ещё один backend: +``` + # Certbot backend + # Contains certbot stand-alone webserver + backend backend-certbot + mode http + server certbot 127.0.0.1:9080 +``` +Перезагрузить и выполнить команду: + +```sh + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d powerdns.geovizor.top --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geovizor.top --email irigm@mail.ru --agree-tos --non-interactive + + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d locust.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d gotify.locust.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d git.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d ru.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d rug.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive + + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d kz.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d kzg.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive + + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d locust.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d test.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d data.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geoserver2.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geoserver.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d stations.istt.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d uspdmanager.istt.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d tourist.istt.kz --email irigm@mail.ru --agree-tos --non-interactive + + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d monitoring.infracos.kz --email irigm@mail.ru --agree-tos --non-interactive + + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d aistransit.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d istransit.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d test.istransit.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d main.istransit.kz --email irigm@mail.ru --agree-tos --non-interactive + + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d transit.istt.kz --email irigm@mail.ru --agree-tos --non-interactive + + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geovizor.com --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d mqtt.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d observer.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d rigor.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d pal.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d elektronnaya-ochered.kz --email irigm@mail.ru --agree-tos --non-interactive + certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d mcp.kz --email irigm@mail.ru --agree-tos --non-interactive +``` + +После генерации файлы будут в: + /etc/letsencrypt/live/geoserver2.ccalm.org/fullchain.pem + /etc/letsencrypt/live/geoserver2.ccalm.org/privkey.pem + +Для обновления создаём файл /etc/letsencrypt/renew.sh (по моему этот скрипт не нужен так как рабтает сервис certbot.timer): + #!/bin/bash + certbot renew --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 --post-hook "/etc/haproxy/prepare.sh" --quiet + +Но для HAProxy нужно чтобы 2 файла были объединены поэтому добавляю спец скрипт /etc/haproxy/prepare.sh: + #!/bin/bash + + # Loop through all Let's Encrypt certificates + for CERTIFICATE in `find /etc/letsencrypt/live/* -type d`; do + + CERTIFICATE=`basename $CERTIFICATE` + + # Combine certificate and private key to single file + cat /etc/letsencrypt/live/$CERTIFICATE/fullchain.pem /etc/letsencrypt/live/$CERTIFICATE/privkey.pem > /etc/haproxy/ssl/$CERTIFICATE.pem + + done + systemctl reload haproxy.service + +Обновляем конфигурацию HAProxy добавив в frontend: + bind *:443 ssl crt /etc/haproxy/ssl/mqtt.kz.pem + +Устанавливаем права + chmod +x /etc/haproxy/renew.sh + chmod +x /etc/haproxy/prepare.sh +И добавляем задание в cron "crontab -e" ниже текст это раз в 24 часа в 00:00:00 ночи: + 0 0 * * * /bin/sh /etc/letsencrypt/renew.sh diff --git a/Traefik_install.md b/Proxy/Traefik_install.md similarity index 92% rename from Traefik_install.md rename to Proxy/Traefik_install.md index ecfadc8..536f163 100644 --- a/Traefik_install.md +++ b/Proxy/Traefik_install.md @@ -1,8 +1,10 @@ +С внешки во внутрянную инфраструктуру подключаемся через HAProxy а уже внутри использую Traefik + Открываю нужный сервер ```sh wsl ``` -Или такой: +Открывает traefik на 192.168.200.85: ```sh ssh igor@192.168.200.85 -p 22 ``` @@ -155,6 +157,13 @@ http: service: local_powerdns tls: {} + gotify: + entryPoints: + - websecure + rule: "Host(`gotify.local`)" + service: local_gotify + tls: {} + middlewares: strip-auth-prefix: stripPrefix: @@ -180,6 +189,16 @@ http: path: "/" interval: "5s" + # Бэкенд для local_gotify + local_gotify: + loadBalancer: + servers: + - url: "https://192.168.200.84:8080" + serversTransport: insecureTransport + healthCheck: + path: "/" + interval: "5s" + # Бэкенд для org_ccalm_api_authorization_v02 (HTTPS с отключенной проверкой SSL) org_ccalm_api_authorization_v02: loadBalancer: @@ -243,6 +262,8 @@ tls: keyFile: "/etc/traefik/certs/ccalm.test.key" - certFile: "/etc/traefik/certs/powerdns.local.crt" 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/wildcard.local.crt" keyFile: "/etc/traefik/certs/wildcard.local.key" - certFile: "/etc/traefik/certs/wildcard.test.crt" diff --git a/Traefik_install_CCALM.md b/Proxy/Traefik_install_CCALM.md similarity index 100% rename from Traefik_install_CCALM.md rename to Proxy/Traefik_install_CCALM.md diff --git a/Certificates_config.md b/Security/Certificates_config.md similarity index 87% rename from Certificates_config.md rename to Security/Certificates_config.md index 13eb01e..6095f3b 100644 --- a/Certificates_config.md +++ b/Security/Certificates_config.md @@ -79,6 +79,17 @@ openssl x509 -in powerdns.local.crt -text -noout ``` +Создаём и подписываем одной группой команд: +```sh +openssl version && +openssl genrsa -out gotify.local.key 2048 && +openssl req -new -key gotify.local.key -out gotify.local.csr -subj "/CN=gotify.local" -addext "subjectAltName=DNS:gotify.local" && +openssl x509 -req -in gotify.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out gotify.local.crt -days 365 -sha256 -copy_extensions copy && +openssl x509 -in gotify.local.crt -text -noout && +cat gotify.local.crt gotify.local.key > gotify.local.pem +``` +Теперь можно устанавливать в HAProxy этот gotify.local.pem сертификат + Подписать корневым CA: diff --git a/HashiCorp_Vault_install.md b/Security/HashiCorp_Vault_install.md similarity index 96% rename from HashiCorp_Vault_install.md rename to Security/HashiCorp_Vault_install.md index 9d781ee..2144f50 100644 --- a/HashiCorp_Vault_install.md +++ b/Security/HashiCorp_Vault_install.md @@ -1,361 +1,361 @@ -# Установка HashiCorp Vault на Ubuntu - -Vault — это инструмент от HashiCorp для безопасного хранения секретов и управления ими. - -## 1. Установка Vault - -Открываю нужный сервер -```sh -wsl -``` -Похоже vault из Москвы недоступен: -```sh -ssh root@45.144.64.218 -p 2200 -``` - -### 1.1. Добавление репозитория HashiCorp - -1. Установите необходимые пакеты: -```sh - sudo apt update && sudo apt install -y gnupg software-properties-common curl -``` - -2. Добавьте официальный GPG-ключ HashiCorp: -```sh - curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg -``` - -3. Добавьте репозиторий HashiCorp в систему: -```sh - sudo mcedit /etc/apt/sources.list.d/hashicorp.list -``` - -Заменяем на: -```text - deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com noble main -``` -Где noble это кодовое имя Ubuntu 24.04 - - -4. Обновите списки пакетов: -```sh - sudo apt update -``` - -5. Установите Vault: -```sh - sudo apt install -y vault -``` - -6. Проверьте, что Vault установлен правильно: -```sh - vault --version -``` -Выдало: Vault v1.18.5 (2cb3755273dbd63f5b0f8ec50089b57ffd3fa330), built 2025-02-24T09:40:28Z - - -## 2. Запуск Vault - -### 2.1. Запуск в Dev-режиме (только для тестирования) - -If work stop it: -```sh - sudo pkill vault -``` -If need delete old data: -```sh - sudo rm -rf ~/.vault-token ~/.vault/ -``` -For find where stored data read file: -```sh - sudo mcedit /etc/vault/config.hcl -``` -In config file find this path: /opt/vault/data - -После удаления базы нужно инициализировать Vault заново: -```sh - sudo vault operator init -``` - -Run in developer mode (in dev mode data stored in RAM): -```sh - vault server -dev -``` - -```text -WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory -and starts unsealed with a single unseal key. The root token is already -authenticated to the CLI, so you can immediately begin using Vault. - -You may need to set the following environment variables: - - $ export VAULT_ADDR='http://127.0.0.1:8200' - -The unseal key and root token are displayed below in case you want to -seal/unseal the Vault or re-authenticate. - -Unseal Key: TMb6A3QI3wJ9kaEeTYo5wEviP23lugJ3Asek2la6V4s= -Root Token: hvs.GsWHRR7ne7gMTZhuPgZdh91w - -Development mode should NOT be used in production installations! -``` - -Теперь Vault работает по адресу: -```sh -start http://127.0.0.1:8200 -``` -Останавливаю нажатием Ctrl + C - - -### 2.2. Настройка Vault в режиме сервера - -1. Создайте конфигурационный файл: -```sh - sudo mkdir -p /etc/vault && - sudo mcedit /etc/vault/config.hcl -``` - -2. Добавьте следующий конфиг: -```text -storage "file" { - path = "/opt/vault/data" -} - -listener "tcp" { - address = "127.0.0.1:8200" - tls_disable = 1 -} - -disable_mlock = true -ui = true -``` - -3. Создайте папку для хранения данных: -```sh - sudo mkdir -p /opt/vault/data && - sudo chown vault:vault /opt/vault/data -``` - -4. Создайте systemd-сервис для Vault: -```sh -sudo tee /etc/systemd/system/vault.service > /dev/null <<'EOF' -[Unit] -Description=HashiCorp Vault -After=network-online.target -Requires=network-online.target - -[Service] -User=vault -Group=vault -ExecStart=/usr/bin/vault server -config=/etc/vault/config.hcl -ExecReload=/bin/kill --signal HUP \$MAINPID -KillSignal=SIGTERM -Restart=on-failure -LimitMEMLOCK=infinity -ProtectSystem=full -CapabilityBoundingSet=CAP_IPC_LOCK CAP_SETGID CAP_SETUID CAP_SYSLOG CAP_CHOWN -NoNewPrivileges=yes - -[Install] -WantedBy=multi-user.target -EOF -``` -Проверяем всё ли записалось: -```sh -sudo mcedit /etc/systemd/system/vault.service -``` - -5. Перезапустите systemd и включите Vault: -```sh - sudo systemctl daemon-reload && - sudo systemctl enable vault && - sudo systemctl start vault -``` - -7. Проверьте статус: -```sh - sudo systemctl status vault -``` - ---- - -## 3. Инициализация и разлочка Vault - -1. Экспортируйте переменную окружения: -```sh - export VAULT_ADDR='http://127.0.0.1:8200' -``` - -2. Инициализируйте хранилище (сохраните ключи!): -```sh - vault operator init -``` - -Выдало: -```text -Unseal Key 1: lQlJsb9RI8rSzLrc5iPnx1qJkWZbbXIkrEgnQGe5R6uO -Unseal Key 2: 0qJJXRo570jlH/0Qs/wodXHNI2SF5VgL4jE04JawSPSB -Unseal Key 3: VuYkOkQ8qmwofDmjqsTRQoMqGAH3Jv+nqQylL7Uibbtp -Unseal Key 4: JJJ8Nqj00qzS9u5wNtTtExL/jWlJF9fgaBsiuaf0kFxC -Unseal Key 5: L6lZMp/l7s24EZJAFnWS4Py5jsWOuMioC41g5LhUJKWL - -Initial Root Token: hvs.o07DY7tnSPcufxk60pjCXDzn - -Vault initialized with 5 key shares and a key threshold of 3. Please securely -distribute the key shares printed above. When the Vault is re-sealed, -restarted, or stopped, you must supply at least 3 of these keys to unseal it -before it can start servicing requests. - -Vault does not store the generated root key. Without at least 3 keys to -reconstruct the root key, Vault will remain permanently sealed! - -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 раза выполнить эту команду): -```sh - vault operator unseal -``` - -4. Авторизуйтесь с root-токеном: -```sh - vault login hvs.MTFV72PjKXCVh5ZL6yCVE3Yw -``` - -5. Создаём(включаем) новое хранилище ключ-значение через ssh -```sh - vault secrets enable -path=org-ccalm kv-v2 -``` - - - -5. Writing to the kv storage (добавил префикс vault. чтобы значения самому подставлять в нужные места в spring) - -Заменит(создаст) значение: -```sh - vault kv put org-ccalm/jwt vault.server.ssl.key-store-password=MFNX344yh4 -``` -Добавит (обновит): -```sh - vault kv patch org-ccalm/jwt vault.test=test2 -``` -```sh - vault kv put org-ccalm/public vault.personal_data.key=7dd2Nek1 -``` - -6. Read data from the kv -```sh - vault kv get org-ccalm/jwt -``` - -Должно вывести: -```text -Key Value ---- ----- -server.ssl.key-store-password M4yh4 -``` - -6. Включаем AppRole для доступа из приложения -```sh - vault auth enable approle -``` - -7. Добавляем политики потом создаём ключ для этой политикиполитики - -Создаю файл политик -```sh -cd ~ && -sudo tee jwt-policy.hcl > /dev/null <<'EOF' -path "org-ccalm/data/jwt" { - capabilities = ["create", "read", "update", "delete", "list"] -} -path "org-ccalm/data/public" { - capabilities = ["read", "list"] -} -EOF -``` -Apply and delete configiration file: -```sh - vault policy write jwt-policy ~/jwt-policy.hcl && - rm -f jwt-policy.hcl -``` - -Создаём AppRole (на 10 лет) -```sh -vault write auth/approle/role/org-ccalm-jwt \ - secret_id_ttl=0 \ - token_ttl=87600h \ - token_max_ttl=87600h \ - policies="jwt-policy,another-policy,third-policy" -``` - -Получаем role_id и secret_id -```sh -vault read auth/approle/role/org-ccalm-jwt/role-id -``` -Выдало -```text -Key Value ---- ----- -role_id c0064fe2-8f0e-b317-7fe7-66f7405b45a1 -``` -На команду -```sh -vault write -f auth/approle/role/org-ccalm-jwt/secret-id -``` -Выдало: -```text -Key Value ---- ----- -secret_id 24f31c88-7185-0d93-9a51-e221c2925265 -secret_id_accessor 22fa68e3-fc73-2008-0a34-3506630b6693 -secret_id_num_uses 0 -secret_id_ttl 0s -``` -Сохрани role_id и secret_id, они понадобятся Spring Boot. - -Хранить ключи лучьше в переменных окружения -```sh -export VAULT_ROLE_ID="your-role-id" && -export VAULT_SECRET_ID="your-secret-id" -``` - - -Проверяем не больше какого значения можно задать время жизни кокена: -```sh -vault read sys/mounts/auth/token/tune -``` -По умолчанию max_lease_ttl равен 32 дня! - -На год можно увеличить так: -```sh - vault write sys/mounts/auth/token/tune max_lease_ttl=8760h -``` - -Create data access token with set politics: -```sh - vault token create -policy=jwt-policy -ttl=0 -``` - -Продлевать токен можно так: -```sh - vault token renew <твой-токен> -``` - -Проверяем зранятся ли токены в хранилище а не в памяти -```sh -vault read sys/auth/token/tune -``` -token_type = default-service, значит Vault не хранит токены - -Включаем хранение токенов: -```sh - vault write sys/auth/token/tune token_type=service -``` - - - ---- -Теперь HashiCorp Vault установлен и готов к использованию! 🚀 - +# Установка HashiCorp Vault на Ubuntu + +Vault — это инструмент от HashiCorp для безопасного хранения секретов и управления ими. + +## 1. Установка Vault + +Открываю нужный сервер +```sh +wsl +``` +Похоже vault из Москвы недоступен: +```sh +ssh root@45.144.64.218 -p 2200 +``` + +### 1.1. Добавление репозитория HashiCorp + +1. Установите необходимые пакеты: +```sh + sudo apt update && sudo apt install -y gnupg software-properties-common curl +``` + +2. Добавьте официальный GPG-ключ HashiCorp: +```sh + curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg +``` + +3. Добавьте репозиторий HashiCorp в систему: +```sh + sudo mcedit /etc/apt/sources.list.d/hashicorp.list +``` + +Заменяем на: +```text + deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com noble main +``` +Где noble это кодовое имя Ubuntu 24.04 + + +4. Обновите списки пакетов: +```sh + sudo apt update +``` + +5. Установите Vault: +```sh + sudo apt install -y vault +``` + +6. Проверьте, что Vault установлен правильно: +```sh + vault --version +``` +Выдало: Vault v1.18.5 (2cb3755273dbd63f5b0f8ec50089b57ffd3fa330), built 2025-02-24T09:40:28Z + + +## 2. Запуск Vault + +### 2.1. Запуск в Dev-режиме (только для тестирования) + +If work stop it: +```sh + sudo pkill vault +``` +If need delete old data: +```sh + sudo rm -rf ~/.vault-token ~/.vault/ +``` +For find where stored data read file: +```sh + sudo mcedit /etc/vault/config.hcl +``` +In config file find this path: /opt/vault/data + +После удаления базы нужно инициализировать Vault заново: +```sh + sudo vault operator init +``` + +Run in developer mode (in dev mode data stored in RAM): +```sh + vault server -dev +``` + +```text +WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory +and starts unsealed with a single unseal key. The root token is already +authenticated to the CLI, so you can immediately begin using Vault. + +You may need to set the following environment variables: + + $ export VAULT_ADDR='http://127.0.0.1:8200' + +The unseal key and root token are displayed below in case you want to +seal/unseal the Vault or re-authenticate. + +Unseal Key: TMb6A3QI3wJ9kaEeTYo5wEviP23lugJ3Asek2la6V4s= +Root Token: hvs.GsWHRR7ne7gMTZhuPgZdh91w + +Development mode should NOT be used in production installations! +``` + +Теперь Vault работает по адресу: +```sh +start http://127.0.0.1:8200 +``` +Останавливаю нажатием Ctrl + C + + +### 2.2. Настройка Vault в режиме сервера + +1. Создайте конфигурационный файл: +```sh + sudo mkdir -p /etc/vault && + sudo mcedit /etc/vault/config.hcl +``` + +2. Добавьте следующий конфиг: +```text +storage "file" { + path = "/opt/vault/data" +} + +listener "tcp" { + address = "127.0.0.1:8200" + tls_disable = 1 +} + +disable_mlock = true +ui = true +``` + +3. Создайте папку для хранения данных: +```sh + sudo mkdir -p /opt/vault/data && + sudo chown vault:vault /opt/vault/data +``` + +4. Создайте systemd-сервис для Vault: +```sh +sudo tee /etc/systemd/system/vault.service > /dev/null <<'EOF' +[Unit] +Description=HashiCorp Vault +After=network-online.target +Requires=network-online.target + +[Service] +User=vault +Group=vault +ExecStart=/usr/bin/vault server -config=/etc/vault/config.hcl +ExecReload=/bin/kill --signal HUP \$MAINPID +KillSignal=SIGTERM +Restart=on-failure +LimitMEMLOCK=infinity +ProtectSystem=full +CapabilityBoundingSet=CAP_IPC_LOCK CAP_SETGID CAP_SETUID CAP_SYSLOG CAP_CHOWN +NoNewPrivileges=yes + +[Install] +WantedBy=multi-user.target +EOF +``` +Проверяем всё ли записалось: +```sh +sudo mcedit /etc/systemd/system/vault.service +``` + +5. Перезапустите systemd и включите Vault: +```sh + sudo systemctl daemon-reload && + sudo systemctl enable vault && + sudo systemctl start vault +``` + +7. Проверьте статус: +```sh + sudo systemctl status vault +``` + +--- + +## 3. Инициализация и разлочка Vault + +1. Экспортируйте переменную окружения: +```sh + export VAULT_ADDR='http://127.0.0.1:8200' +``` + +2. Инициализируйте хранилище (сохраните ключи!): +```sh + vault operator init +``` + +Выдало: +```text +Unseal Key 1: lQlJsb9RI8rSzLrc5iPnx1qJkWZbbXIkrEgnQGe5R6uO +Unseal Key 2: 0qJJXRo570jlH/0Qs/wodXHNI2SF5VgL4jE04JawSPSB +Unseal Key 3: VuYkOkQ8qmwofDmjqsTRQoMqGAH3Jv+nqQylL7Uibbtp +Unseal Key 4: JJJ8Nqj00qzS9u5wNtTtExL/jWlJF9fgaBsiuaf0kFxC +Unseal Key 5: L6lZMp/l7s24EZJAFnWS4Py5jsWOuMioC41g5LhUJKWL + +Initial Root Token: hvs.o07DY7tnSPcufxk60pjCXDzn + +Vault initialized with 5 key shares and a key threshold of 3. Please securely +distribute the key shares printed above. When the Vault is re-sealed, +restarted, or stopped, you must supply at least 3 of these keys to unseal it +before it can start servicing requests. + +Vault does not store the generated root key. Without at least 3 keys to +reconstruct the root key, Vault will remain permanently sealed! + +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 раза выполнить эту команду): +```sh + vault operator unseal +``` + +4. Авторизуйтесь с root-токеном: +```sh + vault login hvs.MTFV72PjKXCVh5ZL6yCVE3Yw +``` + +5. Создаём(включаем) новое хранилище ключ-значение через ssh +```sh + vault secrets enable -path=org-ccalm kv-v2 +``` + + + +5. Writing to the kv storage (добавил префикс vault. чтобы значения самому подставлять в нужные места в spring) + +Заменит(создаст) значение: +```sh + vault kv put org-ccalm/jwt vault.server.ssl.key-store-password=MFNX344yh4 +``` +Добавит (обновит): +```sh + vault kv patch org-ccalm/jwt vault.test=test2 +``` +```sh + vault kv put org-ccalm/public vault.personal_data.key=7dd2Nek1 +``` + +6. Read data from the kv +```sh + vault kv get org-ccalm/jwt +``` + +Должно вывести: +```text +Key Value +--- ----- +server.ssl.key-store-password M4yh4 +``` + +6. Включаем AppRole для доступа из приложения +```sh + vault auth enable approle +``` + +7. Добавляем политики потом создаём ключ для этой политикиполитики + +Создаю файл политик +```sh +cd ~ && +sudo tee jwt-policy.hcl > /dev/null <<'EOF' +path "org-ccalm/data/jwt" { + capabilities = ["create", "read", "update", "delete", "list"] +} +path "org-ccalm/data/public" { + capabilities = ["read", "list"] +} +EOF +``` +Apply and delete configiration file: +```sh + vault policy write jwt-policy ~/jwt-policy.hcl && + rm -f jwt-policy.hcl +``` + +Создаём AppRole (на 10 лет) +```sh +vault write auth/approle/role/org-ccalm-jwt \ + secret_id_ttl=0 \ + token_ttl=87600h \ + token_max_ttl=87600h \ + policies="jwt-policy,another-policy,third-policy" +``` + +Получаем role_id и secret_id +```sh +vault read auth/approle/role/org-ccalm-jwt/role-id +``` +Выдало +```text +Key Value +--- ----- +role_id c0064fe2-8f0e-b317-7fe7-66f7405b45a1 +``` +На команду +```sh +vault write -f auth/approle/role/org-ccalm-jwt/secret-id +``` +Выдало: +```text +Key Value +--- ----- +secret_id 24f31c88-7185-0d93-9a51-e221c2925265 +secret_id_accessor 22fa68e3-fc73-2008-0a34-3506630b6693 +secret_id_num_uses 0 +secret_id_ttl 0s +``` +Сохрани role_id и secret_id, они понадобятся Spring Boot. + +Хранить ключи лучьше в переменных окружения +```sh +export VAULT_ROLE_ID="your-role-id" && +export VAULT_SECRET_ID="your-secret-id" +``` + + +Проверяем не больше какого значения можно задать время жизни кокена: +```sh +vault read sys/mounts/auth/token/tune +``` +По умолчанию max_lease_ttl равен 32 дня! + +На год можно увеличить так: +```sh + vault write sys/mounts/auth/token/tune max_lease_ttl=8760h +``` + +Create data access token with set politics: +```sh + vault token create -policy=jwt-policy -ttl=0 +``` + +Продлевать токен можно так: +```sh + vault token renew <твой-токен> +``` + +Проверяем зранятся ли токены в хранилище а не в памяти +```sh +vault read sys/auth/token/tune +``` +token_type = default-service, значит Vault не хранит токены + +Включаем хранение токенов: +```sh + vault write sys/auth/token/tune token_type=service +``` + + + +--- +Теперь HashiCorp Vault установлен и готов к использованию! 🚀 + diff --git a/HashiCorp_Vault_install_windows.md b/Security/HashiCorp_Vault_install_windows.md similarity index 97% rename from HashiCorp_Vault_install_windows.md rename to Security/HashiCorp_Vault_install_windows.md index 1c6f3c3..49184b5 100644 --- a/HashiCorp_Vault_install_windows.md +++ b/Security/HashiCorp_Vault_install_windows.md @@ -1,136 +1,136 @@ - -Загрузить в HashiCorp Vault настройки можно так: - -```sh -vault kv put secret/org-ccalm-jwt \ -jwt.secret=my-secret-value \ -db.user=admin \ -db.pass=123456 -``` - -Разбор параметров: -1. vault kv put – команда для записи ключей и значений в KV-хранилище Vault. -2. secret/org-ccalm-jwt – путь к секрету. - * secret/ – это backend-хранилище (оно должно быть включено в Vault). - * org-ccalm-jwt – имя секрета, под которым сохраняются параметры. -3. jwt.secret=my-secret-value – ключ jwt.secret со значением my-secret-value. -4. db.user=admin – ключ db.user со значением admin. -5. db.pass=123456 – ключ db.pass со значением 123456. - - -# 🚀 Установка и настройка HashiCorp Vault на Windows - -## 📌 1. Установка HashiCorp Vault - -1. **Скачайте Vault CLI** с официального сайта: - 🔗 [https://developer.hashicorp.com/vault/downloads](https://developer.hashicorp.com/vault/downloads) -2. Распакуйте архив и **добавьте путь к `vault.exe` в `PATH`**: - - Кликните **ПКМ → Этот компьютер → Свойства → Дополнительные параметры системы**. - - В **Переменные среды** добавьте путь к папке с `vault.exe`. -3. Откройте **cmd** или **PowerShell** и проверьте установку командой: -```sh - vault --version -``` - Если всё ОК, увидите версию Vault. Примерно такую: Vault v1.18.4 (503be623a3697e8c10c254dc87d26492c46753e1), built 2025-01-29T13:57:54Z - ---- - -## 📌 2. Запуск Vault-сервера (разработческий режим) - -Чтобы локально запустить Vault в **dev-режиме** (без авторизации), выполните: -```sh -vault server -dev -``` -После запуска он покажет **root-токен** (сохраните его!): -```plaintext -Unseal Key: x1jUXpLJREI6M1+Qm6m/h3NLEhaEmBageqw0v+dSSKo= -Root Token: hvs.V7Rc8uJ8YJ0AASKZfep6oYNe -``` - -Теперь Vault работает по адресу: -```sh -start http://127.0.0.1:8200 -``` - ---- - -## 📌 3. Экспорт токена (чтобы не вводить каждый раз) - -Откройте **PowerShell** и выполните: -```sh -$env:VAULT_ADDR="http://127.0.0.1:8200" -$env:VAULT_TOKEN="hvs.JDIyKgDMagA0WyIhLFQ4mAjZ" -``` -(Замените `hvs.JDIyKgDMagA0WyIhLFQ4mAjZ` на свой токен.) - -Теперь можно работать с Vault без ввода токена каждый раз. - ---- - -## 📌 4. Запись значений в Vault на Windows - -Значения разделенные пробелами можно записать в вольт так: -```sh -vault kv put secret/kz-istransit-jwt server.ssl.key-store-password=MFNX344yh4 -``` -Выдаст примерно такое: -======== Secret Path ======== -secret/data/kz-istransit-jwt - -======= Metadata ======= -Key Value ---- ----- -created_time 2025-02-24T12:49:45.7630328Z -custom_metadata -deletion_time n/a -destroyed false -version 1 - ---- - -## 📌 5. Проверка сохранённых данных - -Чтобы посмотреть, что записано в Vault: -```sh -vault kv get secret/kz-istransit-jwt -``` -Если всё настроено правильно, вы увидите примерно такой вывод: -```plaintext -====== Metadata ====== -Key Value ---- ----- -created_time 2025-02-24T12:00:00Z -version 1 - -====== Data ====== -Key Value ---- ----- -db.pass 123456 -db.user admin -jwt.secret my-secret-value -``` - ---- - -## 📌 6. Удаление данных из Vault - -Удаление данных: -```sh -vault kv delete secret/org-ccalm-jwt -``` -Полное уничтожение (без возможности восстановления): -```sh -vault kv destroy -versions=1 secret/org-ccalm-jwt -``` - ---- - -## 🎯 Итог -✅ Установили Vault CLI -✅ Запустили Vault сервер (`vault server -dev`) -✅ Экспортировали `VAULT_ADDR` и `VAULT_TOKEN` -✅ Записали настройки в Vault -✅ Проверили данные - -Теперь можно интегрировать Vault в Spring Boot 🚀 - + +Загрузить в HashiCorp Vault настройки можно так: + +```sh +vault kv put secret/org-ccalm-jwt \ +jwt.secret=my-secret-value \ +db.user=admin \ +db.pass=123456 +``` + +Разбор параметров: +1. vault kv put – команда для записи ключей и значений в KV-хранилище Vault. +2. secret/org-ccalm-jwt – путь к секрету. + * secret/ – это backend-хранилище (оно должно быть включено в Vault). + * org-ccalm-jwt – имя секрета, под которым сохраняются параметры. +3. jwt.secret=my-secret-value – ключ jwt.secret со значением my-secret-value. +4. db.user=admin – ключ db.user со значением admin. +5. db.pass=123456 – ключ db.pass со значением 123456. + + +# 🚀 Установка и настройка HashiCorp Vault на Windows + +## 📌 1. Установка HashiCorp Vault + +1. **Скачайте Vault CLI** с официального сайта: + 🔗 [https://developer.hashicorp.com/vault/downloads](https://developer.hashicorp.com/vault/downloads) +2. Распакуйте архив и **добавьте путь к `vault.exe` в `PATH`**: + - Кликните **ПКМ → Этот компьютер → Свойства → Дополнительные параметры системы**. + - В **Переменные среды** добавьте путь к папке с `vault.exe`. +3. Откройте **cmd** или **PowerShell** и проверьте установку командой: +```sh + vault --version +``` + Если всё ОК, увидите версию Vault. Примерно такую: Vault v1.18.4 (503be623a3697e8c10c254dc87d26492c46753e1), built 2025-01-29T13:57:54Z + +--- + +## 📌 2. Запуск Vault-сервера (разработческий режим) + +Чтобы локально запустить Vault в **dev-режиме** (без авторизации), выполните: +```sh +vault server -dev +``` +После запуска он покажет **root-токен** (сохраните его!): +```plaintext +Unseal Key: x1jUXpLJREI6M1+Qm6m/h3NLEhaEmBageqw0v+dSSKo= +Root Token: hvs.V7Rc8uJ8YJ0AASKZfep6oYNe +``` + +Теперь Vault работает по адресу: +```sh +start http://127.0.0.1:8200 +``` + +--- + +## 📌 3. Экспорт токена (чтобы не вводить каждый раз) + +Откройте **PowerShell** и выполните: +```sh +$env:VAULT_ADDR="http://127.0.0.1:8200" +$env:VAULT_TOKEN="hvs.JDIyKgDMagA0WyIhLFQ4mAjZ" +``` +(Замените `hvs.JDIyKgDMagA0WyIhLFQ4mAjZ` на свой токен.) + +Теперь можно работать с Vault без ввода токена каждый раз. + +--- + +## 📌 4. Запись значений в Vault на Windows + +Значения разделенные пробелами можно записать в вольт так: +```sh +vault kv put secret/kz-istransit-jwt server.ssl.key-store-password=MFNX344yh4 +``` +Выдаст примерно такое: +======== Secret Path ======== +secret/data/kz-istransit-jwt + +======= Metadata ======= +Key Value +--- ----- +created_time 2025-02-24T12:49:45.7630328Z +custom_metadata +deletion_time n/a +destroyed false +version 1 + +--- + +## 📌 5. Проверка сохранённых данных + +Чтобы посмотреть, что записано в Vault: +```sh +vault kv get secret/kz-istransit-jwt +``` +Если всё настроено правильно, вы увидите примерно такой вывод: +```plaintext +====== Metadata ====== +Key Value +--- ----- +created_time 2025-02-24T12:00:00Z +version 1 + +====== Data ====== +Key Value +--- ----- +db.pass 123456 +db.user admin +jwt.secret my-secret-value +``` + +--- + +## 📌 6. Удаление данных из Vault + +Удаление данных: +```sh +vault kv delete secret/org-ccalm-jwt +``` +Полное уничтожение (без возможности восстановления): +```sh +vault kv destroy -versions=1 secret/org-ccalm-jwt +``` + +--- + +## 🎯 Итог +✅ Установили Vault CLI +✅ Запустили Vault сервер (`vault server -dev`) +✅ Экспортировали `VAULT_ADDR` и `VAULT_TOKEN` +✅ Записали настройки в Vault +✅ Проверили данные + +Теперь можно интегрировать Vault в Spring Boot 🚀 + From 3f831b68ab37ec0c17789fc641a7646fbf6ff70e Mon Sep 17 00:00:00 2001 From: igor Date: Thu, 22 May 2025 03:49:49 +0500 Subject: [PATCH 2/3] + --- Nginx_install.md | 8 +++++-- PostgreSQL/PostgreSQL_install.md | 3 +++ Proxy/Traefik_install_CCALM.md | 38 +++++++++++++++++++------------- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/Nginx_install.md b/Nginx_install.md index a251c20..ca8fffe 100644 --- a/Nginx_install.md +++ b/Nginx_install.md @@ -27,14 +27,18 @@ sudo apt-get install nginx -y cd /etc/nginx/sites-available/ && sudo tee ccalm.org > /dev/null <<'EOF' server { - listen 8081; - listen [::]:8081; + listen 8081 ssl http2; + listen [::]:8081 ssl http2; root /opt/www/org_ccalm; index index.html; server_name ccalm.org www.ccalm.org; + ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; + ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; + ssl_dhparam /etc/nginx/dhparam.pem; + location / { try_files $uri $uri/ =404; diff --git a/PostgreSQL/PostgreSQL_install.md b/PostgreSQL/PostgreSQL_install.md index 825c020..203083a 100644 --- a/PostgreSQL/PostgreSQL_install.md +++ b/PostgreSQL/PostgreSQL_install.md @@ -150,8 +150,11 @@ sudo mcedit /etc/postgresql/16/main/pg_hba.conf pg_restore -U postgres -d transit_new -1 /home/administrator/temp/transit.backup pg_restore -U postgres -d transit -1 /home/administrator/transit.backup pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup + pg_restore --host=127.0.0.1 --username=postgres --dbname=CCALM --verbose /tmp/CCALM.backup sudo -u postgres psql -d transit -f /tmp/transit.backup + + Или из архива (первоначально задать trust на 127.0.0.1) так: gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop diff --git a/Proxy/Traefik_install_CCALM.md b/Proxy/Traefik_install_CCALM.md index a4cb12a..a9a9920 100644 --- a/Proxy/Traefik_install_CCALM.md +++ b/Proxy/Traefik_install_CCALM.md @@ -1,7 +1,7 @@ # Устанавливаю Traefik cервер в Астане ```sh -ssh igor@5.180.46.11 -p 2200 +ssh ubuntu@194.32.140.11 -p 22 ``` # Установка Traefik на Linux Mint / Ubuntu @@ -82,11 +82,11 @@ entryPoints: websecure: address: ":443" traefik: - address: ":8080" + address: ":8070" api: dashboard: true - insecure: true + #insecure: true # Настройка сертификатов (пример с Let's Encrypt) certificatesResolvers: @@ -118,13 +118,15 @@ http: dashboard: entryPoints: - traefik - rule: "Host(`localhost`)" + rule: "Host(`194.32.140.11`)" service: api@internal + middlewares: + - dashboard-auth ccalm-api-auth: entryPoints: - websecure - rule: "(Host(`locust.ge`) || Host(`test.ccalm.org`)) && PathPrefix(`/api/authorization/v02/`)" + rule: "(Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)) && PathPrefix(`/api/authorization/v02/`)" service: org_ccalm_api_authorization_v02 tls: certresolver: myresolver @@ -134,7 +136,7 @@ http: ccalm-dbms: entryPoints: - websecure - rule: "(Host(`locust.ge`) || Host(`test.ccalm.org`)) && PathPrefix(`/api/dbms/v09/`)" + rule: "(Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)) && PathPrefix(`/api/dbms/v09/`)" service: org_ccalm_dbms_v09 tls: certresolver: myresolver @@ -144,15 +146,17 @@ http: ccalm-translation: entryPoints: - websecure - rule: "(Host(`locust.ge`) || Host(`test.ccalm.org`)) && PathPrefix(`/api/translation/v01/`)" + rule: "(Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)) && PathPrefix(`/api/translation/v01/`)" service: org_ccalm_translation_v01 tls: certresolver: myresolver + middlewares: + - strip-translation-prefix ccalm-login: entryPoints: - websecure - rule: "(Host(`locust.ge`) || Host(`test.ccalm.org`)) && PathPrefix(`/login/`)" + rule: "(Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)) && PathPrefix(`/login/`)" service: org_ccalm_login_v01 tls: certresolver: myresolver @@ -160,7 +164,7 @@ http: org-ccalm-main: entryPoints: - websecure - rule: "Host(`locust.ge`) || Host(`test.ccalm.org`)" + rule: "Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)" service: org_ccalm_main tls: certresolver: myresolver @@ -199,7 +203,7 @@ http: org_ccalm_translation_v01: loadBalancer: servers: - - url: "https://ccalm.org" + - url: "https://127.0.0.1:8085" passHostHeader: false serversTransport: insecureTransport healthCheck: @@ -246,10 +250,14 @@ http: stripPrefix: prefixes: - "/api/authorization/v02" + strip-translation-prefix: + stripPrefix: + prefixes: + - "/api/translation/v01" dashboard-auth: basicAuth: users: - - "admin:$apr1$NUoqcU3I$O6VxeuGhsA6RSIyh6rNbo." # Пароль хешируется так: htpasswd -nb admin t745632746573t + - "admin:$apr1$NUoqcU3I$O6VxeuGhsA6RSIyh6rNbo." # htpasswd -nb admin t745632746573t EOF ``` @@ -301,11 +309,11 @@ EOF ``` --- - +ыгвщ куищще ## 🔎 Шаг 6. Проверка работы Откройте в браузере cпаролем что быше "": ```sh -open https://5.180.46.11:8080/dashboard +open http://194.32.140.11:8070/dashboard ``` @@ -361,7 +369,7 @@ services: ports: - "80:80" # HTTP - "443:443" # HTTPS - - "8080:8080" # Dashboard + - "8070:8070" # Dashboard volumes: - /etc/traefik:/etc/traefik - /var/run/docker.sock:/var/run/docker.sock:ro @@ -387,7 +395,7 @@ EOF Откройте в браузере: ```sh -open http://192.168.200.85:8080/dashboard/ +open http://192.168.200.85:8070/dashboard/ ``` ```sh From c2f357fae1006940e87f42c5cf634e9b673260e8 Mon Sep 17 00:00:00 2001 From: igor Date: Wed, 25 Jun 2025 23:00:43 +0500 Subject: [PATCH 3/3] + --- 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