URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 55640
[ Назад ]

Исходное сообщение
"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."

Отправлено opennews , 09-Июн-09 12:52 
Утилита SpamBlock (http://sources.homelink.ru/spamblock/) слушает заданный интерфейс через tcpdump и заносит в ipfw-таблицу клиентов, слишком часто пытающихся открывать сессии на TCP-порт 25. Разрешённая частота обращений к 25 порту задаётся через файл конфигурации. Файрволл ipfw должен содержать правило блокировки 25 порта для IP-адресов, находящихся в указанной таблице. При необходимости spamblock может быть легко приспособлен к любому файрволлу, например, к pf или iptables.

URL: http://sources.homelink.ru/spamblock/
Новость: http://www.opennet.ru/opennews/art.shtml?num=22071


Содержание

Сообщения в этом обсуждении
"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено Жирный ублюдок DBA , 09-Июн-09 12:52 
А какой смысл если спамят все равно с ботнетов? :)

"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено Ilya Evseev , 09-Июн-09 13:30 
> А какой смысл если спамят все равно с ботнетов? :)

Мне нужно блокировать зараженные компьютеры в собственной сети
(домашняя сеть на несколько тысяч клиентов).
Предыдущий вариант реагировал недостаточно оперативно:
http://www.google.ru/search?q=Ilya+Evseev+newsyslog+ipfw+count


"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено mitiok , 09-Июн-09 13:38 
pf:

# block local spambots
block drop in quick on $int_if proto tcp from <spambots> to port 25
pass in quick on $int_if proto tcp from any to port 25 flags S/SA keep state (max-src-conn-rate 5/60, overload <spambots> flush )



"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено Ilya Evseev , 09-Июн-09 13:52 
Во-первых, у меня не pf :)

Во-вторых, кроме блокировки, делаются уведомления и ведётся статистика,
чтобы можно было объяснить клиенту, когда конкретно и за что именно его закрыли.

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


"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено PereresusNeVlezaetBuggy , 09-Июн-09 14:06 
>Во-первых, у меня не pf :)
>
>Во-вторых, кроме блокировки, делаются уведомления и ведётся статистика,
>чтобы можно было объяснить клиенту, когда конкретно и за что именно его
>закрыли.
>
>Понятно, что решение с pf будет работать быстрее,
>но обертка вряд ли получится намного компактнее.

Достаточно мониторить таблицу: либо из крона (тут хоть шелл-скриптом), либо демоном (лучше на C сваять тогда, pf(4) всё вполне подробно описывает). Каждая система предусматривает свои решения… В случае с ipfw логичнее ваше способ, конечно.


"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено netc , 09-Июн-09 13:15 
pf - вот это законченное решение

жалко только, что когда ставишь synproxy  на правило с ssh слущающем к тому, же на tun интерфейсе ssh не работает ;(

все остальное устраивает

а в целом удобно, понятно и просто в отличии ИМХО от iptables

но это моё мнение!


"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено Vaso Petrovich , 09-Июн-09 13:39 
>а в целом удобно, понятно и просто в отличии ИМХО от iptables

не осилил, не пались...


"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено netc , 09-Июн-09 13:46 
1. а что есть решение моей наболевшей проблемы с synproxy и ssh?

2. или ты имел в виду iptables
почему же не осилил, осилил понравилось: есть свои плюсы

но pf понравился куда больше


"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено PereresusNeVlezaetBuggy , 09-Июн-09 14:08 
>>а в целом удобно, понятно и просто в отличии ИМХО от iptables
>
>не осилил, не пались...

Ну я вот осилил, и что? Всё равно бегу от него как чёрт от ладана. iptables, конечно, предоставляет больше абстрактных возможностей — зато pf делает то, что требуется, с минимальными потерями. Конечно, можно пользоваться fwbuilder'ом…


"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено PereresusNeVlezaetBuggy , 09-Июн-09 14:04 
synproxy нужен только для правил, управляющим проходящими потоками, для TCP-соединений, инициированых самой машиной, либо к самой машине, оно просто неактуально. Почитайте внимательно ещё раз его описание. :) Или я вас неправильно понял?

"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено mitiok , 09-Июн-09 13:34 
имхо маразматично. лучшеб добавили возможность как в pf: max-src-conn-rate N/M, overload table. можно былоб и спам резать и перебор паролей на ссш/фтп. непонятный инструмент...

"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено Ilya Evseev , 09-Июн-09 13:57 
> лучшеб добавили возможность как в pf: max-src-conn-rate N/M, overload table.

У меня примерно это и делается, только без привязки к конкретному файрволлу, и с оповещениями+статистикой.

> можно былоб и спам резать и перебор паролей на ссш/фтп.

При желании можно дописать spamblock, чтобы он работал с несколькими портами,
но для меня актуален только smtp.


"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено XoRe , 09-Июн-09 17:21 
>> лучшеб добавили возможность как в pf: max-src-conn-rate N/M, overload table.
>
>У меня примерно это и делается, только без привязки к конкретному файрволлу,
>и с оповещениями+статистикой.
>
>> можно былоб и спам резать и перебор паролей на ссш/фтп.
>
>При желании можно дописать spamblock, чтобы он работал с несколькими портами,
>но для меня актуален только smtp.

