Помогите придумать правило iptables

12 3
D
На сайте с 05.06.2007
Offline
155
2317

Требуется придумать такое правило, чтобы PHP скрипты могли подключаться-авторизовываться на сторонних smtp для отправки почты, при условии что всем кроме exim запрщено подключаться к 25му порту (и альтернативным). Думаю кто боролся с исходящим спамом поймёт меня)

То что прописано сейчас:

iptables -A OUTPUT -o eth0 -p tcp --dport 25 -m owner --uid-owner Debian-exim -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --dport 25 -j DROP

Нужно разрешить исходящие подключения на 25й порт но только для тех кто авторизуйется на стороннем smtp, а не тем кто пытается отправить письмо на сторонний smtp. Т.е. добавить ACCEPT правило, походу для каких то первых заголовков, опыта у меня в этом нет. (OS debian 6)

Надеюсь понятно объяснил)

Написал не мало шедевров ;)
Electronn
На сайте с 01.02.2010
Offline
91
#1

вы не с того конца подходите к задаче. большинство спам скриптов просто наполняют очередь локального MTA, а потом он уже рассылает, поэтому ваше правило тут не пройдет. Вам нужно бороться не с последствиями спама, а с причиной возникновения ( старые цмс, старое ПО, дырявые плагины, простые пароли на ящиках ).

D
На сайте с 05.06.2007
Offline
155
#2
Electronn:
вы не с того конца подходите к задаче. большинство спам скриптов просто наполняют очередь локального MTA, а потом он уже рассылает, поэтому ваше правило тут не пройдет. Вам нужно бороться не с последствиями спама, а с причиной возникновения ( старые цмс, старое ПО, дырявые плагины, простые пароли на ящиках ).

Нет, вы не правы, со спамом я борюсь на 5+, локального исходящего спама нет, отсекается перл скриптами, лимитами и уведомлениями. (99% случаев без моего участия) А вот если у вас не было исходящего спама от какого нибуть готового запущенного MTA-скрипта демона который шифруется под exim, то вам очень повезло, либо вы пока не так много встречали хакнутых сайтов и зловредителей. 🍿 Там где я работаю, также полно клиентов которые сами загружают и запускают подобные красивые штуки :) Моя задача полностью автоматизировать решение всевозможных проблем на вебсервере, чтобы сис-админы вообще не требовались. Вопрос в силе...

L
На сайте с 13.01.2011
Offline
132
#3

http://forum.ispsystem.com/ru/showthread.php?t=11973 это ?

iptables -F

id Debian-exim

uid=102(Debian-exim) gid=104(Debian-exim) groups=104(Debian-exim)

Контакты-icq 535609 ()
bugsmoran
На сайте с 18.02.2010
Offline
223
#4
Dimanych:
Нет, вы не правы, со спамом я борюсь на 5+

Странно. Обычно люди, которые борятся со спамом на твердую пятерку, знают, что 25 порт - это порт MTA, а для MSA[а Вам нужен именно MSA] есть и дополнительные порты (хотя 25 тоже иногда работает).

Более того, у некоторых сервисов нет сабмишшена на порту 25. Например у mail.ru и gmail.com:

root@test1:~# telnet mxs.mail.ru 25
Trying 94.100.176.20...
Connected to mxs.mail.ru.
Escape character is '^]'.
220 Mail.Ru ESMTP
ehlo test.com
250-mx160.mail.ru ready to serve
250-SIZE 31457280
250 8BITMIME
root@test1:~# telnet gmail-smtp-in.l.google.com. 25
Trying 173.194.70.26...
Connected to gmail-smtp-in.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP o3si19649484wic.0
ehlo test.com
250-mx.google.com at your service, [46.4.207.34]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES

Один из немногих, у кого нашел MSA в том числе на 25-м порту - hotmail.com

