Postfix+dovecot+mysql в freebsd

Введение

Зомби-блокировщик Postscreen — это первый уровень защиты. Он находится перед smtpd и, тестируя и анализируя поведение SMTP-клиента, решает, кого допустить к прямому соединению, а кого — нет

ВАЖНО! Postscreen не может сосуществовать на одном порту с MUA! Необходимо перенести MUA на другой порт (например 587) или другой интерфейс. Postscreen доступен в Postfix с версии 2.8 и выше, а некоторые функции (например «cache sharing») — с версии 2.9

Зомби-спам-боты создают самую серьезную нагрузку на почтовые сервера. Особенно усердны боты, которые не принимают отказ, а продолжают бесконечные подключения, вынуждая почтовый сервер каждый раз отвлекать свои ресурсы на постоянные соединения с ними. Для того чтобы разгрузить smtpd, используется postscreen. Postscreen проводит ряд тестов SMTP-клиента, и если он выявляет признаки «зомби», то удерживает его на эмуляции SMTP-сессии, не давая подключиться к основному демону — smtpd. При этом Postscreen поддерживает временный белый список для клиентов, к которым эти тесты не применяются. Postscreen никогда не проверяет контент, поскольку он не является достаточно надежным источником данных для анализа. Postscreen ищет в первую очередь нарушения, которые допускает зомби-клиент в стандартах SMTP-протокола.

Postscren проводит ряд тестов в том порядке, в котором они описаны ниже.

Postfix lists versus tables

Most Postfix lookup tables are used to look up information.
Examples are address rewriting (the lookup string is the old address,
and the result is the new address) or access control (the lookup
string is the client, sender or recipient, and the result is an
action such as «reject»).

With some tables, however, Postfix needs to know only if the
lookup key exists. Any non-empty lookup result value may be used
here: the lookup result is not used. Examples
are the that determine what local recipients
Postfix accepts in mail from the network, the parameter
that specifies what domains Postfix delivers locally, or the
parameter that specifies the IP addresses of trusted
clients or client networks. Technically, these are lists, not
tables. Despite the difference, Postfix lists are described here
because they use the same underlying infrastructure as Postfix
lookup tables.

Tests To MTA’s To See Max Size And Log Events

This can be useful to test if your server is configured right or if it’s another server that is rejecting messages because of max. size. Let’s say you get a bounce message, something like:

 tried to deliver your message, but it was rejected by the server for the recipient
domain domainA.com by emailgateway.domainA.com .

The error that the other server returned was:
552 5.3.4 Error: message file too big from 
$ telnet zcsmta.example.com 25
Trying zcsmta.example.com...
Connected to zcsmta.example.com
Escape character is '^]'.
220  service is ready.
helo host.example.com
250 host.example.com
ehlo host.example.com
250-example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-XXXXXXXA
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM:<[email protected]> SIZE=99999999
552 5.3.4 Message size exceeds fixed limit
MAIL FROM:<[email protected]> SIZE=10240000
250 2.1.0 Ok
quit
221 2.0.0 Bye

The test above where I send the message I would be sending exceeded the ‘250-SIZE 10240000″ will also be logged on the Zimbra mta’s /var/log/zimbra.log :

Apr 24 09:05:06 zcsmta postfix/smtpd: NOQUEUE: reject: MAIL from 
 host.example.com: 552 5.3.4 Message size exceeds fixed limit; 
 proto=ESMTP helo=<example.com>

If you attempt to send from an external client a message that exceeds the limits on your Zimbra server, you’ll see the following log event in /var/log/zimbra.log :

Apr 24 08:33:26 zcsmta postfix/smtpd: warning: 7A735345A: 
 queue file size limit exceeded

The 71735345A is the postfix queue id of the message in question.

In summary, a good starting point to see log events around exceeding message size is:

# grep postfix /var/log/zimbra.log | egrep 'reject|exceed|limit|warn'
Apr 24 07:46:43 zcsmta postfix/smtpd: NOQUEUE: reject: MAIL from 
  host.example.com: 552 5.3.4 Message size exceeds fixed 
  limit; proto=ESMTP helo=<host.example.com>
Apr 24 07:47:19 zcsmta postfix/smtpd: NOQUEUE: reject: MAIL from 
  host.example.com: 552 5.3.4 Message size exceeds fixed 
  limit; proto=ESMTP helo=<host.example.com>
Apr 24 08:33:26 zcsmta postfix/smtpd: warning: 7A735345A: queue 
  file size limit exceeded
Apr 24 09:05:06 zcsmta postfix/smtpd: NOQUEUE: reject: MAIL from 
  host.example.com: 552 5.3.4 Message size exceeds fixed 
  limit; proto=ESMTP helo=<host.example.com>

References:

  • To also see this max message size issues via reports you can run, see:

Команды

Проверка синтаксиса postfix -c ПУТЬ_К_ФАЙЛУ_НАСТРОЕК_main.cf check
Состояние очереди postqueue -c ПУТЬ_К_ФАЙЛУ_НАСТРОЕК_main.cf -p
Обработка очереди немедленно postqueue -c ПУТЬ_К_ФАЙЛУ_НАСТРОЕК_main.cf -f
Очистка очереди postsuper -c ПУТЬ_К_ФАЙЛУ_НАСТРОЕК_main.cf -d ALL
Тест адресации postmap -q [email protected] ldap:/etc/postfix/ldap-users.cf

Работа с несколькими экземплярами

При решении некоторых задач можно воспользоваться возможностью работы с несколькими экземплярами (instance) сервера.

Для работы нужно добавить такие строки:/etc/postfix/main.cf

multi_instance_enable = yes
multi_instance_wrapper = ${command_directory}/postmulti -p -g ИМЯ_ГРУППЫ reload
multi_instance_directories = /etc/postfix-mx /etc/postfix-1 /etc/postfix-n

1
2
3

multi_instance_enable=yes

multi_instance_wrapper=${command_directory}postmulti-p-gИМЯ_ГРУППЫreload

multi_instance_directories=etcpostfix-mxetcpostfix-1etcpostfix-n

в переменной 
multi_instance_directories указывается экземпляры программы, в примере использованы следующие:

  • etcpostfix-mx
  • etcpostfix-1
  • etcpostfix-n

Для того, чтобы при запуске/останове и перезапуске Postfix и по команде

service postfix …

1 service postfix…

нужно параметре 
multi_instance_wrapper нужно указать имя группы (
ИМЯ_ГРУППЫ) в куда входя нужные экземпляров программы.

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

postmulti -e init

1 postmulti-einit

Для управления служит программа 
postmulti.

Примеры:

Создание postmulti -I ИМЯ_ЭКЗЕМПЛЯРА -G ИМЯ_ГРУППЫ -e create
Активация postmulti -i ИМЯ_ЭКЗЕМПЛЯРА -e enable
Управление экземпляром postmulti -i ИМЯ_ЭКЗЕМПЛЯРА -p КОМАНДА

Безопасность