В свое время, частично решил проблему с помощью:
ipfw allow tcp from any to not me 25 in limit 10
=)

limit - динамическая конструкция, поведением динамических правил (устаревание и т.д.) ведает sysctl:
sysctl -a | grep dyn

От себя могу подкинуть пару идей:

- Прозрачный smtp прокси.
В свое время это делалось с помощью sendmail и ipfw:
forward 127.0.0.1,1025 tcp from any to not me 25 in
Спам практически не пропускался.
Пока антивирус (clamd) не отваливался =)
sendmail (особенно с антивирусом и антиспамом) - это довольно тяжелая штука для такого проксирования)
Можно взять nginx - это и smtp прокси, он с этим справится лучше.
Ну а конфигурять его можно хорошо.

- Анализирование dns запросов от клиентов насчет MX записей.
Обычно, от клиентов таких запросов нет.
Можно указать tcpdump-у вылавливать такие запросы - это хороший показатель спамботов.

- Можно вместо tcpdump использовать ng_bpf из netgraph.
Правда там довольно гемморойно передавать строку фильтра, но думаю, работать будет куда быстрее - прямо в ядре.

- Ещё в свое время заметил, что пакеты от спамботов имеют окно 24000.
Так же можно настроить tcpdump или ng_bpf на отлов таких пакетов.


"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено Arti , 09-Июн-09 17:37 
На самом деле подобных программ много.
Вообще использование tcpdump выглядит мягко говоря экзотически.

Как тут писалось задачу можно решить используя только пакетный фильтр.

Если нужно больше возможностей по логированию и оповещению, можно воспользоваться внешней программой например http://smtp-proxy.klolik.org/

Тут уже можно фильтровать по типу аутентификации, частоте и т.п. правда гоняет много данных через юзерспайс ... Защитить программу от доса можно на уровне пакетного фильтра. Кстати при желании можно прикрутить туда антивирус, хотя такая возможность, на мой взгляд, является скорее опасной чем полезной...


"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено XoRe , 09-Июн-09 17:53 
Прошу воспринимать все предложения не в контексте "это не нужно, ибо уже есть вот".
А в контексте "это можно заюзать для улучшения скрипта".
=)

"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено Arti , 09-Июн-09 18:10 
Не... не ДО или ПОСЛЕ а взамен ;)

"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено Anton Kvashin , 10-Июн-09 15:03 
Подобное делали на openbsd (с pf'ом конечно).

Как вариант (для Linux, например), поставить MTA (exim, который умеет ratelimit, smtp auth-форвардинг), на который заводить весь smtp-трафик и анализировать логи, делая блокировку/перенаправление с помощью fail2ban (умеет дружить с iptables, tcp wripper, ipfw).

Тем самым, можно выделить не только агрессивные подключения, но и любые неугодные вашей smtp-политике. Плюс проверка на вирусы, etc.

fail2ban добавит/удалит автоматически (bantime) нужные цепочки (можно определять свои), ну а веб-сервер выдаст предупреждение-заглушку юзеру на обращение по любой ссылке.


"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено medj , 11-Фев-10 12:00 
Кто знает что в логи выводит данная утилита? Конечно, использование tcpdump Тож смущает..

"Re: что в логи выводит данная утилита? "
Отправлено Ilya Evseev , 29-Апр-10 03:37 
> что в логи выводит данная утилита?

Кусок из реальной жизни:
...
[2009.06.01 11:34:41]    192.168.1.21    457:36430
[2009.06.01 11:34:42]    10.11.22.25     1798:36431
[2009.06.01 11:34:42]    10.11.22.25     1799:36431
[2009.06.01 11:34:42]    10.11.22.25     1800:36431    5:11 10:18 15:30 20:39 60:105 300:525
[2009.06.01 11:34:42]  Block 10.11.22.25: trap by rule 300:600 ticks:seconds, actually 525 seconds
[2009.06.01 11:34:44]    192.168.1.21    458:36433
[2009.06.01 11:34:46]    192.168.1.21    459:36435
[2009.06.01 11:34:48]    192.168.1.21    460:36437    5:13 10:25 20:50
...
"457:36430" означает "за 36430 секунд с начала работы Спамблока данный клиент стучался на 25 порт 457 раз".

"5:13 10:25 20:50" означает - "5 последних обращений на 25 порт произошли в течение 13 секунд, 10 последних обращений - в течение 25 секунд, 20 обращений - за 50 секунд".

Эта статистика выводится каждый раз, когда фактическое количество становится кратным количеству в соответствующих правилах, т.е. надо принимать решение - блокировать или нет?

Клиент 10.11.22.25 был заблокирован, т.к. 300 обращений у него произошли менее чем за 600 секунд.


"Утилита для блокировки спамеров на шлюзе с пакетным фильтром..."
Отправлено Ilya Evseev , 29-Апр-10 03:23 
Теперь поддерживаются: pf, ipfw2, iptables, iptables+ipset.