The OpenNET Project / Index page

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

Утилита для блокировки спамеров на шлюзе с пакетным фильтром ipfw

09.06.2009 07:00

Утилита SpamBlock слушает заданный интерфейс через tcpdump и заносит в ipfw-таблицу клиентов, слишком часто пытающихся открывать сессии на TCP-порт 25. Разрешённая частота обращений к 25 порту задаётся через файл конфигурации. Файрволл ipfw должен содержать правило блокировки 25 порта для IP-адресов, находящихся в указанной таблице. При необходимости spamblock может быть легко приспособлен к любому файрволлу, например, к pf или iptables.

  1. Главная ссылка к новости (http://sources.homelink.ru/spa...)
Автор новости: Ilya Evseev
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/22071-mail
Ключевые слова: mail, spam
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (20) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Жирный ублюдок DBA (?), 12:52, 09/06/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А какой смысл если спамят все равно с ботнетов? :)
     
     
  • 2.4, Ilya Evseev (?), 13:30, 09/06/2009 [^] [^^] [^^^] [ответить]  
  • +/
    > А какой смысл если спамят все равно с ботнетов? :)

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

     
     
  • 3.6, mitiok (??), 13:38, 09/06/2009 [^] [^^] [^^^] [ответить]  
  • +/
    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 )


     
     
  • 4.10, Ilya Evseev (?), 13:52, 09/06/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Во-первых, у меня не pf :)

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

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

     
     
  • 5.13, PereresusNeVlezaetBuggy (ok), 14:06, 09/06/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Во-первых, у меня не pf :)
    >
    >Во-вторых, кроме блокировки, делаются уведомления и ведётся статистика,
    >чтобы можно было объяснить клиенту, когда конкретно и за что именно его
    >закрыли.
    >
    >Понятно, что решение с pf будет работать быстрее,
    >но обертка вряд ли получится намного компактнее.

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

     

  • 1.3, netc (ok), 13:15, 09/06/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    pf - вот это законченное решение

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

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

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

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

     
     
  • 2.7, Vaso Petrovich (?), 13:39, 09/06/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >а в целом удобно, понятно и просто в отличии ИМХО от iptables

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

     
     
  • 3.9, netc (ok), 13:46, 09/06/2009 [^] [^^] [^^^] [ответить]  
  • +/
    1. а что есть решение моей наболевшей проблемы с synproxy и ssh?

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

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

     
  • 3.14, PereresusNeVlezaetBuggy (ok), 14:08, 09/06/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >>а в целом удобно, понятно и просто в отличии ИМХО от iptables
    >
    >не осилил, не пались...

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

     
  • 2.12, PereresusNeVlezaetBuggy (ok), 14:04, 09/06/2009 [^] [^^] [^^^] [ответить]  
  • +/
    synproxy нужен только для правил, управляющим проходящими потоками, для TCP-соединений, инициированых самой машиной, либо к самой машине, оно просто неактуально. Почитайте внимательно ещё раз его описание. :) Или я вас неправильно понял?
     

  • 1.5, mitiok (??), 13:34, 09/06/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    имхо маразматично. лучшеб добавили возможность как в pf: max-src-conn-rate N/M, overload table. можно былоб и спам резать и перебор паролей на ссш/фтп. непонятный инструмент...
     
     
  • 2.11, Ilya Evseev (?), 13:57, 09/06/2009 [^] [^^] [^^^] [ответить]  
  • +/
    > лучшеб добавили возможность как в pf: max-src-conn-rate N/M, overload table.

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

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

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

     
     
  • 3.15, XoRe (ok), 17:21, 09/06/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >> лучшеб добавили возможность как в 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 на отлов таких пакетов.

     

  • 1.16, Arti (??), 17:37, 09/06/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    На самом деле подобных программ много.
    Вообще использование tcpdump выглядит мягко говоря экзотически.

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

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

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

     
  • 1.17, XoRe (ok), 17:53, 09/06/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Прошу воспринимать все предложения не в контексте "это не нужно, ибо уже есть вот".
    А в контексте "это можно заюзать для улучшения скрипта".
    =)
     
  • 1.18, Arti (??), 18:10, 09/06/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Не... не ДО или ПОСЛЕ а взамен ;)
     
     
  • 2.19, Anton Kvashin (?), 15:03, 10/06/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Подобное делали на openbsd (с pf'ом конечно).

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

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

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

     

  • 1.20, medj (?), 12:00, 11/02/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кто знает что в логи выводит данная утилита? Конечно, использование tcpdump Тож смущает..
     
     
  • 2.22, Ilya Evseev (?), 03:37, 29/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > что в логи выводит данная утилита?

    Кусок из реальной жизни:
    ...
    [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 секунд.

     

  • 1.21, Ilya Evseev (?), 03:23, 29/04/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Теперь поддерживаются: pf, ipfw2, iptables, iptables+ipset.
     

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



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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