mynetworks список подсетей с которых разрешена отправка через этот сервер
disable_vrfy_command=yes Клиент, подключившийся к серверу, может командой 
vrfy [email protected] определить, существует ли заданный адрес в системе
show_user_unknown_table_name=no При попытке клиента отправить письмо несуществующему пользователю по умолчанию сервер выдаст 
550(reject) с сообщением 
user unknown inlocal recipient table (или другой таблице). Отключаем, пусть сервер сообщает 
user unknown
smtpd_helo_required=yes Требуем от клиента приветствия (HELO/EHLO). Все, кто подключается, должны представляться
smtpd_helo_restrictions= permit_mynetworks, permit_sasl_authenticated, reject_invalid_hostname, reject_non_fqdn_hostname, reject_invalid_helo_hostname, reject_unknown_helo_hostname Ограничения для этапа 
HELOEHLO. Применяются к имени хоста, его IP-адресу и приветствию 
HELOEHLO:Разрешаем доверенные сетиРазрешаем тем, кто прошёл аутентификациюОтбрасываем неправильное (несуществующее) имя хостаОтбрасываем не полностью определённое доменное имя хостаОтбрасываем, если хост по HELO/EHLO не имеет А или МХ записи
smtpd_sender_restrictions= reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unlisted_sender, permit_mynetworks, permit_sasl_authenticated Ограничения для этапа MAIL FROM. Применяется ко всему предыдущему + имя отправителя:Отбрасываем не полностью определённое имя отправителяОтбрасываем отправителя с несуществующего доменаОтбрасываем несуществующих отправителейПроверяем отправителя. Если с нашего домена, то проверим, находится ли он в доверенной сети или прошёл аутентификациюРазрешаем отправлять с доверенных сетейРазрешаем отправлять прошедшим аутентификацию
smtpd_recipient_restrictions= reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unlisted_recipient, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination reject_invalid_hostname Ограничения для этапа RCPT TO. Применяется к предыдущему + имя получателя:reject, если получатель отсутствует в списке нашего домена или списке пересылки. Чтобы сервер не стал открытым 
relay
smtpd_data_restrictions= reject_unauth_pipelining, reject_multi_recipient_bounce Ограничения для этапа DATA:Отвергаем запрос, когда клиент посылает команды SMTP раньше времениreject клиента с пустым именем отправителя, который отправляет сразу нескольким получателям
smtpd_etrn_restrictions= permit_mynetworks, permit_sasl_authenticated, reject Ограничиваем клиентов, которые могут запрашивать очистку очереди сообщений

Explanation of /etc/postfix/main.cf

Only the non-debconf lines are explained. For much more, run man 5 postconf or visit http://www.postfix.com/documentation.html.

smtp_tls_loglevel=1

Basic logging of connections to smtp.gmail.com.

smtp_tls_security_level=encrypt

Require an encrypted TLS connection to smtp.gmail.com. It would be preferable to use the verify level.

smtp_sasl_auth_enable=yes

Enable SMTP authentication.

smtp_sasl_password_maps=hash:/etc/postfix/sasl/passwd

Where the SMTP authentication data is to be found.

smtp_sasl_security_options = noanonymous

This one is a bit obscure: by specifying noanonymous, one allows plaintext passwords to be sent (I think noplaintext is the next level «up» from noanonymous). Gmail’s SMTP server apparently accepts plaintext authentication only.

smtp_generic_maps=hash:/etc/postfix/generic

Where the generic mapping data is to be found.

relayhost=:587

Address and port number for SMTP connections. Putting the hostname in square brackets means it is interpreted as a hostname, rather than a mail name (as I understand it, Postfix uses «normal» DNS records rather than MX records when square brackets are used).

How to fix Exchange error: 452 4.3.1 Insufficient system resources?

The 452 4.3.1 Insufficient system resources happen mainly when the server runs out of disk space or free memory. The solution to fix this error would be to:

  • Increase the amount of free space on the Microsoft Exchange server drive
  • Reduce the amount of memory being used by all processes

As we discussed earlier when the disk space threshold set for the volume used by the Exchange exceeds, it can trigger this error. However, the effects of this error vary depending on the threshold set.

The XML file, EdgeTransport.exe.config in the location \Exchange Server\Bin\ has many configuration options for transport servers in it.

To get Exchange transport to resume message submissions, we can adjust any of the settings below from the EdgeTransport.exe.config file.

  • Disable BackPressure: Although Microsoft does not recommend it, it does provide a way to Disable Back Pressure
  • Tweak BackPressure thresholds: Adjust the BackPressure parameters if it does not go with your resource usage or server configurations.
  • Move the queue database to another volume: Move the queue database to another volume with ample free space.

Move the queue database to another volume

To move the queue database to another volume with ample free space, follow the steps below:

  1. Add the following key in the <AppSettings> section in EdgeTransport.exe.config. <add key=“QueueDatabasePath” value=”D:\Queue\QueueDB” />
  2.  Save the file and restart the Microsoft Exchange Transport service from the Services console or by using the Restart-Service cmdlet (Restart-Service MSExchangeTransport).

