The OpenNET Project / Index page

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

Настройка связки PF + spamd (spam firewall pf spamd)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: spam, firewall, pf, spamd,  (найти похожие документы)
From: Z][ANSWER Date: Sun, 20 Jan 2007 17:02:14 +0000 (UTC) Subject: Настройка связки PF + spamd Оригинал: http://myforum.net.ua/index.php?showtopic=5843 Для чего была написана эта статья - документации по установке и настройке связки PF+spamd в интернете предостаточно, но при настройке я столкнулся с некоторыми трудностями ввиду того, что детально процесс не описан нигде. После парсинга огромного количества документации, всё же была собрана нужная информация и соединена в единое целое - эта статья описывает детальную пошаговую настройку с 100% результатом успеха. В данный момент с помощью такой схемы уже трудится ряд боевых серверов, которыми управляю я. Что нам понадобится для того чтобы создать данную защиту - это сам фаервол PF и спам демон spamd - оба они портированы из OpenBSD. Будем считать, что вы уже безболезненно перешли с FreeBSD=4.x на FreeBSD=5.x>6.x, так как поддержка PF в четвёртой ветке весьма спорная. Поэтому описывать установку PF с портов я не буду. Для включения PF вам нужно будет указать следующие опции в ядре: # Для включения PF добавляем данные опции в ядро: # The pf packet filter consists of three devices: # The `pf' device provides /dev/pf and the firewall code itself. # The `pflog' device provides the pflog0 interface which logs packets. # The `pfsync' device provides the pfsync0 interface used for # synchronization of firewall state tables (over the net). device pf # PF OpenBSD packet-filter firewall device pflog # logging support interface for PF device pfsync # Synchronization interface for PF device carp # Common Address Redundancy Protocol # Для включения поддержки шейпера через ALTQ добавим: # altq(9). Enable the base part of the hooks with the ALTQ option. # Individual disciplines must be built into the base system and can not be # loaded as modules at this point. In order to build a SMP kernel you must # also have the ALTQ_NOPCC option. options ALTQ options ALTQ_CBQ # Class Bases Queueing options ALTQ_RED # Random Early Detection options ALTQ_RIO # RED In/Out options ALTQ_HFSC # Hierarchical Packet Scheduler options ALTQ_CDNR # Traffic conditioner options ALTQ_PRIQ # Priority Queueing options ALTQ_NOPCC # Required for SMP build Теперь когда PF поддерживается ядром, для его включения нам будет достаточно добавить следующие строки в rc.conf: pf_enable="YES" # Set to YES to enable packet filter (pf) pf_rules="/etc/pf.rules" # rules definition file for pf pf_program="/sbin/pfctl" # where the pfctl program lives pf_flags="" # additional flags for pfctl pflog_enable="YES" # Set to YES to enable packet filter logging pflog_logfile="/var/log/pflog" # where pflogd should store the logfile pflog_program="/sbin/pflogd" # where the pflogd program lives pflog_flags="" # additional flags for pflogd Таким образом мы получили работающий полнофункциоанальный фаервол с возможностью шейпинга трафика через ALTQ и поддержкой протокола CARP Теперь когда PF у нас установлен, проведём установку spamd - найти его можно в портах: /usr/ports/mail/spamd Для компиляции и установки порта проведём ряд нехитрых команд: localhost# cd /usr/ports/mail/spamd localhost# make localhost# make install localhost# make clean Теперь когда мы скомпилировали и установили spamd, создадим устройство /dev/fd, необходимое для записи демоном данных в таблицы PF, для это выполним следующую команду: mount -t fdescfs fdescfs /dev/fd И добавим в fstab вот эту строку, для автоматического монтирования устройства при загрузке: fdescfs /dev/fd fdescfs rw 0 0 Самое время посмотреть конфиг нашего демона, он находится в: /usr/local/etc/spamd.conf, проведём необходимые изменения в нём, до нужного нам уровня фильтрации и включения всех необходимых опций: # # $FreeBSD: /usr/local/etc/spamd.conf,v 1.1 2006/01/26 13:54:48 Z][ANSWER Exp $ # $OpenBSD: spamd.conf,v 1.12 2005/01/16 17:16:44 deraadt Exp $ # # spamd config file, read by spamd-setup(8) for spamd(8) # # See spamd.conf(5) # # Configures whitelists and blacklists for spamd # # Strings follow getcap(3) convention escapes, other than you # can have a bare colon (:) inside a quoted string and it # will deal with it. See spamd-setup(8) for more details. # # "all" must be here, and defines the order in which lists are applied # whitelists apply to the previous blacklist. more than one whitelist # may be applied to each blacklist # # As of November 2004, a place to search for black lists is # http://spamlinks.net/filter-bl.htm # # Some of the URLs below point to www.openbsd.org locations. Those # files are likely to be mirrored to other OpenBSD www mirrors located # around the world. Hence, it is possible to edit this file and rewrite # www.openbsd.org with, for instance, to www.de.openbsd.org all:\ :spamhaus:spews1:spews2:china:korea:whitelist:blacklist: # Mirrored from http://spfilter.openrbl.org/data/sbl/SBL.cidr.bz2 spamhaus:\ :black:\ :msg="SPAM. Your address %A is in the Spamhaus Block List\n\ See http://www.spamhaus.org/sbl and\ http://www.abuse.net/sbl.phtml?IP=%A for more details":\ :method=http:\ :file=www.openbsd.org/spamd/SBL.cidr.gz: # Mirrored from http://www.spews.org/spews_list_level1.txt spews1:\ :black:\ :msg="SPAM. Your address %A is in the spews level 1 database\n\ See http://www.spews.org/ask.cgi?x=%A for more details":\ :method=http:\ :file=www.openbsd.org/spamd/spews_list_level1.txt.gz: # Mirrored from http://www.spews.org/spews_list_level2.txt spews2:\ :black:\ :msg="SPAM. Your address %A is in the spews level 2 database\n\ See http://www.spews.org/ask.cgi?x=%A for more details":\ :method=http:\ :file=www.openbsd.org/spamd/spews_list_level2.txt.gz: # Mirrored from http://www.okean.com/chinacidr.txt china:\ :black:\ :msg="SPAM. Your address %A appears to be from China\n\ See http://www.okean.com/asianspamblocks.html for more details":\ :method=http:\ :file=www.openbsd.org/spamd/chinacidr.txt.gz: # Mirrored from http://www.okean.com/koreacidr.txt korea:\ :black:\ :msg="SPAM. Your address %A appears to be from Korea\n\ See http://www.okean.com/asianspamblocks.html for more details":\ :method=http:\ :file=www.openbsd.org/spamd/koreacidr.txt.gz: # Whitelists are done like this, and must be added to "all" after each # blacklist from which you want the addresses in the whitelist removed. # whitelist:\ :white:\ :file=/var/spool/spamd/whitelist.txt blacklist:\ :black:\ :msg="SPAM! Go fsck anyone else!":\ :file=/var/spool/spamd/blacklist.txt relaydb-black:\ :black:\ :msg="SPAM. Your address %A is in my relaydb list.":\ :method=exec:\ :file=relaydb -4lb: relaydb-white:\ :white:\ :method=exec:\ :file=relaydb -4lw: blacklist:\ :black:\ :msg="SPAM! Go fsck anyone else!":\ :file=/var/spool/spamd/blacklist.txt Теперь, когда мы отредактировали конфиг и включили все необходимые опции, нужно создать необходимые нам файлы, а это: /var/spool/spamd/whitelist.txt и /var/spool/spamd/blacklist.txt, а также файл, в котором будут храниться статические IP адреса нашей сети /var/spool/spamd/whitelist, они не будут проходить проверки на спам. Для это выполняем следующие команды: localhost# touch /var/spool/spamd/whitelist.txt localhost# touch /var/spool/spamd/blacklist.txt localhost# touch /var/spool/spamd/whitelist В наш whitelist.txt мы добавим следующую строку: all:\ :spamhaus:spews1:spews2:china:korea:whitelist:blacklist: А в наш whitelist мы напишем наши IP адреса которые не должны проходить проверку через spamd: 192.168.1.2/24 Всё, конфиг демона spamd, нам уже больше не понадобится, поэтому добавим следующие строки в наш rc.conf, для запуска демона: pfspamd_enable="YES" # Set to Yes to enable spamd pfspamd_flags="-v -g -G 5:4:864" # Extra flags passed to start command Теперь включим в наш боевой комплекс ещё одну новую интересную способность - это spamlogd демон позволяющий анализировать логи pflogd, для его запуска мы напишем небольшой rc скриптик: #!/bin/sh # # $FreeBSD: usr/local/etc/rc.d/pfspamlogd.sh.in,v 1.1 2006/05/24 18:44:28 Z][ANSWER Exp $ # # PROVIDE: pfspamlogd # REQUIRE: NETWORKING # BEFORE: mail # KEYWORD: shutdown # # Add the following lines to /etc/rc.conf to enable spamd: # pfspamlogd_enable (bool): Set to "NO" by default. # Set it to "YES" to enable spamd # pfspamlogd_flags (str): Set to "" by default. # Extra flags passed to start command. . /etc/rc.subr name="pfspamlogd" rcvar=`set_rcvar` command="/usr/local/libexec/spamlogd" [ -z "$pfspamlogd_enable" ] && pfspamlogd_enable="NO" [ -z "$pfspamlogd_flags" ] && pfspamlogd_flags="" load_rc_config $name run_rc_command "$1" И добавим следующие строки в наш rc.conf, для запуска демона: pfspamlogd_enable="YES" # Set to Yes to enable spamlogd pfspamlogd_flags="" # Extra flags passed to start command Осталось последнее, написать необходимые правила для фаервола, для этого - отредактируем конфиг нашего PF, он находится по адресу: /etc/pf.rules Сначала мы создадим необходимые таблицы, в которые будут записываться демоном нежелательные IP адреса, для в этого в секцию Tables добавим вот эти строки: # Tables for spamd table <spamd> persist table <spamd-white> persist table <spamd-whitelist> persist file "/var/spool/spamd/whitelist" В секцию NAT/RDR добавим следующие правила для редиректа почтового трафика на наш демон: # Redirect all connections to our smtp to spamd no rdr on lo0 from any to any rdr pass inet proto { tcp } from <spamd-whitelist> to $ins_ip port { smtp } -> $ins_ip port smtp rdr pass inet proto { tcp } from <spamd> to port { smtp } -> lo0 port spamd rdr pass inet proto { tcp } from !<spamd-white> to port { smtp } -> lo0 port spamd А в секцию Packet Filtering добавим вот эти правила, разрешающие конект к нашему почтовому демону: # Allow incoming email pass in log on $out_if inet proto { tcp } from any to $out_if port { smtp pop3 } keep state pass in log on $ins_if inet proto { tcp } from any to $ins_ip port { smtp pop3 } keep state Всё, остаётся теперь только выполнить запуск PF и spamd: localhost# pfctl -e localhost# pfctl -f /etc/pf.rules localhost# /usr/local/etc/rc.d/pfspamd.sh start localhost# /usr/local/etc/rc.d/pfspamlogd.sh start localhost# spamd-setup -d Мы можем также добавить в наш crontab запись, чтобы таблицы пополнялись по расписанию автоматически через spamd-setup: 30 * * * * root /usr/local/sbin/spamd-setup В случае, если мы хотим, чтобы логи велись спомощью syslogd, то добавим вот эти строчки в /etc/syslogd.conf и не забудем создать одноимённый файл в /var/log/: !spamd daemon.err;daemon.warn;daemon.info /var/log/spamd.log localhost# touch /var/log/spamd.log И для ротации логов воспользуемся системой newsyslog, для этого добавляем следующее в /etc/newsyslog.conf: /var/log/spamd.log 664 7 100 * J Ну вот и всё теперь можем лишь наслаждаться тем, как работает наш спам демон, вот вывод его работы с помощью простой команды потокового просмотра файлов в реальном времени tail: localhost# tail -F /var/log/spamd.log Jan 28 01:00:02 ns spamd[98534]: 64.174.136.165: connected (6/5) Jan 28 01:00:09 ns spamd[98534]: (GREY) 64.174.136.165: <barnes@connellco.com.> -> <tolyk@tolpa.net.> Jan 28 01:00:09 ns spamd[98534]: 64.174.136.165: disconnected after 7 seconds. Jan 28 01:00:13 ns spamd[98534]: 81.176.67.249: disconnected after 395 seconds. lists: spews1 spews2 Jan 28 01:00:13 ns spamd[98534]: (BLACK) 81.176.67.249: <SoftoRooMTeaM@SoftoRooM.NeT.> -> <college@tolpa.net.> Jan 28 01:00:21 ns spamd[98534]: (BLACK) 81.222.129.37: <gluck@mail.subscribe.ru.> -> <varenik@tolpa.net.> Jan 28 01:00:27 ns spamd[98534]: 81.176.67.249: disconnected after 395 seconds. lists: spews1 spews2 Jan 28 01:00:28 ns spamd[98534]: 81.176.67.249: connected (4/4), lists: spews1 spews2 Jan 28 01:01:04 ns spamd[98534]: 195.5.21.129: connected (5/5), lists: spews2 Jan 28 01:01:44 ns spamd[98534]: 206.161.124.227: connected (6/6), lists: spews1 spews2 Jan 28 01:01:56 ns spamd[98534]: 81.176.67.249: To: college@tolpa.net Jan 28 01:01:56 ns spamd[98534]: 81.176.67.249: Subject: Уведомление о новых темах на подписанный форум ( From Твой софтовый форум! ) Jan 28 01:01:56 ns spamd[98534]: 81.176.67.249: From: "Твой софтовый форум!" <SoftoRooMTeaM@SoftoRooM.NeT.> Jan 28 01:02:05 ns spamd[98534]: 81.222.129.37: From: PEDROSOFT <alex@kommuna.net.ua.> Jan 28 01:02:05 ns spamd[98534]: 81.222.129.37: To: "comp.soft.linux.discuss" <varenik@tolpa.net.> (6983212) Jan 28 01:02:05 ns spamd[98534]: 81.222.129.37: Subject: =?koi8-r?Q?=F5=D3=D4=C1=CE=CF=D7=CB=C1=20=D3=D4=C9=CC=C5=CA=20=D7=20?= Jan 28 01:02:23 ns spamd[98534]: 81.30.160.9: connected (7/6) Jan 28 01:02:23 ns spamd[98534]: (GREY) 81.30.160.9: <> -> <pm@all.net.ua.> Jan 28 01:02:23 ns spamd[98534]: 81.30.160.9: disconnected after 0 seconds. Jan 28 01:02:31 ns spamd[98534]: 81.246.21.106: connected (7/6) Jan 28 01:02:31 ns spamd[98534]: (GREY) 81.246.21.106: <26amos@aastrom.com.> -> <topp@tolpa.net.> Jan 28 01:02:31 ns spamd[98534]: 81.246.21.106: disconnected after 0 seconds. Jan 28 01:02:41 ns spamd[98534]: 81.222.64.173: connected (7/7), lists: spews1 spews2 Jan 28 01:03:14 ns spamd[98534]: 81.176.67.249: disconnected after 398 seconds. lists: spews1 spews2 Jan 28 01:03:15 ns spamd[98534]: 81.222.64.177: connected (7/7), lists: spews1 spews2 Jan 28 01:03:22 ns spamd[98534]: 81.222.129.37: disconnected after 398 seconds. lists: spews1 spews2 Jan 28 01:03:38 ns spamd[98534]: (BLACK) 69.60.100.35: <Temple.pxpp@dynamiccorporations.com.> -> <georg_gor@tolpa.net.> В давершение всего сказано, есть прекрасная командачка для управления spamd базой GREY LIST - это spamdb, вот вывод её работы на экран: localhost# spamdb GREY|12.129.219.97|<Eva.Bertalan@lionbridge.com.>|<alex_lysenko@all.net.ua.>|11484 86568|1148500968|1148500968|1|0 GREY|148.221.124.62|<everitt@hsuchi.net.>|<alex@tolpa.net.>|1148484466|1 148498866| 1148498866|1|0 GREY|151.49.99.22|<beta@otakumail.com.>|<alex@tolpa.net.>|1148485328|114 8499728|11 48499728|1|0 WHITE|160.79.37.121|||1148484080|1148484500|1151594950|3|0 WHITE|193.110.72.1|||1148484089|1148485948|1151596391|2|0 GREY|193.252.22.26|<ztrgek@rsc-aachen.de.>|<sven@tolpa.net.>|1148486045| 1148500445 |1148500445|1|0 GREY|193.252.23.69|<stella.santos@juno.com.>|<yavi@all.net.ua.>|11484854 53|1148499 853|1148499853|1|0 WHITE|194.67.45.222|||1148484457|1148485231|1151595671|3|0 WHITE|195.184.209.238|||1148484213|1148484809|1151595250|2|0 GREY|195.184.218.30|<diaf@fnra.com.>|<ne9@all.net.ua.>|1148485122|114849 9522|11484 99522|2|0 Вот собственно и всё, если что-то не понятно или вы считаете, что какой-то момент освещён плохо или вообще у вас есть какие-то замечания и исправления, пишите, пожалуйста. Буду рад услышать их и исправить недочёты в данной статье. Особая благодарность и мой респект уважаемым YO!zha & Uta, за помощь в создание этой статьи.. With Best Regards, SysAdmin ISP "Tolpa.neT" aka Z][ANSWER

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

Обсуждение [ RSS ]
  • 1.1, AlektroNik (??), 13:18, 29/05/2008 [ответить]  
  • +/
    А с какой целью в spamd.conf

    Два раза повторяются строки:

               blacklist:\
                   :black:\
                   :msg="SPAM! Go fsck anyone else!":\
                   :file=/var/spool/spamd/blacklist.txt

     
  • 1.2, AlektroNik (??), 16:26, 29/05/2008 [ответить]  
  • +/
    Поправлю немного (у меня FreeBSD 7.0):
    1)В /etc/rc.conf надо прописать не :
               pfspamd_enable="YES"                    
               pfspamd_flags="-v -g -G 5:4:864"        
               pfspamlogd_enable="YES"                    
               pfspamlogd_flags=""

    а нужно писать так (без ключа -g и вместо "pf" поставить "ob"):
               obspamd_enable="YES"                    
               obspamd_flags="-v -G 5:4:864"
               obspamlogd_enable="YES"                    
               obspamlogd_flags=""

    2) Скрипт для запуска obspamlogd писать не надо, все уже написано!
    3) И для логов редактируем не /etc/syslogd.conf, а
    /etc/syslog.conf

     
  • 1.3, AlektroNik (??), 16:28, 29/05/2008 [ответить]  
  • +/
    Ну и конфиг находится не тут:
    /usr/local/etc/spamd.conf

    а тут:
    /usr/local/etc/spamd/spamd.conf

     
  • 1.4, Andrey (??), 10:13, 18/05/2009 [ответить]  
  • +/
    А как насчет пользователей которые отправляют почту не из 192.168.1.0/24 а предположим из дома, где динамический ip.
     
  • 1.5, Alive (??), 18:51, 11/06/2009 [ответить]  
  • +/
    А там пусть отправляют через, допустим, 465 порт с обязательной авторизацией на смтп-сервере.
     
  • 1.6, zilberstein (?), 16:29, 04/06/2013 [ответить]  
  • +/
    Одно НО: Spamhaus -- организация, которая пытается ввести цензуру в интернете. Блокирует сети датацентров и целые страны.

    НЕ ИСПОЛЬЗУЙТЕ Spamhaus !

     

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




    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру