Compare commits

..

10 Commits

Author SHA1 Message Date
3f831b68ab + 2025-05-22 03:49:49 +05:00
332e1b84e9 По директориям раскидал 2025-05-20 20:16:22 +05:00
cab906cff1 PowerDNS modif 2025-05-16 22:34:24 +05:00
19407be225 Merge branch 'master' of https://git.dirt.kz/igor/Ubuntu_docs
# Conflicts:
#	DNS/PowerDNS_install.md
2025-05-15 21:20:52 +05:00
1d99814706 разное 2025-05-15 21:19:32 +05:00
7380add41d Новые каталоги 2025-05-15 09:04:57 +05:00
aa0179f6c0 Merge branch 'master' of https://git.dirt.kz/igor/Ubuntu_docs
# Conflicts:
#	PostgreSQL_select.md
2025-05-12 09:28:09 +05:00
2d79601c7a Тестирование ИБ при проверки на ГТС 2025-05-12 09:27:05 +05:00
3bbdd7e866 Разное 2025-05-03 19:34:13 +05:00
72ba8986d4 +select 2025-04-23 17:02:52 +05:00
32 changed files with 3526 additions and 2648 deletions

224
Brokers/RabbitMQ_install.md Normal file
View File

@ -0,0 +1,224 @@
****************************************************************************************************
Подключаемся к нужной машине
```sh
ssh ivanov_i@10.101.1.3 -p 22
```
Установка сервиса обмена сообщениями RabbitMQ менеджер сообщений (message broker), написан на Erlang, ближайший аналог в AWS SQS. По документации из: https://rtfm.co.ua/ru/rabbitmq-zapusk-opisanie-primery/
```sh
sudo apt-get update &&
sudo apt-get dist-upgrade &&
sudo apt install rabbitmq-server
```
Создаём пользователя и задаём пароль
```sh
sudo rabbitmqctl list_users &&
sudo rabbitmqctl add_user ivanov_i KGf4nxT8vxZWv3jqNasP &&
sudo rabbitmqctl set_user_tags ivanov_i administrator &&
sudo rabbitmqctl set_permissions -p / ivanov_i ".*" ".*" ".*" &&
sudo rabbitmqctl change_password ivanov_i KGf4nxT8vxZWv3jqNasP
```
Посмотреть список используемых плагинов:
```sh
sudo rabbitmq-plugins list
```
Активируем плагин rabbitmq_management для наблюдения за системой по HTTP https://www.rabbitmq.com/management.html https://thewebland.net/development/devops/chast-3-interfejs-upravleniya-rabbitmq/#:~:text=RabbitMQ%20Management%20%20это%20удобный%20интерфейс,и%20отправлять%20%2F%20получать%20сообщения%20вручную.
```sh
sudo rabbitmq-plugins enable rabbitmq_management
```
rabbitmq_management активирует поддержку API на порту 15672: http://192.168.0.144:15672 http://10.1.7.70:15672 http://192.168.0.83:15672
Но для активации нужно добавить пользователя, смотрим пользователей:
```sh
sudo rabbitmqctl list_users
sudo rabbitmqctl add_user admin paRabbit! или test test для локального тестового сервера
sudo rabbitmqctl set_user_tags admin administrator
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
```
Также можно создать пользователя для публикации сообщений но уже это можно сделать через WEB интерфейс: producer lgGDWAJEwI для guest с паролем: efewG!4ev Александра: alex jefruf!43
Теперь можно логинется по test test поменять пароль можно: https://kb.vmware.com/s/article/323520#:~:text=Log%20in%20to%20the%20RabbitMQ,host%20where%20RabbitMQ%20is%20installed.
Или так можно поменять пароль: sudo rabbitmqctl change_password zenoss New-Password
producer: клиент, выполняющий отправку сообщения
queue: собственно очередь сообщений
consumer: клиент, получающий сообщения из очереди
exchange: получает сообщения от producer, и отправялет их в очереди в соответствии с его типом (см. тут https://www.rabbitmq.com/tutorials/tutorial-three-python.html)
Дальше можно пробовать отправлять данные в очередь используя допустим java библиотеку урок: https://www.youtube.com/watch?v=6lPK_LgTZ9Y
https://www.rabbitmq.com/devtools.html :
Создаю Maven проект в консоли:
```sh
cd O:\projects\Workspace_Java\
mvn archetype:generate -DgroupId=kz.istt.app -DartifactId=TransitToRabbitMQ -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
```
Открываю его в idea64 и добавляю в POM следующую зависемость из https://mvnrepository.com/artifact/com.rabbitmq/amqp-client:
```xml
<!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.14.2</version>
</dependency>
```
Также поставил C:\Program Files\Java\jdk-14.0.2 а то не запускалось, также просит рут права для IntelliJ IDEA.
Урок создания maven проекта: https://devcolibri.com/unit/урок-1-подготовка-и-создание-maven-проекта/
или https://www.jetbrains.com/idea/guide/tutorials/working-with-maven/creating-a-project/
Добавил в POM файл:
```xml
<repositories>
<repository>
<name>RabbitMQ</name>
<url>https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.16.0</url>
<id>com.rabbitmq</id>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.16.0</version>
</dependency>
</dependencies>
```
Перезагружаем:
```sh
sudo service rabbitmq-server restart
```
****************************************************************************************************
Установка Shovels Plugin для RabbitMQ (лопата) по мотивам из: https://www.rabbitmq.com/docs/shovel
Активирую плагин командой:
```sh
sudo rabbitmq-plugins enable rabbitmq_shovel &&
sudo rabbitmq-plugins enable rabbitmq_shovel_management
```
Настраиваю Shovels Dynamic плагин в RabbitMQ через командную строку:
```sh
sudo rabbitmqctl set_parameter shovel kaz_to_kaz '{
"src-protocol": "amqp091",
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation",
"src-queue": "TO_KAZ",
"dest-protocol": "amqp091",
"dest-uri": "amqp://admin:paRabbit!@10.101.1.11:20000/playground",
"dest-exchange": "swap",
"dest-exchange-key": ".KAZ.",
"ack-mode": "on-confirm",
"publish-properties": {
"delivery_mode": 2
}
}'
```
Для Росии такие настройки:
```sh
sudo rabbitmqctl set_parameter shovel kaz_to_rus '{
"src-protocol": "amqp091",
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_rus",
"src-queue": "TO_RUS",
"dest-protocol": "amqp091",
"dest-uri": "amqp://iktt_kaz:jkrjHL7xj7PrW1D@192.168.89.133:20000/playground",
"dest-exchange": "swap",
"dest-exchange-key": "KZ",
"ack-mode": "on-confirm",
"publish-properties": {
"delivery_mode": 2
}
}'
```
Для Беларусии такие настройки:
```sh
sudo rabbitmqctl set_parameter shovel kaz_to_blr '{
"src-protocol": "amqp091",
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_blr",
"src-queue": "TO_BLR",
"dest-protocol": "amqp091",
"dest-uri": "amqp://KZ_IKTT:DK34xDNlZQfQ551k@192.168.90.133:20000/plumber",
"dest-exchange": "eec.swap",
"dest-exchange-key": "KZ",
"ack-mode": "on-confirm",
"publish-properties": {
"delivery_mode": 2
}
}'
```
Для Армении такие настройки:
```sh
sudo rabbitmqctl set_parameter shovel kaz_to_arm '{
"src-protocol": "amqp091",
"src-uri": "amqp://admin:password@127.0.0.1:20000/transportation_arm",
"src-queue": "TO_ARM",
"dest-protocol": "amqp091",
"dest-uri": "amqp://kz_istt:password@192.168.89.158:20000/transportation",
"dest-exchange": "swap_kz",
"dest-exchange-key": "KZ_ISTT",
"ack-mode": "on-confirm",
"publish-properties": {
"delivery_mode": 2
}
}'
```
Для Кыргызстана (таможенная инфраструктура)
```sh
sudo rabbitmqctl set_parameter shovel kaz_to_kgz '{
"src-protocol": "amqp091",
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_kgz",
"src-queue": "TO_KGZ",
"dest-protocol": "amqp091",
"dest-uri": "amqp://kz_istt:uzZNYbVTElMDXnfwQx16@192.168.70.133:20000/transportation_kaz",
"dest-exchange": "swap",
"dest-exchange-key": "KAZ",
"ack-mode": "on-confirm",
"publish-properties": {
"delivery_mode": 2
}
}'
```
Удалять так:
```sh
sudo rabbitmqctl clear_parameter shovel kaz_to_kgz
```
Для отправки из Киргизии нам то такие настройки:
```sh
sudo rabbitmqctl set_parameter shovel kgz_to_kaz '{
"src-protocol": "amqp091",
"src-uri": "amqp://admin:pfta2OFt@127.0.0.1:20000/transportation_kaz",
"src-queue": "TO_KAZ",
"dest-protocol": "amqp091",
"dest-uri": "amqp://kg_amap:qrd2fjEjkegdi7bfb@192.168.70.134:20000/transportation_kgz",
"dest-exchange": "swap",
"dest-exchange-key": "KGZ",
"ack-mode": "on-confirm",
"publish-properties": {
"delivery_mode": 2
}
}'
```
Удалять так:
```sh
sudo rabbitmqctl clear_parameter shovel kgz_to_kaz
```
Чтобы проверить текущие параметры Shovel:
```sh
sudo rabbitmqctl list_parameters
```
А также можно взглянуть что создалось через WEB интерфейс
Не забывать что Exchange: swap должен быть не "direct" а как "topic" иначе маршрутизация не сработает.

View File

@ -53,6 +53,7 @@ services:
- GOTIFY_SERVER_SSL_ENABLED=true - GOTIFY_SERVER_SSL_ENABLED=true
- GOTIFY_SERVER_SSL_CERTFILE=/certs/gotify.crt - GOTIFY_SERVER_SSL_CERTFILE=/certs/gotify.crt
- GOTIFY_SERVER_SSL_CERTKEY=/certs/gotify.key - GOTIFY_SERVER_SSL_CERTKEY=/certs/gotify.key
- GIN_MODE=debug
networks: networks:
- gotify-net - gotify-net

215
DNS/BIND_install.md Normal file
View File

@ -0,0 +1,215 @@
****************************************************************************************************
## 1. Подключаемся к нужному серверу
```sh
ssh root@bigfoottrade.kz -p 2222
```
****************************************************************************************************
Собственный DynDNS на Linux для observer.kz для начала устанавливаем BIND 9.13 and later по этому мануалу https://www.dmosk.ru/miniinstruktions.php?mini=bind-ubuntu и по этому для новой версии https://www.netss.by/?p=26
```sh
sudo apt-get update &&
sudo apt-get install bind9 dnsutils &&
sudo apt-get install bind9utils
```
Adding the service to autostart
```sh
systemctl enable bind9
```
Checking if the service is working
```sh
nslookup dmosk.ru 127.0.0.1
```
Opening the configuration file
```sh
mcedit /etc/bind/named.conf.options
```
Для глобальных запросов добавляем строку: allow-query { any; };
Также добавляем в этот файл DNS сервера пересылки, на них будут перенаправляться запросы если локальный не содержит данных
//forwarders {
// 8.8.8.8;
// 8.8.4.4;
//};
Проверяем настройки командой (ответ должен быть пустым):
sudo named-checkconf
Перезагружаем:
sudo systemctl restart bind9
Проверяю версию BIND:
named -v
Выдало: BIND 9.16.1-Ubuntu (Stable Release) <id:d497c32>
Можно проверить какой IP выдаст на DNS запрос
dig locust.kz A
На этом базовая настройка закончена. Наш сервер готов принимать и отдавать запросы и работать, как кэширующий dns.
Смотрим какие зоны поддерживает bind:
```sh
mcedit /etc/bind/named.conf.local
```
смотрим подробнее что записано в зоне:
```sh
sudo cat /var/cache/bind/dirt.kz
```
Далее создаём клиента согласно: https://help.ubuntu.ru/wiki/динамический_днс_своими_руками
Перейдем в него.
cd /etc/bind/
Генерируем пару ключь для обмена информацией между клиентом и сервером:
sudo tsig-keygen -a hmac-sha512 dirt.kz > dirt.kz.key
sudo tsig-keygen -a hmac-sha512 locust.kz > locust.kz.key
Для загрузки ключа добавляем его файл mcedit /etc/bind/named.conf строчку с указанием файла, где определен ключ.
include "/etc/bind/dirt.kz.key";
include "/etc/bind/locust.kz.key";
Следующим шагом необходимо в файл mcedit /etc/bind/named.conf.local прописать доменную зону, которой мы оперируем.
zone "dirt.kz" {
type master;
allow-update {key dirt.kz;};
file "/var/cache/bind/dirt.kz";
};
zone "locust.kz" {
type master;
allow-update {key locust.kz;};
file "/var/cache/bind/locust.kz";
};
В файле "mcedit /var/cache/bind/dirt.kz" должны быть прописанны записи домена где:
В файле "mcedit /var/cache/bind/locust.kz" должны быть прописанны записи домена где:
Поле $ORIGIN для подставки имени в знак @, поэтому знак @ не используется просто так в тексте
Если используется символ @ то он заменяется на то что было прописанно в $ORIGIN смотреть в: https://help.dyn.com/how-to-format-a-zone-file/
SOA — Начало полномочий подробней смотри в https://k.psu.ru/wiki/BIND9_(методическое_пособие)#SOA
NS — Сервер имён
A — рекорд
MX — Почта для обмена
CN — Каноническое имя
PTR — указатель
И таким содержимым:
$ORIGIN dirt.kz
$TTL 604800
@ IN SOA bigfoottrade.kz. root.bigfoottrade.kz. (
8 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS bigfoottrade.kz.
Второй файл для locust.kz:
$ORIGIN .
$TTL 604800 ; 1 week
locust.kz IN SOA bigfoottrade.kz. irigm.mail.ru. (
134 ; serial
604800 ; refresh (1 week)
86400 ; retry (1 day)
1419200 ; expire (2 weeks 2 days 10 hours 13 minutes 20 seconds)
604800 ; minimum (1 week)
)
NS bigfoottrade.kz.
$TTL 3600 ; 1 hour
A 5.76.254.182
$ORIGIN locust.kz.
* A 127.0.0.1
Правлю права доступа:
sudo chown -R bind:bind /etc/bind
Если настройки были первоначальными то стоит удалить файл /var/cache/bind/locust.kz.jnl и переинициализировать его командой:
sudo rndc reconfig
Потом следует вызвать:
sudo systemctl restart bind9
Команда выше также переписывет накопившиеся данные из /var/cache/bind/locust.kz.jnl в /var/cache/bind/locust.kz так что после обновления если охото быстрей взглянуть на текстовое значение следует повторно вызвать эту команду
После настроек сервера перезагружаем его:
sudo named-checkconf
sudo rndc reload
sudo systemctl restart bind9
sudo rndc status
journalctl | grep bind
sudo journalctl -u bind9 -n 50
Создаю скрипт /etc/ddns/ddns.sh для обновления доменных зон удалённо с доступом по ключу:
Файл из примера:
#!/bin/bash
TTL=3600
SERVER=ns.dyndns.my
HOSTNAME=dhost.dyndns.my
ZONE=dyndns.my
KEYFILE=Kdyndns.my.+157+48025.private
new_ip_address=`curl http://dyndns.my/ip.php` #Этот файлик создадим позднее на сервере!
cd /etc/ddns
nsupdate -v -k $KEYFILE << EOF
server $SERVER
zone $ZONE
update delete $HOSTNAME A
update add $HOSTNAME $TTL A $new_ip_address
send
EOF
Мой модифицированный файл для обновления IP в Bind9 DNS сервису по созданному файлу ip.txt, файл ip.txt создаётся в PHP скрипте который описан ниже:
#!/bin/bash
TTL=3600
SERVER=127.0.0.1
HOSTNAME=*.dirt.kz
ZONE=dirt.kz
KEYFILE=/etc/bind/dirt.kz.key
new_ip_address=
FILE=/etc/ddns/ip.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
cd /etc/ddns
sudo nsupdate -v -k $KEYFILE << EOF
server $SERVER
zone $ZONE
update delete $HOSTNAME A
update add $HOSTNAME $TTL A $new_ip_address
update delete dirt.kz A
update add dirt.kz $TTL A $new_ip_address
send
EOF
echo "OK"
Так как PHP работает за HAProxy то немного модифицировал скрипт который сохраняет IP обратившегося клиента в файл, а именно использую "x-forwarded-for" для передачи IP адреса клиента:
<?php
echo '<pre>'; print_r(getallheaders()); echo '</pre>';
// PROBLEM IS each browser has different "x-forwarder-for" some "X-Forwarder-for" and some browser gave you 2x ip "x.x.x.x, x.x.x.x"
foreach ( getallheaders() as $k => $v) {
if ( strtolower($k) == 'x-forwarded-for' ) {
$tmp = explode(', ', $v);
if ( $tmp[count($tmp)-1] != '' )
$_SERVER['REMOTE_ADDR'] = $tmp[count($tmp)-1];
}
}
if(isset($_GET["key"]) && $_GET["key"]=='4fygxNq539NFfUm6SOd2vn52GwL7o7NA'){
$myfile = fopen("/etc/ddns/ip.txt", "w");
fwrite($myfile, $_SERVER['REMOTE_ADDR']);
fclose($myfile);
}
echo $_SERVER['REMOTE_ADDR'];
?>
Проверяем что находит IP по доменному имени
nslookup dirt.kz 127.0.0.1

View File

@ -2,7 +2,7 @@
**************************************************************************************************** ****************************************************************************************************
## 2. Подключаемся к нужному серверу ## 2. Подключаемся к нужному серверу
```sh ```sh
ssh igor@192.168.200.85 -p 22 ssh root@bigfoottrade.kz -p 2222
``` ```
Connect to CCALM Georgia infrastructure: Connect to CCALM Georgia infrastructure:
```sh ```sh
@ -15,31 +15,32 @@ DNS на Ubuntu 24.04 согласно инстркции https://phoenixnap.com
Можно было-бы использовать не 53 порт, но провайдер не даёт указывать порт при настройке DNS серверов (не знаю какие локальные проблемы могут возникнуть если задать не 53 порт) Можно было-бы использовать не 53 порт, но провайдер не даёт указывать порт при настройке DNS серверов (не знаю какие локальные проблемы могут возникнуть если задать не 53 порт)
Устанавливаем сам PowerDNS https://doc.powerdns.com/authoritative/installation.html Устанавливаем сам PowerDNS https://doc.powerdns.com/authoritative/installation.html
Для установки версии поновее PowerDNS 4.8.5:
```sh
sudo apt install curl gnupg lsb-release &&
curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/pdns.gpg &&
echo "deb [signed-by=/etc/apt/trusted.gpg.d/pdns.gpg] http://repo.powerdns.com/ubuntu $(lsb_release -cs)-auth-48 main" | sudo tee /etc/apt/sources.list.d/pdns.list
```
```sh ```sh
sudo apt-get update && sudo apt-get update &&
sudo apt-get upgrade -y sudo apt-get upgrade -y
``` ```
Install PowerDNS server Install PowerDNS server
```sh ```sh
sudo apt-get install pdns-server -y sudo apt-get install pdns-server -y &&
sudo apt-get install pdns-backend-bind
``` ```
На всякий случай делаю резервные копии исходных файлов настрое:
```sh
cd /etc/powerdns &&
sudo cp named.conf named.conf.bak &&
sudo cp pdns.conf pdns.conf.bak
```
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
Как настроить MariaDB базу для использования в PowerDNS смотри: Как настроить MariaDB базу для использования в PowerDNS смотри:
[Установка PowerDNS с MariaDB](./PowerDNS_install_MarinaDB.md) [Установка PowerDNS с MariaDB](./PowerDNS_install_MarinaDB.md)
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
Как настроить SQLite3 базу для использования в PowerDNS смотри: Как настроить SQLite3 базу для использования в PowerDNS смотри:
[Установка PowerDNS с MariaDB](./PowerDNS_install_SQIite3.md) [Установка PowerDNS с SQIite3](./PowerDNS_install_SQIite3.md)
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
Как настроить PostgreSQL базу для использования в PowerDNS смотри: Как настроить PostgreSQL базу для использования в PowerDNS смотри:
[Установка PowerDNS с MariaDB](./PowerDNS_install_PostgreSQL.md) [Установка PowerDNS с PostgreSQL](./PowerDNS_install_PostgreSQL.md)
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
Наспройку файла pdns.conf авторитетный сервер, есть такой пример который следует изучить: https://raw.githubusercontent.com/trinv/PowerDNS/a56b9122f4a2de9c1f789009f09b9831f74d8bf1/pdns.template.master.conf (естественно без 1й табуляции): Наспройку файла pdns.conf авторитетный сервер, есть такой пример который следует изучить: https://raw.githubusercontent.com/trinv/PowerDNS/a56b9122f4a2de9c1f789009f09b9831f74d8bf1/pdns.template.master.conf (естественно без 1й табуляции):
@ -48,6 +49,12 @@ sudo cp pdns.conf pdns.conf.bak
sudo mcedit /etc/powerdns/pdns.conf sudo mcedit /etc/powerdns/pdns.conf
``` ```
```sh
sudo mkdir /var/run/pdns &&
sudo chown pdns:pdns /var/run/pdns &&
sudo chmod 750 /var/run/pdns
```
Write new settings rr Write new settings rr
```sh ```sh
cd /etc/powerdns/ && cd /etc/powerdns/ &&
@ -57,9 +64,10 @@ allow-axfr-ips=127.0.0.1
also-notify=127.0.0.1 also-notify=127.0.0.1
include-dir=/etc/powerdns/pdns.d include-dir=/etc/powerdns/pdns.d
launch= launch=bind
local-address=88.218.94.134,127.0.0.1
local-address=77.240.38.108,127.0.0.1
local-port=53 local-port=53
log-dns-details=on log-dns-details=on
@ -68,9 +76,9 @@ log-timestamp=yes
loglevel=4 loglevel=4
webserver=yes webserver=yes
webserver-address=127.0.0.1 webserver-address=0.0.0.0
webserver-allow-from=::/0, 0.0.0.0/0 webserver-allow-from=::/0, 0.0.0.0/0
webserver-port=8091 webserver-port=8070
master=yes master=yes
slave=no slave=no
@ -80,14 +88,28 @@ api=yes
api-key=40c89f2a-e2f3-4ff8-a245-3547111f6677 api-key=40c89f2a-e2f3-4ff8-a245-3547111f6677
EOF EOF
``` ```
```sh
sudo chown pdns:pdns /etc/powerdns/pdns.conf &&
sudo chmod 640 /etc/powerdns/pdns.conf
```
Также пробуем запустить под pdns:
```sh
sudo rm -f /var/run/pdns.controlsocket &&
sudo -u pdns /usr/sbin/pdns_server --config-dir=/etc/powerdns
```
Проверяю соединение к базе перезапустив PowerDNS: Проверяю соединение к базе перезапустив PowerDNS:
```sh ```sh
sudo systemctl stop pdns && sudo systemctl stop pdns &&
sudo pdns_server --daemon=no --guardian=no --loglevel=9 sudo pdns_server --daemon=no --guardian=no --loglevel=9
``` ```
Пытаемся открыть WEB интерфейс Пытаемся открыть WEB интерфейс
```sh ```sh
start http://88.218.94.134:8081 start http://77.240.38.108:8070
``` ```
Если всё норм выполняем: Если всё норм выполняем:
@ -111,20 +133,85 @@ start http://88.218.94.134:8081
sudo pdnsutil create-zone test ns1.test && sudo pdnsutil create-zone test ns1.test &&
sudo pdnsutil add-record test ccalm A 192.168.200.184 sudo pdnsutil add-record test ccalm A 192.168.200.184
``` ```
Добавляем зону и две записи Добавляем зону и записи
```sh ```sh
sudo pdnsutil create-zone geovizor.top ns1.geovizor.top && sudo pdnsutil create-zone mesh.kz &&
sudo pdnsutil replace-rrset geovizor.top @ SOA "ns1.geovizor.top admin.geovizor.top $(date +%Y%m%d)01 10800 3600 604800 3600" && sudo pdnsutil replace-rrset mesh.kz @ SOA "ns1.mesh.kz admin.mesh.kz $(date +%Y%m%d)01 10800 3600 604800 3600" &&
sudo pdnsutil add-record geovizor.top ns1 A 88.218.94.134 && sudo pdnsutil add-record mesh.kz @ A 5.251.150.30 &&
sudo pdnsutil add-record geovizor.top ns2 A 88.218.94.134 && sudo pdnsutil add-record mesh.kz "*" A 5.251.150.30 &&
sudo pdnsutil add-record geovizor.top @ A 88.218.94.134 && sudo pdnsutil add-record mesh.kz @ CAA 3600 "0 issue \"letsencrypt.org\"" &&
sudo pdnsutil add-record geovizor.top * A 88.218.94.134 && sudo pdnsutil add-record mesh.kz @ TXT 3600 "\"v=spf1 ip4:77.240.38.108 -all\"" &&
sudo pdnsutil add-record geovizor.top @ CAA 3600 "0 issue \"letsencrypt.org\"" && sudo pdnsutil add-record mesh.kz @ MX 3600 "10 mail.mesh.kz." &&
sudo pdnsutil add-record geovizor.top @ TXT 3600 "\"v=spf1 ip4:88.218.94.134 -all\"" && sudo pdnsutil add-record mesh.kz mail A 3600 77.240.38.108
sudo pdnsutil add-record geovizor.top @ MX 3600 "10 mail.geovizor.top." && sudo pdnsutil add-record mesh.kz @ NS 3600 ns1.mesh.kz
sudo pdnsutil add-record geovizor.top mail A 3600 88.218.94.134 && sudo pdnsutil add-record mesh.kz @ NS 3600 ns2.mesh.kz
sudo pdnsutil add-record geovizor.top powerdns A 3600 88.218.94.134
``` ```
```sh
sudo pdnsutil create-zone dirt.kz &&
sudo pdnsutil replace-rrset dirt.kz @ SOA "ns1.dirt.kz admin.dirt.kz $(date +%Y%m%d)01 10800 3600 604800 3600" &&
sudo pdnsutil add-record dirt.kz @ A 5.251.150.30 &&
sudo pdnsutil add-record dirt.kz "*" A 5.251.150.30 &&
sudo pdnsutil add-record dirt.kz @ CAA 3600 "0 issue \"letsencrypt.org\"" &&
sudo pdnsutil add-record dirt.kz @ TXT 3600 "\"v=spf1 ip4:77.240.38.108 -all\"" &&
sudo pdnsutil add-record dirt.kz @ MX 3600 "10 mail.dirt.kz." &&
sudo pdnsutil add-record dirt.kz mail A 3600 77.240.38.108 &&
sudo pdnsutil add-record dirt.kz @ NS 3600 ns1.dirt.kz &&
sudo pdnsutil add-record dirt.kz @ NS 3600 ns2.dirt.kz &&
sudo pdnsutil add-record dirt.kz ns1 A 77.240.38.108 &&
sudo pdnsutil add-record dirt.kz ns2 A 77.240.38.108
```
```sh
sudo pdnsutil create-zone geovizor.top &&
sudo pdnsutil replace-rrset geovizor.top @ SOA "ns1.geovizor.top admin.geovizor.top $(date +%Y%m%d)01 10800 3600 604800 3600" &&
sudo pdnsutil add-record geovizor.top @ A 5.251.150.30 &&
sudo pdnsutil add-record geovizor.top "*" A 5.251.150.30 &&
sudo pdnsutil add-record geovizor.top @ CAA 3600 "0 issue \"letsencrypt.org\"" &&
sudo pdnsutil add-record geovizor.top @ TXT 3600 "\"v=spf1 ip4:77.240.38.108 -all\"" &&
sudo pdnsutil add-record geovizor.top @ MX 3600 "10 mail.geovizor.top." &&
sudo pdnsutil add-record geovizor.top mail A 3600 77.240.38.108 &&
sudo pdnsutil add-record geovizor.top @ NS 3600 ns1.geovizor.top &&
sudo pdnsutil add-record geovizor.top @ NS 3600 ns2.geovizor.top &&
sudo pdnsutil add-record geovizor.top ns1 A 77.240.38.108 &&
sudo pdnsutil add-record geovizor.top ns2 A 77.240.38.108
```
```sh
sudo pdnsutil create-zone locust.kz &&
sudo pdnsutil replace-rrset locust.kz @ SOA "ns1.locust.kz admin.locust.kz $(date +%Y%m%d)01 10800 3600 604800 3600" &&
sudo pdnsutil add-record locust.kz @ A 5.251.150.30 &&
sudo pdnsutil add-record locust.kz "*" A 5.251.150.30 &&
sudo pdnsutil add-record locust.kz @ CAA 3600 "0 issue \"letsencrypt.org\"" &&
sudo pdnsutil add-record locust.kz @ TXT 3600 "\"v=spf1 ip4:77.240.38.108 -all\"" &&
sudo pdnsutil add-record locust.kz @ MX 3600 "10 mail.locust.kz." &&
sudo pdnsutil add-record locust.kz mail A 3600 77.240.38.108
sudo pdnsutil add-record locust.kz @ NS 3600 ns1.locust.kz
sudo pdnsutil add-record locust.kz @ NS 3600 ns2.locust.kz
```
```sh
sudo pdnsutil create-zone locust.ge &&
sudo pdnsutil replace-rrset locust.ge @ SOA "ns1.geovizor.top admin.locust.ge $(date +%Y%m%d)01 10800 3600 604800 3600" &&
sudo pdnsutil add-record locust.ge @ A 88.218.94.134 &&
sudo pdnsutil add-record locust.ge "*" A 88.218.94.134 &&
sudo pdnsutil add-record locust.ge @ CAA 3600 "0 issue \"letsencrypt.org\"" &&
sudo pdnsutil add-record locust.ge @ TXT 3600 "\"v=spf1 ip4:88.218.94.134 -all\"" &&
sudo pdnsutil add-record locust.ge @ MX 3600 "10 mail.locust.ge." &&
sudo pdnsutil add-record locust.ge mail A 3600 88.218.94.134
sudo pdnsutil add-record locust.ge @ NS 3600 ns1.geovizor.top
sudo pdnsutil add-record locust.ge @ NS 3600 ns2.geovizor.top
```
For deleting record please run command:
```sh
sudo pdnsutil delete-rrset locust.ge locust.ge.locust.ge NS
sudo pdnsutil delete-rrset geovizor.top gotify A
```
Выше задал такие настройки как Выше задал такие настройки как
```conf ```conf
Refresh = 10800 (3 часа) Refresh = 10800 (3 часа)
@ -141,8 +228,11 @@ sudo pdnsutil list-zone geovizor.top
``` ```
Проверяем отвечалет ли: Проверяем отвечалет ли:
```sh ```sh
dig @127.0.0.1 -p 5300 ccalm.test A dig @127.0.0.1 -p 53 mesh.kz A
``` ```
dig @77.240.38.108 -p 53 mesh.kz A
```sh ```sh
dig @127.0.0.1 -p 53 geovizor.top A dig @127.0.0.1 -p 53 geovizor.top A
``` ```
@ -182,8 +272,6 @@ curl -X PATCH \
}' }'
``` ```
## ********** Настройка рекурсивного DNS от PowerDNS Recursor 4.9.3 порту 53 будет обрабатывать запросы с локальной машины ********** ## ********** Настройка рекурсивного DNS от PowerDNS Recursor 4.9.3 порту 53 будет обрабатывать запросы с локальной машины **********
Документация: https://doc.powerdns.com/recursor/index.html Документация: https://doc.powerdns.com/recursor/index.html
Документация: https://docs.powerdns.com/recursor/indexTOC.html Документация: https://docs.powerdns.com/recursor/indexTOC.html
@ -277,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) Редактирую /etc/netplan/ для того чтобы прописать поднятый DNS сервер на 127.0.0.1 (не знаю сработает ли так как отключу systemd-resolved)
```sh ```sh
@ -526,7 +614,7 @@ open http://192.168.200.85:9191/login
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
Настраиваем запус на постоянную работу через Gunicorn и systemd Настраиваем запуск на постоянную работу через Gunicorn и systemd
```sh ```sh
cd /opt/web/powerdns-admin && cd /opt/web/powerdns-admin &&