Alternatively, we could fix this issue by bringing the disk usage below the threshold limits. Moving mailboxes, clearing logs from the disk, clearing trash, or deleting non-useful files from the drive can help with this.

Быстрые тесты

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

  • — Постоянные черные/белые списки
  • — Временный белый список
  • — MX-политика для тестов

Постоянные черные/белые списки

Параметр postscreen_access_list (значение по умолчанию = permit_mynetworks) указывает список постоянно разрешенных IP клиентов. Обычно в нем сначала указывают разрешение для допустимых сетей, а после — CIDR-таблицу белых/черных списков.

Формат CIDR интересен тем, что не требует никаких манипуляций или перечитывания, после добавления строк.

Пример

postscreen_access_list = permit_mynetworks,
    cidr:/etc/postfix/postscreen_access.cidr

Соответственно

# Rules are evaluated in the order as specified.
# Blacklist 192.168.* except 192.168.0.1.
192.168.0.1          permit
192.168.0.0/16       reject

Очередность строк в CIDR-файле важна при обработке, т.к. поиск идет до первого совпадения.

После того, как адрес SMTP-клиента совпадет со строкой для которой указано значение «permit», произойдет логгирование адреса клиента и порта: .

События белого списка не контролируются в настройках — происходит немедленная передача клиентского соединения процессу Postfix SMTP (smtpd).

После того, как адрес SMTP-клиента совпадет со строкой для которой указано значение «reject», произойдет логгирование адреса клиента и порта: .

Параметр postscreen_blacklist_action указывает следующее событие. См. .

Временный белый список

Postscreen вносит IP-адрес SMTP-клиента, прошедшего все тесты, во временный белый список. Параметр postscreen_cache_map указывает его расположение. Временный белый список не используется для клиентских адресов присутствующих в постоянном белом списке.

Обычно это . По умолчанию $data_directory = /var/lib/postfix

ПРИМЕЧАНИЕ: Для того, чтобы использовать общий кэш для нескольких Postscreen экземпляров под мастер-демоном, надо использовать:

, отключив очистку кэша (), во всех Postscreen экземплярах, за исключением одного, ответственного за эту очистку.

Общий кэш доступен в Postfix версии 2.9 и выше; ранее proxymap не поддерживал очистку кэша. В качестве альтернативы можно использовать для общего кэша memcache_table.

Когда адрес SMTP-клиента появляется во временном белом списке, происходит логгирование адреса клиента и порта: . Это событие не контролируется в настройках, — происходит немедленная передача клиентского соединения процессу Postfix SMTP (smtpd). Клиент избавляется от дальнейших тестов до тех пор, пока его время пребывания во временном белом списке не истечет, что контролируется параметром postscreen_*_ttl parameters и без упоминаний продлевается когда допустимо.

MX-политика для тестов

Когда удаленный SMTP-клиент не найден в постоянном списке доступа или во временном белом списке, Postscreen проводит ряд тестов в отношение белого списка перед добавлением во временный список и предоставлением доступа к Postfix SMTP.

Когда Postscreen настроен для мониторинга всех основных и резервных MX, он может отказать клиентам белого списка, которые подключаются только к резервному MX (старый трюк спамеров — использовать резервный MX с более слабой анти-спам политикой) .

ПРИМЕЧАНИЕ: Следующие решения предназначены для малых сайтов. Большие сайты должны иметь общий кэш у основных и резервных MTA, чтобы использовать единую точку отказа.

  • Во-первых, нужно настроить хост для прослушивания основного и резервного адреса MX. Настройте соответствующим образом сетевые интерфейсы локальной операционной системы. Во-вторых, нужно настроить Postfix на прослушивание нового IP-адреса (этот шаг необходим, после настройки inet_interfaces в «main.cf»).
  • Затем настройте Postscreen, на отказ в обслуживании временного белого списка для резервных MX, например так:
postscreen_whitelist_interfaces = !IP.IP.IP.IP static:all

Расшифровка: разрешить клиентам проверяться во временном белом списке для всех серверов, за исключением , который является резервным MX.

Когда клиент, не присутствующий в белом списке коннектится к резервному MX, происходит логгирование адреса клиента и порта:

CONNECT from :port to :25

WHITELIST VETO :port

Расшифровка: клиент :port подключался к резервному MX , до того как был проверен через белый список. Клиент не будет внесен во временный белый список, даже если он пройдет все последующие тесты{этот перевод требует перепроверки}.

Potential Postfix problems

Cannot find password

If you get an error message like this:

<[email protected]>: delivery via smtp.gmail.com:587:
    host smtp.gmail.com said: 530 5.5.1 Authentication Required
    c24sm1773006ika (in reply to MAIL FROM command)

then Postfix cannot figure out what password to send gmail; make sure that the smtp_sasl_password_maps entry in /etc/postfix/main.cf is correct, that /etc/postfix/sasl/passwd is correct, and that you’ve created /etc/postfix/sasl/passwd.db.

No mechanism available

If you get an error message like this:

   SASL authentication failed; cannot authenticate to server
   smtp.gmail.com: no mechanism available

you have probably forgotten the smtp_sasl_security_options line in /etc/postfix/main.cf.

Configuring Fetchmail

The setup presented here configures the system-wide fetchmail service, which is by default always running; for this use /etc/fetchmailrc is the configuration file. If you want to run fetchmail as your normal user you should use ~/.fetchmailrc; that case is not further discussed here.

Unlike the Postfix setup above, the fetchmail configuration presented here will verify the Gmail POP3 server’s certificate.

Service more SMTP clients at the same time

This section and the ones that follow discuss permanent measures
against mail server overload.

One measure to avoid the «all server processes busy» condition
is to service more SMTP clients simultaneously. For this you need
to increase the number of Postfix SMTP server processes. This will
improve the
responsiveness for remote SMTP clients
, as long as the server machine
has enough hardware and software resources to run the additional
processes, and as long as the file system can keep up with the
additional load.

  • You increase the number of SMTP server processes either
    by increasing the in main.cf (line 3 below),
    or by increasing the SMTP server’s «maxproc» field in master.cf
    (line 10 below). Either way, you need to issue a «postfix reload»
    command to make the change effective.

  • Process limits above 1000 require Postfix version 2.4 or
    later, and an operating system that supports kernel-based event
    filters (BSD kqueue(2), Linux epoll(4), or Solaris /dev/poll).

  • More processes use more memory. You can reduce the Postfix
    memory footprint by using cdb:
    lookup tables instead of Berkeley DB’s : or : tables.

     1 /etc/postfix/main.cf:
     2     # Raise the global process limit, 100 since Postfix 2.0.
     3      = 200
     4
     5 /etc/postfix/master.cf:
     6     # =============================================================
     7     # service type  private unpriv  chroot  wakeup  maxproc command
     8     # =============================================================
     9     # Raise the SMTP service process limit only.
    10     smtp      inet  n       -       n       -       200     smtpd
    
  • NOTE: older versions of the SMTPD_POLICY_README document
    contain a mistake: they configure a fixed number of policy daemon
    processes. When you raise the SMTP server’s «maxproc» field in
    master.cf, SMTP server processes will report problems when connecting
    to policy server processes, because there aren’t enough of them.
    Examples of errors are «connection refused» or «operation timed
    out».

    To fix, edit master.cf and specify a zero «maxproc» field
    in all policy server entries; see line 6 in the example below.
    Issue a «postfix reload» command to make the change effective.

    1 /etc/postfix/master.cf:
    2     # =============================================================
    3     # service type  private unpriv  chroot  wakeup  maxproc command
    4     # =============================================================
    5     # Disable the policy service process limit.
    6     policy    unix  -       n       n       -       0       spawn
    7         user=nobody argv=/some/where/policy-server
    

Пример

Пример для вставки в файл 
main.cf

disable_vrfy_command = yes
show_user_unknown_table_name = no
smtpd_helo_required = yes
 
smtpd_helo_restrictions=
check_helo_access hash:/etc/postfix/helo_restrictions
permit_mynetworks,
permit_sasl_authenticated,
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_invalid_helo_hostname,
reject_unknown_helo_hostname
 
