Проверка SPF для exim в Debian GNU/Linux
Exim4 в Debian Lenny идет с отключенной проверкой SPF [1]. Задействовать эту замечательную штуку можно пересобрав пакет (это не Debian-way, так что этот способ отбрасываем сразу) или сделав финт ушами, описанный ниже.
# aptitude update # aptitude install libmail-spf-query-perl
По непонятной причине, в пакете нет init скрипта для запуска демона [2], так что создаем его ручками в /etc/init.d/spfd
#!/bin/sh
USER=mail
GROUP=mail
SOCK=/var/run/spfd/spfd.sock
PID=/var/run/spfd/spfd.pid
SPFD=/usr/sbin/spfd
DESC="SPF Daemon"
ARGS="-path=${SOCK} -setuser=${USER} -setgroup=${GROUP} -pathuser=${USER} -pathgroup=${GROUP}"
case "$1" in
start)
echo -n "Starting $DESC:"
start-stop-daemon --start --quiet --background --make-pidfile \
--pidfile ${PID} \
--exec ${SPFD} -- ${ARGS}
echo "."
;;
stop)
echo -n "Stopping $DESC:"
start-stop-daemon --stop --quiet --oknodo --signal 9 --pidfile "${PID}"
rm -f $SOCK $PID
echo "."
;;
restart|force-reload)
/etc/init.d/spfd stop
/etc/init.d/spfd start
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
и создаем парочку директорий:
# mkdir /var/run/spfd # chown mail:mail /var/run/spfd
Добавляем в автозагрузку:
# update-rc.d spfd defaults 19
И изменяем конфигурацию exim, для взаимодействия с демоном [3,4]:
spf_rcpt_acl:
# Check envelope sender
warn set acl_m8 = $sender_address
deny !acl = spf_check
warn message = Received-SPF: $acl_m8 ($acl_m7)
accept
spf_from_acl:
# Check header From:
warn set acl_m8 = ${address:$h_from:}
deny !acl = spf_check
warn message = Received-SPF: $acl_m8 ($acl_m7)
accept
spf_check:
warn set acl_m9 = ${readsocket{/var/run/spfd/spfd.sock}\
{ip=$sender_host_address\n\
helo=${if def:sender_helo_name\
{$sender_helo_name}{NOHELO}}\
\nsender=$acl_m8\n\n}{20s}{\n}{socket failure}}
# Defer on socket error
defer condition = ${if eq{$acl_m9}{socket failure}{yes}{no}}
message = Cannot connect to spfd
# Prepare answer and get results
warn set acl_m9 = ${sg{$acl_m9}{\N=(.*)\n\N}{=\"\$1\" }}
set acl_m8 = ${extract{result}{$acl_m9}{$value}{unknown}}
set acl_m7 = ${extract{header_comment}{$acl_m9}{$value}{}}
# Check for fail
deny condition = ${if eq{$acl_m8}{fail}{yes}{no}}
message = ${extract{smtp_comment}{$acl_m9}{$value}{}}
log_message = Not authorized by SPF
acceptacl_check_mail:
accept authenticated = *
deny message = $sender_host_address is not allowed to send mail from $sender_address_domain
!acl = spf_rcpt_acl
hosts = !+relay_from_hosts
accept
acl_check_data:
deny senders = :
!acl = spf_from_acl
accept
Если вы хоть немного знакомы с настройкой exim, этот пример не вызовет затруднений. В крайнем случае есть замечательная документация [5].
Запускаем spfd и перезапускаем exim:
# invoke-rc.d spfd start # invoke-rc.d exim4 restart
UPD 12/02/2010
Раскуривая man exim4 обнаружил, что финт ушами уже сделали разработчики Debian. Если используется раздельная конфигурация, достаточно поставить libmail-spf-query-perl и добавить
CHECK_RCPT_SPF = y
в /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs
Ссылки:
1. http://ru.wikipedia.org/wiki/Sender_Policy_Framework
2. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=235028
3. http://www.openspf.org/exim4.spf.acl-2.09.txt
4. exim-users [at] exim [dot] org/msg18975.html">http://www.mail-archive.com/exim-users
5. Документация по exim на русском
6. Связка exim и dovecot с веб интерфейсом postfixadmin
PS И не поленитесь добавить запись с SPF в свою зону DNS.
- Блог пользователя NeO
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
