This commit is contained in:
2025-04-07 07:46:21 +05:00
parent 04b8e941d1
commit 584960dd14
36 changed files with 8203 additions and 6871 deletions

129
Certificates_config.md Normal file
View File

@ -0,0 +1,129 @@
## Подключаемся к инфраструктуре
```sh
wsl
```
```sh
cd /mnt/o/MyDocuments/projects/_Doc/Certificates &&
ls
```
# Создадим корневой ключ и сертификат:
Create root certificate
```sh
openssl genrsa -out rootCA.key 4096 &&
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.crt
```
Add root certificate to trusted
```sh
cd /mnt/o/MyDocuments/projects/_Doc/Certificates &&
sudo cp rootCA.crt /usr/local/share/ca-certificates/ &&
sudo update-ca-certificates
```
## Отдельные сертификаты для каждого домена
Отдельно для домена "ccalm.test" можно создать сертификат так:
```sh
openssl genrsa -out ccalm.test.key 2048
openssl req -new -key ccalm.test.key -out ccalm.test.csr -subj "/CN=ccalm.test"
```
Подписать сертификат корневым CA
```sh
openssl x509 -req -in ccalm.test.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out ccalm.test.crt -days 365 -sha256
```
## Если домены связаны то можно создать один wildcard-сертификат (*.test)
Так как это все мои домены для тестированя системы то мне легче создать единый сертификат
***Внимание: для поддоменов не работает!***
Создать ключ и CSR для *.test
```sh
openssl version &&
openssl genrsa -out ccalm.test.key 2048 &&
openssl req -new -key ccalm.test.key -out ccalm.test.csr -subj "/CN=ccalm.test" -addext "subjectAltName=DNS:ccalm.test" &&
openssl x509 -req -in ccalm.test.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out ccalm.test.crt -days 365 -sha256 -copy_extensions copy
openssl x509 -in ccalm.test.crt -text -noout
```
```sh
openssl version &&
openssl genrsa -out wildcard.test.key 2048 &&
openssl req -new -key wildcard.test.key -out wildcard.test.csr -subj "/CN=*.test" -addext "subjectAltName=DNS:*.test" &&
openssl x509 -req -in wildcard.test.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out wildcard.test.crt -days 365 -sha256 -copy_extensions copy
openssl x509 -in wildcard.test.crt -text -noout
```
## Создаём ключ и сертификат для *.local потом подписываем корневым
Создаю:
```sh
openssl version &&
openssl genrsa -out wildcard.local.key 2048 &&
openssl req -new -key wildcard.local.key -out wildcard.local.csr -subj "/CN=*.local" -addext "subjectAltName=DNS:*.local" &&
openssl x509 -req -in wildcard.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out wildcard.local.crt -days 365 -sha256 -copy_extensions copy
openssl x509 -in wildcard.local.crt -text -noout
```
Создаём и подписываем одной группой команд:
```sh
openssl version &&
openssl genrsa -out powerdns.local.key 2048 &&
openssl req -new -key powerdns.local.key -out powerdns.local.csr -subj "/CN=powerdns.local" -addext "subjectAltName=DNS:powerdns.local" &&
openssl x509 -req -in powerdns.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out powerdns.local.crt -days 365 -sha256 -copy_extensions copy
openssl x509 -in powerdns.local.crt -text -noout
```
Подписать корневым CA:
```sh
openssl x509 -req -in wildcard.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out wildcard.local.crt -days 365 -sha256
```
```sh
openssl x509 -req -in powerdns.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out powerdns.local.crt -days 365 -sha256
```
## Один сертификат с SAN (Subject Alternative Names)
Написать san.cnf
```conf
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[req_distinguished_name]
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = ccalm.test
DNS.2 = git.test
DNS.3 = geoserver.ccalm.test
DNS.4 = another.domain
```
Генерировать CSR и подписать:
```sh
openssl req -new -key multi.test.key -out multi.test.csr -config san.cnf
openssl x509 -req -in multi.test.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out multi.test.crt -days 365 -sha256 -extfile san.cnf -extensions v3_req
```
Как использовать:
Подходит, если у вас несколько несвязанных доменов.
Можно защитить корневой домен и поддомены (example.com + www.example.com).
### Проверка
```sh
openssl x509 -in rootCA.crt -text -noout
```
```sh
openssl x509 -in powerdns.local.crt -text -noout
```

11
ChatGPT_install.md Normal file
View File

@ -0,0 +1,11 @@
Не стал устанавливать буду использовать WEB версию
Устанавливаем недостающие пакеты:
```sh
apt search libwebkit2gtk
```
```sh
sudo apt update &&
sudo apt install libwebkit2gtk-4.1-dev -y
```

View File

@ -22,7 +22,7 @@ ssh igor@192.168.200.84 -p 22
Создаём файл конфигурации Создаём файл конфигурации
```sh ```sh
cd /opt/dashy/data && cd /opt/dashy/data &&
tee conf.yml > /dev/null <<EOF tee conf.yml > /dev/null <<'EOF'
pageInfo: pageInfo:
title: Home Lab title: Home Lab
sections: # An array of sections sections: # An array of sections
@ -74,7 +74,7 @@ sudo chmod 666 /opt/dashy/data/conf.yml
```sh ```sh
cd /opt/dashy && cd /opt/dashy &&
cat > docker-compose.yml <<EOF cat > docker-compose.yml <<'EOF'
services: services:
dashy: dashy:
image: lissy93/dashy:latest image: lissy93/dashy:latest
@ -87,7 +87,6 @@ services:
EOF EOF
``` ```
## 4. Запуск контейнера ## 4. Запуск контейнера
```sh ```sh
cd /opt/dashy && cd /opt/dashy &&
@ -98,11 +97,12 @@ EOF
sudo docker-compose down sudo docker-compose down
``` ```
```sh ```sh
exit exit
``` ```
```sh ```sh
start http://192.168.200.84:3002 start http://192.168.200.84:3002
``` ```

38
Docker_install.md Normal file
View File

@ -0,0 +1,38 @@
Добавьте официальный репозиторий Docker:
```sh
sudo apt-get update &&
sudo apt-get install ca-certificates curl &&
sudo install -m 0755 -d /etc/apt/keyrings &&
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc &&
sudo chmod a+r /etc/apt/keyrings/docker.asc &&
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null &&
sudo apt-get update
```
Раз у тебя Linux Mint то нужно будет поменять:
```conf
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu xia stable
```
на
```conf
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable
```
```sh
sudo apt update &&
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```
Если Docker не установлен, установим его:
```sh
sudo apt update && sudo apt upgrade -y &&
sudo apt install -y docker.io docker-compose-plugin &&
sudo systemctl enable --now docker
```
Проверим версию:
```sh
docker --version &&
docker compose version
```

View File

@ -6,7 +6,12 @@ Connect to the required server:
```sh ```sh
ssh administrator@10.101.1.3 -p 22 ssh administrator@10.101.1.3 -p 22
``` ```
Connect to CCALM Turkish infrastructure:
```sh
ssh igor@156.244.31.209 -p 2200
```
----------------------------------------------------------------------------------------------------
## Install haproxy
```sh ```sh
sudo apt-get update && sudo apt-get install haproxy -y sudo apt-get update && sudo apt-get install haproxy -y
```` ````
@ -19,7 +24,7 @@ sudo cp /etc/haproxy/haproxy.cfg{,.bak}
mcedit /etc/haproxy/haproxy.cfg mcedit /etc/haproxy/haproxy.cfg
``` ```
В конец файла добавляем пока только для перенаправления (для балансироки больше IP адресов): В конец файла добавляем пока только для перенаправления (для балансироки больше IP адресов):
```conf
frontend frontend-http frontend frontend-http
bind *:80 bind *:80
mode http mode http
@ -81,7 +86,7 @@ default_backend b-RabbitMQ
backend b-RabbitMQ backend b-RabbitMQ
mode tcp mode tcp
server srv1 10.10.16.21:20000 server srv1 10.10.16.21:20000
```
Для перенаправления незащищённого HTTP трафика можно: xxxxxxxxxxxxxxx Для перенаправления незащищённого HTTP трафика можно: xxxxxxxxxxxxxxx
Для использования SSL и перенаправляние по обычному сокету для начала нужно настроить pem файл объеденив crt и key (и незабыть изменить порт Apache с 433) Для использования SSL и перенаправляние по обычному сокету для начала нужно настроить pem файл объеденив crt и key (и незабыть изменить порт Apache с 433)

View File

@ -138,7 +138,7 @@ ui = true
4. Создайте systemd-сервис для Vault: 4. Создайте systemd-сервис для Vault:
```sh ```sh
sudo tee /etc/systemd/system/vault.service > /dev/null <<EOF sudo tee /etc/systemd/system/vault.service > /dev/null <<'EOF'
[Unit] [Unit]
Description=HashiCorp Vault Description=HashiCorp Vault
After=network-online.target After=network-online.target
@ -266,7 +266,7 @@ server.ssl.key-store-password M4yh4
Создаю файл политик Создаю файл политик
```sh ```sh
cd ~ && cd ~ &&
sudo tee jwt-policy.hcl > /dev/null <<EOF sudo tee jwt-policy.hcl > /dev/null <<'EOF'
path "org-ccalm/data/jwt" { path "org-ccalm/data/jwt" {
capabilities = ["create", "read", "update", "delete", "list"] capabilities = ["create", "read", "update", "delete", "list"]
} }

412
POSTFIX_DOVECOT_install.md Normal file
View File

