apt install postfix Postfix (main.cf) was not set up. Start with cp /usr/share/postfix/main.cf.debian /etc/postfix/main.cf . If you need to make changes, edit /etc/postfix/main.cf (and others) as needed. To view Postfix configuration values, see postconf(1). After modifying main.cf, be sure to run 'systemctl reload postfix'.
# Имя хоста (в HELO), по умолчанию берётся из hostname -f, но можно задать принудительно myhostname = mail.example.com # Домен, по умолчанию берётся из myhostname до первой точки. Если myhostname не задано, оно берётся из hostname в системе + $mydomain. mydomain = example.com # Домены, для которых принимается почта. По умолчанию - только локальный хост, ниже пример для всего родного домена. mydestination = $mydomain # Для домена и хоста: mydestination = $mydomain, $myhostname # Несколько значений, другая форма записи (значения должны иметь пробел в начале строки) mydestination = $mydomain, $myhostname, www.$mydomain, ftp.$mydomain # Добавление к исходящим адресам, если они указаны не полностью (если адрес root, то получится root@example.com) # По умолчанию myorigin = $myhostname, полезно, если нужно узнать имя хоста, с которого отправлено (root@mail.example.com) myorigin = $mydomain # Настройка адресов, с которых будет открыта ретрансляция (релей) mynetworks_style = host # доверять только адресам сервера # mynetworks_style = subnet # доверять подсетям, к которым принадлежит сервер # mynetworks_style = class # доверять классам сетей, к которым принадлежит сервер # Индивидуальная настройка: mynetworks = 127.0.0.0/8, 192.168.100.0/24, 192.168.200.0/24, 10.0.0.0/30 # Вариант в файле: # mynetworks = hash:/etc/postfix/mynetworks # CIDR-нотация не поддерживается # mynetworks = cidr:/etc/postfix/mynetworks # для CIDR-нотации
/etc/postfix/aliases - список псевдонимов для доставки почты.
<локальная часть адреса>: <имя пользователя или e-mail> # Перенаправление локальной почты для пользователя root пользователю ituser. root: ituser # Доставка с ivan.petrov@example.com и i.petrov@example.com учётке petrov. # Адрес petrov@example.com писать в псевдонимы не нужно, т. к. адрес, совпадающий с учёткой, уже есть. ivan.petrov: petrov i.petrov: petrov # Группа sales@example.com - доставка в 3 учётки. sales: petrov, sidorov, ivanov # Пересылка в другой домен: outdoor: asdf@anotherdomain.com # Создание индекса после правки алиасов (Postfix обращается только к индексу) postalias hash:/etc/postfix/aliases # или newaliases
Такой сервер непостоянно подключен к интернету, а соединяется с ним временно, передавая и получая письма через провайдерский SMTP-сервер. В связи с этим IP-адрес сервера может быть непостоянным, сервер не может искать имена хостов, когда он не подключен к интернету, провайдерский сервер является ретранслятором, и он требует аутентификации для пересылки, почту нужно извлекать с провайдерского сервера с помощью fetchmail или иного POP/IMAP-клиента
В связи с этим, необходимо:
# 1. отключить разрешение имён disable_dns_lookups = yes # 2. проверить разрешения на ретрансляцию (только для частной сети) mynetworks = 192.168.0.0/24, 127.0.0.0/8 # 3. определить хост-ретранслятор ([] - отключить поиск MX-записи) relayhost= [relay.example.com] # 4. отложить передачу сообщений, ставить их в очередь (чтобы не подключаться к интернету при каждом полученном письме) defer_transports = smtp
5. Инициировать доставку сообщений, когда соединение с интернетом появляется, и отключить её, когда оно пропадает. Для этого нужно менять конфигурацию Postfix. Например, если используется протокол PPP, то в /etc/ppp/ip-up.d нужно создать сценарий postfix, который будет выполняться после сценария, определяющего resolv.conf, примерно такого вида:
## запустить или перезагрузить Postfix # если Postfix запускается через chroot, скопировать # resolv.conf в используемый Postfix файл resolv.conf cp -p /etc/resolv.conf `postconf -h queue_directory`/etc/resolv.conf # отменить отложенную отправку, применить изменения конфигурации postconf -e "defer_transports =" postfix reload # заставить очередь выгрузить всю ожидающую отправки почту postfix flush
Смысл манипуляции с resolv.conf в том, чтобы сервер изменил свой файл resolv.conf при установлении соединения с Интернетом. Postfix также должен знать текущие серверы имен, поэтому команда копирует новую версию в файл, соответствующий chroot, с тем чтобы Postfix мог его найти.
При отключении надо вернуть всё обратно:
## запустить или перезагрузить Postfix # скопировать resolv.conf в resolv.conf, используемый # Postfix (только для chroot) cp -p /etc/resolv.conf `postconf -h queue_directory`/etc/resolv.conf # включить отложенную отправку, применить изменения конфигурации postconf -e "defer_transports = smtp" postfix reload
6. Пройти аутентификацию на хосте-ретрансляторе (POP-before-SMTP или SMTP-auth)
POP-before-SMTP - надо настраивать fetchmail, добавив триггер перед конфигурацией postfix в /etc/ppp.
Каталог очередей определяется параметром queue_directory
в main.cf
. Стандартное разположение - /var/spool/postfix
.
Ключ-значение.
postmaster: John postmaster@example.com John 192.168.254.12 REJECT spammer@example.com REJECT /^Subject: your account {25}[a-z]{8}/ REJECT Mimail Virus Detected
Доступные типы карт можно посмотреть командой postconf -m
.
btree
cidr
environ
fail
hash
inline
internal
memcache
nis
pipemap
proxy
randmap
regexp
socketmap
static
tcp
texthash
unionmap
unix
Индексированные карты (hash, btree, dbm и др) - двоичные БД, созданные из текстовых файлов командами newaliases, postalias и postmap. Часто используются для aliases, virtual, transport, relocated и sasl_passwd.
Линейные карты (PCRE, regexp, CIDR и обычные файлы) - простые текстовые файлы, читаются сверху вниз, первое же совпадение определяет действие, дальнейшие записи игнорируются. Например, для regexp-карты здесь для john.doe@example.com будет возвращено ОК,
/john\.doe@example\.com/ OK /example\.com/ REJECT
а здесь - нет.
/example\.com/ REJECT /john\.doe@example\.com/ OK
Часто используются для header_checks, body_checks и mime_header_checks.
Когда линейных карт становится много, может начать тормозить, особенно если используются параметры *_chexks с регулярками regexp и PCRE. Чтобы применить изменения в линейных картах, нужно выполнить postfix reload
.
Базы данных (MySQL, PostgreSQL, LDAP) - воспринимаются так же, как индексированная карта. При работе с БД не требуется перезапускать демон, но есть недостатки - высокая задержка и риск медленной работы при высокой нагрузке.
Postfix имеет три отдельных группы параметров управления содержимым, которые непосредственно связаны с различными частями сообщения:
http://www.opendkim.org/opendkim.conf.5.html
DKIMDIR=/etc/postfix/dkim DOMAIN=example.com KEY=mail # Установка apt-get install opendkim opendkim-tools # Каталог, генерация ключей mkdir $DKIMDIR opendkim-genkey -D $DKIMDIR -d $DOMAIN -s $KEY # Права на ключи chgrp opendkim $DKIMDIR/* chmod g+r $DKIMDIR/* gpasswd -a postfix opendkim # Конфиг opendkim tee -a /etc/opendkim.conf <<EOF Canonicalization relaxed/relaxed SyslogSuccess yes KeyTable file:$DKIMDIR/keytable SigningTable file:$DKIMDIR/signingtable SoftwareHeader yes # на время отладки включим расширенное логирование: LogWhy yes # если вы подписываете и на других серверах: #ExternalIgnoreList file:$DKIMDIR/trusted # список внутренних хостов, почта которых требует подписи: #InternalHosts file:$DKIMDIR/internal EOF # keytable file echo $KEY._domainkey.$DOMAIN $DOMAIN:$KEY:$DKIMDIR/$KEY.private | tee -a $DKIMDIR/keytable # signingtable file echo $DOMAIN $KEY._domainkey.$DOMAIN | tee -a $DKIMDIR/signingtable # Postfix postconf -e milter_default_action=accept postconf -e milter_protocol=2 postconf -e smtpd_milters=unix:/var/run/opendkim/opendkim.sock postconf -e non_smtpd_milters=unix:/var/run/opendkim/opendkim.sock
https://habr.com/ru/post/151904/
https://www.opennet.ru/openforum/vsluhforumID1/96371.html
Открытый ключ надо прописать во внешний DNS + общую запись _domainkey. Примерный вид записей:
_domainkey.example.com. TXT "t=s; o=~;" mail._domainkey.example.com. TXT "k=rsa\; t=s\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQm/и/так/далее"
ADSP запись (_adsp._domainkey.example.com.) неактуальна, вместо них теперь DMARC.
https://habr.com/ru/post/106589/
Проверка DKIM-записи: https://dmarcian.com/dkim-inspector/
В логах:
Apr 22 15:48:37 mailsrv postfix/smtpd[7790]: warning: connect to Milter service unix:/run/opendkim/opendkim.sock: No such file or directory
Проблема в том, что postfix работает не от рута и у него нет доступа к /run/opendkim, надо переносить сокет в каталог /var/spool/postfix.
vi /etc/default/opendkim Socket local:/var/spool/postfix/var/run/opendkim/opendkim.sock mkdir -p /var/spool/postfix/var/run/opendkim chown opendkim:opendkim /var/spool/postfix/var/run/opendkim service opendkim restart
За вчерашний день
apt install mailutils pflogsumm -y pflogsumm -d yesterday /var/log/mail.log |mail -aFrom:cron@mailsrv.example.com -s "Postfix - статистика за $(date -d "yesterday" +'%d.%m.%Y')" admin@example.com
https://www.in1.lt/postfix-monitoring/
С фильтрацией по IP-отправителю (за вчерашний день)
#!/bin/bash logfiles="/var/log/mail.log /var/log/mail.log.1" # %_d - число без нуля в начале, вместо него пробел (так в логах: Apr 30, но May 1) yesterdaylog=$(date -d "yesterday" +'%b %_d') yesterdaymark=$(date -d "yesterday" +'%d.%m.%Y') entries=$(egrep -h "^$yesterdaylog.*?\[192\.168\.0\.2" $logfiles) # ids=$(echo "${entries[@]}" |awk -F: '{if(length($4)==11) print $4}') # Когда сообщений >≈12000, ошибка "-bash: /usr/bin/egrep: Argument list too long" # report=$(egrep -h "$(echo ${ids[@]} |tr " " "|")" $logfiles |pflogsumm) # Поэтому надо разбивать на порции (здесь: 4000) ids=(`echo "$entries" |awk -F: '{if(length($4)==11) print $4}' |xargs -n 4000 |tr " " "|"`) messages=$(for i in ${ids[@]}; do egrep -h "$i" $logfiles; done) report=$(echo "$messages" |pflogsumm) # Тэг <pre> в html решает 2 задачи - сохранение отступов и моноширинный шрифт. echo "<html><body><pre>$report</pre></body></html>" | \ mail -a 'From:cron@mailsrv.example.com' -a 'Content-Type: text/html' \ -s "Postfix - статистика за $yesterdaymark" \ admin@example.com,user@example.com # Сс и Bcc надо указывать как заголовки (-a 'Сс:ccuser@example.com,ccuser2@example.com'), т. к. ключи -с и -b не работают. # /etc/crontab # Postfix - статистика по письмам c IP 192.168.0.2 0 8 * * * root /scripts/postfix-stat.sh
https://stackoverflow.com/questions/51540730/proper-export-from-txt-to-html-in-powershell
https://infoheap.com/bash-append-text-to-a-variable/