Новости:

SMF - Just Installed!

Главное меню

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

#61
Настройки *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 — это имя пользователя веб-сервера, которое может отличаться в вашей системе.
#62
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
#63
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
#64
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
#65
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 <идентификатор>


* показывает параметры сообщения и причину, по которой письмо еще не отправлено.
#66
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
#67
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
#68
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/. Вводим в качестве логина адрес почты созданного пользователя и его пароль.
#69
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) необходим правильный сертификат (для нашего домена и выпущенный доверенным центром сертификации).
#70
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е
🡱 🡳

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