Укрощаем спам или PF и spamd против спамеров - Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Операционные системы и ПО » Системному администратору » Укрощаем спам или PF и spamd против спамеров (Настройка связки PF + spamd)
Укрощаем спам или PF и spamd против спамеров
LIXДата: Пятница, 26.11.2010, 18:59 | Сообщение # 1
Подполковник
Группа: Администраторы
Сообщений: 101
Награды: 1
Репутация: 0
Статус: Offline
Укрощаем спам или PF и spamd против спамеров
 
LIXДата: Пятница, 26.11.2010, 19:00 | Сообщение # 2
Подполковник
Группа: Администраторы
Сообщений: 101
Награды: 1
Репутация: 0
Статус: Offline
#
# $ FreeBSD: sysadmin/pf+spamd,v 4.8 2006/05/24 18:50:33 Z][ANSWER Exp $
#

Для чего была написана эта статья - документации по установке и настройке связки PF+spamd в интернете предостаточно, но при настройке я столкнулся с некоторыми трудностями ввиду того, что детально процесс не описан нигде. После парсинга огромного количества документации, всё же была собрана нужная информация и соединена в единое целое - эта статья описывает детальную пошаговую настройку с 100% результатом успеха. В данный момент с помощью такой схемы уже трудится ряд боевых серверов, которыми управляю я.

Что нам понадобится для того чтобы создать данную защиту - это сам фаервол PF и спам демон spamd - оба они портированы из OpenBSD. Будем считать, что вы уже безболезненно перешли с FreeBSD=4.x на FreeBSD=5.x>6.x, так как поддержка PF в четвёртой ветке весьма спорная. Поэтому описывать установку PF с портов я не буду.

Для включения PF вам нужно будет указать следующие опции в ядре:

Код
# Для включения PF добавляем данные опции в ядро:

 
LIXДата: Пятница, 26.11.2010, 19:00 | Сообщение # 3
Подполковник
Группа: Администраторы
Сообщений: 101
Награды: 1
Репутация: 0
Статус: Offline
# 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

 
LIXДата: Пятница, 26.11.2010, 19:01 | Сообщение # 4
Подполковник
Группа: Администраторы
Сообщений: 101
Награды: 1
Репутация: 0
Статус: Offline
Таким образом мы получили работающий полнофункциоанальный фаервол с возможностью шейпинга трафика через 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:

 
LIXДата: Пятница, 26.11.2010, 19:01 | Сообщение # 5
Подполковник
Группа: Администраторы
Сообщений: 101
Награды: 1
Репутация: 0
Статус: Offline
# 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

 
LIXДата: Пятница, 26.11.2010, 19:01 | Сообщение # 6
Подполковник
Группа: Администраторы
Сообщений: 101
Награды: 1
Репутация: 0
Статус: Offline
Осталось последнее, написать необходимые правила для фаервола, для этого - отредактируем конфиг нашего 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:

 
LIXДата: Пятница, 26.11.2010, 19:02 | Сообщение # 7
Подполковник
Группа: Администраторы
Сообщений: 101
Награды: 1
Репутация: 0
Статус: Offline
Код
/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> -> <x.x.x.x@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> -> <x.x.x.x@tolpa.net>
Jan 28 01:00:21 ns spamd[98534]: (BLACK) 81.222.129.37: <gluck@mail.subscribe.ru> -> <x.x.x.x@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: x.x.x.x@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" <x.x.x.x@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: <> -> <x.x.x.x@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> -> <x.x.x.x@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> -> <x.x.x.x@tolpa.net>

 
LIXДата: Пятница, 26.11.2010, 19:02 | Сообщение # 8
Подполковник
Группа: Администраторы
Сообщений: 101
Награды: 1
Репутация: 0
Статус: Offline
В давершение всего сказано, есть прекрасная командачка для управления 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|1148498866|
1148498866|1|0
GREY|151.49.99.22|<beta@otakumail.com>|<alex@tolpa.net>|114 8485328|1148499728|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|<stell a.santos@juno.com >|<yavi@all.net.ua>|1148485453|1148499
853|1148499853|1|0
WHITE|194.67.45.222|||1148484457|1148485231|1151595671|3|0
WHI TE|195.184.209.238|||1148484213|1148484809|1151595250|2|0
GREY|195.184.218.30|<diaf@fnra.com>|<ne9@all.net.ua>|1148485122|1148499522|11484
9 9522|2|0

Вот собственно и всё, если что-то не понятно или вы считаете, что какой-то момент освещён плохо или вообще у вас есть какие-то замечания и исправления, пишите, пожалуйста. Буду рад услышать их и исправить недочёты в данной статье.

Особая благодарность и мой респект уважаемым YO!zha & Uta, за помощь в создание этой статьи...

With Best Regards,
SysAdmin ISP "Tolpa.neT" aka Z][ANSWER

 
Форум » Операционные системы и ПО » Системному администратору » Укрощаем спам или PF и spamd против спамеров (Настройка связки PF + spamd)
Страница 1 из 11
Поиск: