Обсуждение статьи тематического каталога: Использование OpenBSD spamd вместе с IPFW V2 в режиме грейлистинга. (spam spamd ipfw mail)Ссылка на текст статьи: http://www.opennet.me/base/net/spamd_freebsd_ipfw2.txt.html
И ещё немного. Оказалось, что утилита spamlogd, которая отвечает за продление white листинга для валидных IP также не работает без PF (точнее, /dev/pflogd0) и требует патчинга :-/
Правильный URL первого PR - http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/108657
Вот и третий PR на эту тему, пока без патча (буду рад помощи) http://www.freebsd.org/cgi/query-pr.cgi?pr=108679
ДД, Алекс
С аналогичными граблями сталкивался при попытке экспериментировать со spamd (лечил грязными хаками, до PR руки не дошли, а мейнтейнер в личку не ответил). Портик ооочень сырой, так что если исправите грабли и заберёте порт после 2-х недель таймаута - Родина вас не забудет (если не пожалеете личного времени, конечно :)). Подумываю об альтернативах spamd (postgrey?)
Спасибо за статью.
Правда сам совсем недавно уже через это прошёл.
А работает неплохо spamd.
Через работу с ipfw? а где PR? :)
Кстати, Вам удалось запустить spamlogd?
При запуске spamd-setup -t орет illegal option -- tПытался запустить на FreeBSD-6.2, собирал все строго по доке со всеми указанными патчами.
>При запуске spamd-setup -t орет illegal option -- t
>
>Пытался запустить на FreeBSD-6.2, собирал все строго по доке со всеми указанными
>патчами.
Не думаю. Забыли WITH_IPFW=you :)
Мне лишь интересно, откуда Вы такое значение откопали - "you"? Почитать Makefile, так там достаточно make -DWITH_IPFW, или более привычное WITH_IPFW=yes...
>Мне лишь интересно, откуда Вы такое значение откопали - "you"? Почитать Makefile,
>так там достаточно make -DWITH_IPFW, или более привычное WITH_IPFW=yes...Йоу! "Почитав Makefile" :) Нет, это прекрасно, что вам "лишь это" интересно из всей статьи. Бывает же такое ) "Почитав Makefile" вполне понятно что ему совершенно индифирентно - you, yes или flooders_must_die.
Во первых- автору респект.Во вторых- ничего не понимаю! Как в анекдоте "сколько не собирали велосипед- все равно танк выходит"
# make -DWITH_IPFW (либо WITH_IPFW=yes ;) )
при запуске spamd-setup
# spamd-setup: illegal option -- t
Все патчи наложены
FreeBSD 5.4
Я же написал - собирал все строго по статье, ничего нигде не забыл. Мало того, пытался руками собрать с нужными флагами - не прокатывает =(
Ну чудес-то не бывает.
1) Проверьте версию порта mail/spamd.
2) Пришлите подробный лог сборки - глянем.
1. Версия 3.7.2
2. Сборка по make WITH_IPFW=you (-DIPFW выдает тоже самое):===> Extracting for spamd-3.7_2
=> MD5 Checksum OK for spamd_3.7.tar.bz2.
=> SHA256 Checksum OK for spamd_3.7.tar.bz2.
===> Patching for spamd-3.7_2
===> Applying FreeBSD patches for spamd-3.7_2
===> Configuring for spamd-3.7_2
===> Building for spamd-3.7_2
===> spamd (all)
Warning: Object directory not changed from original /usr/ports/mail/spamd/work/spamd_3.7/spamd
cc -O2 -pipe -Wall -Wstrict-prototypes -ansi -c spamd.c
cc -O2 -pipe -Wall -Wstrict-prototypes -ansi -c sdl.c
cc -O2 -pipe -Wall -Wstrict-prototypes -ansi -c grey.c
cc -O2 -pipe -Wall -Wstrict-prototypes -ansi -o spamd spamd.o sdl.o grey.o
gzip -cn spamd.8 > spamd.8.gz
===> spamd-setup (all)
Warning: Object directory not changed from original /usr/ports/mail/spamd/work/spamd_3.7/spamd-setup
cc -O2 -pipe -Wall -Wstrict-prototypes -ansi -D_NO_NAMESPACE_POLLUTION -c spamd-setup.c
cc -O2 -pipe -Wall -Wstrict-prototypes -ansi -D_NO_NAMESPACE_POLLUTION -o spamd-setup spamd-setup.o -lz
gzip -cn spamd-setup.8 > spamd-setup.8.gz
===> spamdb (all)
Warning: Object directory not changed from original /usr/ports/mail/spamd/work/spamd_3.7/spamdb
cc -O2 -pipe -Wall -Wstrict-prototypes -ansi -I/usr/ports/mail/spamd/work/spamd_3.7/spamdb/../spamd -c spamdb.c
cc -O2 -pipe -Wall -Wstrict-prototypes -ansi -I/usr/ports/mail/spamd/work/spamd_3.7/spamdb/../spamd -o spamdb
spamdb.o
gzip -cn spamdb.8 > spamdb.8.gz
===> spamlogd (all)
Warning: Object directory not changed from original /usr/ports/mail/spamd/work/spamd_3.7/spamlogd
cc -O2 -pipe -Wall -Wstrict-prototypes -ansi -I/usr/ports/mail/spamd/work/spamd_3.7/spamlogd/../spamd -c
spamlogd.c
cc -O2 -pipe -Wall -Wstrict-prototypes -ansi -I/usr/ports/mail/spamd/work/spamd_3.7/spamlogd/../spamd -o
spamlogd spamlogd.o
gzip -cn spamlogd.8 > spamlogd.8.gz
Чудно, что появилась эта статья. Респекты!
Как раз собирался занятья этим вопросом.
Кстати как быть с spamlogd ? Удалось что-то сделать?
>Чудно, что появилась эта статья. Респекты!
>Как раз собирался занятья этим вопросом.
>Кстати как быть с spamlogd ? Удалось что-то сделать?
Пока нет. Проблема вот какая - spamd запускает tcpdump (более поздние версии - просто используют pcap()) на интерфейсе pflog, который создаёт PF. Суть проблемы в том, что там используется модификатор pass, который указывает на то, что трафик успешно прошёл через firewall. Снимать подобное с реального интерфейса бессмысленно, так как pcap на em0 будет работать _ДО_ IPFW. Пока я думаю, как можно это обойти.Варианты такие:
1) переписать spamlogd как плагин syslog и запихнуть его в syslog.conf (я такой фокус сделал в bruteblock). А в IPFW добавить правило log до pass. Вариант мне не нравится тем, что будет куча флуда от ipfw и не будет работать при выключенном логе. Из плюсов - быстрая скорость реализации, простота (хуже воровства ;-)). Можно даже сделать в режиме тейла на /var/log/security
2) Использовать divert сокеты и команду tee. Как по мне - вполне себе вариант. Минусы - я не работал с диверт сокетами и мне потребуется время чтобы переписать spamlogd для этой цели.
Кроме того, диверт не везде вкомпилен, но это, думаю, не проблема.я думаю,. что если мейнтейнер не ответит - я заберу порт, обновлю его до latest cvs version (там много чего улучшили) и сделаю метапорты spamd-ipfw и spamd-pf. И в spamd-ipfw сделаю другой spamlogd. Если хватит времени, конечно. Помощь - приветствуется. как и идеи по поводу spamlogd, возможно есть более простое и красивое решение.
http://www.binkd.spb.ru/howto/pfspamd_3.7.diffЯ вот так курочил, но, поскольку в сях полный ноль - то ограничился косметическими правками. С pf - работает.
На редкость полезная и своевременная статья!Будем надеяться, что автору в скором времени удастся победить spamlogd.
>На редкость полезная и своевременная статья!
Спасибо )
>
>Будем надеяться, что автору в скором времени удастся победить spamlogd.Победим. Главное - найти час времени на то, чтобы разобраться с divert сокетами )
Может я чего не понял, но spamd-setup сбрасывает таблицу перед загрузкой каждого списка из spamd.conf
В итоге имеем последний список, остальное улетает.
Столкнулся с такой проблемой:
стоит spamd-4.1.2 якобы с полной поддержкой ipfw
(бравда написано что это ещё всё же beta)
всё прекрасно работает...некоторое время,
потом в логе появляются такие сообщения:spamd[2042]: IPFW setsockopt(IP_FW_TABLE_ADD) (File exists)
которые говорят о том, что spamd пытается добавлять в таблицу ipfw нечто уже существующее
в результате сверяясь с базой и с таблицей ipfw
обнаружил недостачу половины адресов помеченных как WHITE в /var/db/spamdb
при попытке добавлять их вручную некоторые адреса снова исчезали и письма от "белых" адресов не прошли...
вобщем, если кто-то сталкивался с этим или просто есть какие-то идеи, буду благодарен)
Yes. I have worked on this for most of the day. At best I can find
14 entries in ipfw table 1; but 18 Whitelisted entries are reported
from spamd -d -v.I have no solution but will share as I must use this or decide on another option.
I have solved this problem. Just comment return(-1) in grey.c(string 365).
But then I have another problem:) The data base not refresh dinamicly!
I have solved this problem by adding string to my cron tab to exec restart of spamd for example each three minutes, because it can't correct refresh db dinamicly, only when startup. Such are the crutches.
Другмим словами здесь поможет только хирургическое вмешательство. Глубоко вникать в механизымы работы spamdb у меня не было времени, отделался этими кастылями:)
Если кто-то разобрался, то честь ему и хвала, если он здесь напишет как.
Вот такой наш ответ чемберлену:--- spamd/grey.c.orig 2008-07-14 00:20:22.000000000 +0500
+++ spamd/grey.c 2008-07-14 11:18:48.000000000 +0500
@@ -348,6 +348,7 @@
syslog_r(LOG_INFO, &sdata, "IPFW setsockopt(IP_FW_TABLE_FLUSH) (%m)");
if (debug)
fprintf(stderr, "IPFW setsockopt(IP_FW_TABLE_FLUSH) (%s)\n",strerror(errno));
+ close(ipfw_socket);
return(-1);
}@@ -362,10 +363,12 @@
if (setsockopt(ipfw_socket, IPPROTO_IP, IP_FW_TABLE_ADD, &ent, sizeof(ent)) < 0)
{
syslog_r(LOG_INFO, &sdata, "IPFW setsockopt(IP_FW_TABLE_ADD) (%m)");
+ close(ipfw_socket);
return(-1);
}
}+ close(ipfw_socket);
return(0);
}