root@test1:~# telnet mx1.hotmail.com. 25
Trying 65.54.188.110...
Connected to mx1.hotmail.com.
Escape character is '^]'.
220 BAY0-MC3-F2.Bay0.hotmail.com Sending unsolicited commercial or bulk e-mail to Microsoft's computer network is prohibited. Other restrictions are found at http://privacy.microsoft.com/en-us/anti-spam.mspx. Sun, 23 Sep 2012 02:20:10 -0700
ehlo test.com
250-BAY0-MC3-F2.Bay0.hotmail.com (3.16.0.61) Hello [46.4.207.34]
250-SIZE 36909875
250-PIPELINING
250-8bitmime
250-BINARYMIME
250-CHUNKING
250-AUTH LOGIN
250-AUTH=LOGIN
250 OK

Я это к тому, что у Вас чужой PHP-скрипт подключется к чужому 25 порту. Будет ли он использовать команду AUTH или наоборот как через релей отправит все локальным пользователям (MTA это пропустит) - Вы знать не можете, если конечно не сниффить каждое подключение, что очень трудоемко и ресурсоемко.

D
На сайте с 05.06.2007
Offline
155
#5
Logger:
http://forum.ispsystem.com/ru/showthread.php?t=11973 это ?

iptables -F

id Debian-exim
uid=102(Debian-exim) gid=104(Debian-exim) groups=104(Debian-exim)

Там правила такие же как у меня, только добавлены условия -s server-ip -d ! server-ip

Надо подумать может ли это решить проблему не навредив, пока на вскидку кажется что нет.

---------- Добавлено 23.09.2012 в 13:23 ----------

bugsmoran у меня запрещены все порты, 25, 465, 587 ...

Historically, port 25 has acted as both an MTA and MSA port in sendmail

Также возможно и обратное, или вы уверены что 587 это только MSA и для MSA он всегда используется?

Собственно читайте: http://en.wikipedia.org/wiki/Mail_submission_agent

L
На сайте с 13.01.2011
Offline
132
#6

да я точно знаю что решит - был у меня спам - после установки этих правил как там на форуме - все чисто ;)

iptables -A OUTPUT -p tcp -s server-ip ! -d server-ip --dport 25 --syn -m owner --uid-owner 102 -j ACCEPT

iptables -A OUTPUT -p tcp -s server-ip ! -d server-ip --dport 25 --syn -j DROP

bugsmoran
На сайте с 18.02.2010
Offline
223
#7

Да я знаю, что исторически так, но история - достояние истории. Адекватные люди не поставят MSA на 25-й порт (если они конечно не ленивые как я :) ).

Давайте я Вам немного объясню про разницу MTA и MSA.

MTA только принимает и посылает почту между серверами от неаутентифицированных пиров. По сути только принимает от других MTA или наоборот передает другим MTA. Механизм аутентификации у него отсутсвует напрочь. Потому что в случае, если он принимающая сторона, то он смотрит для него ли почта (ему достаточно знать, что она пришла по адресу, чтобы передать его в MDA), а если он исходящая сторона, то для него аутентификацию уже провел MSA. То есть когда-то 5 секунд назад MSA принял на отправку запрос от программы, будь она Outlook, RoundCube или самопальный код на PHP. И задача MTA только найти MX сервер домена-реципиента и передать ему письмо. А тот увидит, что почта для его подопечного и примет ее также без аутентификации.

Поэтому, если Вы не хотите заставить свои MSA/MTA на Exim'е работать[почему кстати?], то Вы конечно можете разрешить выступить PHP-скрипту пользователя в качестве:

1) MTA. То есть он будет другим MTA говорить, что MSA уже пройден и я предлагаю принять почту именно для домена, который Вы, уважаемый чужой MTA, обслуживаете.

Тут проблема: ему придется каждый раз подключаться к разным MTA, выбирая по MX-записям кто обслуживает домен реципиента. И вторая проблема - свободная доставка спама целевому MTA.

2) Отсылающего приложения. То есть он будет приходить на свой любымий MSA, представляться там своим логином командой AUTH в протоколе SMTP и уже затем MSA сам будет передавать на отправку письмо MTA.

Тут проблема: MSA как правило на 25-м порту нету. Значит там сразу слушает MTA, а тот как только увидит RCPT TO для чужака, даст отлуп, что не пройдена аутентификация.

