Настройка Postfix · 12 min read · Nov 14, 2025
Фильтр спама Postfix с использованием Ubuntu Dapper, MailScanner, SpamAssassin, Razor, Pyzor, DCC и ClamAV - Страница 2
2 Настройка Postfix
Нам нужны некоторые образцы файлов из исходного кода Postfix, обратите внимание, что исходный код, который мы здесь получаем, является оригинальным исходным кодом, до его модификации пакетными менеджерами Ubuntu/Debian:
cd /usr/local/src
wget http://us.archive.ubuntu.com/ubuntu/pool/main/p/postfix/postfix_2.3.3.orig.tar.gz
tar xzvf postfix_2.3.3.orig.tar.gzОстановите Postfix:
postfix stopУбедитесь, что вы отвечаете “n” на “перезаписать?” Делайте каждый раздел отдельно:
cp -i /usr/share/postfix/main.cf.debian /etc/postfix/main.cf
cp -i /usr/local/src/postfix-2.3.3/conf/* /etc/postfix
cp -i /etc/postfix/header_checks /etc/postfix/body_checks
cp -i /etc/postfix/access /etc/postfix/sender_access2.1 Редактирование master.cf
Кстати, следите за двумя конфигурационными файлами Postfix, оба находятся в папке /etc/postfix. Более одного администратора запутался между master.cf и main.cf!
Сначала сделайте резервную копию текущего master.cf:
cp /etc/postfix/master.cf /etc/postfix/master.cf-origРедактируйте master.cf:
vi /etc/postfix/master.cfНам нужно добавить два элемента ниже типа сервиса pickup. Сервис pickup “собирает” локальную почту (локальная означает “на этом компьютере”) и доставляет ее. Позже мы создадим ежедневный/еженедельный отчет, который этот ящик будет отправлять нам, и поскольку отчет будет содержать содержимое, которое классифицирует сам отчет как спам, это способ обойти фильтрацию содержимого для почты, генерируемой этим компьютером.
Добавьте это сразу под типом сервиса ‘pickup’:
-o content_filter=
-o receive_override_options=no_header_body_checksЭто должно выглядеть так, когда вы закончите:
pickup fifo n - - 60 1 pickup
-o content_filter=
-o receive_override_options=no_header_body_checks2.2 Редактирование main.cf
Это основной конфигурационный файл для Postfix. Для получения дополнительной информации, пожалуйста, прочитайте комментарии в файле main.cf, документацию в /usr/local/src/postfix-2.3.3/README_FILES или на сайте Postfix http://www.postfix.org/documentation.html.
Сначала нам нужно сделать резервную копию файла main.cf.
cp /etc/postfix/main.cf /etc/postfix/main.cf-origПоскольку мы настраиваем наш фильтр спама для пересылки всей своей почты на другой сервер, мы будем использовать то, что Postfix считает “классом адреса домена пересылки”, что в основном означает, что мы будем использовать, из более чем 300 настраиваемых параметров в Postfix, небольшую группу параметров, которые лучше всего подходят для нашей цели. Этот класс адресов описан здесь: http://www.postfix.org/ADDRESS_CLASS_README.html#relay_domain_class. Мы также выступаем в качестве основного MX для другого сервера, поэтому, пожалуйста, прочитайте этот соответствующий раздел: http://www.postfix.org/STANDARD_CONFIGURATION_README.html#backup.
В Postfix обычно хранят элементы в таблицах поиска. Мы собираемся использовать несколько хеш-таблиц для хранения данных, которые будет использовать Postfix. Как только у нас будут текстовые данные в этих таблицах, мы используем команду postmap для создания бинарных файлов (формат Berkeley DB), которые в конечном итоге будет использовать Postfix для извлечения данных. Например, если у вас есть файл с именем “sampletext” и вы выполните postmap sampletext, создается новый файл “sampletext.db”. Postfix будет извлекать данные из “sampletext.db”, а не из “sampletext”. Существует более дюжины других типов файлов данных, которые может использовать Postfix для хранения данных. Хеш-таблицы являются подходящим выбором для нескольких таблиц, которые мы будем использовать, а pcre (совместимые с Perl регулярные выражения) подходит для нескольких таблиц, которые мы будем использовать для хранения данных фильтрации содержимого. В своей самой простой форме хеш-таблица состоит из 2 частей данных, ключа и значения; обычно называемых парой ключ/значение. Ключ и значение разделены пробелом (обычно пробелом или табуляцией). Данные в типичной таблице, которую мы используем в Postfix, будут выглядеть примерно так:
[email protected] OK
[email protected] OK
[email protected] OKРекомендуемая литература: http://www.postfix.org/DATABASE_README.html.
Мы будем использовать postconf для редактирования main.cf вместо того, чтобы вводить параметры в файл с помощью vi. Знаки “” обязательны, как они появляются в командных строках.
2.2.1 alias_maps
Нам просто нужно внести исправление в значение по умолчанию здесь:
postconf -e "alias_maps = hash:/etc/aliases"Создайте файл алиасов:
newaliasesВы увидите, что теперь в каталоге /etc/ появился файл aliases.db. Это то, что обычно читает Postfix. Теперь, когда у вас есть правильный файл алиасов и поскольку мы собираемся настроить нашу систему для пересылки всей почты (никакая почта не будет доставлена локально), файл алиасов будет проигнорирован Postfix. Вместо этого мы настроим virtual_alias_maps для перенаправления адресов. Другие программы могут работать неправильно, если файл /etc/aliases отсутствует, поэтому не удаляйте его.
2.2.2 myorigin
Имя домена, от которого почта, созданная на этом компьютере, будет казаться исходящей. Например, если cron отправляет почту на “[email protected]”, она будет казаться исходящей от “[email protected]”.
postconf -e "myorigin = example.com"Очевидно, в приведенном выше и всех следующих командах замените мои примерные параметры, такие как “example.com”, на ваши собственные конкретные значения.
2.2.3 myhostname
Полное доменное имя (FQDN) машины, на которой работает система Postfix.
postconf -e "myhostname = sfa.example.com"2.2.4 mynetworks
Это машины, которым я доверяю и для которых буду пересылать почту на любые назначения. Обычно это устанавливается на мою локальную сеть или просто на один или несколько доверенных внутренних почтовых серверов. Наряду с relay_domains это важный параметр, который нужно правильно настроить, иначе вы рискуете стать “открытым релеем”. Другими словами, ваш компьютер может принимать и пересылать почту на домены, для которых у него нет оснований это делать. Быть открытым релеем — это серьезная проблема и может привести к тому, что вас внесут в черные списки различных интернет-антиспам-листов, среди прочих проблем. Вы можете указать один компьютер, несколько отдельных компьютеров или любой компьютер в указанной сети. Вы также можете исключить определенные хосты в вашей сети, предварив IP-адрес восклицательным знаком. Если вы будете иметь дело с несколькими внутренними почтовыми серверами и/или хотите разрешить нескольким машинам и/или подсетям пересылать через этот сервер (осторожно!), просто добавьте их в этот параметр в формате CIDR и разделите сети так:
postconf -e "mynetworks = 127.0.0.0/8, 222.222.222.222/24, 10.10.10.10/24"Вышеуказанное позволит машинам в сетях 222.222.222.222/24 и 10.10.10.10/24 пересылать smtp почту через этот компьютер. 127.0.0.0/8 необходимо для того, чтобы локальный сервер мог отправлять, вы должны как минимум указать это. Вы также можете указать IP-адрес одного компьютера. Если вы знаете только свою десятичную маску сети (т.е. 255.255.255.240) и вам нужно преобразовать ее в формат CIDR, попробуйте http://www.wildpackets.com/products/free_utilities/ipsubnetcalc/overview. (Введите IP-адрес в вашей сети, выберите вкладку информации о подсети, выберите свою маску подсети, ваша сеть — это ID подсети/бит маски.) Или просто посмотрите на http://www.belchfire.net/webtools/cidr_conversion_table.html.
Если у вас нет сетей или компьютеров, которые будут пересылать через этот сервер, выполните эту команду только с адресом 127.0.0.0/8.
2.2.5 message_size_limit
Максимальный размер электронной почты, который Postfix позволит “войти в “”дверь””.
postconf -e "message_size_limit = 10485760"Вышеуказанное позволяет электронным письмам размером до 10 МБ, значение указано в байтах (1010241024). Почта большего размера может быть пропущена антивирусным сканером (ClamAV). Вы можете увеличить это значение, если также настроите ClamAV для сканирования файлов размером более 10 МБ. Если вы разрешаете сообщения размером более 10 МБ, следите за ОЗУ.
2.2.6 local_transport
Возвращает сообщение об ошибке для попыток локальной доставки.
postconf -e "local_transport = error:No local mail delivery"2.2.7 mydestination
Пустое mydestination говорит Postfix, что этот компьютер не является конечным пунктом назначения.
postconf -e "mydestination = "2.2.8 local_recipient_maps
Пустое local_recipient_maps говорит Postfix, что нет локальных почтовых ящиков.
postconf -e "local_recipient_maps = "2.2.9 virtual_alias_maps
Наш фильтр спама должен уметь принимать почту для postmaster@yourIP. Сообщается, что некоторые вещи действительно ожидают, что эта возможность существует. Мы также разрешим почту для abuse@yourIP. Поскольку мы не разрешаем локальную доставку почты, почта, адресованная IP-адресу нашего фильтра спама, будет отклонена с сообщением об ошибке. Настройка virtual_alias_maps позволяет пересылать электронную почту на эти два аккаунта на внутренний адрес. Убедитесь, что ваш сервер Exchange настроен на получение сообщений, адресованных “root”, “postmaster” и “abuse”.
Настройте ссылку на виртуальный файл:
postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"Затем отредактируйте виртуальный файл:
vi /etc/postfix/virtualДобавьте эти две строки в верхнюю часть виртуального файла:
postmaster [email protected]
abuse [email protected]Сохраните и выйдите из файла, затем создайте бинарный файл, который будет использовать Postfix:
postmap /etc/postfix/virtual2.2.10 relayhost
/etc/postfix/relayhost говорит нашему фильтру спама, как должна отправляться исходящая электронная почта. relayhost будет содержать IP или FQDN почтового сервера, который вы хотите использовать для отправки исходящей почты. Другими словами, не локальная почта, почта, направленная на домены, отличные от нашего. Не путать с файлом /etc/postfix/transport, transport используется для маршрутизации входящей почты, направленной на один из наших локальных доменов. Мы скоро перейдем к транспортировке.
Если relayhost пуст, или не настроен, то наш фильтр спама будет использоваться для этой цели.
Примечание: Скобки [] обязательны в этой команде.postconf -e "relayhost = [mymailserver.example.com]"При желании вы можете настроить свой фильтр спама как свой исходящий SMTP-сервер, но сначала у вас должна быть настроена ваша обратная DNS-запись и, конечно, ваша запись “A” и запись “MX”, чтобы другие серверы в Интернете принимали вашу почту. Когда вы перенастроите своих клиентов и другие SMTP-серверы на использование нашего фильтра спама для их исходящей почты, эта почта пройдет через тот же процесс сканирования, что и ваша входящая почта (если только вы не найдете какие-то хитрые настройки, чтобы этого избежать). Если эти записи еще не настроены, очень полезно временно настроить relayhost с вашим текущим, работающим, исходящим почтовым сервером.
Также убедитесь, что указанный вами relayhost настроен на прием электронной почты с этого компьютера и ЧТО этот компьютер не использует ЭТОТ компьютер для своей исходящей почты (можете сказать “петля”?).
2.2.11 relay_recipient_maps
Мы собираемся создать таблицу каждого отдельного пользователя в каждом отдельном домене, для которого мы принимаем почту. Эта таблица будет использоваться для отклонения почты, адресованной несуществующим пользователям в наших доменах. НЕ ПАНИКУЙТЕ ПОКА… В данный момент мы только настроим структуру таблицы. Если вы используете Exchange, доступны HOWTO, которые описывают автоматизацию процесса создания таблицы relay_recipients. В последнее время стало очень распространенным, что спамеры запускают атаки словарем; отправляя тысячи сообщений на домен, используя вымышленные имена пользователей. Наш фильтр спама должен будет обработать каждое из этих сообщений, если вы не внесете действительных пользователей в таблицу relay_recipients. Не недооцените важность этого и убедитесь, что вы не единственный в вашей организации, кто знает, как вносить изменения в этот файл. Мы вернемся к автоматизации этого после того, как ваш фильтр спама будет функционировать. Если у вас управляемое количество пользователей, введите их вручную.
Настройте ссылку на файл, который мы создадим для хранения данных:
postconf -e "relay_recipient_maps = hash:/etc/postfix/relay_recipients"Затем отредактируйте relay_recipients:
vi /etc/postfix/relay_recipientsНа данный момент мы собираемся принимать почту для всех пользователей в наших доменах, поэтому введите каждый домен, для которого вы принимаете почту, в следующем формате:
@example.com OK
@example2.com OK
@example3.com OKЗатем создайте бинарный файл, который будет использовать Postfix:
postmap /etc/postfix/relay_recipientsВышеуказанные записи являются временными. Это подстановочные знаки, которые позволяют почту на ваши домены. Вы ДОЛЖНЫ удалить записи выше в ближайшем будущем и заменить их на адреса электронной почты всех ваших действительных получателей. Когда вы будете готовы ввести каждого пользователя индивидуально в файл relay_recipients, вы сначала удалите (или закомментируете) данные выше, которые позволяют почту всем пользователям в домене, а затем перечислите каждого пользователя индивидуально в форме:
[email protected] OK
[email protected] OK
[email protected] OKНа самом деле, в этом конкретном файле значение “OK”, указанное после каждого пользователя, не используется ни для чего, но что-то должно быть там, потому что хеш-таблица требует значения после ключа. Обратите внимание, что, исключив [email protected] из этого файла, вы можете предотвратить пользователей из Интернета от отправки почты на [email protected], но не делайте этого, если некоторые из ваших собственных серверов должны использовать этот компьютер для отправки почты на root. Если вы используете Exchange, вот HOWTO. Даже если вы не используете Exchange, я нашел информацию о передаче файлов полезной. http://www2.origogeneris.com:4000/relay_recipients.html - http://www-personal.umich.edu/~malth/gaptuning/postfix/ - http://www.unixwiz.net/techtips/postfix-exchange-users.html - http://postfix.state-of-mind.de/patrick.koetter/mailrelay/ - http://doc.nettools.ru/Unix/Postfix&intserver/
2.2.12 transport_maps
Указывает Postfix, где искать файл транспортировки. Мы используем файл транспортировки, чтобы сказать Postfix, куда пересылать действительную почту для наших доменов. Настройка транспортировки аналогична настройке relay_recipients.
Создайте ссылку на него в main.cf:
postconf -e "transport_maps = hash:/etc/postfix/transport"Затем отредактируйте транспорт:
vi /etc/postfix/transportДобавьте 1 новую строку для каждого домена, для которого вы будете обрабатывать почту, аналогично приведенному ниже примеру. IP-адрес — это адрес сервера, который является конечным пунктом назначения сообщений, адресованных нашим доменам (наш сервер Exchange). Не имеет значения, где вы разместите эти элементы в файле, но мне нравится помещать их в верхней части.
example1.com smtp:[10.10.10.100]
example2.com smtp:[10.10.10.101]
example3.com smtp:[10.10.10.102]НЕ забудьте включить скобки на этих строках!). Вы также можете использовать FQDN имя хоста вместо IP-адреса (т.е. smtp:[exchange1.example.com]).
Теперь создайте бинарный файл, который будет использовать Postfix:
postmap /etc/postfix/transport2.2.13 relay_domains
Какие домены назначения (и поддомены) эта система будет пересылать почту. Вы хотите перечислить здесь ТОЛЬКО домены, за которые вы несете ответственность за прием почты. В дополнение к разрешению пересылки почты на эти домены, эта настройка также подразумевает, что мы не пересылаем почту на домены, не перечисленные здесь, и, следовательно, это критически важный компонент в предотвращении фильтра спама от становления открытым релеем.
postconf -e "relay_domains = hash:/etc/postfix/relay_domains"Отредактируйте relay_domains:
vi /etc/postfix/relay_domainsДобавьте 1 новую строку для каждого домена, для которого вы будете обрабатывать почту, аналогично приведенному ниже примеру:
example1.com OK
example2.com OK
example3.com OKЭтот файл в настоящее время имеет очень похожий формат на relay_recipients, не путайте их. В этом файле не может быть ‘@’ перед именем домена. Просто хотел упомянуть, некоторые очень умные люди были известны, чтобы сделать это…
Затем создайте бинарный файл, который будет использовать Postfix:
postmap /etc/postfix/relay_domainsПРИМЕЧАНИЕ: relay_recipients, relay_domains и transport — это файлы, с которыми вы станете очень близкими. Каждый раз, когда вам нужно добавить пользователей в домен, добавить домен или удалить домен из вашего списка, вам нужно будет перейти ко всем трем этим файлам и отредактировать их. После редактирования выполните postmap для каждого из них и перезапустите Postfix с помощью 'postfix reload'. На последней странице есть часть 'Обслуживание', которая содержит README, которую можно скопировать в ваш фильтр спама в качестве быстрого справочника для некоторых общих задач.2.2.14 recipient_delimiter
Если ваш текущий SMTP/POP3/IMAP сервер настроен на использование расширений адресов (например, [email protected]), то recipient_delimiter должен быть установлен в соответствии с разделителем, который вы в настоящее время используете для разделения имени пользователя от расширения адреса. Это не имеет ничего общего с запятой, которую вы используете для разделения нескольких людей, которым вы отправляете электронную почту ([email protected], [email protected], [email protected]), используя ваш почтовый клиент (MUA). Вы можете быть знакомы с этим, если используете GMail. Если у вас есть учетная запись GMail, вы можете отправить электронную почту на нее в этом формате, например [email protected] и настроить фильтр в GMail, чтобы пометить все с тегом ‘testtag’ в адресе и пропустить входящие. В последнее время распространенным использованием этой функции является использование этих тегов, когда вы подписываетесь на любую веб-службу, а затем фильтрация по тегу. В любом случае, если у вас это есть, вы будете знать, что у вас это есть, если вы не понимаете, о чем я говорю, следуйте инструкциям “Я не использую разделители получателей”.
3 Типичные настройки - Выберите одно.
- Я не использую разделители получателей:
postconf -e "recipient_delimiter = "- Я в настоящее время использую знак плюс:
postconf -e "recipient_delimiter = +"- Я в настоящее время использую знак минус:
postconf -e "recipient_delimiter = -"2.2.15 Настройки NAT/Proxy (по желанию)
Если (и только если) IP-адрес, который вы представляете миру, не является IP-адресом вашего фильтра спама (вы настроены на работу за NAT-файрволом или прокси-сервером), добавьте следующие две строки в main.cf, затем раскомментируйте и настройте proxy_interfaces (60.50.40.30 представляет собой публичный IP-адрес):
# Укажите ваш NAT/прокси ВНЕШНИЙ адрес здесь.
#proxy_interfaces = 60.50.40.30Get new posts in your inbox
No spam. Unsubscribe anytime.