Новости:

SMF - Just Installed!

Главное меню

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

#21
В данном примере HTTPS-трафик клиентов не модифицируется (HAProxy вмешивается в транспортный уровень) и его терминация происходит непосредственно на Nginx.

haproxy.cfg

Извините, вам запрещён просмотр содержимого спойлеров.


nginx.conf

Извините, вам запрещён просмотр содержимого спойлеров.


Я этот вариант не пробовал, поскольку при таком варианте, как я понимаю, сертификат будет запрашиваться с хоста. А мне, при том, что у меня letsencrypt сертификаты обновляет сам haproxy это не удобно. Ведь на самом сервере они не обновятся, надо будет изобретать скрипт перезаписи сертификатов и перезапуска nginx))
#22
Довольно часто требуется балансировать нагрузку между несколькими веб-серверами. При этом, как правило, необходимо, чтобы веб-приложения получали реальные IP-адреса клиентов, а не IP балансировщика.

В случае балансировки и терминации HTTP(S)-трафика на HAProxy (Layer 7 [1]) данная задача легко решается добавлением заголовка "X-Real-IP" и его обработкой на Nginx при помощи модуля ngx_http_realip_module [2]. При балансировке TCP-трафика от HTTPS-клиентов и передаче его на веб-сервера напрямую без модификации или терминации (Layer 4 [3]) добавить данный заголовок невозможно, поэтому требуется воспользоваться возможностями, предоставляемыми Proxy Protocol [4, 5, 6].

Рассмотрим оба варианта (балансировка L7 и L4) на примере выдержек из конфигурационных файлов haproxy 1.5.9 и nginx 1.6.2

Балансировка на прикладном уровне (Layer 7): терминация HTTPS-трафика на HAProxy и передача по HTTPS на Nginx

В данном примере HTTPS-трафик от клиента терминируется на HAProxy, модифицируется и передается на Nginx так же по HTTPS.

Извините, вам запрещён просмотр содержимого спойлеров.




Извините, вам запрещён просмотр содержимого спойлеров.

#23
в принципе подходит для любого lvm. Но на centos 7 я столкнулся с тем, что resize2fs ошибку выдает..
Вот команда. Там файловая система xfs
Код: bash
xfs_growfs /dev/centos/root
#24
может потребоваться:
Код: bash
sudo -u www-data php8.2 occ upgrade

и выход из режима обслуживания
Код: bash
sudo -u www-data php8.2 occ  maintenance:mode --off
#25
Если нам нужно подключиться к серверу по защищенному каналу SSL/TLS, то используем для подключения команду openssl. Мы можем подключиться к портам 587 (STARTTLS) или 465 (SMTP over SSL).

а) Для подключения по порту 587:

Код: bash
openssl s_client -starttls smtp -connect smtp.yandex.ru:587

б) Для подключения по порту 465:

Код: bash
openssl s_client -connect smtp.yandex.ru:465

Далее проходим аутентификацию и можно делать отправку вышеописанными командами.
Аутентификация

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

Для этого вместо или после приветствия вводим:

Код: bash
ehlo

* EHLO — расширенное приветствие, которое позволит получить возможности почтового сервера.

В ответ мы получаем, примерно, следующее:

Цитировать250-relay.im-cloud.site Hello [192.168.0.15]
250-SIZE 10485760
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-X-ANONYMOUSTLS
250-AUTH LOGIN PLAINT
250-X-EXPS GSSAPI NTLM
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250-XEXCH50
250-XRDST
250 XSHADOW

* в списке мы можем увидеть разные методы аутентификации (перечислены после AUTH).
Получаем base64

Данные авторизации передаются в закодированном виде с использованием стандарта Base64.

Чтобы закодировать свои логин и пароль, можно воспользоваться одним из перечисленных способов ниже.

1. Bash:

Код: bash
echo -ne "текст" | base64

2. Powershell:

Код: powershell
[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("текст"))

3. Perl:

Код: bash
perl -MMIME::Base64 -e "print encode_base64('текст');"

4. Онлайн:

На веб-сайте base64.ru
LOGIN

При данном методе мы по очереди передаем закодированные логин и пароль.

После приветствия вводим:
Код: bash
AUTH LOGIN

В ответ получаем:

Цитировать334 VXNlcm5hbWU6

После этого отправляем логин в base64, например dmosk:

Код: bash
ZG1vc2s=

Получим ответ:

Цитировать334 UGFzc3dvcmQ6

И вводим пароль (password):

Код: bash
cGFzc3dvcmQ=

Если аутентификация прошла успешно, увидим:

Цитировать235 2.0.0 Authentication successful

Можно делать отправку.
PLAIN

Данный метод аутентификации отличается от вышеописанного тем, что логин с паролем передаются одной строкой. Base64 для них получаем следующей командой, например, в unix-shell:

Код: bash
echo -ne "\0username\0password" | base64

... или Powershell:

Код: powershell
[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("\0username\0password"))

* где username и password — логин и пароль для аутентификации; \0 — нулевой байт.

Авторизовываемся:

Код: bash
AUTH PLAIN

Видим приглашение на ввод аутентификационных данных:

Цитировать334 VXNlcm5hbWU6

Вводим нашу последовательность:

XDAwdXNlclxAZG9tYWluLnJ1XDAwcGFzc3dvcmQ=
#26
Настройки *nix (почта, web, система etc) / Обновление nextcloud
Последний ответ от George - Нояб. 24, 2023, 12:02
Обновите Nextcloud из командной строки
Метод командной строки более эффективен, и вы увидите меньше ошибок по сравнению с веб-приложением обновления. Если в вашем экземпляре Nextcloud много пользователей и файлов, вам следует использовать метод командной строки.

Перейдите в каталог установки NextCloud. (В зависимости от вашей настройки каталог установки Nextcloud может отличаться. Например, если вы настроили Nextcloud со стеком LAMP, это может быть каталог /var/www/nextcloud/. Если вы настроили Nextcloud со стеком LEMP каталогом данных может быть /usr/share/nginx/nextcloud/).

Код: bash
cd /var/www/nextcloud/
Затем запустите программу обновления на основе командной строки.

Код: bash
sudo -u www-data php8.2 updater/updater.phar --no-interaction
*Версия php может отличаться. Посмотрите версию командой:
Код: bash
php -v
www-data — это имя пользователя веб-сервера, которое может отличаться в вашей системе.
#27
Mail servers / 10. Отправка почты наружу
Последний ответ от George - Нояб. 14, 2023, 02:29
10. Отправка почты наружу

Для отправки почты на другие почтовые серверы необходимо правильно сконфигурировать сервер, чтобы письма не попадали в СПАМ. Чтобы это сделать, выполняем инструкции ниже.
Настройки DNS для сервера

Многие почтовые серверы делают запросы в систему доменных имен для проверки легитимности почтового сервера, отправляющего почту. При настройке MTA очень важно правильно добавить необходимые записи в DNS.

1. rDNS. Обратная зона используется для проверки соответствия имени сервера в приветствии с именем, которое возвращает NS сервер при запросе по PTR-записи.

И так, для создания записи в обратной зоне, необходимо написать письмо Интернет провайдеру, к сети которого подключен сервер или хостеру, если почтовый сервер настроен на VPS. IP-адрес нашего сервера должен вести на имя, которым приветствуется наш postfix — можно посмотреть командой:

Код: bash
postconf -n smtpd_banner

Если мы получим пустой ответ, то вводим:

Код: bash
postconf -n myhostname

Если и в этот вариант не вернет ответ, вводим:

Цитироватьhostname

2. А-запись. Также необходимо, чтобы имя сервера, которым представляется почтовый сервер разрешалось в IP-адрес.

Для этого заходим в консоль управления зоной нашего домена и создаем запись типа А для сопоставления имени сервера с IP-адресом, на котором слушает запросы данный сервер.
Настройки DNS для домена

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

    SPF.
    DMARC.
    DKIM


Для проверки корректности настройки сервера, воспользуемся ресурсами:

    https://www.mail-tester.com
    https://spamtest.smtp.bz

11. Настройка DKIM

Подпись писем не является обязательной, но помогает не попадать в СПАМ. DKIM настраивается для каждого домена, а также должна создаваться специальная запись в DNS. Рассмотрим создание и настройку DKIM в amavisd.

Создаем каталог для хранения ключей:

Код: bash
mkdir -p /var/lib/dkim

Для нашего удобства создаем переменную с доменом, для которого будем создавать DKIM:

Код: bash
DOMAIN=$(hostname -d)

* где hostname -d — команда, которая вернет нам домен из имени нашего сервера. При необходимости создать dkim для другого домена, пропишем его вручную, а не с использованием команды.

Посмотреть значение полученной переменной можно командой:

echo $DOMAIN

Генерируем последовательность для нашего домена:

amavisd-new genrsa /var/lib/dkim/${DOMAIN}.pem 1024

Задаем права на созданный файл:

