Перейти к содержимому
Калькуляторы

Борьба с SMTP флудом за натом на *nix

Здравствуйте,

 

Есть Ubuntu server + iptables + squid. Пользователи нахватали вирусни и постоянно флудят по 25 порту:

 

00:00:14.132027 IP 10.10.5.65.1195 > 65.55.92.168.25: Flags [s], seq 229799778, win 65535, options [mss 1460,nop,nop,sackOK], length 0
00:00:02.296851 IP 10.10.5.65.1230 > 65.55.37.88.25: Flags [s], seq 611220249, win 65535, options [mss 1460,nop,nop,sackOK], length 0
00:00:00.670760 IP 10.10.5.65.1195 > 65.55.92.168.25: Flags [s], seq 229799778, win 65535, options [mss 1460,nop,nop,sackOK], length 0
00:00:02.313485 IP 10.10.5.65.1230 > 65.55.37.88.25: Flags [s], seq 611220249, win 65535, options [mss 1460,nop,nop,sackOK], length 0
00:00:02.260997 IP 10.10.5.65.1315 > 65.55.92.168.25: Flags [s], seq 1877130857, win 65535, options [mss 1460,nop,nop,sackOK], length 0
00:00:01.460691 IP 10.10.5.65.1195 > 65.55.92.168.25: Flags [s], seq 229799778, win 65535, options [mss 1460,nop,nop,sackOK], length 0

 

В качестве временного решения для флудящего ip закрываем на файерволе 25 порт, связываемся с ним по телефону и просим сделать полную проверку компа на вирусы:

 

iptables -I FORWARD 1 -p tcp -s 10.10.5.65 --dport 25 -j REJECT --reject-with tcp-reset

 

Конечно, это не есть правильное решение - так как с каждым днем их становиться все больше (ожидается эпидемия) и всех не зарежешь и не обзвонишь.

Кто-нибудь может посоветовать как правильно и грамотно бороться с SMTP флудом ??? Какие нибудь интеллектуальные методы дропать пользователя.

Я знаю что в iptables можно выставить ограничение на скорость передачи пакетов (например не больше N пакетов в минуту).

Кто как с этим борется?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

iptables -A FORWARD -s 192.168.0.0/16 -p tcp -m tcp --dport 25 -m state --state NEW -m recent --set --name SMTP --rsource

iptables -A FORWARD -s 192.168.0.0/16 -p tcp -m tcp --dport 25 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --name SMTP --rsource -j REJECT --reject-with icmp-port-unreachable

 

5 соединений в минуту с 1 ip затем следует блокировка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а если он вылечился

как автоматически разбанивать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а если он вылечился

как автоматически разбанивать?

А зачем "разбанивать" ?

Нормальному юзеру достаточно 5 коннектов по порту 25 наружу, он и не заметит ничего.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А зачем "разбанивать" ?

Нормальному юзеру достаточно 5 коннектов по порту 25 наружу, он и не заметит ничего.

 

Собственно хочу небольшую правку внести, для пользователя 5 коннектов обычно маловато, рабочая станция в офисах где разрешены icq и доступ на прочие ресурсы например берут от 1 до 50 коннектов в разные периоды времени, но больше 50ти обычно уже говорит о проблемах, собственно если завёлся вирус то видел и 30000 коннектов :) это уже натуральный жёсткий флуд :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я ipset-ом создаю 3 класса

адресов/подсетей для которых фильтрация не делается

адресов/подсетей для которых фильтрация делается для маштабов предприятия.

адресов/подсетей для которых фильтрация делается для 1-го пользователя (5 соединений в минуту)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

50 коннектов на 25 порт ? Офисам можно поставить по 10. По письменной заявке ограничение снять. Всем остальным по 5.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нашел скриптик spamblock http://sources.homelink.ru/spamblock/. Под описание вроде то что нужно. Попробую с ним разобраться. Кто-нибудь пробовал с ним работать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а если он вылечился

как автоматически разбанивать?

 

В данном примере мы разрешаем 5 соединений в минуту по 25 порту, все остальное мы блокируем. И так каждую минуту. Действует давно и классно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а если он вылечился

как автоматически разбанивать?

 

В данном примере мы разрешаем 5 соединений в минуту по 25 порту, все остальное мы блокируем. И так каждую минуту. Действует давно и классно.

 

 

А при таком раскладе, разве клиент (точнее злобный вирус) не сможет рассылать спам рассылку? Даже имея в своём распоряжении 5 коннекшенов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А при таком раскладе, разве клиент (точнее злобный вирус) не сможет рассылать спам рассылку? Даже имея в своём распоряжении 5 коннекшенов?

Нет, т.к. регистрация коннекта в списке идет до его реджекта. Т.е. - бот отправил 5 писем, и дальше безуспешно долбится до посинения через файрвол.

Можно кол-во писем и время конечно увеличить, к примеру, 20-30 писем за 15 минут...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А при таком раскладе, разве клиент (точнее злобный вирус) не сможет рассылать спам рассылку? Даже имея в своём распоряжении 5 коннекшенов?

Нет, т.к. регистрация коннекта в списке идет до его реджекта. Т.е. - бот отправил 5 писем, и дальше безуспешно долбится до посинения через файрвол.

Можно кол-во писем и время конечно увеличить, к примеру, 20-30 писем за 15 минут...

 

Что-то отпало желание делать через spamblock (не вызывает доверие постоянное сканирование tcpdump).

Разобрал модуль recent. Т.е как я понимаю происходит такая ситуация:

1) Приходит от вирусни с хоста #1 новый запрос на 25 порт. И сразу попадает в первое правило с -m recent --set --name SMTP.

В этом правеле, IP хоста #1 записывается в таблицу 'SMTP' и появляется запись о времени последнего его появления.

 

2) Приходит через 5 секунд следующий пакет от хоста #1 также идет сначала в первое правило потом во второе. Обновляется временная метка и счетчик. Во втором правиле проверяется не является ли этот пакет по счету >= --hitcount (5 из примера) за последние N секунд (60 сек из примера).

Если является, то пакет отбрасывается, если нет то временная запись просто обновляется и пакет проходит дальше.

 

Т.е как я понимаю допустим если скорость 'рассылки' сообщений спам ботом (это я например могу оценить с помощью tcpdump) постоянна и больше чем позволено отсылать за единицу времени (например за 60 секунд) то он (бот) отошлет hitcount сообщений и после этого всё вновь сгенерированные пакеты просто будут отбрасываться. Так как временная метка в recent будет постоянно обновлятся и в счетчике пакетов будет постоянно держаться это значение.

 

Я правильно понял?

 

P.S. при этом как я понимаю обычный http трафик ведь будет проходить? он же только пакеты на 25 режектить будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

у меня админ в 20-22 смотрит НАС 1-2 раза в неделю и банит IP замеченный в рассылке спама.

И жалоб от ТТК вроде нету.

За 2 месяца накопилось около 40 банов. Бан как говорится до востребованния. Пожалуется на почту - пролечим пользователя и/или ПК и снимаем Бан.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Никак не пойму, что он ругается. Правила даже прописываются, но выдается каждый раз ошибка:

 

root@ubuntu:~# iptables -m recent --help

/usr/local/libexec/xtables/libxt_recent.so: /usr/local/libexec/xtables/libxt_recent.so: undefined symbol: xt_params

iptables v1.4.1.1

 

Usage: iptables -[AD] chain rule-specification [options]

iptables -[RI] chain rulenum rule-specification [options]

iptables -D chain rulenum [options]

iptables -[LS] [chain [rulenum]] [options]

iptables -[FZ] [chain] [options]

iptables -[NX] chain

iptables -E old-chain-name new-chain-name

iptables -P chain target [options]

iptables -h (print this help information)

 

Commands:

Either long or short options are allowed.

--append -A chain Append to chain

--delete -D chain Delete matching rule from chain

--delete -D chain rulenum

Delete rule rulenum (1 = first) from chain

--insert -I chain [rulenum]

