Jump to content
Калькуляторы

Борьба с 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 пакетов в минуту).

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

Share this post


Link to post
Share on other sites

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 затем следует блокировка.

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

 

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

 

 

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

А при таком раскладе, разве клиент (точнее злобный вирус) не сможет рассылать спам рассылку? Даже имея в своём распоряжении 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 режектить будет.

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

 

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

 

...... и т.д.

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

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

Я пробовал.

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

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

Share this post


Link to post
Share on other sites

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

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

Edited by fozz

Share this post


Link to post
Share on other sites

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

 

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

 

 

Share this post


Link to post
Share on other sites

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

 

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

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

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

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

Edited by fozz

Share this post


Link to post
Share on other sites

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

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

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

 

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

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

Edited by fedusia

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this