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 от 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.>
1105 Прочтений • [Использование OpenBSD spamd вместе с IPFW V2 в режиме грейлистинга. (spam spamd ipfw mail)] [08.05.2012] [Комментариев: 0]