Insert in chain as rulenum (default 1=first)

--replace -R chain rulenum

Replace rule rulenum (1 = first) in chain

--list -L [chain [rulenum]]

List the rules in a chain or all chains

--list-rules -S [chain [rulenum]]

Print the rules in a chain or all chains

--flush -F [chain] Delete all rules in chain or all chains

 

...... и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Никак не пойму, что он ругается.

Что-то у вас криво собралось. Да и зачем было иптейблс пересобирать из исходников...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Никак не пойму, что он ругается.

Что-то у вас криво собралось. Да и зачем было иптейблс пересобирать из исходников...

 

ну это тестовая у меня система, перекомпилял для модуля ipp2p (или может ещё для чего, не помню).

 

запустил данные правила на рабочей машине, никаких ошибок он не выдал. Спам запросы начали дропаться после превышения лимита для определенного хоста. Всё работает ГУД!

 

Всем спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нашел скриптик spamblock http://sources.homelink.ru/spamblock/. Под описание вроде то что нужно.

Попробую с ним разобраться. Кто-нибудь пробовал с ним работать?

Я пробовал.

Вопросы задавайте здесь:

http://forum.nag.ru/forum/index.php?showtopic=54539

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А почему бы не избавиться от спама вовсе? Не претендую на идеал, но всеже послушайте: Закрываете 25/tcp наружу совсем, а разрешаете только на локальный релей с принудительной аутентификацией (SASL). Если кому-то надо все-таки очень отправить почту наружу не через ваш релей, то почти все современные публичные сервисы принимают почту на 587/tcp, специальный порт для получения мыла от клиентов, если что.. Если и этого недостаточно, то особо умным разрешаем слать почту напрямую (отдельная пипка в биллинге). При такой схеме за год у меня было два письма на abuse@, в одном случае хидеры показывали, что у абонента увели пароль на SASL и от его имени слали спам, во-втором случае какой-то редкий вирус отправил письмо через 465/tcp (over SSL).

p.s. http://rfc2.ru/3013.rfc пункт 5.4

Изменено пользователем fozz

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И куча матерящихся клиентов, у которых почта на ноуте работает везде, кроме как у вас.

 

А потом выясняется что у них ещё и почта корпоративная, а у админа руки не от туда и он кроме как 25 порта ничего осилить не может/админу пофик, он не подчиняется местным, у себя менять ничего не будет, "меняйте провайдера" его рекомендация.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И куча матерящихся клиентов, у которых почта на ноуте работает везде, кроме как у вас.

 

А потом выясняется что у них ещё и почта корпоративная, а у админа руки не от туда и он кроме как 25 порта ничего осилить не может/админу пофик, он не подчиняется местным, у себя менять ничего не будет, "меняйте провайдера" его рекомендация.

таких 1-2 процента и если стандартными средствами им помочь не получается, то опять же, повторюсь - кнопочка в биллинге "разрешить 25-й порт".

p.s. вот глянул. Висят 3080 онлайн, из них всего 13 с открытым 25-м (значит им менеджеры по заявлению открыли).

Люди, которые понимают, что почта ходит через 25-й, обычно и знают, к чему это может приводить, так что с ними неопасно. Все остальные делятся на две категории: не пользуются почтой вовсе, пользуются веб-мордами на том-же mail.ru.

Изменено пользователем fozz

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А при таком раскладе, разве клиент (точнее злобный вирус) не сможет рассылать спам рассылку? Даже имея в своём распоряжении 5 коннекшенов?

Нет, т.к. регистрация коннекта в списке идет до его реджекта. Т.е. - бот отправил 5 писем, и дальше безуспешно долбится до посинения через файрвол.

Можно кол-во писем и время конечно увеличить, к примеру, 20-30 писем за 15 минут...

 

Я бы сказал не 5 писем. А 5 tcp соединений. Это довольно много для одного человека. Т.е. в таблицу попадает человек, который послал 5 tcp SYN пакетов на порт 25.

За одно соединение можно отправить гораздо больше писем чем 1.

Изменено пользователем fedusia

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.