У меня был сервер Postfix, работавший очень короткое время, и он работал, но мне пришлось перезапустить сервер сегодня, и я больше не получаю электронные письма из внешних источников:
Jan 23 01:34:44 myservername postfix/smtpd[1055]: connect from db3ehsobe006.messaging.microsoft.com[213.199.154.144]
Jan 23 01:34:45 myservername postfix/smtpd[1055]: warning: connect to 127.0.0.1:10023: Connection refused
Jan 23 01:34:45 myservername postfix/smtpd[1055]: warning: problem talking to server 127.0.0.1:10023: Connection refused
Jan 23 01:34:46 myservername postfix/smtpd[1055]: warning: connect to 127.0.0.1:10023: Connection refused
Jan 23 01:34:46 myservername postfix/smtpd[1055]: warning: problem talking to server 127.0.0.1:10023: Connection refused
Jan 23 01:34:46 myservername postfix/smtpd[1055]: NOQUEUE: reject: RCPT from db3ehsobe006.messaging.microsoft.com[213.199.154.144]: 451 4.3.5 Server configuration problem; from=<MyKnownWorking@EmailAccountOutside> to=<MyAccount@MyDomain.com> proto=ESMTP helo=<db3outboundpool.messaging.microsoft.com>
Сервер слушает port 10023
, но я заметил, что он прослушивает только IPv6:
> sudo netstat -a | grep 10023
tcp6 0 0 ip6-localhost:10023 [::]:* LISTEN
У меня нет правил брандмауэра, которые отрицали бы этот конкретный порт, черт возьми, я пошел дальше и сбросил набор правил, чтобы подтвердить его. Вот результат моего postconf -n (я удалил свое доменное имя вместо mydomain.com:
> sudo postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
broken_sasl_auth_clients = yes
config_directory = /etc/postfix
content_filter = amavis:[127.0.0.1]:10024
disable_vrfy_command = yes
inet_interfaces = all
inet_protocols = ipv4
mailbox_size_limit = 0
message_size_limit = 0
mydestination = localhost.$mydomain, localhost, mail.mydomain.com, servername.mydomain.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mynetworks_style = host
myorigin = /etc/mailname
readme_directory = no
receive_override_options = no_address_mappings
recipient_delimiter = +
relayhost =
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_use_tls = yes
smtpd_banner = mail.mydomain.com ESMTP $mail_name
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permit
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit
smtpd_tls_cert_file = /etc/ssl/private/mail.mydomain.com.crt
smtpd_tls_key_file = /etc/ssl/private/mail.mydomain.com.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
virtual_alias_maps = mysql:/etc/postfix/maps/alias.cf
virtual_gid_maps = static:5000
virtual_mailbox_base = /var/spool/mail/virtual
virtual_mailbox_domains = mysql:/etc/postfix/maps/domain.cf
virtual_mailbox_limit = 0
virtual_mailbox_maps = mysql:/etc/postfix/maps/user.cf
virtual_uid_maps = static:5000
Как видите, я даже пытаюсь указать через inet_protocols, что он прослушивает соединения ipv4. Я пробовал с этой командой и без нее.
Любая помощь в устранении неполадок будет принята с благодарностью! И, конечно, если вы видите что-то в моей конфигурации вопиюще глупо, я не остаюсь без совета или критики.
Ваш последний чек на smtpd_recipient_restrictions использует службу политики для проверки получателя. Обычно это postgrey-сервис, и у него есть проблемы с подключением к нему Postfix.
smtpd_recipient_restrictions = ...,check_policy_service inet:127.0.0.1:10023, permit
Если вы удалите check_policy_service inet: 127.0.0.1: 10023 из smtpd_recipient_restrictions вы должны устранить ошибку, но вы все равно должны определить, что произойдет с вашим postgrey или другой службой, которая будет здесь работать.
Проверка Postgrey в системе Unbuntu
Обычно конфигурация postgrey по умолчанию будет прослушивать порт 10023 для соединений и определять, следует ли их разрешить или отклонить. Некоторые части сервера Unbutu, которые вы можете проверить, чтобы узнать, установлен ли он, являются ...
/etc/default/postgrey
файл? Это основной файл конфигурации./etc/postgrey
папка? Здесь вы можете занести элементы в белый список.> which postgrey
он находит двоичный файл? Мой находится в /usr/sbin/postgrey
./etc/init.d/postgrey
скрипт для запуска при загрузке? Это типичное место для демонов Ubuntu.Это только даст вам некоторые подсказки относительно того, мог ли этот сервер postgrey
настроил за один раз. Вам нужно будет продолжить поиск неисправностей, если процесс не работает должным образом на вашем сервере.
Столкнувшись с той же проблемой, пробовал много способов, например, предложенных bshea, погуглил и попробовал.
Основание: Ubuntu 14.04.2 LTS, postgrey
служба запускается, но не отображается в списке процессов, т.е. служба запускается, но незаметно завершается.
Нашел решение изменить строку в /etc/default/postgrey
:
Измените эту строку:
POSTGREY_OPTS="--inet=10023"
К этому
POSTGREY_OPTS="--inet=127.0.0.1:10023"
Не нужно играть с портами, протоколами и понижать версию чего-либо. Не могу объяснить почему, но сервис в ps -aux
и все работает.
На самом деле, вы не обязаны использовать ipv6, вы можете установить Postgrey и Postfix на ipv4. Проблема в том, что Postgrey (вероятно, версия 1.33 и новее) отказывается запускаться на ipv4 localhost ip 127.0.0.1, поэтому вы можете использовать свой ip-адрес ethX.
В /etc/postfix/main.cf измените это:
check_policy_service inet:127.0.0.1:10023
кому:
check_policy_service inet:<your_ipv4_address>:10023
Затем перезапустите Postfix:
sudo service postfix restart
В / и т.д. / по умолчанию / postgrey измените это:
POSTGREY_OPTS="--inet=10023 --delay=60"
кому:
POSTGREY_OPTS="--inet=<your_ipv4_address>:10023 --delay=60"
Затем перезапустите Postgrey:
sudo service postgrey restart
Очень полезным было это сообщение списка рассылки Debian:
Проблема IP: PORT для меня не была проблемой (Ubuntu 14.04.2 LTS). Может быть ошибочным предположение, что postgrey прерывается / завершается при сбое подключения / выполнения локального порта.
Сначала проверьте, распознается ли демон как работающий:
sudo service postgrey status
Если он не запущен / не распознается, ты все еще увидишь :
warning: problem talking to server [::1]:10023: Connection refused
в вашем почтовом журнале. Постгрей просто не подключен / не работает. Если вы обнаружите, что он запущен (может быть более одного раза) и не может остановить его обслуживание или статус, у вас, вероятно, проблема с pid / truncate. Если да, сделайте:
ps a | grep postgrey
Убейте (каждый) процесс вручную. Удалите все файлы postgrey.pid из / var / run (/ run).
Предполагая, что все ваши файлы postgrey используются по умолчанию и он пытается запуститься, но при сбое при перезагрузке / перезапуске / остановке (после проверки «sudo service postgrey status») у вас, вероятно, есть проблемы с файлом блокировки и именованным процессом для stop-start-daemon.
POSTGREY имеет ОЧЕНЬ базовый сценарий init.d, который не выполняет много проверок до / после выполнения каких-либо действий. Сопровождающим действительно нужно над этим поработать.
Основная проблема - запуск-стоп-демон ищет усеченный именованный файл :
( https://bugs.launchpad.net/ubuntu/+source/postgrey/+bug/1289424 )
Установленный скрипт проверяет наличие $ NAME = "postgrey".
("--name $ NAME")
К сожалению, для этого нужно (Ubuntu / Debian): '/ usr / sbin / postg'
(всего 15 символов и это часть пути, которого явно не существует.)
Исправление (добавить переменную PROCNAME с усеченной версией, включая путь):
PROCNAME=`echo $DAEMON | cut -c -15`
(Вместо этого проверит наличие '/ usr / sbin / postg')
и будет идти под "--name":
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
if start-stop-daemon --stop --oknodo --quiet \
--pidfile $PIDFILE --name $PROCNAME
..
reload|force-reload)
log_action_begin_msg "Reloading $DESC configuration..."
if start-stop-daemon --stop --signal 1 --quiet \
--pidfile $PIDFILE --name $PROCNAME
(По желанию)
Пока я это делал, я поместил файл блокировки в его собственный каталог: '/run/postgrey/postgrey.pid'.
Если вы предпочитаете, чтобы он находился в собственном каталоге, вам нужно добавлять этот бит, чтобы каждый раз заново создавать папку:
PIDFOLDER=/var/run/$NAME
PIDFILE=$PIDFOLDER/$NAME.pid
Проверьте существующий каталог / папку:
check_pid_dir() {
if [ ! -d $PIDFOLDER ]; then
mkdir $PIDFOLDER
chmod 0755 $PIDFOLDER
fi
}
и добавляем функцию в «Старт»:
case "$1" in
start)
check_pid_dir
log_daemon_msg "Starting $DESC" "$NAME"
Мой полный сценарий init.d находится здесь: https://gist.github.com/bmatthewshea/50e2038563b103e466ea
Я не так много тестировал, но пока что, безусловно, работает лучше, чем по умолчанию. :)
Дэвис - вы правы, postgrey был изменен в 12.04LTS для работы в IPv6. Обновление не меняет его для постфикса и не предупреждает вас о внесении изменений.
Так что придется делать это самому. Измените это:
check_policy_service inet:127.0.0.1:10023
кому:
check_policy_service inet:::1:10023
в твоем /etc/postfix/master.cf файл, затем перезапустите postfix:
sudo service postfix restart
Это позволит postfix передавать IPv6 на postgrey.
Это будет также break, если вы настроили Postfix для разговора только по IPv4 (как и у меня из-за моего интернет-провайдера по-прежнему не выполняет IPv6, и мой туннель IPv6 HE помечен такими службами, как Netflix, и, таким образом, нарушает работу Netflix ...)
добавление локального хоста к флагу команды INET для postgrey делает исправить это без привязки к IPv4.
Я не понимаю, почему он не может просто привязаться к ОБА IPv4 И IPv6, хотя ...