smtpd_sender_restrictions=
reject_non_fqdn_sender,
reject_unknown_sender_domain,
reject_unlisted_sender,
permit_mynetworks,
permit_sasl_authenticated
 
smtpd_recipient_restrictions=
check_sender_access hash:/etc/postfix/sender_access
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_unlisted_recipient,
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
reject_invalid_hostname
 
smtpd_data_restrictions=
reject_unauth_pipelining,
reject_multi_recipient_bounce
 
smtpd_etrn_restrictions=
permit_mynetworks,
permit_sasl_authenticated,
reject
 
message_size_limit = 51200000

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

disable_vrfy_command=yes

show_user_unknown_table_name=no

smtpd_helo_required=yes

smtpd_helo_restrictions=

check_helo_access hashetcpostfixhelo_restrictions

permit_mynetworks,

permit_sasl_authenticated,

reject_invalid_hostname,

reject_non_fqdn_hostname,

reject_invalid_helo_hostname,

reject_unknown_helo_hostname
 

smtpd_sender_restrictions=

reject_non_fqdn_sender,

reject_unknown_sender_domain,

reject_unlisted_sender,

permit_mynetworks,

permit_sasl_authenticated
 

smtpd_recipient_restrictions=

check_sender_access hashetcpostfixsender_access

reject_non_fqdn_recipient,

reject_unknown_recipient_domain,

reject_unlisted_recipient,

permit_mynetworks,

permit_sasl_authenticated,

reject_unauth_destination

reject_invalid_hostname
 

smtpd_data_restrictions=

reject_unauth_pipelining,

reject_multi_recipient_bounce
 

smtpd_etrn_restrictions=

permit_mynetworks,

permit_sasl_authenticated,

reject

message_size_limit=51200000

Таблицы:/etc/postfix/helo_restrictions

80.84.114.82 OK
mail.aqmh.ru OK
aqmh.ru OK
aqmhdc.aqmh.com OK
mailpn.ru REJECT
stmails.ru REJECT
5.63.152.144 REJECT

1
2
3
4
5
6
7

80.84.114.82OK

mail.aqmh.ru    OK

aqmh.ru OK

aqmhdc.aqmh.com OK

mailpn.ru       REJECT

stmails.ru      REJECT

5.63.152.144REJECT

/etc/postfix/sender_access

80.84.114.82 OK
mail.aqmh.ru OK
aqmh.ru OK
aqmhdc.aqmh.com OK
mailpn.ru REJECT
stmails.ru REJECT
5.63.152.144 REJECT
@mailpn.ru REJECT

1
2
3
4
5
6
7
8

80.84.114.82OK

mail.aqmh.ru    OK

aqmh.ru OK

aqmhdc.aqmh.com OK

mailpn.ru       REJECT

stmails.ru      REJECT

5.63.152.144REJECT

@mailpn.ru      REJECT

Скрипт для компиляции таблиц:/etc/postfix/!update_db.sh

<em>#!/bin/bash</em>
 
postmap helo_restrictions sender_access transport

1
2
3

<em>#!/bin/bash</em>

postmap helo_restrictions sender_access transport

Когда все тесты пройдены успешно

Когда новый SMTP-клиент успешно проходит все тесты (т.е. он не внесен в какой-либо белый список), Postscreen логгирует это так: , где :port — IP-адрес клиента и порт. Затем Postscreen создает запись во временном белом списке, избавляя IP-адрес от дальнейших тестирований, на время пока время допустимого присутствия этой записи в белом списке не истечет, что регулируется параметрами postscreen_*_ttl parameters.

Если глубокое тестирование протокола не задействовано, Posctscreen немедленно передает соединение Postfix SMTP. Клиент не будет ощущать присутствие Postscreen (за исключением задержки, указанной в postscreen_greet_wait).