@ -0,0 +1,412 @@
Подключаемся к нужному серверу:
```sh
ssh root@bigfoottrade.kz -p 2222
```
Настройка почты на POSTFIX(агент передачи почты) И DOVECOT на основе https://www.alex-math.ru/administrirovaniye/ustanovka-postfix-dovecot-posfixadmin-na-ubuntu-20-04/ и https://www.youtube.com/watch?v=_pbH7GsVTrw&t=649s и https://www.youtube.com/watch?v=VptKRBVeCMo
****************************************************************************************************
## Устанавливаю Postfixadmin
Для начала создаю базу в PostgreSQL с базой mail и пользователем mailreader и паролем major!reader1
```sh
cd /var/www/html &&
sudo wget https://yer.dl.sourceforge.net/project/postfixadmin/postfixadmin-3.3.8/PostfixAdmin%203.3.8.tar.gz &&
sudo tar xzvf "PostfixAdmin 3.3.8.tar.gz"
```
Создаю временный каталог в /var/www/html/PostfixAdmin/templates_c
правлю способ подключения к базе:
```sh
sudo mcedit /srv/http/PostfixAdmin/config.inc.php
```
На это:
```conf
$CONF['configured'] = true;
$CONF['database_type'] = 'pgsql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'mailreader';
$CONF['database_password'] = 'major!reader1';
$CONF['database_name'] = 'mail';
$CONF['emailcheck_resolve_domain'] = 'NO';
```
Также нужно поднастроить апачи добавив следующтй код в: sudo mcedit /etc/apache2/apache2.conf ниже того что указывает на <Directory /var/www/>
Alias /PostfixAdmin/ "/var/www/html/PostfixAdmin/public/"
<Directory "/var/www/html/PostfixAdmin/public/">
Options FollowSymLinks
AllowOverride None
Allow from all
Order allow,deny
</Directory>
Перезагружаю:
```sh
systemctl restart apache2.service
```
На последок:
```sh
sudo chown www-data:www-data -R /var/www/ &&
sudo chown www-data:www-data -R /opt/app_api_mobile_v2/mobile_v2
```
Теперь можно открывать сайт по IP:
```sh
start http://77.240.38.108/PostfixAdmin/setup.php
```
```sh
start https://77.240.38.108/PostfixAdmin/login.php
```
Просит задать пароль, задал такой: 11qazxsw22
Результат генерации: $CONF['setup_password'] = '$2y$10$ySo40K0pOn0Q5jLcBoK1yua5JaGXI.NIzTmUVBn1dreTaP2RkZ2My';
И добавляем эту стору в: sudo mcedit /srv/http/PostfixAdmin/config.inc.php
Потом обновляем страницу.
Добавляем администратора введя пароль 11qazxsw22 емайл в качестве логина irigm@mail.ru и пароль: 33edcvfr44
Можно взглянуть базу там должны создаться таблицы
Теперь осталось пойти на Postfixadmin, завести сначала почтовый домен, потом ящик и протестировать нашу почтовую систему, например, с помощью Thunderbird. Отправляем письма себе, другому пользователю в нашей системе. Потом пробуем послать себе письма с Gmail, Yandex, Mail.ru и наблюдаем за поведением системы, изучая логи. Основная настройка почты завершена. Теперь необходимо настроить DKIM, SPF, чтобы другие почтовые системы воспринимали нас как доверенных отправителей. Но об этом я расскажу в другом посте.
******************************************************************************************
## Устанавливаю Postfix популярный почтовый агент (MTA) с открытым исходным кодом, который можно использовать для маршрутизации и доставки почты в системе Linux.
```sh
sudo apt-get update &&
sudo apt install postfix postfix-pgsql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-pgsql mailutils postgresql
```
Ссохраняю оригинальный конфигурационный файл:
```sh
cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
```
Конфигурирую:
```sh
sudo dpkg-reconfigure postfix
```
Настраиваю так:
```conf
General type of mail configuration?: Internet Site
System mail name: example.com (не mail.example.com)
Root and postmaster mail recipient: имя пользователя основной учетной записи Linux (в наших примерах sammy)
Other destinations to accept mail for: $myhostname, example.com, mail.example.com, localhost.example.com, localhost
Force synchronous updates on mail queue?: No
Local networks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
Mailbox size limit: 0
Local address extension character: +
Internet protocols to use: all
```
Можно взглянуть на настройки так: sudo mcedit /etc/postfix/main.cf
Через pgAdmin создаю нового пользователя mailreader с паролем major!reader1
CREATE DATABASE mail WITH OWNER mailreader;
Добавляю: sudo mc edit /etc/postgresql/12/main/pg_hba.conf:
local postfix postfix md5
Перезагружаю базу данных:
service postgresql reload
Создаём файл для обращения к базе с алиасами: sudo mcedit /etc/postfix/pgsql_virtual_alias_maps.cf https://www.alex-math.ru/administrirovaniye/ustanovka-postfix-dovecot-posfixadmin-na-ubuntu-20-04/
```conf
user = mailreader
password = major!reader1
hosts = localhost
dbname = mail
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
```
Создаём файл для получения информации по виртуальным доменам: sudo mcedit /etc/postfix/pgsql_virtual_domains_maps.cf
```conf
user = mailreader
password = major!reader1
hosts = localhost
dbname = mail
query = SELECT domain FROM domain WHERE domain='%u'
```
Создаём файл для получения информации о почтовых ящиках: sudo mcedit /etc/postfix/pgsql_virtual_mailbox_maps.cf
```conf
user = mailreader
password = major!reader1
hosts = localhost
dbname = mail
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'
```
Прописываем ранее созданные файлы в: sudo mcedit /etc/postfix/main.cf добавив строчки:
```conf
virtual_mailbox_base = /home/mail
virtual_alias_maps = proxy:pgsql:/etc/postfix/pgsql_virtual_alias_maps.cf
virtual_mailbox_domains = proxy:pgsql:/etc/postfix/pgsql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:pgsql:/etc/postfix/pgsql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1024
virtual_uid_maps = static:1024
virtual_gid_maps = static:1024
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
```
Настройки безопасного соединения (также просто вставил в конец файла):
```conf
smtpd_sasl_auth_enable = yes
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_tls_cert_file = /etc/ssl/certs/bigfoottrade_kz.crt
smtpd_tls_key_file = /etc/ssl/private/bigfoottrade_kz.key
smtpd_tls_security_level = encrypt
```
Похоже опции что ниже устарели:
```conf
smtpd_use_tls = yes
smtp_use_tls = yes
smtp_tls_security_level = encrypt
smtp_enforce_tls=yes
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtp_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_protocols = !SSLv2, !SSLv3
tls_preempt_cipherlist = yes
smtpd_tls_mandatory_ciphers = high
tls_high_cipherlist = ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:ADH-AES256-GCM-SHA384:ADH-AES256-SHA256:ECDH-RSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-SHA384:ECDH-ECDSA-AES256-SHA384:AES256-GCM-SHA384:AES256-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:ADH-AES128-GCM-SHA256:ADH-AES128-SHA256:ECDH-RSA-AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-SHA256:ECDH-ECDSA-AES128-SHA256:AES128-GCM-SHA256:AES128-SHA256:NULL-SHA256
smtpd_tls_auth_only = yes
smtpd_helo_required = yes
smtp_tls_security_level = may
smtp_tls_ciphers = export
smtp_tls_loglevel = 1
smtp_tls_CApath = /etc/ssl/certs
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
```
Снимаем комментарии со следующих строк, или дописываем их при необходимости: sudo mcedit /etc/postfix/master.cf (просто добавил в конец файла)
```conf
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=may
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=/var/spool/postfix/private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
-o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
-o milter_macro_daemon_name=ORIGINATING
smtps inet n - n - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
```
Проверяю на наличие ошибок:
```sh
sudo postfix check
```
В конфигурационном файле прописывается список дорменов которых обслуживает данный агент доставки.
```sh
sudo mcedit /etc/postfix/main.cf
```
Примерно таокое:
mydestination = $myhostname, your_domain, localhost.com, , localhost
Перезапускаем:
```sh
sudo systemctl restart postfix
```
******************************************************************************************
## Настройка dovecot the Secure IMAP server
Теперь устанавливаю и настраиваю Dovecot:
sudo apt install -y dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd
Создаю пользователя и каталог
sudo adduser --system --no-create-home --uid 1024 --group --disabled-password --disabled-login --gecos 'dovecot virtual mail user' vmail
mkdir /home/mail
chown vmail:vmail /home/mail
chmod 700 /home/mail
Смотрим что мы создали:
groups vmail
Настраиваем способ хранения сообщений: sudo mcedit /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/mail/%d/%u/
Настраиваем слушателя аутентификации: sudo mcedit /etc/dovecot/conf.d/10-master.conf
service auth {
unix_listener auth-userdb {
mode = 0600
user = vmail
group = vmail
}
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
Настраиваем аутентификацию в Dovecot: sudo mcedit /etc/dovecot/conf.d/10-auth.conf
Комментируем одну строку, снимаем комментарий с другой.
#!include auth-system.conf.ext
!include auth-sql.conf.ext
Настраиваем шифрование Dovecot: sudo mcedit /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/haproxy/ssl/bigfoottrade_kz.pem
ssl_key = </etc/haproxy/ssl/bigfoottrade_kz.pem
Указываем Dovecot автоматически создавать каталоги при первом подключении клиента: sudo mcedit /etc/dovecot/conf.d/15-lda.conf
lda_mailbox_autocreate = yes
Теперь настройка подключения к базе данных. Открываем файл: sudo mcedit /etc/dovecot/conf.d/auth-sql.conf.ext
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
Создаём файл с настройками для работы с PostgreSQL: sudo mcedit /etc/dovecot/dovecot-sql.conf.ext
driver = pgsql
connect = host=localhost dbname=mail user=mailreader password=major!reader1
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'
user_query = SELECT CONCAT('/home/mail/',LOWER(domain),'/',LOWER(maildir)),1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'
Наконец, указываем интерфейсы, на которых будет слушать наш Dovecot: sudo mcedit /etc/dovecot/dovecot.conf
listen = *
Также добавить в этот файл следующую настройку:
service stats {
unix_listener stats-reader {
user = vmail
group = vmail
mode = 0660
}
unix_listener stats-writer {
user = vmail
group = vmail
mode = 0660
}
}
Настройка Dovecot завершена. Осталось сгенерировать сертификаты или получить их с помощью Let's Encrypt. Для тестовых целей сгенерируем самоподписанные сертификаты. Мы их положим в /etc/postfix:
openssl req -new -x509 -days 730 -nodes -out /etc/postfix/public.pem -keyout /etc/postfix/private.pem -subj "/C=RU/ST=Msk/L=Msk/O=Local/OU=Mail/CN=fedor.bigfoottrade.kz"
Добавляем пользователю "dovecot" группу "mail":
usermod -a -G dovecot mail
usermod -a -G vmail mail
sudo systemctl enable dovecot
sudo systemctl start dovecot
Теперь можно тестировать:
Сначала необходимо убедиться в том, что почта доходит до нового ящика. Сделать это можно с помощью тестового письма:
echo "Test mail" | mail -s "Test mail" admin@mqtt.kz
Сообщение должно появиться в папке /home/mail/mqtt.kz/admin/new/. Если письма нет, проверьте лог Postfix:
tail -f /var/log/mail.log
В настройках DNS настроил А запись на только что настроенный сервер:
mail.mqtt.kz
Также нужно настроить dkim чтобы почта не попадала в спам, записав открытый ключ шифрования в TXT запсь
****************************************************************************************************
## Настройка dkim для проверки что письмо действительно было отправлено с заявленного домена
Созданно по этой инструкции:
```sh
start https://fornex.com/ru/help/dkim-postfix/
```
```sh
sudo apt-get install opendkim opendkim-tools
```
mkdir -p /etc/postfix/dkim && cd /etc/postfix/dkim
opendkim-genkey -D /etc/postfix/dkim/ -d mqtt.kz -s mail
opendkim-genkey -D /etc/postfix/dkim/ -d geovizor.com -s mail
mv mail.private mail.mqtt.kz.private
mv mail.private mail.geovizor.com.private
mv mail.txt mail.mqtt.kz.txt
mv mail.txt mail.geovizor.com.txt
Создаём файл mcedit keytable и записываем в него ключи
#имя_ключа домен:селектор:/путь/до/ключа
mail._domainkey.mqtt.kz mqtt.kz:mail:/etc/postfix/dkim/mail.mqtt.kz.private
mail._domainkey.geovizor.com geovizor.com:mail:/etc/postfix/dkim/mail.geovizor.com.private
Создаём файл mcedit signingtable и записывает что чем подписывать
#домен имя ключа
*@mqtt.kz mail._domainkey.mqtt.kz
*@geovizor.com mail._domainkey.geovizor.com
Задаю права доступа:
chown root:opendkim *
chmod u=rw,g=r,o= *
chmod g+r /etc/postfix/dkim/
Смотрим содержимое TXT файла для записи в домен
cat /etc/postfix/dkim/mail.mqtt.kz.txt
cat /etc/postfix/dkim/mail.geovizor.com.txt
И добавляю в DNS на хостинг:
Name: mail._domainkey.mqtt.kz
Text: v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtrObJxHaUBVtR4XzNuFzoa449K3l1z6+Mi4e83rFbBYmBZRYjiJn5h2PeiK1i2IpSaEKn32AlPy5gB7Ej41Fhg6LXswwRhhfvz8vClhRbUKT4I8oPBj9WZr7+4aohG1Vcks1q9cgmwdcGN+6qhKq/DJ+AC1TirNrEpSvR6JAqd4G70aJazI9su0bY5cbIv0pZGezvt+2pwJw6xpb501KudTFE8FTHxB51aLkgYS257MkovSu+qlVzPjoOsZcOY7hQtF8WB/Czod0QN05Ob/N3Qc/k2E4tpvxgokLXdYl/8KBMLMX9cRfIVbv+atuo59VFKHYIGD8Kom6akORkFeIlQIDAQAB
Заменяем все настройки на то что ниже: sudo mcedit /etc/opendkim.conf
AutoRestart Yes
AutoRestartRate 10/1h
PidFile /var/run/opendkim/opendkim.pid
Mode sv
Syslog yes
SyslogSuccess yes
LogWhy yes
UserID opendkim:opendkim
Socket inet:8891@localhost
Umask 022
Canonicalization relaxed/relaxed
Selector default
MinimumKeyBits 1024
KeyFile /etc/postfix/dkim/${MAIL_DOMAIN}.private
KeyTable /etc/postfix/dkim/keytable
SigningTable refile:/etc/postfix/dkim/signingtable
Добавляем в конец: sudo mcedit /etc/postfix/main.cf
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
sudo systemctl start opendkim
sudo systemctl enable opendkim
service opendkim restart
service postfix restart
********** Настройка SPF **********
Например, SPF-запись «example.com. TXT «v=spf1 +a +mx -all»» говорит о том, что отправлять письма от имени домена «example.com» могут сервера, указанные в A и MX-записях этого домена, а письма, отправленные от других серверов должны быть удалены (Fail).
Содержимое TXT файла для записи в домен
Имя домена пустое:
Содержимое: v=spf1 +a +mx -all
********** Настройка DMARC https://www.unisender.com/ru/glossary/dmarc/**********
Содержимое TXT файла для записи в домен
Имя домена: _dmarc
Содержимое: v=DMARC1; p=none;
!!! Для тестирования сервера на прохождение спам фильтра пишем письмо на https://www.mail-tester.com/ или https://spamtest.smtp.bz !!!
********** web интерфейс для postfix — Roundcube **********
cd /var/www/html
wget https://github.com/roundcube/roundcubemail/releases/download/1.6.5/roundcubemail-1.6.5-complete.tar.gz
tar xzvf roundcubemail-1.6.5-complete.tar.gz
chown -R www-data:www-data /var/www/html/Roundcube
sudo apt-get install aspell aspell-en dbconfig-common fonts-glyphicons-halflings javascript-common libaspell15 libjs-bootstrap libjs-bootstrap4 libjs-codemirror libjs-jquery libjs-jquery-minicolors libjs-jquery-ui libjs-jstimezonedetect libjs-popper.js libjs-sizzle node-jquery php-auth-sasl php-mail-mime php-masterminds-html5 php-net-sieve php-net-smtp php-net-socket php-pspell php7.4-pspell
https://bigfoottrade.kz/Roundcube/installer/
language — ru_RU
Предварительно создать базу:
```sh
start https://bigfoottrade.kz/Roundcube
```
```sh
start http://77.240.38.108/Roundcube
```

View File

@ -32,7 +32,7 @@ cd /opt/postgres-exporter
Создаю файл с настройками Создаю файл с настройками
```sh ```sh
cd /opt/postgres-exporter/ && cd /opt/postgres-exporter/ &&
cat > docker-compose.yml <<EOF cat > docker-compose.yml <<'EOF'
services: services:
postgres-exporter: postgres-exporter:
image: quay.io/prometheuscommunity/postgres-exporter image: quay.io/prometheuscommunity/postgres-exporter
@ -52,7 +52,7 @@ EOF
Создаём файл с настройками Создаём файл с настройками
```sh ```sh
cd /opt/postgres-exporter/ && cd /opt/postgres-exporter/ &&
cat > postgres_exporter.yml <<EOF cat > postgres_exporter.yml <<'EOF'
collectors: collectors:
- database - database
- index - index

View File

@ -272,7 +272,50 @@ sudo apt-get install phppgadmin
Другой вариант скачать с сайта последнюю версию с "http://phppgadmin.sourceforge.net/doku.php". Другой вариант скачать с сайта последнюю версию с "http://phppgadmin.sourceforge.net/doku.php".
**************************************************************************************************** ****************************************************************************************************
Установка pgAdmin4 в Linux Mint 20.04 (inxi -S) Проверить версию линукса: cat /etc/os-release у меня выдало: NAME="Linux Mint" VERSION="20.3 (Una)" Установка pgAdmin4 через докер контейнер
```sh
sudo mkdir -p /opt/pgAdmin4 &&
sudo chmod -R 777 /opt/pgAdmin4 &&
sudo chown -R $USER:$USER /opt/pgAdmin4
```
```sh
cd /opt/pgAdmin4 &&
cat > docker-compose.yml <<'EOF'
services:
pgadmin:
image: dpage/pgadmin4
container_name: pgadmin4
restart: unless-stopped
ports:
- "5050:80"
environment:
PGADMIN_DEFAULT_EMAIL: irigm@mail.ru
PGADMIN_DEFAULT_PASSWORD: 123456
volumes:
- pgadmin_data:/var/lib/pgadmin
volumes:
pgadmin_data:
EOF
```
## 4. Запуск контейнера
```sh
cd /opt/pgAdmin4 &&
sudo docker compose up -d
```
```sh
cd /opt/pgAdmin4 &&
sudo docker compose down
```
Проверить что не записан левый репозиторий для phppgadmin в /ect/opt/ Проверить что не записан левый репозиторий для phppgadmin в /ect/opt/
curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add

View File

@ -4,6 +4,10 @@
```sh ```sh
ssh igor@192.168.200.85 -p 22 ssh igor@192.168.200.85 -p 22
``` ```
Connect to CCALM Turkish infrastructure:
```sh
ssh igor@156.244.31.209 -p 2200
```
**************************************************************************************************** ****************************************************************************************************
DynDNS на PowerDNS авторитативный сервер тот кто отвечает на те домены которые в его базе (рекурсивный присылает авторитативному запросы) DynDNS на PowerDNS авторитативный сервер тот кто отвечает на те домены которые в его базе (рекурсивный присылает авторитативному запросы)
@ -15,189 +19,48 @@ DNS на Ubuntu 24.04 согласно инстркции https://phoenixnap.com
sudo apt-get update && sudo apt-get update &&
sudo apt-get upgrade -y sudo apt-get upgrade -y
``` ```
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-pgsql -y &&
sudo apt-get install pdns-backend-sqlite
```
----------------------------------------------------------------------------------------------------
Для использования SQLIte копируем схему из https://doc.powerdns.com/authoritative/backends/generic-sqlite3.html
```sh
sudo apt-get install pdns-backend-sqlite3 -y
``` ```
```sh
sudo apt install sqlite3 -y
```
Create database:
```sh
sudo sqlite3 /var/lib/powerdns/pdns.sqlite3 ".databases" &&
sudo chown pdns:pdns /var/lib/powerdns/pdns.sqlite3
```
Create database structure
```sql
sudo sqlite3 /var/lib/powerdns/pdns.sqlite3 <<EOF
PRAGMA foreign_keys = 1;
CREATE TABLE domains (
id INTEGER PRIMARY KEY,
name VARCHAR(255) NOT NULL COLLATE NOCASE,
master VARCHAR(128) DEFAULT NULL,
last_check INTEGER DEFAULT NULL,
type VARCHAR(8) NOT NULL,
notified_serial INTEGER DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
options VARCHAR(65535) DEFAULT NULL,
catalog VARCHAR(255) DEFAULT NULL
);
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE INDEX catalog_idx ON domains(catalog);
CREATE TABLE records (
id INTEGER PRIMARY KEY,
domain_id INTEGER DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(65535) DEFAULT NULL,
ttl INTEGER DEFAULT NULL,
prio INTEGER DEFAULT NULL,
disabled BOOLEAN DEFAULT 0,
ordername VARCHAR(255),
auth BOOL DEFAULT 1,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX records_lookup_idx ON records(name, type);
CREATE INDEX records_lookup_id_idx ON records(domain_id, name, type);
CREATE INDEX records_order_idx ON records(domain_id, ordername);
CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL COLLATE NOCASE,
account VARCHAR(40) NOT NULL
);
CREATE UNIQUE INDEX ip_nameserver_pk ON supermasters(ip, nameserver);
CREATE TABLE comments (
id INTEGER PRIMARY KEY,
domain_id INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) DEFAULT NULL,
comment VARCHAR(65535) NOT NULL,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX comments_idx ON comments(domain_id, name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
CREATE TABLE domainmetadata (
id INTEGER PRIMARY KEY,
domain_id INT NOT NULL,
kind VARCHAR(32) COLLATE NOCASE,
content TEXT,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX domainmetaidindex ON domainmetadata(domain_id);
CREATE TABLE cryptokeys (
id INTEGER PRIMARY KEY,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
published BOOL DEFAULT 1,
content TEXT,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE TABLE tsigkeys (
id INTEGER PRIMARY KEY,
name VARCHAR(255) COLLATE NOCASE,
algorithm VARCHAR(50) COLLATE NOCASE,
secret VARCHAR(255)
);
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
EOF
```
Configure database connection from PowerDNS to SQLIte
```sh
sudo tee /etc/powerdns/pdns.d/pdns.local.sqlite.conf <<EOF
launch=gsqlite3
gsqlite3-database=/var/lib/powerdns/pdns.sqlite3
EOF
```
Set access level to file
```sh
sudo chown pdns: /etc/powerdns/pdns.d/pdns.local.sqlite.conf &&
sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.sqlite.conf
```
In PowerDNS configured to auto read config from dir /etc/powerdns/pdns.d/
----------------------------------------------------------------------------------------------------
Подключаюсь к базе и создаю схему базу со схемой из: https://doc.powerdns.com/authoritative/backends/generic-postgresql.html
Настраиваю соединение с базой данных в:
```sh
sudo tee /etc/powerdns/pdns.d/pdns.local.gpgsql.conf <<EOF
launch+=gpgsql
# gmysql parameters
gpgsql-host=127.0.0.1
gpgsql-port=5432
gpgsql-dbname=powerdns
gpgsql-user=powerdns
gpgsql-password=y7HMHi0ATxx1VC3UU5WG
gpgsql-dnssec=no
EOF
```
Set access level to file:
```sh
sudo chown pdns: /etc/powerdns/pdns.d/pdns.local.gpgsql.conf &&
sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.gpgsql.conf
```
----------------------------------------------------------------------------------------------------
На всякий случай делаю резервные копии исходных файлов настрое: На всякий случай делаю резервные копии исходных файлов настрое:
```sh ```sh
cd /etc/powerdns && cd /etc/powerdns &&
sudo cp named.conf named.conf.bak && sudo cp named.conf named.conf.bak &&
sudo cp pdns.conf pdns.conf.bak sudo cp pdns.conf pdns.conf.bak
``` ```
----------------------------------------------------------------------------------------------------
Как настроить MariaDB базу для использования в PowerDNS смотри:
[Установка PowerDNS с MariaDB](./PowerDNS_install_MarinaDB.md)
----------------------------------------------------------------------------------------------------
Как настроить SQLite3 базу для использования в PowerDNS смотри:
[Установка PowerDNS с MariaDB](./PowerDNS_install_SQIite3.md)
----------------------------------------------------------------------------------------------------
Как настроить PostgreSQL базу для использования в PowerDNS смотри:
[Установка PowerDNS с MariaDB](./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й табуляции):
```sh ```sh
sudo mcedit /etc/powerdns/pdns.conf sudo mcedit /etc/powerdns/pdns.conf
``` ```
Write new settings rr Write new settings rr
```sh ```sh
cd /etc/powerdns/ && cd /etc/powerdns/ &&
sudo tee pdns.conf > /dev/null <<EOF sudo tee pdns.conf > /dev/null <<'EOF'
allow-axfr-ips=127.0.0.1 #slave server ip allow-axfr-ips=127.0.0.1
also-notify=127.0.0.1 #slave server ip also-notify=127.0.0.1
include-dir=/etc/powerdns/pdns.d include-dir=/etc/powerdns/pdns.d
launch= launch=
local-address=192.168.200.85,127.0.0.1 local-address=156.244.31.209,127.0.0.1
local-port=5300 local-port=53
log-dns-details=on log-dns-details=on
log-dns-queries=yes log-dns-queries=yes
@ -205,7 +68,7 @@ log-timestamp=yes
loglevel=4 loglevel=4
webserver=yes webserver=yes
webserver-address=192.168.200.85 webserver-address=156.244.31.209
webserver-allow-from=::/0, 0.0.0.0/0 webserver-allow-from=::/0, 0.0.0.0/0
webserver-port=8081 webserver-port=8081
@ -240,7 +103,7 @@ start http://192.168.200.85:8081
Если что-то не получается то проверяем кто слушает на порту 53 Если что-то не получается то проверяем кто слушает на порту 53
```sh ```sh
sudo apt-get install net-tools -y && sudo apt-get install net-tools -y &&
sudo netstat -tulnp | grep :5300 sudo netstat -tulnp | grep :53
``` ```
Создаём зону и добавляем запись Создаём зону и добавляем запись
@ -248,15 +111,69 @@ start http://192.168.200.85: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
sudo pdnsutil create-zone geovizor.top ns1.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 ns1 A 156.244.31.209 &&
sudo pdnsutil add-record geovizor.top @ A 156.244.31.209 &&
sudo pdnsutil add-record geovizor.top * A 156.244.31.209
```
Выше задал такие настройки как
```conf
Refresh = 10800 (3 часа)
Retry = 3600 (1 час)
Expire = 604800 (1 неделя)
Minimum = 3600 (1 час)
```
Проверим список зон Проверим список зон
```sh ```sh
sudo pdnsutil list-all-zones && sudo pdnsutil list-all-zones &&
sudo pdnsutil list-zone test sudo pdnsutil list-zone geovizor.top
``` ```
Проверяем отвечалет ли: Проверяем отвечалет ли:
```sh ```sh
dig @127.0.0.1 -p 5300 ccalm.test A dig @127.0.0.1 -p 5300 ccalm.test A
``` ```
```sh
dig @127.0.0.1 -p 53 geovizor.top A
```
```sh
dig @156.244.31.209 -p 53 geovizor.top A
```
### Теперь можно настроить HTTPS для взаимодействия через API с сервером для динамического задания IP адресов
```sh
API_KEY="40c89f2a-e2f3-4ff8-a245-3547111f6677"
SERVER="156.244.31.209"
ZONE="geovizor.top"
curl -X PATCH \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
"http://$SERVER:8081/api/v1/servers/localhost/zones/$ZONE" \
-d '{
"rrsets": [
{
"name": "*.geovizor.top.",
"type": "A",
"ttl": 3600,
"changetype": "REPLACE",
"records": [
{
"content": "5.251.54.197",
"disabled": false
}
]
}
]
}'
```
## ********** Настройка рекурсивного 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
@ -613,7 +530,7 @@ exit
``` ```
Создаю файл службы: Создаю файл службы:
```sh ```sh
sudo tee /etc/systemd/system/powerdns-admin.service > /dev/null <<EOF sudo tee /etc/systemd/system/powerdns-admin.service > /dev/null <<'EOF'
[Unit] [Unit]
Description=PowerDNS-Admin Service Description=PowerDNS-Admin Service
After=network.target After=network.target

View File

@ -0,0 +1,145 @@
```sh
sudo apt-get install pdns-backend-mysql -y
```
Create database to MarinaDB
```sh
sudo mysql -u root -p
```
Create new user into MarinaDB
```sh
CREATE USER 'poweruser'@'%' IDENTIFIED BY 'uFqqXQEQwErjkQga6rcz';
GRANT ALL PRIVILEGES ON *.* TO 'poweruser'@'%';
FLUSH PRIVILEGES;
REVOKE ALL PRIVILEGES ON *.* FROM 'powerdns'@'%';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON poweruser.* TO 'poweruser'@'%';
FLUSH PRIVILEGES;
```
```sh
SELECT User, Host FROM mysql.user WHERE User = 'poweruser';
```
Create database
```sh
CREATE DATABASE powerdns;
GRANT ALL PRIVILEGES ON powerdns.* TO 'poweruser'@'%';
FLUSH PRIVILEGES;
```
Create file with SQL to create database, text from https://doc.powerdns.com/authoritative/backends/generic-mysql.html
```sql
sudo mysql -u poweruser -p powerdns <<'EOF'
CREATE TABLE domains (
id INT AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(8) NOT NULL,
notified_serial INT UNSIGNED DEFAULT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
options VARCHAR(64000) DEFAULT NULL,
catalog VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE INDEX catalog_idx ON domains(catalog);
CREATE TABLE records (
id BIGINT AUTO_INCREMENT,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(64000) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
disabled TINYINT(1) DEFAULT 0,
ordername VARCHAR(255) BINARY DEFAULT NULL,
auth TINYINT(1) DEFAULT 1,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX ordername ON records (ordername);
CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' NOT NULL,
PRIMARY KEY (ip, nameserver)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE TABLE comments (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
comment TEXT CHARACTER SET 'utf8' NOT NULL,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
CREATE TABLE domainmetadata (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
kind VARCHAR(32),
content TEXT,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
CREATE TABLE cryptokeys (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
published BOOL DEFAULT 1,
content TEXT,
PRIMARY KEY(id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE TABLE tsigkeys (
id INT AUTO_INCREMENT,
name VARCHAR(255),
algorithm VARCHAR(50),
secret VARCHAR(255),
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
EOF
```
Проверяем создалась ли таблицы в базе
```sh
mysql -u poweruser -p -e "SHOW TABLES FROM powerdns;"
```
----------------------------------------------------------------------------------------------------
Configure database connection from PowerDNS to SQLIte
```sh
sudo tee /etc/powerdns/pdns.d/pdns.local.mysql.conf <<'EOF'
launch=gmysql
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-user=poweruser
gmysql-password=uFqqXQEQwErjkQga6rcz
gmysql-dbname=powerdns
gmysql-dnssec=yes
EOF
```
Set access level to file
```sh
sudo chown pdns: /etc/powerdns/pdns.d/pdns.local.mysql.conf &&
sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.mysql.conf
```

View File

@ -0,0 +1,25 @@
```sh
sudo apt-get install pdns-backend-pgsql -y
```
----------------------------------------------------------------------------------------------------
Подключаюсь к базе и создаю схему базу со схемой из: https://doc.powerdns.com/authoritative/backends/generic-postgresql.html
Настраиваю соединение с базой данных в:
```sh
sudo tee /etc/powerdns/pdns.d/pdns.local.gpgsql.conf <<'EOF'
launch+=gpgsql
# gmysql parameters
gpgsql-host=127.0.0.1
gpgsql-port=5432
gpgsql-dbname=powerdns
gpgsql-user=powerdns
gpgsql-password=y7HMHi0ATxx1VC3UU5WG
gpgsql-dnssec=no
EOF
```
Set access level to file:
```sh
sudo chown pdns: /etc/powerdns/pdns.d/pdns.local.gpgsql.conf &&
sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.gpgsql.conf
```
----------------------------------------------------------------------------------------------------

133
PowerDNS_install_SQIite3.md Normal file
View File

@ -0,0 +1,133 @@
```sh
sudo apt-get install pdns-backend-sqlite3 -y
```
Для использования SQLIte копируем схему из https://doc.powerdns.com/authoritative/backends/generic-sqlite3.html
```sh
sudo apt-get install pdns-backend-sqlite3 -y
```
```sh
sudo apt install sqlite3 -y
```
Create database:
```sh
sudo sqlite3 /var/lib/powerdns/pdns.sqlite3 ".databases" &&
sudo chown pdns:pdns /var/lib/powerdns/pdns.sqlite3
```
Create database structure
```sql
sudo sqlite3 /var/lib/powerdns/pdns.sqlite3 <<'EOF'
PRAGMA foreign_keys = 1;
CREATE TABLE domains (
id INTEGER PRIMARY KEY,
name VARCHAR(255) NOT NULL COLLATE NOCASE,
master VARCHAR(128) DEFAULT NULL,
last_check INTEGER DEFAULT NULL,
type VARCHAR(8) NOT NULL,
notified_serial INTEGER DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
options VARCHAR(65535) DEFAULT NULL,
catalog VARCHAR(255) DEFAULT NULL
);
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE INDEX catalog_idx ON domains(catalog);
CREATE TABLE records (
id INTEGER PRIMARY KEY,
domain_id INTEGER DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(65535) DEFAULT NULL,
ttl INTEGER DEFAULT NULL,
prio INTEGER DEFAULT NULL,
disabled BOOLEAN DEFAULT 0,
ordername VARCHAR(255),
auth BOOL DEFAULT 1,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX records_lookup_idx ON records(name, type);
CREATE INDEX records_lookup_id_idx ON records(domain_id, name, type);
CREATE INDEX records_order_idx ON records(domain_id, ordername);
CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL COLLATE NOCASE,
account VARCHAR(40) NOT NULL
);
CREATE UNIQUE INDEX ip_nameserver_pk ON supermasters(ip, nameserver);
CREATE TABLE comments (
id INTEGER PRIMARY KEY,
domain_id INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) DEFAULT NULL,
comment VARCHAR(65535) NOT NULL,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX comments_idx ON comments(domain_id, name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
CREATE TABLE domainmetadata (
id INTEGER PRIMARY KEY,
domain_id INT NOT NULL,
kind VARCHAR(32) COLLATE NOCASE,
content TEXT,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX domainmetaidindex ON domainmetadata(domain_id);
CREATE TABLE cryptokeys (
id INTEGER PRIMARY KEY,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
published BOOL DEFAULT 1,
content TEXT,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE TABLE tsigkeys (
id INTEGER PRIMARY KEY,
name VARCHAR(255) COLLATE NOCASE,
algorithm VARCHAR(50) COLLATE NOCASE,
secret VARCHAR(255)
);
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
EOF
```
Configure database connection from PowerDNS to SQLIte
```sh
sudo tee /etc/powerdns/pdns.d/pdns.local.sqlite.conf <<'EOF'
launch=gsqlite3
gsqlite3-database=/var/lib/powerdns/pdns.sqlite3
EOF
```
Set access level to file
```sh
sudo chown pdns: /etc/powerdns/pdns.d/pdns.local.sqlite.conf &&
sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.sqlite.conf
```
In PowerDNS configured to auto read config from dir /etc/powerdns/pdns.d/

View File

@ -1,7 +1,14 @@
Устанавливаем PowerDNS через Docker Compose в директорию /opt/powerdnsa # Устанавливаем авторитативный PowerDNS через Docker Compose в директорию /opt/powerdnsa
Эту версию пробовал: https://hub.docker.com/r/powerdns/pdns-auth-48 Эту версию пробовал: https://hub.docker.com/r/powerdns/pdns-auth-48
PowerDNS Authoritative PowerDNS Authoritative
Connect to CCALM Turkish infrastructure:
```sh
ssh igor@156.244.31.209 -p 2200
```
```sh ```sh
ssh-keygen -R 192.168.200.85 ssh-keygen -R 192.168.200.85
``` ```
@ -22,6 +29,94 @@ ssh igor@192.168.200.85 -p 22
cd /opt/powerdnsa/data cd /opt/powerdnsa/data
``` ```
----------------------------------------------------------------------------------------------------
Как настроить MariaDB базу для использования в PowerDNS смотри:
[Установка PowerDNS с MariaDB](./PowerDNS_install_MarinaDB.md)
----------------------------------------------------------------------------------------------------
Похоже что environment не работаею и нужно конфигурить через
```sh
cd /opt/powerdnsa
sudo tee docker-compose.yml > /dev/null <<'EOF'
services:
powerdns:
image: powerdns/pdns-auth-48
container_name: powerdns
restart: unless-stopped
network_mode: "host"
environment:
- PDNS_LOCAL_ADDRESS=127.0.0.1,156.244.31.209
- PDNS_LAUNCH=gmysql
- PDNS_API=yes
- PDNS_API_KEY=0aa08433-52a9-4611-9eed-5c5a08a508f0
- PDNS_MASTER=yes
- PDNS_ALLOW_AXFR_IPS=127.0.0.1
- PDNS_WEBSERVER=yes
- PDNS_WEBSERVER_ADDRESS=127.0.0.1,156.244.31.209
- PDNS_WEBSERVER_PORT=8081
# MariaDB connection settings
- PDNS_GMYSQL_HOST=127.0.0.1 # MariaDB на localhost хоста
- PDNS_GMYSQL_PORT=3306
- PDNS_GMYSQL_USER=poweruser
- PDNS_GMYSQL_PASSWORD=uFqqXQEQwErjkQga6rcz
- PDNS_GMYSQL_DBNAME=powerdns
- PDNS_GMYSQL_DNSSEC=yes
EOF
```
```sh
cd /opt/powerdnsa &&
sudo docker-compose up -d
```
```sh
cd /opt/powerdnsa &&
sudo docker-compose down
```
Проверяем какие порты открыты:
```sh
sudo netstat -tuln
```
Проверяем что страница работает
```sh
curl -v http://localhost:8081
```
Смотрим что в логе
```sh
sudo docker logs powerdns
```
```sh
curl -H "X-API-Key: 0aa08433-52a9-4611-9eed-5c5a08a508f0" http://localhost:8081/api/v1
```
пробуем добавить тестовую зону по ключу
```sh
curl -X POST -H "X-API-Key: 0aa08433-52a9-4611-9eed-5c5a08a508f0" \
-H "Content-Type: application/json" \
-d '{"name": "localhost.", "kind": "Master", "dnssec": false, "soa_edit": "", "soa_edit_api": "DEFAULT"}' \
http://localhost:8081/api/v1/servers/localhost/zones
```
Инициализируем базу данных так как сам контейнер её не создаёт Инициализируем базу данных так как сам контейнер её не создаёт
```sh ```sh
sudo apt install sqlite3 -y sudo apt install sqlite3 -y
@ -34,7 +129,7 @@ sudo sqlite3 /opt/powerdnsa/data/pdns.sqlite3 ".databases"
Create database structure Create database structure
```sql ```sql
sudo sqlite3 /opt/powerdnsa/data/pdns.sqlite3 <<EOF sudo sqlite3 /opt/powerdnsa/data/pdns.sqlite3 <<'EOF'
PRAGMA foreign_keys = 1; PRAGMA foreign_keys = 1;
@ -147,7 +242,7 @@ sudo chmod -R 777 /opt/powerdnsa/data
```sh ```sh
cd /opt/powerdnsa cd /opt/powerdnsa
sudo tee docker-compose.yml > /dev/null <<EOF sudo tee docker-compose.yml > /dev/null <<'EOF'
services: services:
powerdns: powerdns:
image: powerdns/pdns-auth-48 image: powerdns/pdns-auth-48

357
Traefik_install.md Normal file
View File

@ -0,0 +1,357 @@
Открываю нужный сервер
```sh
wsl
```
Или такой:
```sh
ssh igor@192.168.200.85 -p 22
```
# Установка Traefik на Linux Mint / Ubuntu
## 📥 Шаг 1. Установка зависимостей
Убедитесь, что установлены `wget` и `systemd`:
```sh
sudo apt update &&
sudo apt install wget
```
---
## 📥 Шаг 2. Скачать последнюю версию Traefik
Проверь актуальную версию на: [Traefik Releases](https://github.com/traefik/traefik/releases)
Пример для версии `v3.0.0`:
```bash
cd ~ &&
wget https://github.com/traefik/traefik/releases/download/v3.3.4/traefik_v3.3.4_linux_amd64.tar.gz
```
---
## 📥 Шаг 3. Распаковка и установка
```bash
cd ~ &&
tar -xvzf traefik_v3.3.4_linux_amd64.tar.gz &&
sudo mv traefik /usr/local/bin/
```
Проверь версию:
```bash
traefik version
```
---
## 📁 Шаг 4. Создание директории и базового конфига
```sh
sudo mkdir -p /etc/traefik &&
cd /etc/traefik
```
### Пример `traefik.yml`
```sh
cd /etc/traefik &&
sudo tee /etc/traefik/traefik.yml > /dev/null <<'EOF'
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
permanent: true
websecure:
address: ":443"
traefik:
address: ":8080"
api:
dashboard: true
insecure: true
providers:
file:
filename: "/etc/traefik/dynamic.yml"
# Настройка сертификатов (пример с Let's Encrypt)
certificatesResolvers:
myresolver:
acme:
email: "your-email@example.com"
storage: "/etc/traefik/acme.json"
httpChallenge:
entryPoint: web
log:
level: DEBUG
EOF
```
### Пример `dynamic.yml`
```sh
cd /etc/traefik &&
sudo tee /etc/traefik/dynamic.yml > /dev/null <<'EOF'
http:
routers:
dashboard:
entryPoints:
- traefik
rule: "Host(`localhost`)"
service: api@internal
ccalm-api-auth:
rule: "Host(`ccalm.test`) && PathPrefix(`/api/authorization/v02/`)"
service: org_ccalm_api_authorization_v02
entryPoints:
- websecure
tls:
certresolver: myresolver
middlewares:
- strip-auth-prefix
ccalm-dbms:
rule: "Host(`ccalm.test`) && PathPrefix(`/api/dbms/v09/`)"
service: org_ccalm_dbms_v09
entryPoints:
- websecure
tls:
certresolver: myresolver
middlewares:
- strip-dbms-prefix
ccalm-login:
rule: "Host(`ccalm.test`) && PathPrefix(`/login/`)"
service: org_ccalm_login_v01
entryPoints:
- websecure
tls:
certresolver: myresolver
ccalm-default:
rule: "Host(`ccalm.test`)"
service: org_ccalm
entryPoints:
- websecure
tls:
certresolver: myresolver
powerdns:
rule: "Host(`powerdns.local`)"
service: local_powerdns
entryPoints:
- websecure
tls: {}
middlewares:
strip-auth-prefix:
stripPrefix:
prefixes:
- "/api/authorization/v02"
strip-dbms-prefix:
stripPrefix:
prefixes:
- "/api/dbms/v09"
services:
# Бэкенд для local_powerdns
local_powerdns:
loadBalancer:
servers:
- url: "http://192.168.200.85:9191"
healthCheck:
path: "/"
interval: "5s"
# Бэкенд для org_ccalm_api_authorization_v02 (HTTPS с отключенной проверкой SSL)
org_ccalm_api_authorization_v02:
loadBalancer:
servers:
- url: "https://192.168.200.184:8082"
serversTransport: insecureTransport # Ссылка на транспорт с отключенной проверкой
healthCheck:
path: "/"
interval: "5s"
# Бэкенд для org_ccalm_dbms_v09 (HTTPS с отключенной проверкой SSL)
org_ccalm_dbms_v09:
loadBalancer:
servers:
- url: "https://192.168.200.184:8084"
serversTransport: insecureTransport
healthCheck:
path: "/"
interval: "5s"
# Бэкенд для org_ccalm_login_v01 (HTTP, без SSL)
org_ccalm_login_v01:
loadBalancer:
servers:
- url: "http://192.168.200.184:3000"
healthCheck:
path: "/"
interval: "5s"
# Бэкенд по умолчанию org_ccalm (HTTPS с отключенной проверкой SSL)
org_ccalm:
loadBalancer:
servers:
- url: "https://192.168.200.184:8083"
serversTransport: insecureTransport
healthCheck:
path: "/"
interval: "5s"
# Определяем транспорт для отключения проверки SSL
serversTransports:
insecureTransport:
insecureSkipVerify: true
# Добавляем сертификаты
tls:
certificates:
- certFile: "/etc/traefik/certs/ccalm.test.crt"
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/wildcard.local.crt"
keyFile: "/etc/traefik/certs/wildcard.local.key"
- certFile: "/etc/traefik/certs/wildcard.test.crt"
keyFile: "/etc/traefik/certs/wildcard.test.key"
EOF
```
Для хранения сертификатов файл:
```sh
sudo touch /etc/traefik/acme.json &&
sudo chmod 600 /etc/traefik/acme.json
```
---
## ⚙️ Шаг 5. Настройка systemd для автозапуска
Создайте файл сервиса:
```sh
cd /etc/systemd/system &&
sudo tee /etc/systemd/system/traefik.service > /dev/null <<'EOF'
[Unit]
Description=Traefik
After=network.target
[Service]
ExecStart=/usr/local/bin/traefik --configFile=/etc/traefik/traefik.yml
Restart=always
[Install]
WantedBy=multi-user.target
EOF
```
Примените:
```sh
sudo systemctl daemon-reload &&
sudo systemctl enable traefik &&
sudo systemctl start traefik &&
sudo systemctl status traefik
```
```sh
sudo systemctl restart traefik
```
---
## 🔎 Шаг 6. Проверка работы
Откройте в браузере:
```sh
open http://localhost:8080/dashboard/
```
> ⚠️ Доступ к дашборду открыт только с localhost. Для удалённого доступа настройте правила.
---
## ✅ Готово!
Traefik установлен, запущен как сервис и готов к работе.
Проверяем какие порты слушает:
```sh
sudo lsof -i -P -n | grep traefik
```
```sh
sudo journalctl -u traefik -f
```
---
## 🐳 Как вариант можно установить через Docker
Если 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
```
```sh
sudo mkdir -p /opt/traefik
cd /opt/traefik
```
```sh
cd /opt/traefik &&
sudo tee docker-compose.yml > /dev/null <<'EOF'
services:
traefik:
image: traefik:latest
container_name: traefik
restart: unless-stopped
ports:
- "80:80" # HTTP
- "443:443" # HTTPS
- "8080:8080" # Dashboard
volumes:
- /etc/traefik:/etc/traefik
- /var/run/docker.sock:/var/run/docker.sock:ro
command:
- "--configFile=/etc/traefik/traefik.yml"
networks:
- traefik-net
networks:
traefik-net:
driver: bridge
EOF
```
## Запуск контейнера
```sh
cd /opt/traefik &&
sudo docker-compose up -d
```
```sh
cd /opt/traefik &&
sudo docker-compose down
```
Откройте в браузере:
```sh
open http://192.168.200.85:8080/dashboard/
```
```sh
sudo docker logs traefik
```

285
Traefik_install_CCALM.md Normal file
View File

@ -0,0 +1,285 @@
# Устанавливаю Traefik на туречский сервер
```sh
ssh igor@156.244.31.209 -p 2200
```
# Установка Traefik на Linux Mint / Ubuntu
## 📥 Шаг 1. Установка зависимостей
Убедитесь, что установлены `wget` и `systemd`:
```sh
sudo apt update &&
sudo apt install wget
```
---
## 📥 Шаг 2. Скачать последнюю версию Traefik
Проверь актуальную версию на: [Traefik Releases](https://github.com/traefik/traefik/releases)
Пример для версии `v3.0.0`:sudo mc
```sh
cd ~ &&
wget https://github.com/traefik/traefik/releases/download/v3.3.4/traefik_v3.3.4_linux_amd64.tar.gz
```
---
## 📥 Шаг 3. Распаковка и установка
```sh
cd ~ &&
tar -xvzf traefik_v3.3.4_linux_amd64.tar.gz &&
sudo mv traefik /usr/local/bin/
```
Проверь версию:
```sh
traefik version
```
```conf
Version: 3.3.4
Codename: saintnectaire
Go version: go1.23.6
Built: 2025-02-25T10:11:01Z
OS/Arch: linux/amd64
```
---
## 📁 Шаг 4. Создание директории и базового конфига
```sh
sudo mkdir -p /etc/traefik &&
cd /etc/traefik
```
### Пример `traefik.yml`
```sh
cd /etc/traefik &&
sudo tee /etc/traefik/traefik.yml > /dev/null <<'EOF'
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
permanent: true
websecure:
address: ":443"
traefik:
address: ":8080"
api:
dashboard: true
insecure: true
providers:
file:
filename: "/etc/traefik/dynamic.yml"
# Настройка сертификатов (пример с Let's Encrypt)
certificatesResolvers:
myresolver:
acme:
email: "irigm@mail.ru"
storage: "/etc/traefik/acme.json"
httpChallenge:
entryPoint: web
log:
level: DEBUG
EOF
```
### Пример `dynamic.yml`
```sh
cd /etc/traefik &&
sudo tee /etc/traefik/dynamic.yml > /dev/null <<'EOF'
http:
routers:
dashboard:
entryPoints:
- traefik
rule: "Host(`localhost`)"
service: api@internal
geovizor-api-zones:
rule: "Host(`geovizor.top`) && PathPrefix(`/api/v1/servers/localhost/zones/`)"
service: top_geovizor_api_zones_v01
entryPoints:
- websecure
tls:
certresolver: myresolver
geovizor-default:
rule: "Host(`geovizor.top`)"
service: top_geovizor_default
entryPoints:
- websecure
tls:
certresolver: myresolver
services:
top_geovizor_api_zones_v01:
loadBalancer:
servers:
- url: "http://156.244.31.209:8081"
healthCheck:
path: "/"
interval: "5s"
# Бэкенд по умолчанию top_geovizor
top_geovizor_default:
loadBalancer:
servers:
- url: "http://127.0.0.1:8082"
healthCheck:
path: "/"
interval: "5s"
# Определяем транспорт для отключения проверки SSL
serversTransports:
insecureTransport:
insecureSkipVerify: true
# Добавляем сертификаты
tls:
certificates:
EOF
```
Для хранения сертификатов файл:
```sh
sudo touch /etc/traefik/acme.json &&
sudo chmod 600 /etc/traefik/acme.json
```
---
## ⚙️ Шаг 5. Настройка systemd для автозапуска
Создайте файл сервиса:
```sh
cd /etc/systemd/system &&
sudo tee /etc/systemd/system/traefik.service > /dev/null <<'EOF'
[Unit]
Description=Traefik
After=network.target
[Service]
ExecStart=/usr/local/bin/traefik --configFile=/etc/traefik/traefik.yml
Restart=always
[Install]
WantedBy=multi-user.target
EOF
```
Примените:
```sh
sudo systemctl daemon-reload &&
sudo systemctl enable traefik &&
sudo systemctl start traefik &&
sudo systemctl status traefik
```
```sh
sudo systemctl restart traefik
```
---
## 🔎 Шаг 6. Проверка работы
Откройте в браузере:
```sh
open http://localhost:8080/dashboard/
```
> ⚠️ Доступ к дашборду открыт только с localhost. Для удалённого доступа настройте правила.
---
## ✅ Готово!
Traefik установлен, запущен как сервис и готов к работе.
Проверяем какие порты слушает:
```sh
sudo lsof -i -P -n | grep traefik
```
```sh
sudo journalctl -u traefik -f
```
---
## 🐳 Как вариант можно установить через Docker
Если 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
```
```sh
sudo mkdir -p /opt/traefik
cd /opt/traefik
```
```sh
cd /opt/traefik &&
sudo tee docker-compose.yml > /dev/null <<'EOF'
services:
traefik:
image: traefik:latest
container_name: traefik
restart: unless-stopped
ports:
- "80:80" # HTTP
- "443:443" # HTTPS
- "8080:8080" # Dashboard
volumes:
- /etc/traefik:/etc/traefik
- /var/run/docker.sock:/var/run/docker.sock:ro
command:
- "--configFile=/etc/traefik/traefik.yml"
networks:
- traefik-net
networks:
traefik-net:
driver: bridge
EOF
```
## Запуск контейнера
```sh
cd /opt/traefik &&
sudo docker-compose up -d
```
```sh
cd /opt/traefik &&
sudo docker-compose down
```
Откройте в браузере:
```sh
open http://192.168.200.85:8080/dashboard/
```
```sh
sudo docker logs traefik
```

359
Ubuntu.md
View File

@ -46,7 +46,7 @@ sudo usermod -aG vboxsf $USER
Для добавления ярлыка в меню пуск создав файл *.desktop Для добавления ярлыка в меню пуск создав файл *.desktop
```sh ```sh
cd /usr/share/applications cd /usr/share/applications
sudo tee IDEA_JEE.desktop > /dev/null <<EOF sudo tee IDEA_JEE.desktop > /dev/null <<'EOF'
[Desktop Entry] [Desktop Entry]
Encoding=UTF-8 Encoding=UTF-8
Name=IDEA_JEE Name=IDEA_JEE
@ -1090,363 +1090,6 @@ https://pro-gram.ru/bridge-utils-ubuntu-server-18-04.html
**************************************************************************************************** ****************************************************************************************************
Отключить IP v6: http://www.linuxrussia.com/2013/05/disable-ipv6-ubuntu.html Отключить IP v6: http://www.linuxrussia.com/2013/05/disable-ipv6-ubuntu.html
**************************************************************************************************** ****************************************************************************************************
Настройка почты на POSTFIX(агент передачи почты) И DOVECOT на основе https://www.alex-math.ru/administrirovaniye/ustanovka-postfix-dovecot-posfixadmin-na-ubuntu-20-04/ и https://www.youtube.com/watch?v=_pbH7GsVTrw&t=649s и https://www.youtube.com/watch?v=VptKRBVeCMo
********** Устанавливаю Postfixadmin **********
Для начала создаю базу в PostgreSQL с базой mail и пользователем mailreader и паролем major!reader1
cd /var/www/html
sudo wget https://yer.dl.sourceforge.net/project/postfixadmin/postfixadmin-3.3.8/PostfixAdmin%203.3.8.tar.gz
sudo tar xzvf "PostfixAdmin 3.3.8.tar.gz"
Создаю временный каталог в /var/www/html/PostfixAdmin/templates_c
правлю способ подключения к базе:
sudo mcedit /srv/http/PostfixAdmin/config.inc.php
На это:
$CONF['configured'] = true;
$CONF['database_type'] = 'pgsql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'mailreader';
$CONF['database_password'] = 'major!reader1';
$CONF['database_name'] = 'mail';
$CONF['emailcheck_resolve_domain'] = 'NO';
Также нужно поднастроить апачи добавив следующтй код в: sudo mcedit /etc/apache2/apache2.conf ниже того что указывает на <Directory /var/www/>
Alias /PostfixAdmin/ "/var/www/html/PostfixAdmin/public/"
<Directory "/var/www/html/PostfixAdmin/public/">
Options FollowSymLinks
AllowOverride None
Allow from all
Order allow,deny
</Directory>
Перезагружаю:
systemctl restart apache2.service
На последок:
sudo chown www-data:www-data -R /var/www/
sudo chown www-data:www-data -R /opt/app_api_mobile_v2/mobile_v2
Теперь можно открывать сайт по IP: http://77.240.38.108/PostfixAdmin/setup.php
Просит задать пароль, задал такой: 11qazxsw22
Результат генерации: $CONF['setup_password'] = '$2y$10$ySo40K0pOn0Q5jLcBoK1yua5JaGXI.NIzTmUVBn1dreTaP2RkZ2My';
И добавляем эту стору в: sudo mcedit /srv/http/PostfixAdmin/config.inc.php
Потом обновляем страницу.
Добавляем администратора введя пароль 11qazxsw22 емайл в качестве логина irigm@mail.ru и пароль: 33edcvfr44
Можно взглянуть базу там должны создаться таблицы
Теперь осталось пойти на Postfixadmin, завести сначала почтовый домен, потом ящик и протестировать нашу почтовую систему, например, с помощью Thunderbird. Отправляем письма себе, другому пользователю в нашей системе. Потом пробуем послать себе письма с Gmail, Yandex, Mail.ru и наблюдаем за поведением системы, изучая логи. Основная настройка почты завершена. Теперь необходимо настроить DKIM, SPF, чтобы другие почтовые системы воспринимали нас как доверенных отправителей. Но об этом я расскажу в другом посте.
********** Устанавливаю Postfix **********
sudo apt-get update
sudo apt install postfix postfix-pgsql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-pgsql mailutils postgresql
Ссохраняю оригинальный конфигурационный файл:
cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
Конфигурирую:
sudo dpkg-reconfigure postfix
Настраиваю так:
General type of mail configuration?: Internet Site
System mail name: example.com (не mail.example.com)
Root and postmaster mail recipient: имя пользователя основной учетной записи Linux (в наших примерах sammy)
Other destinations to accept mail for: $myhostname, example.com, mail.example.com, localhost.example.com, localhost
Force synchronous updates on mail queue?: No
Local networks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
Mailbox size limit: 0
Local address extension character: +
Internet protocols to use: all
Можно взглянуть на настройки так: sudo mcedit /etc/postfix/main.cf
Через pgAdmin создаю нового пользователя mailreader с паролем major!reader1
CREATE DATABASE mail WITH OWNER mailreader;
Добавляю: sudo mc edit /etc/postgresql/12/main/pg_hba.conf:
local postfix postfix md5
Перезагружаю базу данных:
service postgresql reload
Создаём файл для обращения к базе с алиасами: sudo mcedit /etc/postfix/pgsql_virtual_alias_maps.cf https://www.alex-math.ru/administrirovaniye/ustanovka-postfix-dovecot-posfixadmin-na-ubuntu-20-04/
user = mailreader
password = major!reader1
hosts = localhost
dbname = mail
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
Создаём файл для получения информации по виртуальным доменам: sudo mcedit /etc/postfix/pgsql_virtual_domains_maps.cf
user = mailreader
password = major!reader1
hosts = localhost
dbname = mail
query = SELECT domain FROM domain WHERE domain='%u'
Создаём файл для получения информации о почтовых ящиках: sudo mcedit /etc/postfix/pgsql_virtual_mailbox_maps.cf
user = mailreader
password = major!reader1
hosts = localhost
dbname = mail
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'
Прописываем ранее созданные файлы в: sudo mcedit /etc/postfix/main.cf добавив строчки:
virtual_mailbox_base = /home/mail
virtual_alias_maps = proxy:pgsql:/etc/postfix/pgsql_virtual_alias_maps.cf
virtual_mailbox_domains = proxy:pgsql:/etc/postfix/pgsql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:pgsql:/etc/postfix/pgsql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1024
virtual_uid_maps = static:1024
virtual_gid_maps = static:1024
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
Настройки безопасного соединения (также просто вставил в конец файла):
smtpd_sasl_auth_enable = yes
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_tls_cert_file = /etc/ssl/certs/bigfoottrade_kz.crt
smtpd_tls_key_file = /etc/ssl/private/bigfoottrade_kz.key
smtpd_tls_security_level = encrypt
Похоже опции что ниже устарели:
smtpd_use_tls = yes
smtp_use_tls = yes
smtp_tls_security_level = encrypt
smtp_enforce_tls=yes
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtp_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_protocols = !SSLv2, !SSLv3
tls_preempt_cipherlist = yes
smtpd_tls_mandatory_ciphers = high
tls_high_cipherlist = ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:ADH-AES256-GCM-SHA384:ADH-AES256-SHA256:ECDH-RSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-SHA384:ECDH-ECDSA-AES256-SHA384:AES256-GCM-SHA384:AES256-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:ADH-AES128-GCM-SHA256:ADH-AES128-SHA256:ECDH-RSA-AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-SHA256:ECDH-ECDSA-AES128-SHA256:AES128-GCM-SHA256:AES128-SHA256:NULL-SHA256
smtpd_tls_auth_only = yes
smtpd_helo_required = yes
smtp_tls_security_level = may
smtp_tls_ciphers = export
smtp_tls_loglevel = 1
smtp_tls_CApath = /etc/ssl/certs
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
Снимаем комментарии со следующих строк, или дописываем их при необходимости: sudo mcedit /etc/postfix/master.cf (просто добавил в конец файла)
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=may
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=/var/spool/postfix/private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
-o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
-o milter_macro_daemon_name=ORIGINATING
smtps inet n - n - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
Проверяю на наличие ошибок:
sudo postfix check
В конфигурационном файле прописывается список дорменов которых обслуживает данный агент доставки.
sudo mcedit /etc/postfix/main.cf
Примерно таокое:
mydestination = $myhostname, your_domain, localhost.com, , localhost
Перезапускаем:
sudo systemctl restart postfix
********** Настройка dovecot the Secure IMAP server **********
Теперь устанавливаю и настраиваю Dovecot:
sudo apt install -y dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd
Создаю пользователя и каталог
sudo adduser --system --no-create-home --uid 1024 --group --disabled-password --disabled-login --gecos 'dovecot virtual mail user' vmail
mkdir /home/mail
chown vmail:vmail /home/mail
chmod 700 /home/mail
Смотрим что мы создали:
groups vmail
Настраиваем способ хранения сообщений: sudo mcedit /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/mail/%d/%u/
Настраиваем слушателя аутентификации: sudo mcedit /etc/dovecot/conf.d/10-master.conf
service auth {
unix_listener auth-userdb {
mode = 0600
user = vmail
group = vmail
}
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
Настраиваем аутентификацию в Dovecot: sudo mcedit /etc/dovecot/conf.d/10-auth.conf
Комментируем одну строку, снимаем комментарий с другой.
#!include auth-system.conf.ext
!include auth-sql.conf.ext
Настраиваем шифрование Dovecot: sudo mcedit /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/haproxy/ssl/bigfoottrade_kz.pem
ssl_key = </etc/haproxy/ssl/bigfoottrade_kz.pem
Указываем Dovecot автоматически создавать каталоги при первом подключении клиента: sudo mcedit /etc/dovecot/conf.d/15-lda.conf
lda_mailbox_autocreate = yes
Теперь настройка подключения к базе данных. Открываем файл: sudo mcedit /etc/dovecot/conf.d/auth-sql.conf.ext
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
Создаём файл с настройками для работы с PostgreSQL: sudo mcedit /etc/dovecot/dovecot-sql.conf.ext
driver = pgsql
connect = host=localhost dbname=mail user=mailreader password=major!reader1
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'
user_query = SELECT CONCAT('/home/mail/',LOWER(domain),'/',LOWER(maildir)),1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'
Наконец, указываем интерфейсы, на которых будет слушать наш Dovecot: sudo mcedit /etc/dovecot/dovecot.conf
listen = *
Также добавить в этот файл следующую настройку:
service stats {
unix_listener stats-reader {
user = vmail
group = vmail
mode = 0660
}
unix_listener stats-writer {
user = vmail
group = vmail
mode = 0660
}
}
Настройка Dovecot завершена. Осталось сгенерировать сертификаты или получить их с помощью Let's Encrypt. Для тестовых целей сгенерируем самоподписанные сертификаты. Мы их положим в /etc/postfix:
openssl req -new -x509 -days 730 -nodes -out /etc/postfix/public.pem -keyout /etc/postfix/private.pem -subj "/C=RU/ST=Msk/L=Msk/O=Local/OU=Mail/CN=fedor.bigfoottrade.kz"
Добавляем пользователю "dovecot" группу "mail":
usermod -a -G dovecot mail
usermod -a -G vmail mail
sudo systemctl enable dovecot
sudo systemctl start dovecot
Теперь можно тестировать:
Сначала необходимо убедиться в том, что почта доходит до нового ящика. Сделать это можно с помощью тестового письма:
echo "Test mail" | mail -s "Test mail" admin@mqtt.kz
Сообщение должно появиться в папке /home/mail/mqtt.kz/admin/new/. Если письма нет, проверьте лог Postfix:
tail -f /var/log/mail.log
В настройках DNS настроил А запись на только что настроенный сервер:
mail.mqtt.kz
Также нужно настроить dkim чтобы почта не попадала в спам, записав открытый ключ шифрования в TXT запсь
********** Настройка dkim ********** https://fornex.com/ru/help/dkim-postfix/
sudo apt-get install opendkim opendkim-tools
mkdir -p /etc/postfix/dkim && cd /etc/postfix/dkim
opendkim-genkey -D /etc/postfix/dkim/ -d mqtt.kz -s mail
opendkim-genkey -D /etc/postfix/dkim/ -d geovizor.com -s mail
mv mail.private mail.mqtt.kz.private
mv mail.private mail.geovizor.com.private
mv mail.txt mail.mqtt.kz.txt
mv mail.txt mail.geovizor.com.txt
Создаём файл mcedit keytable и записываем в него ключи
#имя_ключа домен:селектор:/путь/до/ключа
mail._domainkey.mqtt.kz mqtt.kz:mail:/etc/postfix/dkim/mail.mqtt.kz.private
mail._domainkey.geovizor.com geovizor.com:mail:/etc/postfix/dkim/mail.geovizor.com.private
Создаём файл mcedit signingtable и записывает что чем подписывать
#домен имя ключа
*@mqtt.kz mail._domainkey.mqtt.kz
*@geovizor.com mail._domainkey.geovizor.com
Задаю права доступа:
chown root:opendkim *
chmod u=rw,g=r,o= *
chmod g+r /etc/postfix/dkim/
Смотрим содержимое TXT файла для записи в домен
cat /etc/postfix/dkim/mail.mqtt.kz.txt
cat /etc/postfix/dkim/mail.geovizor.com.txt
И добавляю в DNS на хостинг:
Name: mail._domainkey.mqtt.kz
Text: v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtrObJxHaUBVtR4XzNuFzoa449K3l1z6+Mi4e83rFbBYmBZRYjiJn5h2PeiK1i2IpSaEKn32AlPy5gB7Ej41Fhg6LXswwRhhfvz8vClhRbUKT4I8oPBj9WZr7+4aohG1Vcks1q9cgmwdcGN+6qhKq/DJ+AC1TirNrEpSvR6JAqd4G70aJazI9su0bY5cbIv0pZGezvt+2pwJw6xpb501KudTFE8FTHxB51aLkgYS257MkovSu+qlVzPjoOsZcOY7hQtF8WB/Czod0QN05Ob/N3Qc/k2E4tpvxgokLXdYl/8KBMLMX9cRfIVbv+atuo59VFKHYIGD8Kom6akORkFeIlQIDAQAB
Заменяем все настройки на то что ниже: sudo mcedit /etc/opendkim.conf
AutoRestart Yes
AutoRestartRate 10/1h
PidFile /var/run/opendkim/opendkim.pid
Mode sv
Syslog yes
SyslogSuccess yes
LogWhy yes
UserID opendkim:opendkim
Socket inet:8891@localhost
Umask 022
Canonicalization relaxed/relaxed
Selector default
MinimumKeyBits 1024
KeyFile /etc/postfix/dkim/${MAIL_DOMAIN}.private
KeyTable /etc/postfix/dkim/keytable
SigningTable refile:/etc/postfix/dkim/signingtable
Добавляем в конец: sudo mcedit /etc/postfix/main.cf
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
sudo systemctl start opendkim
sudo systemctl enable opendkim
service opendkim restart
service postfix restart
********** Настройка SPF **********
Например, SPF-запись «example.com. TXT «v=spf1 +a +mx -all»» говорит о том, что отправлять письма от имени домена «example.com» могут сервера, указанные в A и MX-записях этого домена, а письма, отправленные от других серверов должны быть удалены (Fail).
Содержимое TXT файла для записи в домен
Имя домена пустое:
Содержимое: v=spf1 +a +mx -all
********** Настройка DMARC https://www.unisender.com/ru/glossary/dmarc/**********
Содержимое TXT файла для записи в домен
Имя домена: _dmarc
Содержимое: v=DMARC1; p=none;
!!! Для тестирования сервера на прохождение спам фильтра пишем письмо на https://www.mail-tester.com/ или https://spamtest.smtp.bz !!!
********** web интерфейс для postfix — Roundcube **********
cd /var/www/html
wget https://github.com/roundcube/roundcubemail/releases/download/1.6.5/roundcubemail-1.6.5-complete.tar.gz
tar xzvf roundcubemail-1.6.5-complete.tar.gz
chown -R www-data:www-data /var/www/html/Roundcube
sudo apt-get install aspell aspell-en dbconfig-common fonts-glyphicons-halflings javascript-common libaspell15 libjs-bootstrap libjs-bootstrap4 libjs-codemirror libjs-jquery libjs-jquery-minicolors libjs-jquery-ui libjs-jstimezonedetect libjs-popper.js libjs-sizzle node-jquery php-auth-sasl php-mail-mime php-masterminds-html5 php-net-sieve php-net-smtp php-net-socket php-pspell php7.4-pspell
https://bigfoottrade.kz/Roundcube/installer/
language — ru_RU
Предварительно создать базу:
https://bigfoottrade.kz/Roundcube
http://77.240.38.108/Roundcube
****************************************************************************************************
Установка sendmail для почты на php Установка sendmail для почты на php
sudo apt-get install php-mail sudo apt-get install php-mail
sudo apt-get install sendmail sudo apt-get install sendmail

94
Unbound_install.md Normal file
View File

@ -0,0 +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
```