Новости:

SMF - Just Installed!

Главное меню

Последние сообщения

#31
Mail servers / 9. Антиспам средствами Postfix
Последний ответ от George - Нояб. 13, 2023, 03:25
9. Антиспам средствами Postfix

Рассмотрим в отдельном разделе защиту от СПАМа средствами самого MTA Postfix.
1. Заголовки

В MTA Postfix встроен свой механизм проверки заголовков входящих сообщений. Правила размещаются в 7 секций, обработка которых выполняется в следующем порядке:

client -> helo -> sender -> relay -> recipient -> data -> end_of_data

Чтобы лучше понять принцип, мы должны знать SMTP-команды при выполнении отправки почты. И так, порядок, следующий:

    Соединение с сервером.
    Команда HELO. Приветствие, в котором отправитель называет свое имя, по которому можно проверить, соответствует ли оно правилам именования и своему IP-адресу.
    MAIL FROM — указывает адрес отправителя. Выполняется для sender и relay.
    RCPT TO — кому отправляем письмо.
    DATA — команда сообщает о готовности отправить письмо с заголовками и текстом.
    END-OF-DATA — отправка письма.

И так, для настройки антиспама открываем конфигурационный файл main.cf:
Код: bash
vi /etc/postfix/main.cf

Комментируем строку:

Код: bash
#smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination

И добавляем:

Код: bash
smtpd_client_restrictions =
        permit_mynetworks
        permit_sasl_authenticated
        reject_unauth_pipelining
        permit

smtpd_helo_restrictions =
        permit

smtpd_sender_restrictions =
        permit_mynetworks
        permit_sasl_authenticated
        reject_non_fqdn_sender
        reject_unknown_sender_domain
        permit

smtpd_relay_restrictions =
        permit_mynetworks
        permit_sasl_authenticated
        defer_unauth_destination

smtpd_recipient_restrictions =
        permit_mynetworks
        permit_sasl_authenticated
        reject_non_fqdn_recipient
        reject_unauth_destination
        reject_unknown_recipient_domain
        reject_unverified_recipient
        permit

smtpd_data_restrictions =
        permit

smtpd_end_of_data_restrictions =
        permit

* где параметры:

    smtpd_client_restrictions — настройки ограничений при осуществлении клиентских соединений с почтовым сервером.
    smtpd_helo_restrictions — ограничения в контексте клиентской команды HELO.
    smtpd_sender_restrictions — ограничения будут применяться во время выполнения клиентской команды MAIL FROM.
    smtpd_relay_restrictions — ограничения пересылки почты в контексте клиентской команды RCPT TO.
    smtpd_recipient_restrictions — ограничения в контексте клиентской команды RCPT TO после пересылки (smtpd_relay_restrictions).
    smtpd_data_restrictions — ограничения будут применяться во время выполнения команды DATA.
    smtpd_end_of_data_restrictions — ограничения во вреся выполнения команды END-OF-DATA.

... и значения для них:

    permit_mynetworks — разрешает все адреса, перечисленные в настройке mynetworks.
    permit_sasl_authenticated — разрешает запросы всех успешно авторизованных клиентов.
    reject_unauth_pipelining — запрещает отправку писем, которые отправляются заранее (пропуская правильную цепочку сессии SMTP).
    reject_non_fqdn_sender — отклонить соединение, если адрес отправителя указан неправильно (согласно RFC).
    reject_unknown_sender_domain — запрещает запрос, если Postfix не является конечным пунктом назначения для адреса отправителя, а домен MAIL FROM не имеет 1) DNS-записи MX и DNS-записи A или 2) искаженной MX-записи, такой как запись с MX-именем хоста нулевой длины.
    reject_non_fqdn_recipient — запретить соединение, если адрес получателя указан неправильно (согласно RFC).
    reject_unauth_destination — отклонить соединение, если письмо не пересылается согласно правилу relay_domains или сервер не является адресом назначения. Другими словами, запрещает использование нашего сервера в качестве open relay.
    reject_unknown_recipient_domain — отклонить запрос, если Postfix не является конечным пунктом назначения для домена получателя, а домен RCPT TO не имеет 1) DNS-записи MX и DNS-записи A или 2) неверно сформированной MX-записи, такой как запись с именем хоста MX нулевой длины.
    reject_unverified_recipient — отклонить запрос, если известно, что почта на адрес RCPT TO отклоняется или когда адрес получателя не доступен.
    permit — разрешает соединение. Ставим в конец каждого блока ограничений (если ограничения не сработали, то разрешаем).

* это более или менее мягкие правила. Их можно использовать первое время, пока тестируем сервер.

Для усиления защиты добавляем:

Цитироватьsmtpd_recipient_restrictions =
        ...
        reject_unknown_client_hostname
        reject_invalid_helo_hostname
        reject_non_fqdn_helo_hostname
        reject_unknown_helo_hostname
        reject_rbl_client bl.spamcop.net
        reject_rbl_client cbl.abuseat.org
        reject_rbl_client dul.ru
        reject_rbl_client dnsbl.abuse.ch
        permit

* где:

    reject_unknown_client_hostname — проверяет наличие PRT-записи отправителя и наличие рабочей А-записи в соответствие PTR.
    reject_invalid_helo_hostname — проверяет синтаксис HELO-приветствия.
    reject_non_fqdn_helo_hostname — требует правильного FQDN-имени во время HELO-приветствия.
    reject_unknown_helo_hostname — запрещает представляться именами, для которых нет А-записи или MX.
    reject_rbl_client — проверяет наличие отправителя в черных списках.

* более подробное описание опций для защиты можно найти на странице postfix.org/postconf.5.html.

После внесения всех правок, необходима перезагрузка Postfix:

Код: bash
systemctl restart postfix
#32
Mail servers / От: Полноценный почтовый серве...
Последний ответ от George - Нояб. 13, 2023, 02:58
Антивирус требует много ресурсов. Будьте готовы, что после его
запуска сервер начнет работать медленнее и понадобится добавить ресурсы.


Установка и настройка Clamav + Amavisd

Устанавливаем необходимые для работы антивируса и антиспама компоненты:


Код: bash
apt install amavisd-new clamav clamav-daemon spamassassin

Добавляем пользователя clamav в группу amavis:


Код: bash
usermod -a -G amavis clamav


Открываем конфигурационный файл amavis:


Код: bash
vi /etc/amavis/conf.d/15-content_filter_mode

Снимаем комментарии для строк:


Цитировать...
@bypass_virus_checks_maps = (
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
...
@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
...


* по умолчанию amavis не выполняем никаких проверок — для включения сканирования на вирусы снимаем комментарий с bypass_virus_checks_maps, а для сканирования на СПАМ — bypass_spam_checks_maps.

Затем открываем на редактирование:


Код: bash
vi /etc/amavis/conf.d/50-user


Добавим строки:

Код: bash
$allowed_header_tests{'multiple'} = 0;
$allowed_header_tests{'missing'} = 0;


* данные опции позволят программе Outlook без ошибок отправлять тестовое сообщение.
** мы должны добавить их выше строки 1;  # ensure a defined return.

Разрешаем запуск антивируса и amavis:


Код: bash
systemctl enable clamav-daemon clamav-freshclam amavis


Перезапускаем сервисы:


Код: bash
systemctl restart amavis clamav-daemon clamav-freshclam


Настройка Postfix

Добавляем в postfix:


Код: bash
vi /etc/postfix/main.cf



Код: bash
content_filter = scan:[127.0.0.1]:10024

* где content_filter указывает на приложение, которое будет сканировать сообщения;

Теперь редактируем master.cf:


Код: bash
vi /etc/postfix/master.cf

Дописываем следующее:


Код: bash
scan   unix  -  -  n  -  16  smtp
  -o smtp_send_xforward_command=yes
  -o smtp_enforce_tls=no

127.0.0.1:10025   inet  n  -  n  -  16  smtpd
  -o content_filter=
  -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
  -o smtpd_helo_restrictions=
  -o smtpd_client_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o mynetworks_style=host
  -o smtpd_authorized_xforward_hosts=127.0.0.0/8



* итак, данной настройкой мы создадим два вспомогательных сервиса scan и 127.0.0.1:10025 (сервис без имени, он просто будет слушать на порту 10025
 — это порт по умолчанию, на который отправляет сообщение amavis после
выполнения проверки). Также, мы используем следующие опции:


   smtp_send_xforward_command — передавать ли в сканирование сообщение с исходными именем клиента и IP-адресом. В данном примере, да.
   smtp_enforce_tls — требовать ли TLS.
   content_filter — приложение для сканирования. В данном примере сканирование отключено.
   receive_override_options переопределяет опции в main.cf. В нашем случае, no_unknown_recipient_checks отключает попытки выяснить, является ли получатель неизвестным; no_header_body_checks отключает проверки заголовков и тала писем.
   пустые значения для smtpd_helo_restrictions, smtpd_client_restrictions, smtpd_sender_restrictions отключают ограничения для данных опций.
   smtpd_recipient_restrictions — контролирует
ответ Postfix на SMTP-команду RCPT TO. Здесь мы разрешаем только
соединения от узлов, перечисленных в mynetworks.
   mynetworks_style=host указывает postfix, что он должен пересылать почту только с локального компьютера.
   smtpd_authorized_xforward_hosts укажет, какие удаленные клиенты могут использовать XFORWARD. В данном случае локальный компьютер.



Перезапускаем postfix:


Код: bash
systemctl restart postfix


Настройка обновлений антиспама

Для обновления базы антиспама выполняем команду:


Код: bash
sa-update --nogpg --verbose

Для настройки автоматического обновления, используем cron. Установим его:


Код: bash
apt install cron


Открываем редактирование планировщика:


crontab -e
Код: bash


Код: bash
30 3 * * * /usr/bin/sa-update


* в данном примере, каждый день в 03:30 будет запускаться процесс обновления антиспама.

Проверка

Для проверки антивируса отправляем сообщение со следующим содержимым:


Код: bash
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*



Большинство почтовых систем экранинуют вирусную последовательность и
письмо нормально пройдет мимо нашего антивируса. Чтобы сделать
корректный тест, необходимо отправить письмо SMTP-командами.


Письмо не должно дойти, а в логе (/var/log/maillog) мы увидим строку:


... amavis[17688]: (17688-04) Blocked INFECTED (Eicar-Signature) {DiscardedOutbound,Quarantined}, MYNETS LOCAL ...
... relay=127.0.0.1[127.0.0.1]:10024, delay=0.25, delays=0.19/0/0/0.06,
dsn=2.7.0, status=sent (250 2.7.0 Ok, discarded, id=17688-04 - INFECTED: Eicar-Signature)



Для проверки работы контентного антиспама, отправляем письмо со следующим содержимым:


Код: bash
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X


В итоге, письмо не должно прийти, а в логах мы увидим:


... amavis[17689]: (17689-04) Blocked SPAM {DiscardedOutbound,Quarantined}, MYNETS LOCAL ...
... status=sent (250 2.7.0 Ok, discarded, id=17689-04 - spam)



Пересылка СПАМа и вирусов на другой ящик

Все письма со спамом и вирусами будут перемещаться в карантин. Если
мы хотим перенаправлять все подобные сообщения на специальный ящик, то
необходимо настроить amavis.

Открываем конфигурационный файл:


Код: bash
vi /etc/amavis/conf.d/50-user


Добавляем такие опции:


Код: bash
$spam_quarantine_to = "spam\@im-cloud.site";
$virus_quarantine_to = "virus\@im-cloud.site";


* где $spam_quarantine_to указываем на адрес для перенаправления СПАМ-писем; $virus_quarantine_to — почта для писем с обнаруженными вирусами.

После перезагрузим amavis:


Код: bash
systemctl restart amavis


Пробуем отправить сообщения с тестовыми сигнатурами на СПАМ и вирус — письма должны быть перенаправлены на указанные адреса.

Обучение антиспама

Мы установили amavis, который проверяет почту на СПАМ средствами
spamassassin. Последний без обучения, практически, бесполезен. Синтаксис
 команды для обучения следующий:


Код: bash
sa-learn --spam
<папка с нежелательными письмами>



Код: bash
sa-learn --ham
<папка письмами, которые ошибочно определены как СПАМ>


Таким образом, первая команда укажет spamassassin какие письма
являются нежелательными, а вторая — не несущими рекламный характер.

Хорошей практикой будет договориться с пользователями о ручном
помещении нежелательной почты из входящих в папку СПАМ. Тогда мы сможем
пройтись скриптом по всем ящикам на сервере и обучать антиспам.
Например, такой командой:


Код: bash
sa-learn --spam /home/mail/im-cloud.site/*/{.\&BCEEPwQwBDw-,.Spam,.Junk\ E-mail,.Junk}/cur


* в данном примере мы сказали spamassassin найти в каталогах
пользователей папки Спам, Spam, Junk, Junk E-mail (данные каталоги
являются типичными для помещения СПАМа) и провести обучение.

Чтобы минимизировать количество ложных срабатываний, необходимо
проводить обучение с ключом --ham. В нашем примере мы отправляем все
нежелательные письма на ящик spam. В таком случае, необходимо вручную
находить ложные срабатывания и переносить их в специальную папку,
например Ham. Тогда команда для обучения будет такой:


Код: bash
sa-learn --ham /home/mail/im-cloud.site/spam\@im-cloud.site/.Ham/cur


Статистику обучения можно посмотреть командой:

Код: bash
sa-learn --dump magic
#33
Mail servers / 7. Устанавливаем и настраиваем...
Последний ответ от George - Нояб. 13, 2023, 02:40
В данной инструкции мы разберем использование веб-клиента Roundcube.

На официальном сайте заходим на страницу загрузки Roundcube. Смотрим ссылку на версию продукта с длительной поддержкой (LTS):

Скачиваем LTS версию Roundcube

* мы можем скачать и стабильную версию программы, но для продуктивной среды лучше выбирать то, что будет долго поддерживаться со стороны разработчика.

Используем ссылку, чтобы загрузить архив программы:

Код: bash
wget https://github.com/roundcube/roundcubemail/releases/download/1.5.3/roundcubemail-1.5.3-complete.tar.gz

Создаем каталог, где будут размещаться файлы портала:

Код: bash
mkdir /var/www/html/webmail

И распаковываем скачанный архив:

Код: bash
tar -C /var/www/html/webmail -xf roundcubemail-*.tar.gz --strip-components 1

Копируем шаблон конфига:

Код: bash
cp /var/www/html/webmail/config/config.inc.php.sample /var/www/html/webmail/config/config.inc.php

И открываем его на редактирование:

Код: bash
vi /var/www/html/webmail/config/config.inc.php

Код: bash
$config['db_dsnw'] = 'mysql://roundcube:roundcube123@localhost/roundcubemail';
$config['enable_installer'] = true;

* первую строку мы редактируем, а вторую добавляем. В первой строке roundcube:roundcube123 — логин и пароль для доступа к базе данных; localhost — сервер базы данных; roundcubemail — имя базы данных. Вторая строка разрешает установку портала.

Редактируем:

...
Код: bash
$config['smtp_pass'] = '';

* в данном случае мы просто оставляем значение для переменной $config['smtp_pass'] пустым. В противном случае, веб-интерфейс будет выдавать ошибку авторизации при отправке сообщения.

Также дописываем в конфигурационный файл следующее:

Код: bash
$config['drafts_mbox'] = 'Drafts';
$config['junk_mbox'] = 'Junk';
$config['sent_mbox'] = 'Sent';
$config['trash_mbox'] = 'Trash';
$config['create_default_folders'] = true;

* настройка $config['create_default_folders'] = true создает папки по умолчанию, если их нет:

    Drafts — Черновики.
    Junk — СПАМ.
    Sent — Отправленные.
    Trash — Корзина.

* Без данной настройки, если не создавались папки другим клиентом, веб-клиент будет выдавать ошибки при перемещении писем, например, при их удалении.

Задаем владельца apache на папку портала:
Код: bash
chown -R www-data:www-data /var/www/html/webmail
Создаем в MariaDB базу для roundcubemail:

Код: bash
mysql -uroot -p

>
Код: mysql
CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

>
Код: mysql
CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'roundcube123';

>
Код: mysql
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost;

>
Код: bash
quit

И загружаем в созданную базу данные:

Код: bash
mysql -uroot -p roundcubemail < /var/www/html/webmail/SQL/mysql.initial.sql

Устанавливаем компоненты, необходимые для работы Roundcube:

Код: bash
apt install php-pear php-intl php-ldap php-net-smtp php-gd php-imagick php-zip php-curl php-dom php-xml php-mcrypt

    Если система выдаст ошибку при установке компонента mcrypt, его нет в репозитории — поставим его вручную. Для этого установим пакеты, необходимые для сборки его из исходников:

   
Код: bash
apt install make php-dev libmcrypt-dev

    Выполняем команды:

   
Код: bash
pecl channel-update pecl.php.net

 
Код: bash
pecl install mcrypt

    Создадим файл с настройкой нового модуля:

   
Код: bash
vi /etc/php/${PHP_VER}/fpm/conf.d/99-mcrypt.ini

   
Код: bash
 extension=mcrypt.so

Компоненты установлены. Настроим php:
Код: bash
vi /etc/php/${PHP_VER}/fpm/php.ini
Код: bash
date.timezone = "Europe/Moscow"
...
Код: bash
post_max_size = 50M
...
Код: bash
upload_max_filesize = 50M

* в данном примере мы задаем московское время и возможность загружать файл размером в 50 Мб (это будет максимальным объемом вложений, которые можно отправлять через веб-интерфейс).

Перезагружаем php-fpm:
Код: bash
systemctl restart php${PHP_VER}-fpm

Настроим nginx:

Код: bash
vi /etc/nginx/nginx.conf

Добавим строку в раздел http:

Цитироватьhttp {
    ...
    client_max_body_size 50M;
    ...

* данной настройкой мы также разрешим загрузку файлов размером 50 Мб.

Перезапустим nginx для применения настройки:

Код: bash
systemctl restart nginx

Теперь открываем браузер и переходим по адресу http://<IP-адрес сервера>/webmail/installer/. На первой странице будет проведена диагностика системы на наличие необходимых компонентов и настроек:

Roundcube при установке проверяет наличие необходимых компонентов

В самом низу нажимаем по кнопке Next. Если кнопка будет неактивна, проверяем, что нет ошибок (NOT OK).

На следующей странице проверяем, что все пункты находятся в состоянии OK. Установка выполнена.

Открываем конфигурационный файл roundcube:

Код: bash
vi /var/www/html/webmail/config/config.inc.php

Запрещаем установку портала:
Код: bash
$config['enable_installer'] = false;

После удаляем папку с установочными скриптами:

Код: bash
rm -rf /var/www/html/webmail/installer

И заходим в браузере по адресу http://<IP-адрес сервера>/webmail/. Вводим в качестве логина адрес почты созданного пользователя и его пароль.
#34
Mail servers / 6. Создаем первый почтовый ящи...
Последний ответ от George - Нояб. 13, 2023, 02:31
6. Создаем первый почтовый ящик и проверяем работу сервера
В браузере вводим в адресной строке путь до Postfixadmin — http://<IP-адрес сервера>/postfixadmin/public/.

Вводим логин и пароль от административной учетной записи, которую мы создали на шаге 3. Перед нами появится страница управления учетными записями.

Переходим в Список доменов - Новый домен:

Переходим к созданию нового домена

Заполняем формы и нажимаем по Добавить домен:

Заполняем форму для создания домена в PostfixAdmin

Теперь переходим в Обзор - Создать ящик:

Создаем новый почтовый ящик через Postfixadmin

Вводим данные нового пользователя и нажимаем по Создать ящик:

Заполняем данные для создания нового ящика

Теперь можно подключиться к серверу с помощью любой почтовой программы, например, Mozilla Thunderbird.

Параметры для подключения:

    Сервер: имя сервера или его IP-адрес (не желательно, так как сертификат выдается по доменному имени).
    IMAP: 143 STARTTLS или 993 SSL/TLS
    POP3: 110 STARTTLS или 995 SSL/TLS
    SMTP: 25 STARTTLS или 465 SSL/TLS или 587 STARTTLS

* для корректной работы сервера на портах 993, 995, 465 (SSL/TLS) необходим правильный сертификат (для нашего домена и выпущенный доверенным центром сертификации).
#35
Mail servers / iptables для почтового сервера
Последний ответ от George - Нояб. 13, 2023, 01:56
#Очистка всех цепочек
Код: bash
iptables -F
Код: bash
iptables -F -t nat
Код: bash
iptables -F -t mangle

Код: bash
iptables -X
Код: bash
iptables -X -t nat
Код: bash
iptables -X -t mangle

#Политика по умолчанию - запретить все, что не разрешено
Код: bash
iptables -P INPUT DROP
Код: bash
iptables -P OUTPUT DROP
Код: bash
iptables -P FORWARD DROP

#Разрешаем обращение к lo интерфейсу
Код: bash
iptables -A INPUT -i lo -p all -j ACCEPT
Код: bash
iptables -A OUTPUT -o lo -p all -j ACCEPT

#Пропускать уже инициированные, а также их дочерние
Код: bash
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

#Пропускать новые, инициированные, а также их дочерние
Код: bash
iptables -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#Разрешаем обращение к почтовым портам
Код: bash
iptables -A INPUT -p tcp -m multiport --dports 22,25,80,110,143,443,465,587,993,995,11211 -j ACCEPT
Код: bash
iptables -A OUTPUT -p tcp -m multiport --sports 22,25,80б110,143,443,465,587,993,995,11211 -j ACCEPT 

22 порт я открыл для себя, 80 тоже не стоит открывать, но у меня стоит за haproxy и связь haproxy и почтовой web-морды по 80 порту. порт 11211 нужен для roundcubе
#36
Проблему синхронизации каталогов на двух серверах с операционными
системами семейства Linux на борту можно решить проще, если использовать
 специализированные инструменты. Давайте посмотрим, как это можно
сделать с помощью Unison.

Возможно, у вас есть несколько серверов, и перед вами стоит задача
синхронизировать определенные каталоги на этих серверах. Например, вам
необходимо синхронизировать каталог /data на каждом из этих
серверов, чтобы некое приложение имело доступ к актуальной информации.
Или, может быть, вам просто нужно периодически выполнять
синхронизированное резервное копирование данных одного сервера на
другой.

Unison похож на утилиту синхронизации rsync,
 но в отличие от неё он поддерживает двустороннюю синхронизацию. То
есть, он позволяет синхронизировать две копии файлов, обновляя каждую
копию в зависимости от произведённых изменений.

При использовании Unison на серверах желательно иметь установленные
пакеты типа openssh-server и ssh поскольку из соображений безопасности
синхронизацию лучше всего проводить по протоколу SSH. Однако, если вы
уверены в безопасности своей сети (например, сервер может использовать
аутентификацию по ключу SSH без пароля), можете не заморачиваться.

Что ещё нужно для использования Unison
Я покажу весь процесс на примере двух серверов Ubuntu (оба 18.04). Вы
можете установить и использовать Unison c другими дистрибутивами, но
тогда вам нужно будет изменить команду установки, иначе Unison может
быть установлен из стандартных репозиториев (разумеется, ваш
пользователь должен иметь права sudo).

Я буду использовать вот такие сервера:


server1 — 192.168.1.6
server2 — 192.168.1.19

Как установить Unison
Первое, о чем нужно позаботиться, это установка Unison. Это должно быть
сделано на обоих серверах. Зайдите на оба сервера и введите команду:

Код: bash
sudo apt-get install unison unison-all -y
Дождитесь окончания установки Unison и продолжайте.

Как сгенерировать и скопировать SSH-ключ
Сначала генерируем SSH-ключ только для server1. Для этого используем команду:

Код: bash
ssh-keygen -t rsa
Когда вас попросят ввести пароль — просто нажмите клавишу ENTER.
Когда ключ будет сгенерирован скопируйте его на server2 с помощью команды:

Код: bash
ssh-copy-id 192.168.1.19
Как только ключ будет скопирован, можете приступить непосредственно к делу.

Как использовать Unison
Давайте в тестовых целях создадим по одной директории на каждом сервере. Команда для server1:

Код: bash
sudo mkdir -p /data1
Для server2:

Код: bash
sudo mkdir -p /data2
Далее на обоих серверах необходимо изменить имя владельца созданного
каталога, иначе Unison не сможет ничего записать туда. В качестве
владельца укажите пользователя, который будет запускать команду Unison:

Код: bash
sudo chown -R $USER.$USER /data2
Сделайте то же самое для server1:

Код: bash
sudo chown -R $USER.$USER /data1
Положим несколько тестовых файлов в /data1:

Код: bash
touch /data1/{test1,test2,test3}
Синхронизируем наши каталоги с помощью следующей команды (запустив её на server1):

Код: bash
unison /data1 ssh://192.168.1.19//data2
Поскольку вы пытаетесь синхронизировать эти корневые каталоги впервые,
вы получите предупреждение о том, что синхронизация может занять
некоторое время (но в нашем случае этого не произойдет, поскольку мы
добавили в каталог всего лишь три тестовых файла минимального объёма).
Если бы это был бэкап на продакшне, первый запуск действительно мог бы
занять некоторое время.

Так что чай попьёте в следующий раз. А пока нажмите клавишу Enter, чтобы
 запустить процесс. После того, как вы это сделаете, вам будет
предложено подтвердить синхронизацию каждого файла. По завершении
введите 'y', чтобы продолжить.

Поскольку мы синхронизируем только три тестовых файла, это произойдёт
очень быстро и вернёт вас в оболочку bash. Чтобы убедиться, что файлы
синхронизированы, перейдите на server2 и введите команду:

Код: bash
ls /data2
Далее система сообщит о том, что в каталоге /data2 лежат наши файлы test1, test2 и test3:



У нас получилось: Unison синхронизировал оба каталога.

Как запускать Unison без необходимости взаимодействия с пользователем
Я думаю, вы не хотите постоянно подтверждать синхронизацию каждого файла
 каталога каждый раз, когда вы запускаете Unison. Это особенно
напрягает, когда вы синхронизируете каталоги с большим количеством
файлов. Поэтому нужна автоматизация. Зайдите на server1 и введите команду:

Код: bash
nano ~/.unison/default.prf
Когда конфигурационный файл откроется для редактирования, добавьте в него две строки:

Код: bash
auto=true
batch=true
Затем сохраните и закройте файл.
Теперь Unison не будет вас тревожить по мелочам. Но это ещё не всё.

Как создать задание для планировщика Cron
Я думаю, вы вряд ли хотели бы запускать синхронизацию вручную, потому
что можете где-то допустить ошибку или, например, не учесть изменение
структуры каталогов на серверах. Чтобы настроить автоматизацию, вам
нужно создать задание cron для server1.
Давайте создадим скрипт для запуска синхронизации:

Код: bash
sudo nano /usr/local/bin/unisonsync
В этот файл нужно добавить следующее:

Код: bash
#!/bin/bash/
unison /data1 ssh://192.168.1.19//data2
Далее нужно выдать скрипту права на исполнение:

Код: bash
sudo chmod ugo+x /usr/local/bin/unisonsync
Создайте задание для Cron с помощью команды:

Код: bash
crontab -e
После этого наберите:

Код: bash
*/5 * * * * /usr/local/bin/unisonsync &> /dev/null
Теперь синхронизация будет автоматически запускаться каждые 5 минут.

Я показал, что Unison позволяет легко синхронизировать каталоги на двух
серверах Linux. Можете проверить это сами, добавив файлы в
соответствующие тестовые каталоги /data1 и /data2 на обоих серверах. Убедившись, что синхронизация работает, вы можете использовать её в боевом режиме на продакшн-серверах.
#37
mysql (Mariadb) / От: Установка, изменение и сбр...
Последний ответ от George - Окт. 31, 2023, 10:28
Может так случиться, что вы забудете или потеряете свой root пароль MySQL, но не стоит отчаиваться – его можно сбросить и восстановить доступ. Что нам нужно знать так это то, что пароль хранится в таблице пользователей. Это означает, что нам нужно найти способ обойти аутентификацию MySQL, чтобы мы могли обновить запись пароля.

К счастью, это легко сделать, и это руководство проведет вас через процесс восстановления или сброса пароля root в версии MySQL 8.0.

Согласно документации по MySQL, существует два способа сброса корневого пароля MySQL и в этой статье мы рассмотрим оба.

 Как сбросить root пароль на MySQL
Сброс MySQL root пароля с использованием –init-file
Один из способов сброса пароля root - создать локальный файл, а затем запустить службу MySQL, используя параметр --init-file, как показано ниже:

# vim /home/user/init-file.txt
Важно убедиться, что файл доступен для чтения пользователю mysql. В этот файл вставьте следующее и измените «new_password» на пароль, который вы хотите использовать:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
Теперь убедитесь, что служба MySQL остановлена. Вы можете сделать следующее:

# systemctl stop mysqld.service     # для дистрибутивов использующих systemd
# /etc/init.d/mysqld stop           # для дистрибутивов использующих init
Далее запустите следующее:

# mysqld --user=mysql --init-file=/home/user/init-file.txt --console
Это запустит службу MySQL и во время процесса выполнит созданный вами файл инициализации, и, следовательно, пароль для пользователя root будет обновлен. Обязательно удалите файл после сброса пароля.

После этого обязательно остановите сервер и запустите его как обычно.

# systemctl stop mysqld.service        # для дистрибутивов использующих system
# systemctl restart mysqld.service     # для дистрибутивов использующих systemd
# /etc/init.d/mysqld stop              # для дистрибутивов использующих init
# /etc/init.d/mysqld restart          # для дистрибутивов использующих init
Теперь вы должны иметь возможность подключиться к серверу MySQL от имени пользователя root, используя новый пароль.

# mysql -u root -p
Сброс MySQL root пароля с использованием –skip-grant-tables
Второй вариант - запустить службу MySQL с параметром --skip-grant-tables. Это менее безопасно, так как пока служба запускается таким образом, все пользователи могут подключаться без пароля.

Если сервер запущен --skip-grant-tables, опция для --skip-network активируется автоматически, поэтому удаленные подключения не будут доступны.

Сначала убедитесь, что служба MySQL остановлена.

# systemctl stop mysqld.service     # для дистрибутивов использующих systemd
# /etc/init.d/mysqld stop           # для дистрибутивов использующих init
Затем запустите службу с помощью следующей опции.

# mysqld --skip-grant-tables --user=mysql &
Теперь вы можете подключиться к серверу MySQL, просто используя:

# mysql
Поскольку управление учетными записями отключается при запуске службы с параметром --skip-grant-tables, нам придется перезагрузить гранты. Таким образом, мы сможем изменить пароль позже:

# FLUSH PRIVILEGES;
Теперь вы можете выполнить следующий запрос, чтобы обновить пароль. Обязательно замените «new_password» реальным паролем, который вы хотите использовать.

# ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_passowrd';
Теперь остановите сервер MySQL и запустите его как обычно.

# systemctl stop mysqld.service        # для дистрибутивов использующих system
# systemctl restart mysqld.service     # для дистрибутивов использующих systemd
# /etc/init.d/mysqld stop              # для дистрибутивов использующих init
# /etc/init.d/mysqld restart          # для дистрибутивов использующих init
Теперь вы сможете подключиться с новым паролем:

# mysql -u root –p
#38
У нас нет основания сомневаться во встроенном механизме аутентификации 1С:Предприятия, во всяком случае в онлайн-сервисах дополнительной аутентификации не предусмотрено, но есть слабое место - пользователи. Во многих базах могут использоваться простые пароли или не использоваться вообще, часть таких паролей могут использоваться скриптами и средствами автоматизации, поэтому взять и установить сразу всем сложные пароли будет не так-то просто.

Ситуация усугубляется, если администрирование 1С выполняют другие сотрудники, они вполне могут, пойдя на поводу пользователей снова установить им слабые пароли, что сильно снижает безопасность собственного механизма аутентификации. Поэтому мы пойдем другим путем и установим дополнительную аутентификацию на уровне веб-сервера, тут уже точно без нас никто пароль не изменит. Основная его цель - оградить собственный механизм аутентификации 1С от доступа всех желающих, которым достаточно будет просто узнать ссылку.

Следует отметить, что 1С:Предприятите поддерживает только Basic-аутентификацию, которая считается небезопасной, так как передает учетные данные в открытом виде, однако в нашем случае это не имеет значения, так как канал защищен SSL-шифрованием.

Прежде всего создадим файл паролей. Можно использовать один пароль для всех публикаций, либо разные, а также комбинировать этот подход. Например, установим пароль для пользователя user1c:

Код: bash
htpasswd -c /etc/apache2/.htpasswd user1c

Ключ -с создает файл в случае его отсутствия и перезапишет его, если файл существует. Для создания последующих пользователей используйте команду:
Код: bash
htpasswd  /etc/apache2/.htpasswd glbuch

Затем в директории публикации базы, например, /var/www/infobase создадим файл .htaccess:

Код: bash
vi /var/www/infobase/.htaccess

И добавим в него следующие строки:

Код: bash
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

Первая строка включает Basic-аутентификацию, вторая задает наименование области безопасности, можете вписать туда все что угодно. Затем указывается путь к файлу паролей и политика аутентификации, valid-user обозначает что доступ получит любой аутентифицированный пользователь. Если нужно указать конкретные учетные записи, то последнюю строку нужно изменить следующим образом:

Код: bash
Require user user1c glbuch

Сохраняем файл, перезапуск веб-сервера не требуется, настройка начнет действовать сразу для всех новых подключений. Теперь, при попытке доступа к публикации вы увидите следующий запрос:

И только после того, как вы пройдете аутентификацию средствами веб-сервера вам будет предложено войти под своим именем в программу 1С:Предприятие:

Если вы используете для доступа к опубликованным на веб-сервере базам тонкий клиент, то увидите дополнительное окно аутентификации на веб-сервере, настроить запоминание пароля здесь нельзя и это может быть неудобно пользователям.
https://interface31.ru/tech_it/images/1cv83-web-access-ssl-003.png
Чтобы автоматизировать вход и избежать лишних запросов учетных данных можно указать в свойствах информационной базы дополнительные параметры запуска:

/WSN user1c /WSP Pa$$w0rd_1

Где ключ /WSN определяет пользователя веб-сервера, а ключ /WSP - пароль.

Если публикаций несколько, то файл .htaccess следует создать в директории публикации каждой информационной базы, при этом вы можете комбинировать политики доступа, куда-то разрешать доступ всем пользователям, а куда-то только некоторым. При необходимости настройки можно изменять налету, перезапуск веб-сервера не требуется.
#39
Публикация базы 1с на ВЭБ сервере

Я стараюсь не публиковать базы на вэб сервере, но вам продемонстрирую Процедуру. Если вы не установили pgAdmin, то вэб сервер Apache у вас не инсталлирован, исправим это:

Код: bash
apt install apache2

Создаем директорию в корне веб сервера, где будет храниться конфигурация публикуемой базы:

Код: bash
mkdir -p /var/www/Название_базы

Код: bash
chown -R www-data:www-data /var/www/Название_базы

Публикуем базу 1С:

Код: bash
/opt/1cv8/x86_64/8.3.22.1709/webinst -publish -apache24 -wsdir Название_базы -dir /var/www/Название_базы -connstr "Srvr=Имя_сервера;Ref=Название_базы;" -confpath /etc/apache2/apache2.conf

Перезапускаем веб сервер и добавляем в автозагрузку:

Код: bash
systemctl restart apache2

Код: bash
systemctl enable apache2

Открываем в браузере http://ip_адрес/Название_базы/ Вы должны попасть в свою опубликованную базу 1С. Подключаться к ней можно как через браузер, так и платформу. В платформе при добавлении базы надо указать, что она на веб севере и ввести путь к нему.
#40
Для ускорения работы рекомендуется держать БД на другом диске. (в идеале postgres надо на отдельном сервере)
В CentOS это можно сделать при установке, в ubuntu я поступил следующим образом:

Код: bash
mkdir /postgres

в эту папку монтируем диск (я lvm диски создаю, чтоб если что на лету увеличивать размер диска)

Код: bash
chown postgres:postgres /postgres

Код: bash
systemctl stop postgrespro-1c-15

Код: bash
vi /etc/default/postgrespro-1c-15

в нем меняем строчку
ЦитироватьPGDATA=/var/lib/pgpro/1c-15/data

на

Код: bash
PGDATA=/postgres

Копируем данные из старого расположения в новое:

Код: bash
cp -R /var/lib/pgpro/1c-15/data/* /postgres

Код: bash
chmod 750 /postgres

Код: bash
systemctl start postgrespro-1c-15
🡱 🡳

Отметьте интересные вам фрагменты текста и они станут доступны по уникальной ссылке в адресной строке браузера.