Какие из этого всего выводы:

a) Разберитесь, почему Ваши PHP-скрипты так вынуждены использовать свой удаленный MSA и где гарантии, что это не будет MTA реципиента.

b) Разберитесь, почему если речь идет о MSA, то откуда вдруг взялся 25-й порт.

То есть Ваша задача не правило придумать в iptables, а понять где Вас хотят обмануть.

D
На сайте с 05.06.2007
Offline
155
#8

Logger я подумал над правилами, они идентичны моим, да, спаму нет как и у меня сейчас, но проблема описанная мной в первом сообщении никак добавлением server_ip не решается...

bugsmoran, да, вы всё верно пишите, и я это на удивление процентов на 95% это всё и так знаю))

Могу ответить на ваши вопросы.

a) Всё просто, куча клиентов, у некоторых скрипты которые используют отправку писем с авторизацией на стороннем почтовике, mail.ru и т.д. И почему то в этих скрпитах не предусмотрена отправка письма с помощью простейшего mail().

Только для этой цели и требуется.

б) тут нет причин разбираться, возможно вы правы, и достаточно будет запрещать только 25й порт(для тупых скрпитов), а 587 оставить открытым для всех и всях) Но я не могу так рисковать! Не исключено что отправка неавторизованного спама будет также и через 587 порт и возможно даже через 465.

Например у меня, без лишнего головняка так настроено (никаких отличий), и я думаю это у большинства так)

daemon_smtp_ports = 25 : 587 : 465

tls_on_connect_ports = 465

Ещё раз всё проанализировав, я понимаю что вероятно единственное решение это фильтровать все пакеты через iptables и при наличии удачной авторизации пропускать далее, или это уже перебор?)

bugsmoran
На сайте с 18.02.2010
Offline
223
#9
Dimanych:
bugsmoran:

a) Разберитесь, почему Ваши PHP-скрипты так вынуждены использовать свой удаленный MSA и где гарантии, что это не будет MTA реципиента.

a) Всё просто, куча клиентов, у некоторых скрипты которые используют отправку писем с авторизацией на стороннем почтовике, mail.ru и т.д. И почему то в этих скрпитах не предусмотрена отправка письма с помощью простейшего mail().
Только для этой цели и требуется.

Ну вообще оно конечно сработает и на локалхосте. Но Ок, ответ понял.

Dimanych:
bugsmoran:
b) Разберитесь, почему если речь идет о MSA, то откуда вдруг взялся 25-й порт.

б) тут нет причин разбираться, возможно вы правы, и достаточно будет запрещать только 25й порт(для тупых скрпитов), а 587 оставить открытым для всех и всях) Но я не могу так рисковать! Не исключено что отправка неавторизованного спама будет также и через 587 порт и возможно даже через 465.

Это не ответ на мой вопрос, но ладно.

Dimanych:

Ещё раз всё проанализировал, и понимаю что вероятно единственное решение это фильтровать все пакеты через iptables и при наличии удачной авторизации пропускать далее, или это уже перебор?)

Вы такой сильный программист? Вы понимаете, что Вам придется открыть сорцы iptables и внедрить в него сниффер траффика? И даже это все обломаетя как только клиент начнет использовать SSL для SMTP. У Вас не сформированы требования до сих пор, а Вы уже инструмент выбрали )))

Важный вопрос - от какого пользователя запускаются скрипты. От www-data или у каждого свой?

Andreyka
На сайте с 19.02.2005
Offline
822
#10
Dimanych:
Требуется придумать такое правило, чтобы PHP скрипты могли подключаться-авторизовываться на сторонних smtp для отправки почты, при условии что всем кроме exim запрщено подключаться к 25му порту (и альтернативным). Думаю кто боролся с исходящим спамом поймёт меня)

Нет, не понимаю. Я вот спам давно поборол при помощи разрешения отправки только через sendmail, который на самом деле http://dedic.ru/node/763

Не стоит плодить сущности без необходимости
12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий