Ключевые слова:spam, freebsd, mail, ipfw, (найти похожие документы)
From: Ged <ged@sandy.ru.>
Date: Mon, 29 Jan 2007 14:31:37 +0000 (UTC)
Subject: Поднятие spamd на FreeBSD 5 в связке с IPFW v1
Оригинал: http://ged.nnov.ru/text/freebsd/install_spamd_with_ipfw1.html
Была конкретная задача, поднять spamd на своем сервере, при этом уже
использовался IPFW 1. Так как сервер стоял и работал достаточно
исправно, то на него хотело ставить всего по минимуму.
Все примеры которые встречались, были основаны на использовании PF.
Оно и понятно. Spamd, так же как и PF был портирован с OpenBSD. Но мне
хотелось использовать именно IPFW. На freebsd.org нашел, что spamd
должен работать в том числе и только с IPFW без PF.
Т.к. периодически качать списки адресов спамеров душила жаба, то
остановился на использовании только серых списков.
Ставилось из портов.
# cd /usr/ports/mail/spamd/
После долгих поисков нашел что для IPFW компилировать нужно так
# make -DWITH_IPFW
Из-за того что был IPFW 1, который не поддерживает таблицы,
компилироваться оно отказывалось ругаясь:
grey.c: In function `configure_pf':
grey.c:189: error: syntax error before "ent"
grey.c:201: error: `ent' undeclared (first use in this function)
grey.c:201: error: (Each undeclared identifier is reported only once
grey.c:201: error: for each function it appears in.)
grey.c:202: error: `IP_FW_TABLE_FLUSH' undeclared (first use in this function)
grey.c:216: error: `IP_FW_TABLE_ADD' undeclared (first use in this function)
Error code 1
Когда ставил с IPFW 2 во время работы оно ругалось:
IPFW socket unavailable (Operation not permitted)
Т.к. основная задача была чтобы работало, то было решено просто
отключить места общения с фаерволом.
Для этого содержимое функции configure_pf была изменена в следующих
файлах:
/usr/ports/mувail/spamd/work/spamd_3.7/spamd/grey.c (строка 186)
/usr/ports/mail/spamd/work/spamd_3.7/spamd-setup/spamd-setup.c (строка 692)
на
return (0);
Т.е. оставлена как заглушку. После изменений компилируем и сразу
ставим
# make -DWITH_IPFW install
У меня почему-то новый пользователь не создался, пришлось создавать
самому:
# echo _spamd::::::Spamd Daemon:/nonexistent:nologin: | adduser -w random -f
Для того чтобы spamd мог нормально работать создаем файл базы данных и
разрешаем к нему доступ пользователю.
# touch /var/db/spamd
# chown _spamd:_spamd /var/db/spamd
Для того чтобы spamd писал свои логи в отдельный файл через syslog
добавляем в файл /etc/syslog.conf строки:
!spamd
*.* /var/log/spamd.log
Создаем файл и перезапускаем syslogd:
# touch /var/log/spamd.log
# /etc/rc.d/syslogd restart
И для ротации логов в файл /etc/newsyslog.conf добавляем:
/var/log/spamd.log 640 5 100 * JC
Для того чтобы spamd стартовал нужно в /etc/rc.conf добавить:
pfspamd_enable="YES"
pfspamd_flags="-v -g"
Настраиваем файл конфигурации /usr/local/etc/spamd.conf. В связи с тем
что я хотел использовать только серые списки, то у меня файл выглядит
так:
# cat /usr/local/etc/spamd.conf
all:\
:blacklist:whitelist:
blacklist:\
:black:\
:msg="SPAM. Blocked by me":\
:file=/usr/local/etc/spamd/blacklist.txt:
whitelist:\
:white:\
:file=/usr/local/etc/spamd/whitelist.txt:
Соответственно в один файл заносим то, что нужно пропускать сразу, а в
другой, то что пропускать вообще не надо.
В IPFW перед правилом разрешающим ходить почте на наш сервер, создаем
правило перенаправления почтового трафика на spamd:
ipfw add fwd 127.0.0.1,8025 tcp from any to me dst-port 25
Т.к. у нас spamd получился без возможности общения с фаерволом, то мы
разрешающие правила мы должны создавать сами. Для этого используем
следующий скрипт:
# cat /usr/data/script/spam_whitelist.sh
#!/bin/sh
ipfw_rulez=6030
ipfw_rulez_skipto=6051
ipfw_cmd="/sbin/ipfw add ${ipfw_rulez} skipto ${ipfw_rulez_skipto} tcp from "
ipfw_cmd_end="to me 25"
/sbin/ipfw delete ${ipfw_rulez} >/dev/null 2>&1
for ip in `/usr/local/sbin/spamdb | /usr/bin/grep WHITE | /usr/bin/awk -F\| '{ print $2; }'`; do
${ipfw_cmd} $ip ${ipfw_cmd_end} >/dev/null 2>&1
done
и вставляем его в /etc/crontab
*/5 * * * * root /usr/data/script/spam_whitelist.sh
Соответственно нужно правильно выставить номера правил. ipfw_rulez -
должно быть меньше номера правила перенаправления на spamd, а
ipfw_rulez_skipto должно быть наоборот, больше номера правила
перенаправления на spamd.
Теперь можно пытаться запустить spamd:
# /usr/local/etc/rc.d/pfspamd.sh start
Смотреть результаты работы можно через лог-файл:
# cat /var/log/spamd.log
а так же через:
/usr/local/sbin/spamdb
Статьи которые сильно помогли:
http://www.samag.ru/art/07.2005/07.2005_05.htmlhttp://devnull.lt/misc/spamd_on_freebsd_4_with_ipfwhttp://myforum.net.ua/index.php?showtopic=5843&pid=46782&st=0&#entry46782
Человек пытается портировать
http://www.mail-archive.com/freebsd-ipfw@freebsd.org/msg00904.html