chown amavis:amavis /var/lib/dkim/*.pem


chmod 0400 /var/lib/dkim/*.pem

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

vi /etc/amavis/conf.d/20-debian_defaults

Редактируем запись:

#$inet_socket_port = 10024;

Код: bash
$inet_socket_port = [10024,10026];

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

А также добавим:

Код: bash
$forward_method = 'smtp:[127.0.0.1]:10025';
$notify_method = $forward_method;
$interface_policy{'10026'} = 'ORIGINATING';
$policy_bank{'ORIGINATING'} = {
    originating => 1,
    smtpd_discard_ehlo_keywords => ['8BITMIME'],
    os_fingerprint_method => undef,
    bypass_banned_checks_maps => [1],
    bypass_header_checks_maps => [1],
    bypass_banned_checks_maps => [1],
    virus_admin_maps => ["virusalert\@$mydomain"],
};
Открываем файл:

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

Добавляем записи:
Код: bash
$enable_dkim_verification = 1;
$enable_dkim_signing = 1;

dkim_key('im-cloud.site', "dkim", "/var/lib/dkim/im-cloud.site.pem");

@dkim_signature_options_bysender_maps = ( {
   "im-cloud.site" => { d => "im-cloud.site", a => 'rsa-sha256', ttl => 10*24*3600 },
});

* где im-cloud.site — домен, для которого мы настраиваем dkim; /var/lib/dkim/im-cloud.site.pem — путь до сгенерированного файла с последовательностью.

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

Код: bash
systemctl restart amavis

Посмотреть DKIM последовательность для нового домена можно командой:

Код: bash
amavisd-new showkeys

Мы должны увидеть что-то на подобие:

; key#1 1024 bits, i=dkim, d=im-cloud.site, /var/lib/dkim/im-cloud.site.pem
dkim._domainkey.im-cloud.site.        3600 TXT (
  "v=DKIM1; p="
  "MIGfMA0SDFqGSIb3DQEBAQUAA4GNADCBiQKBgQC44iOK+99mYBxsnIl1Co8n/Oeg"
  "4+x90sxqWzoGW42d/GCP4wiYqVqncc37a2S5Berv0OdoCGcmkDkKWh4CHhFD4blk"
  "x6eMYXsp1unAdo2mk/OVK7M2ApraIkh1jVbGBZRgNJERdF+uPOwtAbXEeRLG/Vz5"
  "zyQuIpwY2Nx3IgEMgwIDAQAB")

Теперь нам нужно на основе данного вывода создать в DNS запись TXT. В данном примере, нужно создать запись c именем dkim._domainkey в зоне im-cloud.site и значением "v=DKIM1; p=MIGfMA0SD...wIDAQAB".

Проверить корректность настройки DKIM можно командой:
Код: bash
amavisd-new testkeys

Переходим к настройке Postfix. Мы должны добавить отправку всех исходящих писем на проверку в amavis на порт 10026 и принимать обратно письма на порт 10027.

Открываем файл:

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

Отредактируем submission и smtps, добавив content_filter:

Код: bash
smtp      inet  n       -       y       -       -       smtpd
  -o content_filter=scan:[127.0.0.1]:10026
  ...

Код: bash
submission   inet  n  -  n  -  -  smtpd
  -o content_filter=scan:[127.0.0.1]:10026
  ...

Код: bash
smtps   inet  n  -  n  -  -  smtpd
  -o content_filter=scan:[127.0.0.1]:10026
  ...

И добавим:

Код: bash
127.0.0.1:10027   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

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

Код: bash
systemctl restart postfix

Настраиваем Roundcube:
Код: bash
vi /var/www/html/webmail/config/config.inc.php

Находим строки:

$config['smtp_server'] = '';
...
$config['smtp_port'] = 25;


... и меняем ее на:

Код: bash
$config['smtp_server'] = 'tls://localhost';
...
$config['smtp_port'] = 587;

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

Пробуем отправить письмо — в заголовках мы должны увидеть:

dkim=pass header.d=im-cloud.site
#28
Mail servers / 3. Защита от СПАМа «от себя к ...
Последний ответ от George - Нояб. 14, 2023, 02:18
Часто можно наблюдать ситуацию, когда приходит спам от своих же ящиков (или ящиков своего домена, хотя таких почтовых адресов у нас не существует).

Это происходит из-за возможности в поле FROM подставить любой адрес. А адрес от своей организации может внушить доверие, что побудит пользователя откликнуться на нежелательное сообщение.

Для решения проблемы в Postfix нужно добавить простое правило:
Код: bash
vi /etc/postfix/main.cf

smtpd_sender_restrictions =
        ...
Код: bash
        check_sender_access hash:/etc/postfix/sender_access
        permit

Создадим сам файл:

Код: bash
vi /etc/postfix/sender_access

Код: bash
im-cloud.site REJECT Relay from im-cloud.site are denied

* в данном примере мы будет отклонять все попытки отправить почту с чужих серверов от нашего домена im-cloud.site.

Создаем карту:

Код: bash
postmap /etc/postfix/sender_access

Перезапускаем постфикс:

Код: bash
systemctl restart postfix
#29
Mail servers / 2. Проверка SPF
Последний ответ от George - Нояб. 14, 2023, 01:15
2. Проверка SPF

Проверка SPF позволит отбрасывать все попытки отправить сообщения от доменов, которые не прошли валидацию по SPF.

Устанавилваем пакет:

Код: bash
apt install postfix-policyd-spf-python

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

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

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

Код: bash
policy-spf_time_limit = 3600s
...
Код: bash
smtpd_recipient_restrictions =
        ...
        check_policy_service unix:private/policy-spf
        permit

* где:

    policy-spf_time_limit — устанавливает максимальное количество времени, которое почтовый сервер будет затрачивать на проверку SPF-записи.
    check_policy_service — выполнение дополнительной проверки при приеме почты. В данном примере, политика проверки выполняется в файле private/policy-spf.

Открываем файл:

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

Добавим строки:
Код: bash
policy-spf   unix    -    n    n    -    -    spawn
  user=nobody argv=/usr/bin/policyd-spf

Перезапускаем постфикс:

Код: bash
systemctl restart postfix

По умолчанию, политика блокирует письма, только если владелец домена указал жесткую блокировку (использовал -all, вместо ~all). Если мы хотим указать более жесткую политику, открываем файл:

Код: bash
vi /etc/postfix-policyd-spf-python/policyd-spf.conf

Задаем значения для опций HELO_reject и Mail_From_reject:

...
Код: bash
HELO_reject = Fail
Mail_From_reject = Softfail

* в данном примере мы будем блокировать письма:

    HELO_reject — для приветствий, если администратор домена указал -all.
    Mail_From_reject — для поля From, если администратор домена указал ~all или -all. Это более жесткая политика.

Подробнее информацию об опциях конфигурационного файла policyd-spf.conf можно узнать командой:

Код: bash
man policyd-spf.conf
#30
Mail servers / Работа с очередью сообщений в ...
Последний ответ от George - Нояб. 14, 2023, 01:10
Посмотреть очередь

Код: bash
mailq

или:

Код: bash
postqueue -p
Принудительно запустить отправку из очереди

Код: bash
mailq -q

или:
Код: bash
postqueue -f
Очистить очередь

1. Удалить все сообщения:

Код: bash
postsuper -d ALL

2. Удалить определенное письмо из очереди:

postsuper -d <идентификатор письма>

* идентификатор письма можно увидеть командой mailq.

3. Очистить очередь по отправителю:

Код: bash
postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } /spammer@email\.com/ { print $1 }' | tr -d '*!' | postsuper -d -

* в данном примере мы удалим все письма от spammer@email.com.
Количество писем в очереди

Команда mailq в конце выдает общее количество сообщений в очереди, например:

-- 23 Kbytes in 18 Requests.

* в данном примере в очереди находится 18 сообщений общим объемом 23 Кбайт.

Также, очередь можно посмотреть командами:

Код: bash
find /var/spool/postfix/deferred -type f | wc -l

Код: bash
find /var/spool/postfix/active -type f | wc -l

Код: bash
find /var/spool/postfix/incoming -type f | wc -l

Код: bash
find /var/spool/postfix/defer -type f | wc -l

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

Код: bash
postsuper -r ALL

Если не помогло, поочередно:

Код: bash
postfix stop

Код: bash
postsuper -r ALL

Код: bash
postfix start
Настройка очереди

Задать периодичность повторной отправки сообщений:

Код: bash
postconf -e "queue_run_delay = 5m"

Задать время, на которое будет отложена отправка сообщений, которые не были отправлены по причине временных неисправностей (например, принимающий сервер не отвечает или просит повторить запрос позже):

Код: bash
postconf -e "minimal_backoff_time = 10m"

Задать максимальное время для отправки сообщений, которые не были отправлены по причине временных неисправностей:

Код: bash
postconf -e "maximal_backoff_time = 15m"

Выставить время жизни для сообщения в очереди:

Код: bash
postconf -e "maximal_queue_lifetime = 1d"

После внесения изменений необходимо перезапустить postfix:

Код: bash
service postfix restart || systemctl restart postfix
Информация о конкретном сообщении

postcat -q <идентификатор>


* показывает параметры сообщения и причину, по которой письмо еще не отправлено.
🡱 🡳

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