The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Использование OpenBSD spamd вместе с IPFW V2 в режиме грейлистинга. (spam spamd ipfw mail)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: spam, spamd, ipfw, mail,  (найти похожие документы)
From: Alex Samorukov <samm@os2.kiev.ua.> Newsgroups: email Date: Mon, 2 Feb 2007 14:31:37 +0000 (UTC) Subject: Использование OpenBSD spamd вместе с IPFW V2 в режиме грейлистинга. Количество спама в моём ящике стало невыносимо большим. Традиционные методы борьбы, такие как списки rbl, проверка валидности HELO, spf, spamassasin и подобные уловки стали менее эффективны (или просто спама стало больше?). Вобщем, решил я настроить грейлистинг. Так как на серверах используется FreeBSD, а делать решение зависимое от почтовика мне не хотелось - выбор пал на OpenBSD spamd Принцип работы spamd в режиме greylisting Демон spamd запускается и слушает tcp порт 8025. В Firewall стоит правило, разворачивающее все соединения пришедшие на порт 25 и не находящиеся в таблице whitelist на порт 8025 к spamd. Spamd, получив соединение, запоминает ip и адрес получателя/отправителя, после чего выдаёт сообщение о том, что сервис временно недоступен. Если при повторной попытке, произошедшей через указанное время, IP и адреса совпадут - заносим получателя в "белый" список на длительное время. Установка Казалось бы - что может быть тривиальнее чем установить BSD порт. "ничто не предвещало беды", как сказал бы диктор передачи 911. # cd /usr/ports/mail/spamd # make WITH_IPFW=you install clean WITH_IPFW обозначает "собрать с поддержкой IPFW". Дело в том, что на моих серверах используется IPFW и включать PF только ради spamd мне совершенно не хотелось. Пакет собрался и установился. Ура? Теперь самое время прописать правила для firewall в rc.firewall. Комментируем правило, разрешающее входящие соединения на 25 порт и вместо него пишем что-то вроде # bsd spamd rules set. Use table 9 and 10 fow white and black listing ${fwcmd} add fwd 127.0.0.1,8025 tcp from table\(10\) to me 25 in ${fwcmd} add allow tcp from table\(9\) to me 25 in ${fwcmd} add fwd 127.0.0.1,8025 tcp from any to me 25 in Таблицы 9 и 10 я выбрал потому, что таблицы 1-2, используемые по умолчанию, у меня уже используются для совсем других задач. Вот тут и начались первые проблемы. Утилита spamd-setup, которая заполняет таблицу "плохих" хостов на основе списков rbl при добавлении ключика -t падала с много обещающим сообщением "core dumped". GCC, gdb и send-pr - патч готов, едем дальше. Для того, чтобы логи писались "куда надо" добавляем в файл /etc/syslog.conf строки: !spamd daemon.err;daemon.warn;daemon.info /var/log/spamd и перезапускаем syslogd. Теперь прописываем в /etc/rc.conf pfspamd_enable="YES" pfspamd_flags="-t 9 -g -n bsd -v" pfspamd_setup_flags="-t 10" Как выяснилось - если на машине запущен spamd от SpamAssassin - BSD spamd просто не стартанёт. Дело в том, что стартовый rc скрипт считает, что демон уже запущен. Для исправления ситуации и добавления поддержки флагов в spamd-setup я сделал патч. Дальше - интереснее. После запуска spamd в логах стали появляться загадочные сообщения вида: spamd[3146]: IPFW socket unavailable (Operation not permitted) ps axu 3146 дал понять, что spamd пытается "работать" с ipfw под пользователем nobody. Так как для работы с BSD IPFW требуется тип сокета raw_sockets, доступный только супер-пользователю, система посылает его в сад-огород. Изучение исходников spamd показало, что он ищет системного пользователя _spamd и если не находит его - запускает детишек с правами nobody. Для решения проблемы я добавил в систему пользователя _spamd с uid 0 (естественно, без пароля и с shell nologin), перезапустив spamd. В это сложно поверить, но после стольких мучений оно заработало! "Процесс" вы можете отслеживать в spamd.log, а для управления списками очень удобно использовать утилиту spamdb. Злоключение. Хотелось бы пожелать автором портов проверять их работоспособность до отправки. Надеюсь, что эта заметка была полезной для читателя. Буду благодарен за дельные замечания и советы. Alex Samorukov, <samm@os2.kiev.ua.>

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, Samm, 12:21, 02/02/2007 [ответить] [смотреть все]
  • +/
    И ещё немного. Оказалось, что утилита spamlogd, которая отвечает за продление white листинга для валидных IP также не работает без PF (точнее, /dev/pflogd0) и требует патчинга :-/
     
  • 1.2, Samm, 12:35, 02/02/2007 [ответить] [смотреть все]
  • +/
    Правильный URL первого PR - http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/108657
     
  • 1.3, Samm, 12:42, 02/02/2007 [ответить] [смотреть все]
  • +/
    Вот и третий PR на эту тему, пока без патча (буду рад помощи) http://www.freebsd.org/cgi/query-pr.cgi?pr=108679
     
     
  • 2.8, Vlad V. Teterya, 17:26, 03/02/2007 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    ДД, Алекс С аналогичными граблями сталкивался при попытке экспериментировать со ... весь текст скрыт [показать] [показать ветку]
     
  • 1.4, Zhukov Alexandr, 13:22, 02/02/2007 [ответить] [смотреть все]  
  • +/
    Спасибо за статью.
    Правда сам совсем недавно уже через это прошёл.
    А работает неплохо spamd.
     
     
  • 2.5, Samm, 13:25, 02/02/2007 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Через работу с ipfw? а где PR? :)
    Кстати, Вам удалось запустить spamlogd?
     
  • 1.6, Yuri Khachaturyan, 17:06, 02/02/2007 [ответить] [смотреть все]  
  • +/
    При запуске spamd-setup -t орет illegal option -- t

    Пытался запустить на FreeBSD-6.2, собирал все строго по доке со всеми указанными патчами.

     
     
  • 2.7, Samm, 17:12, 02/02/2007 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Не думаю Забыли WITH_IPFW you ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.9, GateKeeper, 09:25, 04/02/2007 [^] [ответить] [смотреть все]  
  • +/
    Мне лишь интересно, откуда Вы такое значение откопали - you Почитать Makefile... весь текст скрыт [показать]
     
     
  • 4.10, Samm, 12:43, 04/02/2007 [^] [ответить] [смотреть все]  
  • +/
    Йоу Почитав Makefile Нет, это прекрасно, что вам лишь это интересно из в... весь текст скрыт [показать]
     
  • 1.11, dark_stealth, 12:21, 05/02/2007 [ответить] [смотреть все]  
  • +/
    Во первых- автору респект.

    Во вторых- ничего не понимаю! Как в анекдоте "сколько не собирали велосипед- все равно танк выходит"
    # make -DWITH_IPFW (либо WITH_IPFW=yes ;) )
    при запуске spamd-setup
    # spamd-setup: illegal option -- t
    Все патчи наложены
    FreeBSD 5.4

     
  • 1.12, Yuri Khachaturyan, 13:10, 05/02/2007 [ответить] [смотреть все]  
  • +/
    Я же написал - собирал все строго по статье, ничего нигде не забыл. Мало того, пытался руками собрать с нужными флагами - не прокатывает =(
     
     
  • 2.13, Samm, 13:38, 05/02/2007 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Ну чудес-то не бывает 1 Проверьте версию порта mail spamd 2 Пришлите подробн... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.19, Yuri Khachaturyan, 11:40, 07/02/2007 [^] [ответить] [смотреть все]  
  • +/
    1 Версия 3 7 2 2 Сборка по make WITH_IPFW you -DIPFW выдает тоже самое ... весь текст скрыт [показать]
     
  • 1.14, Instruktor, 13:46, 05/02/2007 [ответить] [смотреть все]  
  • +/
    Чудно, что появилась эта статья. Респекты!
    Как раз собирался занятья этим вопросом.
    Кстати как быть с spamlogd ? Удалось что-то сделать?
     
     
  • 2.15, Samm, 14:28, 05/02/2007 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Пока нет Проблема вот какая - spamd запускает tcpdump более поздние версии - п... весь текст скрыт [показать] [показать ветку]
     
  • 1.16, Andrey Y. Ostanovsky, 00:32, 06/02/2007 [ответить] [смотреть все]  
  • +/
    http://www.binkd.spb.ru/howto/pfspamd_3.7.diff

    Я вот так курочил, но, поскольку в сях полный ноль - то ограничился косметическими правками. С pf - работает.

     
  • 1.17, RedRat, 10:45, 06/02/2007 [ответить] [смотреть все]  
  • +/
    На редкость полезная и своевременная статья!

    Будем надеяться, что автору в скором времени удастся победить spamlogd.

     
     
  • 2.18, Samm, 10:58, 06/02/2007 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    >На редкость полезная и своевременная статья!
    Спасибо )
    >
    >Будем надеяться, что автору в скором времени удастся победить spamlogd.

    Победим. Главное - найти час времени на то, чтобы разобраться с divert сокетами )

     
  • 1.20, Александр, 02:33, 14/03/2007 [ответить] [смотреть все]  
  • +/
    Может я чего не понял, но spamd-setup сбрасывает таблицу перед загрузкой каждого списка из spamd.conf
    В итоге имеем последний список, остальное улетает.
     
  • 1.21, Aleksey, 18:13, 28/09/2007 [ответить] [смотреть все]  
  • +/
    Столкнулся с такой проблемой:
    стоит spamd-4.1.2 якобы с полной поддержкой ipfw
    (бравда написано что это ещё всё же beta)
    всё прекрасно работает...некоторое время,
    потом в логе появляются такие сообщения:

    spamd[2042]: IPFW setsockopt(IP_FW_TABLE_ADD) (File exists)

    которые говорят о том, что spamd пытается добавлять в таблицу ipfw нечто уже существующее

    в результате сверяясь с базой и с таблицей ipfw
    обнаружил недостачу половины адресов помеченных как WHITE в /var/db/spamdb
    при попытке добавлять их вручную некоторые адреса снова исчезали и письма от "белых" адресов не прошли...
    вобщем, если кто-то сталкивался с этим или просто есть какие-то идеи, буду благодарен)

     
     
  • 2.22, Dewayne, 11:17, 25/11/2007 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    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.

     
     
  • 3.23, Aleksey, 20:03, 27/11/2007 [^] [ответить] [смотреть все]  
  • +/
    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 у меня не было времени, отделался этими кастылями:)
    Если кто-то разобрался, то честь ему и хвала, если он здесь напишет как.
     
     
  • 4.24, Vladimir, 10:47, 14/07/2008 [^] [ответить] [смотреть все]  
  • +/
    Вот такой наш ответ чемберлену:

    --- 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);
    }

     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:





      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor