При обновлении Fedora Core 16 до Fedora Core 21 одной из проблем было заставить postfix работать с postgrey. Я все еще не работаю после многих долгих часов, посвященных этому.
В старой стратегии официальные инструкции рекомендуют вам создать собственный сценарий, который будет /etc/init.d
. И действительно, еще в FC16 я это сделал! Но сегодня у нас есть systemctl
. Вы можете установить postgrey
с yum репозитории знают об этом. Устанавливается нормально. Затем вы включаете с помощью systemctl enable postgrey.service
, и это тоже хорошо.
Все идет нормально. Осталось сделать несколько вещей ...
Затем перейдите к файлам белого списка - похоже, они того же формата.
В старой схеме в файле postfix main.cf была бы такая строка:
...
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_pipelining,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_unauth_destination,
check_policy_service inet:127.0.0.1:10023,
permit_mynetworks
...
В моем /etc/init.d я написал сценарий, в следующем отрывке которого показаны интересные части, и он работал хорошо:
...
exec="/usr/sbin/postgrey"
prog="postgrey"
options="--unix=/var/spool/postfix/postgrey/socket --inet=10023"
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
lockfile=/var/lock/subsys/$prog
start() {
[ -x $exec ] || exit 5
echo -n $"Starting $prog: "
daemon $exec -d $options
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
...
Обратите внимание, как порт указан в --inet=
и это соответствует тому, что в main.cf
.
Но когда я пытаюсь использовать это, сервер постфиксов жалуется и не получает электронную почту. Он явно заявляет, что не может подключиться к postgrey:
...
Apr 12 13:27:50 ms1 postfix/smtpd[14273]: warning: connect to 127.0.0.1:10023: Connection refused
Apr 12 13:27:50 ms1 postfix/smtpd[14273]: warning: problem talking to server 127.0.0.1:10023: Connection refused
...
Я искал и искал и не нашел никакой информации о конфигурации для новой схемы. Если спросить, встал ли Postgrey и счастлив, он получит следующее:
# systemctl status postgrey.service -l
● postgrey.service - Postfix Greylisting Service
Loaded: loaded (/usr/lib/systemd/system/postgrey.service; enabled)
Active: active (running) since Sun 2015-04-12 12:13:19 PDT; 1h 19min ago
Docs: man:postgrey(8)
Process: 13280 ExecStart=/usr/sbin/postgrey --unix=/var/spool/postfix/postgrey/socket --pidfile=/var/run/postgrey.pid --group=postgrey --user=postgrey --greylist-text=Greylisted for %%s seconds --daemonize $POSTGREY_OPTS (code=exited, status=0/SUCCESS)
Process: 13277 ExecStartPre=/bin/rm -f /var/run/postgrey.pid (code=exited, status=0/SUCCESS)
Main PID: 13281 (/usr/sbin/postg)
CGroup: /system.slice/postgrey.service
└─13281 /usr/sbin/postgrey --unix=/var/spool/postfix/postgrey/socket --pidfile=/var/run/postgrey.pid --group=postgrey --user=postgrey --greylist-text=Greylisted for %s seconds --daemonize --delay=6
Apr 12 12:13:19 ms1 postgrey[13281]: Process Backgrounded
Apr 12 12:13:19 ms1 postgrey[13281]: 2015/04/12-12:13:19 postgrey (type Net::Server::Multiplex) starting! pid(13281)
Apr 12 12:13:19 ms1 postgrey[13281]: Binding to UNIX socket file "/var/spool/postfix/postgrey/socket"
Apr 12 12:13:19 ms1 postgrey[13281]: Setting gid to "479 479"
Apr 12 12:13:19 ms1 postgrey[13281]: Setting uid to "984"
Как ни странно, в нем нет четкого обозначения идентификатора сокета - может, это и не обязательно? Но я все равно проверил netstat:
# netstat -l | grep postgrey
unix 2 [ ACC ] STREAM LISTENING 126293 /var/spool/postfix/postgrey/socket
... Я не специалист netstat
, но я думаю, это означает, что программа /postfix/postgrey/socket
прослушивает порт 126293.
Итак, я должен изменить свою строку в main.cf, чтобы она соответствовала этому номеру порта? Если да, то это не работает - или пока не работает! И, похоже, я не могу найти место для размещения альтернативной конфигурации порта / сокета, поэтому похоже, что вы застряли с тем, что они нам дали.
Любая помощь / совет приветствуются. ... Я думал, что теперь единственный выход - выяснить, как systemctl
набор инструментов работает, хотя я не хочу сейчас тратить время - сегодня воскресенье!
Fedora 21 и RHEL / CentOS 7 используют новую реализацию postgrey на основе Python.
В этой реализации только изменение, которое вам нужно в конфигурации Postfix, - это вызов службы из smtpd_recipient_restrictions
. Например, взято с моего собственного почтового сервера:
smtpd_recipient_restrictions =
#.....other stuff here
# This should be next-to-last
check_policy_service unix:postgrey/socket,
permit
Ах да, это было задокументировано в /usr/share/doc/postgrey-*/README-rpm
. :)