View File

@ -127,3 +127,17 @@ sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.sqlite.conf
``` ```
In PowerDNS configured to auto read config from dir /etc/powerdns/pdns.d/ In PowerDNS configured to auto read config from dir /etc/powerdns/pdns.d/
For delete record from SQLite run:
```sh
cp /var/lib/powerdns/pdns.sqlite3 /var/lib/powerdns/pdns.sqlite3.bak
sqlite3 /var/lib/powerdns/pdns.sqlite3
SELECT id, name FROM domains WHERE name = 'locust.ge';
SELECT id, name, type, content FROM records WHERE name = 'locust.ge.locust.ge' AND type = 'NS';
DELETE FROM records WHERE id IN (25, 26, 27, 28);
.exit
pdns_control notify locust.ge
```

52
DNS/Ubuntu_config.md Normal file
View File

@ -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
```

View File

@ -57,7 +57,7 @@ WantedBy=multi-user.target
На клиенте запускаем локальный порт также указал 9999 а ключь На клиенте запускаем локальный порт также указал 9999 а ключь
```sh ```sh
htc -F 9999 --base-uri /index.html?mybiglogfile=all 192.168.200.81:80 htc -F 9999 --base-uri /index.html?mybiglogfile=all 192.168.200.81:80
htc -F 9999 --base-uri /index.html?mybiglogfile=all locust.kz:80 htc -F 9999 --base-uri /index.html?mybiglogfile=all dirt.kz:8080
``` ```
Для остановки Для остановки

171
Logs/Vector_dev_install.md Normal file
View File

@ -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=<your-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` в конфигурации.

View File

@ -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=<your-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` в конфигурации.

View File

@ -11,7 +11,7 @@ ssh igor@88.218.94.134 -p 2200
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
```sh ```sh
sudo apt-get update && sudo apt-get update &&
sudo apt-get install nginx sudo apt-get install nginx -y
``` ```
Настройка самоподписанного сертификата для SSL nginx Настройка самоподписанного сертификата для SSL nginx
```sh ```sh
@ -19,36 +19,56 @@ sudo apt-get install nginx
``` ```
Самой важной строкой является Common Name (введите FQDN или свое имя). Как правило, в эту строку вносят доменное имя, с которым нужно связать сервер. В случае если доменного имени нет, внесите в эту строку IP-адрес сервера. Самой важной строкой является Common Name (введите FQDN или свое имя). Как правило, в эту строку вносят доменное имя, с которым нужно связать сервер. В случае если доменного имени нет, внесите в эту строку IP-адрес сервера.
```sh ```sh
sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096 sudo openssl dhparam -out /etc/nginx/dhparam.pem 2048
``` ```
Создаём файл:
```sh
sudo mcedit /etc/nginx/conf.d/ssl.conf
```
И вписываем в него:
```conf
server {
listen 8091 ssl http2;
listen [::]:8091 ssl http2;
server_name istransit.kg; И вписываем в него:
```sh
cd /etc/nginx/sites-available/ &&
sudo tee ccalm.org > /dev/null <<'EOF'
server {
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 /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
ssl_dhparam /etc/nginx/dhparam.pem; ssl_dhparam /etc/nginx/dhparam.pem;
root /opt/www/istransit.kg;
index index.html index.htm;
location / { 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
``` ```
Теперь можно включить виртуальный хост:
```sh
sudo ln -s /etc/nginx/sites-available/ccalm.org /etc/nginx/sites-enabled/
```
```sh ```sh
sudo systemctl restart nginx sudo systemctl restart nginx
``` ```
Журнал последних 50 записей
```sh
journalctl -u nginx.service -n 50
```
Также есть такие команды: Также есть такие команды:
nginx -s stop — быстрое завершение nginx -s stop — быстрое завершение
nginx -s quit — плавное завершение nginx -s quit — плавное завершение
@ -67,24 +87,36 @@ server {
cd /etc/nginx/sites-available/ && cd /etc/nginx/sites-available/ &&
sudo tee geovizor.top > /dev/null <<'EOF' sudo tee geovizor.top > /dev/null <<'EOF'
server { server {
listen 8081; listen 8081;
listen [::]:8081; listen [::]:8081;
root /opt/www/istransit.kz; root /opt/www/istransit.kz;
index index.html; index index.html;
server_name istransit.kz www.istransit.kz; server_name istransit.kz www.istransit.kz;
location / { location / {
try_files $uri $uri/ =404; 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";
add_header Expires 0;
}
} }
EOF EOF
``` ```
Теперь можно включить виртуальный хост: Теперь можно включить виртуальный хост:
```sh
sudo ln -s /etc/nginx/sites-available/istransit.kz /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/istransit.kz /etc/nginx/sites-enabled/
```
Проверяем правильность конфигурации: Проверяем правильность конфигурации:
```sh
sudo nginx -t sudo nginx -t
```
Перезапускаем: Перезапускаем:
```sh
sudo systemctl restart nginx sudo systemctl restart nginx
```

View File

@ -22,7 +22,7 @@ sudo apt install -y docker.io docker-compose
``` ```
Вставьте следующий конфигурационный файл: Вставьте следующий конфигурационный файл:
В кодфиге прописан корневой сертификат чтобы node.js ему доверял
```yaml ```yaml
services: services:
uptime-kuma: uptime-kuma:
@ -33,6 +33,9 @@ services:
- "3001:3001" - "3001:3001"
volumes: volumes:
- ./data:/app/data - ./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. Запуск контейнера ## 4. Запуск контейнера
@ -63,4 +66,3 @@ start http://192.168.200.84:3001
``` ```
Готово! Uptime Kuma установлен и запущен в Docker на Ubuntu 24.04. 🚀 Готово! Uptime Kuma установлен и запущен в Docker на Ubuntu 24.04. 🚀

View File

@ -1,18 +1,27 @@
https://documentation.wazuh.com/current/installation-guide/wazuh-server/installation-assistant.html https://documentation.wazuh.com/current/installation-guide/wazuh-server/installation-assistant.html
Подключаемся к нужному серверу: Connectiong to server:
```sh ```sh
ssh igor@192.168.200.86 ssh igor@192.168.200.86
``` ```
Execute installation commman:
```sh ```sh
curl -sO https://packages.wazuh.com/4.11/wazuh-install.sh curl -sO https://packages.wazuh.com/4.11/wazuh-install.sh &&
sudo bash wazuh-install.sh -a sudo bash wazuh-install.sh -a
``` ```
20/04/2025 12:07:15 INFO: You can access the web interface https://<wazuh-dashboard-ip>:443
User: admin
Password: LsR1i+*DT6Az37rBDTnuyw54wB+Ce*1+
debian virtual box
admin
KD7Iv+BCJkARvxPA6UYp+HdxhacTUNy6
```sh ```sh
start https://192.168.200.86:443 open https://127.0.0.1:443
``` ```
Компонент Порт по умолчанию Доступ Компонент Порт по умолчанию Доступ
Wazuh API 55000 Внутренний Wazuh API 55000 Внутренний
@ -75,9 +84,17 @@ sudo grep -i "history" /var/log/wazuh-indexer/wazuh-cluster.log
sudo grep -i "error" /var/log/wazuh-indexer/wazuh-cluster.log sudo grep -i "error" /var/log/wazuh-indexer/wazuh-cluster.log
``` ```
Инициализируем кластер безопасности:
Временно отключаю аудит:
```sh ```sh
/usr/share/wazuh-indexer/plugins/opensearch-security/tools/securityadmin.sh \ sudo mcedit /etc/wazuh-indexer/opensearch-security/audit.yml
```
Инициализируем кластер безопасности (после отключения аудита перенастраиваем):
```sh
sudo -u wazuh-indexer /usr/share/wazuh-indexer/plugins/opensearch-security/tools/securityadmin.sh \
-cd /etc/wazuh-indexer/opensearch-security/ \ -cd /etc/wazuh-indexer/opensearch-security/ \
-icl -nhnv \ -icl -nhnv \
-cacert /etc/wazuh-indexer/certs/root-ca.pem \ -cacert /etc/wazuh-indexer/certs/root-ca.pem \
@ -85,6 +102,11 @@ sudo grep -i "error" /var/log/wazuh-indexer/wazuh-cluster.log
-key /etc/wazuh-indexer/certs/admin-key.pem -key /etc/wazuh-indexer/certs/admin-key.pem
``` ```
Перезагружаем после применения настроек
```sh
sudo systemctl restart wazuh-indexer
```
Проверьте конфигурацию аудита в файле /etc/wazuh-indexer/opensearch.yml: Проверьте конфигурацию аудита в файле /etc/wazuh-indexer/opensearch.yml:
```sh ```sh
@ -102,3 +124,6 @@ opensearch_security.audit.enable_transport: true
```sh ```sh
sudo grep -i "error" /var/log/wazuh-indexer/wazuh-cluster.log sudo grep -i "error" /var/log/wazuh-indexer/wazuh-cluster.log
``` ```
sudo chown -R wazuh-indexer:wazuh-indexer /etc/wazuh-indexer /var/lib/wazuh-indexer /var/log/wazuh-indexer

View File

@ -150,9 +150,12 @@ 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_new -1 /home/administrator/temp/transit.backup
pg_restore -U postgres -d transit -1 /home/administrator/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=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 sudo -u postgres psql -d transit -f /tmp/transit.backup
Или из архива (первоначально задать trust на 127.0.0.1) так: Или из архива (первоначально задать trust на 127.0.0.1) так:
gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop

View File

@ -0,0 +1,91 @@
Подключаюсь к инфраструктуре:
```sh
ssh ivanov_i@10.101.1.3
```
Зеркало APP Астана RabbitMQ
```sh
ssh ivanov_i@10.201.1.3 -p 22
```
```sh
psql -h 10.101.1.6 -U user_developer_igor_i -d transit
```
```sh
psql -h 10.201.1.6 -U postgres -d transit
```
## Логи по Базе
0) Создание таблицы
```sql
CREATE TABLE public.test_table (id bigint, PRIMARY KEY (id));
```
1) Немного изменил права:
```sql
ALTER TABLE IF EXISTS public.test_table OWNER to user_developer_igor_i;
```
2) Удаление таблицы
```sql
DROP TABLE public.test_table;
```
3) Создание пользователя БД
```sql
CREATE ROLE test_user WITH LOGIN NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT NOREPLICATION NOBYPASSRLS CONNECTION LIMIT -1 VALID UNTIL '2025-05-22T00:00:00+05:00' PASSWORD '!Ii123456';
```
4) Изменение прав пользователя !!!!!!!!!!Вадим не видел!!!!!!!!!!!
```sql
ALTER ROLE user_developer_igor_i NOLOGIN VALID UNTIL '2025-05-22T00:00:00+05:00';
```
```sql
GRANT app_authorization TO user_developer_igor_i;
```
```sql
REVOKE app_authorization FROM user_developer_igor_i;
```
```sql
REVOKE SELECT ON TABLE public.test_table FROM user_developer_igor_i;
```
```sql
GRANT SELECT ON public.test_table TO user_developer_igor_i;
```
5) Удаление пользователя БД
```sql
DROP ROLE test_user;
```
```sql
CREATE DATABASE test_db WITH OWNER = user_developer_igor_i ENCODING = 'UTF8' LOCALE_PROVIDER = 'libc' CONNECTION LIMIT = -1 IS_TEMPLATE = False;
```
```sql
DROP DATABASE test_db;
```
Выходим:
```sql
\q
```
Логи по ППО:
1) Попытки не верного ввода пароля/логина
2) Авторизация
3) Выход из системы
4) Создание пользователя
5) Изменение прав пользователю.
6) Удаление пользователя
7) Создание перевозки
8) Проведение оплаты

View File

@ -109,7 +109,7 @@ stats auth igor:i123456
```` ````
Также можно в журнале посмотреть что написал HAProxy: Также можно в журнале посмотреть что написал HAProxy:
```sh ```sh
sudo journalctl -u haproxy --no-pager | tail -n 50 sudo journalctl -u haproxy --no-pager -n 50 -f
```` ````
Перезагружаем: Перезагружаем:
```sh ```sh

View File

@ -1,8 +1,10 @@
С внешки во внутрянную инфраструктуру подключаемся через HAProxy а уже внутри использую Traefik
Открываю нужный сервер Открываю нужный сервер
```sh ```sh
wsl wsl
``` ```
Или такой: Открывает traefik на 192.168.200.85:
```sh ```sh
ssh igor@192.168.200.85 -p 22 ssh igor@192.168.200.85 -p 22
``` ```
@ -37,7 +39,7 @@ wget https://github.com/traefik/traefik/releases/download/v3.3.4/traefik_v3.3.4_
``` ```
Проверь версию: Проверь версию:
```bash ```sh
traefik version traefik version
``` ```
@ -74,12 +76,13 @@ api:
providers: providers:
file: file:
filename: "/etc/traefik/dynamic.yml" filename: "/etc/traefik/dynamic.yml"
watch: true
# Настройка сертификатов (пример с Let's Encrypt) # Настройка сертификатов (пример с Let's Encrypt)
certificatesResolvers: certificatesResolvers:
myresolver: myresolver:
acme: acme:
email: "your-email@example.com" email: "irigm@mail.ru"
storage: "/etc/traefik/acme.json" storage: "/etc/traefik/acme.json"
httpChallenge: httpChallenge:
entryPoint: web entryPoint: web
@ -102,56 +105,63 @@ http:
service: api@internal service: api@internal
ccalm-api-auth: ccalm-api-auth:
rule: "Host(`ccalm.test`) && PathPrefix(`/api/authorization/v02/`)"
service: org_ccalm_api_authorization_v02
entryPoints: entryPoints:
- websecure - websecure
rule: "Host(`ccalm.test`) && PathPrefix(`/api/authorization/v02/`)"
service: org_ccalm_api_authorization_v02
tls: tls:
certresolver: myresolver certresolver: myresolver
middlewares: middlewares:
- strip-auth-prefix - strip-auth-prefix
ccalm-dbms: ccalm-dbms:
rule: "Host(`ccalm.test`) && PathPrefix(`/api/dbms/v09/`)"
service: org_ccalm_dbms_v09
entryPoints: entryPoints:
- websecure - websecure
rule: "Host(`ccalm.test`) && PathPrefix(`/api/dbms/v09/`)"
service: org_ccalm_dbms_v09
tls: tls:
certresolver: myresolver certresolver: myresolver
middlewares: middlewares:
- strip-dbms-prefix - strip-dbms-prefix
ccalm-translation: ccalm-translation:
entryPoints:
- websecure
rule: "Host(`ccalm.test`) && PathPrefix(`/api/translation/v01/`)" rule: "Host(`ccalm.test`) && PathPrefix(`/api/translation/v01/`)"
service: org_ccalm_translation_v01 service: org_ccalm_translation_v01
entryPoints:
- websecure
tls: tls:
certresolver: myresolver certresolver: myresolver
middlewares: #middlewares:
- strip-translation-prefix # - strip-translation-prefix
ccalm-login: ccalm-login:
rule: "Host(`ccalm.test`) && PathPrefix(`/login/`)"
service: org_ccalm_login_v01
entryPoints: entryPoints:
- websecure - websecure
rule: "Host(`ccalm.test`) && PathPrefix(`/login/`)"
service: org_ccalm_login_v01
tls: tls:
certresolver: myresolver certresolver: myresolver
ccalm-default: ccalm-default:
rule: "Host(`ccalm.test`)"
service: org_ccalm
entryPoints: entryPoints:
- websecure - websecure
rule: "Host(`ccalm.test`)"
service: org_ccalm
tls: tls:
certresolver: myresolver certresolver: myresolver
powerdns: powerdns:
rule: "Host(`powerdns.local`)"
service: local_powerdns
entryPoints: entryPoints:
- websecure - websecure
rule: "Host(`powerdns.local`)"
service: local_powerdns
tls: {}
gotify:
entryPoints:
- websecure
rule: "Host(`gotify.local`)"
service: local_gotify
tls: {} tls: {}
middlewares: middlewares:
@ -163,7 +173,7 @@ http:
stripPrefix: stripPrefix:
prefixes: prefixes:
- "/api/dbms/v09" - "/api/dbms/v09"
strip-dbms-prefix: strip-translation-prefix:
stripPrefix: stripPrefix:
prefixes: prefixes:
- "/api/translation/v01" - "/api/translation/v01"
@ -179,6 +189,16 @@ http:
path: "/" path: "/"
interval: "5s" 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 (HTTPS с отключенной проверкой SSL)
org_ccalm_api_authorization_v02: org_ccalm_api_authorization_v02:
loadBalancer: loadBalancer:
@ -203,10 +223,12 @@ http:
org_ccalm_translation_v01: org_ccalm_translation_v01:
loadBalancer: loadBalancer:
servers: servers:
- url: "https://192.168.200.184:8085" #- url: "https://192.168.200.184:8085"
- url: "https://ccalm.org"
passHostHeader: false
serversTransport: insecureTransport serversTransport: insecureTransport
healthCheck: healthCheck:
path: "/" path: ""
interval: "5s" interval: "5s"
# Бэкенд для org_ccalm_login_v01 (HTTP, без SSL) # Бэкенд для org_ccalm_login_v01 (HTTP, без SSL)
@ -240,6 +262,8 @@ tls:
keyFile: "/etc/traefik/certs/ccalm.test.key" keyFile: "/etc/traefik/certs/ccalm.test.key"
- certFile: "/etc/traefik/certs/powerdns.local.crt" - certFile: "/etc/traefik/certs/powerdns.local.crt"
keyFile: "/etc/traefik/certs/powerdns.local.key" 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" - certFile: "/etc/traefik/certs/wildcard.local.crt"
keyFile: "/etc/traefik/certs/wildcard.local.key" keyFile: "/etc/traefik/certs/wildcard.local.key"
- certFile: "/etc/traefik/certs/wildcard.test.crt" - certFile: "/etc/traefik/certs/wildcard.test.crt"
@ -293,7 +317,7 @@ EOF
## 🔎 Шаг 6. Проверка работы ## 🔎 Шаг 6. Проверка работы
Откройте в браузере: Откройте в браузере:
```sh ```sh
open http://localhost:8080/dashboard/ open http://192.168.200.85:8080/dashboard/
``` ```
> ⚠️ Доступ к дашборду открыт только с localhost. Для удалённого доступа настройте правила. > ⚠️ Доступ к дашборду открыт только с localhost. Для удалённого доступа настройте правила.

View File

@ -1,7 +1,7 @@
# Устанавливаю Traefik на туречский сервер # Устанавливаю Traefik cервер в Астане
```sh ```sh
ssh igor@156.244.31.209 -p 2200 ssh ubuntu@194.32.140.11 -p 22
``` ```
# Установка Traefik на Linux Mint / Ubuntu # Установка Traefik на Linux Mint / Ubuntu
@ -24,6 +24,18 @@ cd ~ &&
wget https://github.com/traefik/traefik/releases/download/v3.3.4/traefik_v3.3.4_linux_amd64.tar.gz wget https://github.com/traefik/traefik/releases/download/v3.3.4/traefik_v3.3.4_linux_amd64.tar.gz
``` ```
## 📥 Создаём группу и пользователя под которым будет запускаться traefik
Создаём домашнюю директорию, группу и пользователя:
```sh
sudo mkdir -p /etc/traefik &&
cd /etc/traefik &&
sudo groupadd traefik &&
sudo useradd -s /bin/false -g traefik -d /etc/traefik traefik
```
--- ---
## 📥 Шаг 3. Распаковка и установка ## 📥 Шаг 3. Распаковка и установка
@ -38,6 +50,12 @@ wget https://github.com/traefik/traefik/releases/download/v3.3.4/traefik_v3.3.4_
traefik version traefik version
``` ```
Разрешаем занимать порты с номером меньше 1024
```sh
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/traefik
```
```conf ```conf
Version: 3.3.4 Version: 3.3.4
Codename: saintnectaire Codename: saintnectaire
@ -48,12 +66,6 @@ OS/Arch: linux/amd64
--- ---
## 📁 Шаг 4. Создание директории и базового конфига
```sh
sudo mkdir -p /etc/traefik &&
cd /etc/traefik
```
### Пример `traefik.yml` ### Пример `traefik.yml`
```sh ```sh
cd /etc/traefik && cd /etc/traefik &&
@ -70,15 +82,11 @@ entryPoints:
websecure: websecure:
address: ":443" address: ":443"
traefik: traefik:
address: ":8080" address: ":8070"
api: api:
dashboard: true dashboard: true
insecure: true #insecure: true
providers:
file:
filename: "/etc/traefik/dynamic.yml"
# Настройка сертификатов (пример с Let's Encrypt) # Настройка сертификатов (пример с Let's Encrypt)
certificatesResolvers: certificatesResolvers:
@ -89,6 +97,11 @@ certificatesResolvers:
httpChallenge: httpChallenge:
entryPoint: web entryPoint: web
providers:
file:
filename: "/etc/traefik/dynamic.yml"
watch: true
log: log:
level: DEBUG level: DEBUG
EOF EOF
@ -98,61 +111,163 @@ EOF
```sh ```sh
cd /etc/traefik && cd /etc/traefik &&
sudo tee /etc/traefik/dynamic.yml > /dev/null <<'EOF' sudo tee /etc/traefik/dynamic.yml > /dev/null <<'EOF'
---
http: http:
routers: routers:
dashboard: dashboard:
entryPoints: entryPoints:
- traefik - traefik
rule: "Host(`localhost`)" rule: "Host(`194.32.140.11`)"
service: api@internal service: api@internal
middlewares:
- dashboard-auth
geovizor-api-zones: ccalm-api-auth:
rule: "Host(`geovizor.top`) && PathPrefix(`/api/v1/servers/localhost/zones/`)"
service: top_geovizor_api_zones_v01
entryPoints: entryPoints:
- websecure - websecure
rule: "(Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)) && PathPrefix(`/api/authorization/v02/`)"
service: org_ccalm_api_authorization_v02
tls:
certresolver: myresolver
middlewares:
- strip-auth-prefix
ccalm-dbms:
entryPoints:
- websecure
rule: "(Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)) && PathPrefix(`/api/dbms/v09/`)"
service: org_ccalm_dbms_v09
tls:
certresolver: myresolver
middlewares:
- strip-dbms-prefix
ccalm-translation:
entryPoints:
- websecure
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(`almaty.ccalm.org`) || Host(`ccalm.org`)) && PathPrefix(`/login/`)"
service: org_ccalm_login_v01
tls: tls:
certresolver: myresolver certresolver: myresolver
geovizor-default: org-ccalm-main:
rule: "Host(`geovizor.top`)"
service: top_geovizor_default
entryPoints: entryPoints:
- websecure - websecure
rule: "Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)"
service: org_ccalm_main
tls: tls:
certresolver: myresolver certresolver: myresolver
acme-http:
rule: "PathPrefix(`/.well-known/acme-challenge/`)"
entryPoints:
- web
middlewares: []
service: noop
priority: 1000
services: services:
top_geovizor_api_zones_v01: # backend org_ccalm_api_authorization_v02
org_ccalm_api_authorization_v02:
loadBalancer: loadBalancer:
servers: servers:
- url: "http://156.244.31.209:8081" - url: "https://127.0.0.1:8082"
serversTransport: insecureTransport
healthCheck: healthCheck:
path: "/" path: "/"
interval: "5s" interval: "5s"
# Бэкенд по умолчанию top_geovizor # org_ccalm_dbms_v09 backend
top_geovizor_default: org_ccalm_dbms_v09:
loadBalancer: loadBalancer:
servers: servers:
- url: "http://127.0.0.1:8082" - url: "https://127.0.0.1:8084"
serversTransport: insecureTransport
healthCheck: healthCheck:
path: "/" path: "/"
interval: "5s" interval: "5s"
# Translation backend
org_ccalm_translation_v01:
loadBalancer:
servers:
- url: "https://127.0.0.1:8085"
passHostHeader: false
serversTransport: insecureTransport
healthCheck:
path: ""
interval: "5s"
# Backend for org_ccalm_login_v01 (HTTP, without SSL)
org_ccalm_login_v01:
loadBalancer:
servers:
- url: "https://127.0.0.1:8081"
healthCheck:
path: "/"
interval: "5s"
serversTransport: insecureTransport
# Default backend for ccalm.org
org_ccalm_main:
loadBalancer:
servers:
- url: "https://127.0.0.1:8083"
healthCheck:
path: "/"
interval: "5s"
serversTransport: insecureTransport
# Fake noop secvices
noop:
loadBalancer:
servers:
- url: "http://127.0.0.1"
# Определяем транспорт для отключения проверки SSL # Определяем транспорт для отключения проверки SSL
serversTransports: serversTransports:
insecureTransport: insecureTransport:
insecureSkipVerify: true insecureSkipVerify: true
# Добавляем сертификаты middlewares:
tls: strip-dbms-prefix:
certificates: stripPrefix:
prefixes:
- "/api/dbms/v09"
strip-auth-prefix:
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
EOF EOF
``` ```
For checking syntactic:
```sh
yamllint -d "{extends: default, rules: {line-length: disable}}" /etc/traefik/dynamic.yml
```
Для хранения сертификатов файл: Для хранения сертификатов файл:
```sh ```sh
sudo touch /etc/traefik/acme.json && sudo touch /etc/traefik/acme.json &&
@ -167,10 +282,12 @@ EOF
cd /etc/systemd/system && cd /etc/systemd/system &&
sudo tee /etc/systemd/system/traefik.service > /dev/null <<'EOF' sudo tee /etc/systemd/system/traefik.service > /dev/null <<'EOF'
[Unit] [Unit]
Description=Traefik Description=Reverse proxy Traefik
After=network.target After=network.target
[Service] [Service]
User=traefik
Group=traefik
ExecStart=/usr/local/bin/traefik --configFile=/etc/traefik/traefik.yml ExecStart=/usr/local/bin/traefik --configFile=/etc/traefik/traefik.yml
Restart=always Restart=always
@ -179,7 +296,6 @@ WantedBy=multi-user.target
EOF EOF
``` ```
Примените: Примените:
```sh ```sh
sudo systemctl daemon-reload && sudo systemctl daemon-reload &&
@ -193,14 +309,13 @@ EOF
``` ```
--- ---
ыгвщ куищще
## 🔎 Шаг 6. Проверка работы ## 🔎 Шаг 6. Проверка работы
Откройте в браузере: Откройте в браузере cпаролем что быше "":
```sh ```sh
open http://localhost:8080/dashboard/ open http://194.32.140.11:8070/dashboard
``` ```
> ⚠️ Доступ к дашборду открыт только с localhost. Для удалённого доступа настройте правила.
--- ---
@ -220,6 +335,9 @@ sudo journalctl -u traefik -f
## 🐳 Как вариант можно установить через Docker ## 🐳 Как вариант можно установить через Docker
@ -251,7 +369,7 @@ services:
ports: ports:
- "80:80" # HTTP - "80:80" # HTTP
- "443:443" # HTTPS - "443:443" # HTTPS
- "8080:8080" # Dashboard - "8070:8070" # Dashboard
volumes: volumes:
- /etc/traefik:/etc/traefik - /etc/traefik:/etc/traefik
- /var/run/docker.sock:/var/run/docker.sock:ro - /var/run/docker.sock:/var/run/docker.sock:ro
@ -277,7 +395,7 @@ EOF
Откройте в браузере: Откройте в браузере:
```sh ```sh
open http://192.168.200.85:8080/dashboard/ open http://192.168.200.85:8070/dashboard/
``` ```
```sh ```sh

View File

@ -1,8 +0,0 @@
```sh
ssh administrator@10.101.1.37 -p 22
```
```sh
sudo rabbitmqctl change_password admin KGf4nxT8vxZWv3jqNasP
```

View File

@ -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: Подписать корневым CA:

382
Ubuntu.md
View File

@ -2011,388 +2011,6 @@ restart: always: Гарантирует, что контейнер будет а
Открываем: https://127.0.0.1:9443 Открываем: https://127.0.0.1:9443
После предложения задания пароля для пользователя admin задал такой пароль на дом компе: &b2C6nyN2,qUNM] После предложения задания пароля для пользователя admin задал такой пароль на дом компе: &b2C6nyN2,qUNM]
****************************************************************************************************
Собственный DynDNS на Linux для observer.kz для начала устанавливаем BIND 9.13 and later по этому мануалу https://www.dmosk.ru/miniinstruktions.php?mini=bind-ubuntu и по этому для новой версии https://www.netss.by/?p=26
sudo apt-get update
sudo apt-get install bind9 dnsutils
sudo apt-get install bind9utils
Добавляем сервис в автозапуск
systemctl enable bind9
Проверяем что сервис работает
nslookup dmosk.ru 127.0.0.1
Открываем настройки:
mcedit /etc/bind/named.conf.options
Для глобальных запросов добавляем строку: allow-query { any; };
Также добавляем в этот файл DNS сервера пересылки, на них будут перенаправляться запросы если локальный не содержит данных
//forwarders {
// 8.8.8.8;
// 8.8.4.4;
//};
Проверяем настройки командой (ответ должен быть пустым):
sudo named-checkconf
Перезагружаем:
sudo systemctl restart bind9
Проверяю версию BIND:
named -v
Выдало: BIND 9.16.1-Ubuntu (Stable Release) <id:d497c32>
Можно проверить какой IP выдаст на DNS запрос
dig locust.kz A
На этом базовая настройка закончена. Наш сервер готов принимать и отдавать запросы и работать, как кэширующий dns.
Далее создаём клиента согласно: https://help.ubuntu.ru/wiki/динамический_днс_своими_руками
Перейдем в него.
cd /etc/bind/
Генерируем пару ключь для обмена информацией между клиентом и сервером:
sudo tsig-keygen -a hmac-sha512 dirt.kz > dirt.kz.key
sudo tsig-keygen -a hmac-sha512 locust.kz > locust.kz.key
Для загрузки ключа добавляем его файл mcedit /etc/bind/named.conf строчку с указанием файла, где определен ключ.
include "/etc/bind/dirt.kz.key";
include "/etc/bind/locust.kz.key";
Следующим шагом необходимо в файл mcedit /etc/bind/named.conf.local прописать доменную зону, которой мы оперируем.
zone "dirt.kz" {
type master;
allow-update {key dirt.kz;};
file "/var/cache/bind/dirt.kz";
};
zone "locust.kz" {
type master;
allow-update {key locust.kz;};
file "/var/cache/bind/locust.kz";
};
В файле "mcedit /var/cache/bind/dirt.kz" должны быть прописанны записи домена где:
В файле "mcedit /var/cache/bind/locust.kz" должны быть прописанны записи домена где:
Поле $ORIGIN для подставки имени в знак @, поэтому знак @ не используется просто так в тексте
Если используется символ @ то он заменяется на то что было прописанно в $ORIGIN смотреть в: https://help.dyn.com/how-to-format-a-zone-file/
SOA — Начало полномочий подробней смотри в https://k.psu.ru/wiki/BIND9_(методическое_пособие)#SOA
NS — Сервер имён
A — рекорд
MX — Почта для обмена
CN — Каноническое имя
PTR — указатель
И таким содержимым:
$ORIGIN dirt.kz
$TTL 604800
@ IN SOA bigfoottrade.kz. root.bigfoottrade.kz. (
8 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS bigfoottrade.kz.
Второй файл для locust.kz:
$ORIGIN .
$TTL 604800 ; 1 week
locust.kz IN SOA bigfoottrade.kz. irigm.mail.ru. (
134 ; serial
604800 ; refresh (1 week)
86400 ; retry (1 day)
1419200 ; expire (2 weeks 2 days 10 hours 13 minutes 20 seconds)
604800 ; minimum (1 week)
)
NS bigfoottrade.kz.
$TTL 3600 ; 1 hour
A 5.76.254.182
$ORIGIN locust.kz.
* A 127.0.0.1
Правлю права доступа:
sudo chown -R bind:bind /etc/bind
Если настройки были первоначальными то стоит удалить файл /var/cache/bind/locust.kz.jnl и переинициализировать его командой:
sudo rndc reconfig
Потом следует вызвать:
sudo systemctl restart bind9
Команда выше также переписывет накопившиеся данные из /var/cache/bind/locust.kz.jnl в /var/cache/bind/locust.kz так что после обновления если охото быстрей взглянуть на текстовое значение следует повторно вызвать эту команду
После настроек сервера перезагружаем его:
sudo named-checkconf
sudo rndc reload
sudo systemctl restart bind9
sudo rndc status
journalctl | grep bind
sudo journalctl -u bind9 -n 50
Создаю скрипт /etc/ddns/ddns.sh для обновления доменных зон удалённо с доступом по ключу:
Файл из примера:
#!/bin/bash
TTL=3600
SERVER=ns.dyndns.my
HOSTNAME=dhost.dyndns.my
ZONE=dyndns.my
KEYFILE=Kdyndns.my.+157+48025.private
new_ip_address=`curl http://dyndns.my/ip.php` #Этот файлик создадим позднее на сервере!
cd /etc/ddns
nsupdate -v -k $KEYFILE << EOF
server $SERVER
zone $ZONE
update delete $HOSTNAME A
update add $HOSTNAME $TTL A $new_ip_address
send
EOF
Мой модифицированный файл для обновления IP в Bind9 DNS сервису по созданному файлу ip.txt, файл ip.txt создаётся в PHP скрипте который описан ниже:
#!/bin/bash
TTL=3600
SERVER=127.0.0.1
HOSTNAME=*.dirt.kz
ZONE=dirt.kz
KEYFILE=/etc/bind/dirt.kz.key
new_ip_address=
FILE=/etc/ddns/ip.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
cd /etc/ddns
sudo nsupdate -v -k $KEYFILE << EOF
server $SERVER
zone $ZONE
update delete $HOSTNAME A
update add $HOSTNAME $TTL A $new_ip_address
update delete dirt.kz A
update add dirt.kz $TTL A $new_ip_address
send
EOF
echo "OK"
Так как PHP работает за HAProxy то немного модифицировал скрипт который сохраняет IP обратившегося клиента в файл, а именно использую "x-forwarded-for" для передачи IP адреса клиента:
<?php
echo '<pre>'; print_r(getallheaders()); echo '</pre>';
// PROBLEM IS each browser has different "x-forwarder-for" some "X-Forwarder-for" and some browser gave you 2x ip "x.x.x.x, x.x.x.x"
foreach ( getallheaders() as $k => $v) {
if ( strtolower($k) == 'x-forwarded-for' ) {
$tmp = explode(', ', $v);
if ( $tmp[count($tmp)-1] != '' )
$_SERVER['REMOTE_ADDR'] = $tmp[count($tmp)-1];
}
}
if(isset($_GET["key"]) && $_GET["key"]=='4fygxNq539NFfUm6SOd2vn52GwL7o7NA'){
$myfile = fopen("/etc/ddns/ip.txt", "w");
fwrite($myfile, $_SERVER['REMOTE_ADDR']);
fclose($myfile);
}
echo $_SERVER['REMOTE_ADDR'];
?>
Проверяем что находит IP по доменному имени
nslookup dirt.kz 127.0.0.1
****************************************************************************************************
Установка сервиса обмена сообщениями RabbitMQ менеджер сообщений (message broker), написан на Erlang, ближайший аналог в AWS SQS. По документации из: https://rtfm.co.ua/ru/rabbitmq-zapusk-opisanie-primery/
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt install rabbitmq-server
Посмотреть список используемых плагинов:
sudo rabbitmq-plugins list
Активируем плагин rabbitmq_management для наблюдения за системой по HTTP https://www.rabbitmq.com/management.html https://thewebland.net/development/devops/chast-3-interfejs-upravleniya-rabbitmq/#:~:text=RabbitMQ%20Management%20%20это%20удобный%20интерфейс,и%20отправлять%20%2F%20получать%20сообщения%20вручную.
sudo rabbitmq-plugins enable rabbitmq_management
rabbitmq_management активирует поддержку API на порту 15672: http://192.168.0.144:15672 http://10.1.7.70:15672 http://192.168.0.83:15672
Но для активации нужно добавить пользователя, смотрим пользователей:
sudo rabbitmqctl list_users
sudo rabbitmqctl add_user admin paRabbit! или test test для локального тестового сервера
sudo rabbitmqctl set_user_tags admin administrator
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
Также можно создать пользователя для публикации сообщений но уже это можно сделать через WEB интерфейс: producer lgGDWAJEwI для guest с паролем: efewG!4ev Александра: alex jefruf!43
Теперь можно логинется по test test поменять пароль можно: https://kb.vmware.com/s/article/323520#:~:text=Log%20in%20to%20the%20RabbitMQ,host%20where%20RabbitMQ%20is%20installed.
Или так можно поменять пароль: sudo rabbitmqctl change_password zenoss New-Password
producer: клиент, выполняющий отправку сообщения
queue: собственно очередь сообщений
consumer: клиент, получающий сообщения из очереди
exchange: получает сообщения от producer, и отправялет их в очереди в соответствии с его типом (см. тут https://www.rabbitmq.com/tutorials/tutorial-three-python.html)
Дальше можно пробовать отправлять данные в очередь используя допустим java библиотеку урок: https://www.youtube.com/watch?v=6lPK_LgTZ9Y
https://www.rabbitmq.com/devtools.html :
Создаю Maven проект в консоли:
cd O:\projects\Workspace_Java\
mvn archetype:generate -DgroupId=kz.istt.app -DartifactId=TransitToRabbitMQ -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Открываю его в idea64 и добавляю в POM следующую зависемость из https://mvnrepository.com/artifact/com.rabbitmq/amqp-client:
<!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.14.2</version>
</dependency>
Также поставил C:\Program Files\Java\jdk-14.0.2 а то не запускалось, также просит рут права для IntelliJ IDEA.
Урок создания maven проекта: https://devcolibri.com/unit/урок-1-подготовка-и-создание-maven-проекта/
или https://www.jetbrains.com/idea/guide/tutorials/working-with-maven/creating-a-project/
Добавил в POM файл:
<repositories>
<repository>
<name>RabbitMQ</name>
<url>https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.16.0</url>
<id>com.rabbitmq</id>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.16.0</version>
</dependency>
</dependencies>
Перезагружаем:
sudo service rabbitmq-server restart
****************************************************************************************************
Установка Shovels Plugin для RabbitMQ (лопата) по мотивам из: https://www.rabbitmq.com/docs/shovel
Активирую плагин командой:
sudo rabbitmq-plugins enable rabbitmq_shovel
sudo rabbitmq-plugins enable rabbitmq_shovel_management
Настраиваю Shovels Dynamic плагин в RabbitMQ через командную строку:
sudo rabbitmqctl set_parameter shovel kaz_to_kaz '{
"src-protocol": "amqp091",
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation",
"src-queue": "TO_KAZ",
"dest-protocol": "amqp091",
"dest-uri": "amqp://admin:paRabbit!@10.101.1.11:20000/playground",
"dest-exchange": "swap",
"dest-exchange-key": ".KAZ.",
"ack-mode": "on-confirm",
"publish-properties": {
"delivery_mode": 2
}
}'
Для Росии такие настройки:
sudo rabbitmqctl set_parameter shovel kaz_to_rus '{
"src-protocol": "amqp091",
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_rus",
"src-queue": "TO_RUS",
"dest-protocol": "amqp091",
"dest-uri": "amqp://iktt_kaz:jkrjHL7xj7PrW1D@192.168.89.133:20000/playground",
"dest-exchange": "swap",
"dest-exchange-key": "KZ",
"ack-mode": "on-confirm",
"publish-properties": {
"delivery_mode": 2
}
}'
Для Беларусии такие настройки:
sudo rabbitmqctl set_parameter shovel kaz_to_blr '{
"src-protocol": "amqp091",
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_blr",
"src-queue": "TO_BLR",
"dest-protocol": "amqp091",
"dest-uri": "amqp://KZ_IKTT:DK34xDNlZQfQ551k@192.168.90.133:20000/plumber",
"dest-exchange": "eec.swap",
"dest-exchange-key": "KZ",
"ack-mode": "on-confirm",
"publish-properties": {
"delivery_mode": 2
}
}'
Для Армении такие настройки:
sudo rabbitmqctl set_parameter shovel kaz_to_arm '{
"src-protocol": "amqp091",
"src-uri": "amqp://admin:password@127.0.0.1:20000/transportation_arm",
"src-queue": "TO_ARM",
"dest-protocol": "amqp091",
"dest-uri": "amqp://kz_istt:password@192.168.89.158:20000/transportation",
"dest-exchange": "swap_kz",
"dest-exchange-key": "KZ_ISTT",
"ack-mode": "on-confirm",
"publish-properties": {
"delivery_mode": 2
}
}'
Для Кыргызстана (таможенная инфраструктура)
sudo rabbitmqctl set_parameter shovel kaz_to_kgz '{
"src-protocol": "amqp091",
"src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_kgz",
"src-queue": "TO_KGZ",
"dest-protocol": "amqp091",
"dest-uri": "amqp://kz_istt:uzZNYbVTElMDXnfwQx16@192.168.70.133:20000/transportation_kaz",
"dest-exchange": "swap",
"dest-exchange-key": "KAZ",
"ack-mode": "on-confirm",
"publish-properties": {
"delivery_mode": 2
}
}'
Удалять так:
sudo rabbitmqctl clear_parameter shovel kaz_to_kgz
Для отправки из Киргизии нам то такие настройки:
sudo rabbitmqctl set_parameter shovel kgz_to_kaz '{
"src-protocol": "amqp091",
"src-uri": "amqp://admin:pfta2OFt@127.0.0.1:20000/transportation_kaz",
"src-queue": "TO_KAZ",
"dest-protocol": "amqp091",
"dest-uri": "amqp://kg_amap:qrd2fjEjkegdi7bfb@192.168.70.134:20000/transportation_kgz",
"dest-exchange": "swap",
"dest-exchange-key": "KGZ",
"ack-mode": "on-confirm",
"publish-properties": {
"delivery_mode": 2
}
}'
Удалять так:
sudo rabbitmqctl clear_parameter shovel kgz_to_kaz
Чтобы проверить текущие параметры Shovel:
sudo rabbitmqctl list_parameters
А также можно взглянуть что создалось через WEB интерфейс
Не забывать что Exchange: swap должен быть не "direct" а как "topic" иначе маршрутизация не сработает.
**************************************************************************************************** ****************************************************************************************************
Установка wxWidgets на Linux mint, скачал 3.0.5 по инструкции из https://www.binarytides.com/install-wxwidgets-ubuntu/ Установка wxWidgets на Linux mint, скачал 3.0.5 по инструкции из https://www.binarytides.com/install-wxwidgets-ubuntu/