Если глубокое тестирование протокола включено, Postscreen не отдаст соединение для прямого коннекта с Postfix SMTP в середине своей сессии (т.е. здесь может быть либо «мягкий отказ», либо «полный отказ», либо пропуск теста по причине присутствия клиента в постоянном/временном белом списке). Вместо этого Postscreen задерживает доставку почты, выдавая предупреждение с 4XX статусом, логгирует информацию «helo»/»sender»/»recipient», и ожидает отключения клиента. В следующем подключении клиент будет допущен к прямому соединению с Postfix SMTP. Postscreen компенсирует последствия такого неудобного поведения длительным сроком допуска для клиентов прошедших глубокое тестирование. Это регулируется параметром (по умолчанию — 7 дней){информация требует проверки и уточнения}.

/etc/postfix/main.cf

When you install Postfix you will be prompted to make configurative choices. You can choose «No configuration»; in this case no configuration file will be created, and you can use the contents below. The configuration choices used to create it are listed in the Appendix.

This is the Postfix configuration file /etc/postfix/main.cf:

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.  
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = localhost, localhost.localdomain
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
inet_protocols = all

##########################################
##### non debconf entries start here #####

##### client TLS parameters #####
smtp_tls_loglevel=1
smtp_tls_security_level=encrypt
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps=hash:/etc/postfix/sasl/passwd
smtp_sasl_security_options = noanonymous

##### map jane@localhost to [email protected] #####
smtp_generic_maps=hash:/etc/postfix/generic

relayhost=:587

An explanation of each non-standard line (following the comment «non debconf entries start here») is given in the Appendix.

SSL

Пример настройки работы по порту 587, с использованием сертификатов Let’s Encrypt:/etc/postfix/main.cf

smtpd_tls_cert_file=/etc/letsencrypt/live/domain.ru/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/domain.ru/privkey.pem
 
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
 
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
 
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

smtpd_tls_cert_file=etcletsencryptlivedomain.rufullchain.pem

smtpd_tls_key_file=etcletsencryptlivedomain.ruprivkey.pem

smtpd_use_tls=yes

smtpd_tls_session_cache_database=btree${data_directory}smtpd_scache

smtp_tls_session_cache_database=btree${data_directory}smtp_scache
 

smtpd_sasl_type=dovecot

smtpd_sasl_path=privateauth

smtpd_sasl_local_domain=

smtpd_sasl_security_options=noanonymous

broken_sasl_auth_clients=yes

smtpd_sasl_auth_enable=yes

smtp_tls_security_level=may

smtpd_tls_security_level=may

smtp_tls_note_starttls_offer=yes

smtpd_tls_loglevel=1

smtpd_tls_received_header=yes

The Postfix lookup table model

Postfix uses lookup tables to store and look up information
for access control, address rewriting and even for content filtering.
All Postfix lookup tables are specified as «type:table», where
«type» is one of the database types described under «» at the end of this
document, and where «table» is the lookup table name. The Postfix
documentation uses the terms «database» and «lookup table» for the
same thing.

Examples of lookup tables that appear often in the Postfix
documentation:

All Postfix lookup tables store information as (key, value)
pairs. This interface may seem simplistic at first, but it turns
out to be very powerful. The (key, value) query interface completely
hides the complexities of LDAP or SQL from Postfix. This is a good
example of connecting complex systems with simple interfaces.

Benefits of the Postfix (key, value) query interface:

  • You can implement Postfix lookup tables first with local
    Berkeley DB files and then switch to LDAP or MySQL without any
    impact on the Postfix configuration itself, as described under «»
    below.

  • You can use Berkeley DB files with fixed lookup strings for
    simple address rewriting operations and you can use regular expression
    tables for the more complicated work. In other words, you don’t
    have to put everything into the same table.

The size of the zimbraMailContentMaxSize controls the overall message size

su - zimbra
zmprov ms `zmhostname` zimbraMailContentMaxSize 20000000  
zmprov modifyConfig zimbraMailContentMaxSize 20000000
<attr id="807" name="zimbraMailContentMaxSize" type="long" cardinality="single" optionalIn="globalConfig,server" flags="serverInherited" since="6.0.0_BETA1">
  <globalConfigValue>10240000</globalConfigValue>
  <desc>Maximum size in bytes for the <content > element in SOAP.  Mail content larger than this limit will be truncated.</desc>
</attr>
 Here is an example to set the max message size to 42MB
zmprov ms `zmhostname` zimbraFileUploadMaxSize 44040192
zmprov ms `zmhostname` zimbraMailContentMaxSize 44040192
zmprov mcf zimbraMtaMaxMessageSize 44040192
postfix reload
one thing to watch for is to use a conversion tool to calculate the value in bytes otherwise it won't be accepted
  • Clarify and update attrs.xml about necessary restarts for mta/file size variables

Introducing the qshape tool

When mail is draining slowly or the queue is unexpectedly large,
run qshape(1) as the super-user (root) to help zero in on the problem.
The qshape(1) program displays a tabular view of the Postfix queue
contents.

  • On the horizontal axis, it displays the queue age with
    fine granularity for recent messages and (geometrically) less fine
    granularity for older messages.

  • The vertical axis displays the destination (or with the
    «-s» switch the sender) domain. Domains with the most messages are
    listed first.

For example, in the output below we see the top 10 lines of
the (mostly forged) sender domain distribution for captured spam
in the «:

  • The «T» column shows the total (in this case sender) count
    for each domain. The columns with numbers above them, show counts
    for messages aged fewer than that many minutes, but not younger
    than the age limit for the previous column. The row labeled «TOTAL»
    shows the total count for all domains.

  • In this example, there are 14 messages allegedly from
    yahoo.com, 1 between 10 and 20 minutes old, 1 between 320 and 640
    minutes old and 12 older than 1280 minutes (1440 minutes in a day).

When the output is a terminal intermediate results showing the top 20
domains (-n option) are displayed after every 1000 messages (-N option)
and the final output also shows only the top 20 domains. This makes
qshape useful even when the is very large and it may
otherwise take prohibitively long to read the entire .

By default, qshape shows statistics for the union of both the
and which are the most relevant queues to
look at when analyzing performance.

One can request an alternate list of queues:

this will show the age distribution of the or
the union of the incoming active and .

Command line options control the number of display «buckets»,
the age limit for the smallest bucket, display of parent domain
counts and so on. The «-h» option outputs a summary of the available
switches.

Настройка брандмауэра

Перед тем, как мы начнем настройку, убедимся, что для почтового сервера у нас открыты необходимые порты в брандмауэре. В зависимости от используемой системы управления netfilter команды будут отличаться.

Для Iptables

Как правило, Iptables используется для систем на базе Debian.

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

iptables -I INPUT 1 -p tcp —match multiport —dports 25,465,587 -j ACCEPT

iptables -I INPUT 1 -p tcp —match multiport —dports 110,143,993,995 -j ACCEPT

* где мы откроем следующие порты:

  • 25 — стандартный SMTP через STARTTLS;
  • 110 — стандартный POP3 через STARTTLS;
  • 143 — стандартный IMAP через STARTTLS;
  • 465 — защищенный SMTP через SSL/TLS;
  • 587 — защищенный SMTP через STARTTLS;
  • 993 — защищенный IMAP через SSL/TLS;
  • 995 — защищенный POP3 через SSL/TLS.

Для сохранения правил установим пакет:

apt-get install iptables-persistent

И выполняем команду:

netfilter-persistent save

Firewalld

Firewalld, в основном, используется в системах на базе Red Hat.

Для открытия нужных нам портов вводим команды:

firewall-cmd —permanent —add-port=25/tcp —add-port=465/tcp —add-port=587/tcp

firewall-cmd —permanent —add-port=110/tcp —add-port=143/tcp —add-port=993/tcp —add-port=995/tcp

И применяем настройки:

firewall-cmd —reload

* где мы откроем следующие порты:

  • 25 — стандартный SMTP через STARTTLS;
  • 110 — стандартный POP3 через STARTTLS;
  • 143 — стандартный IMAP через STARTTLS;
  • 465 — защищенный SMTP через SSL/TLS;
  • 587 — защищенный SMTP через STARTTLS;
  • 993 — защищенный IMAP через SSL/TLS;
  • 995 — защищенный POP3 через SSL/TLS.
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: