bugsmoran

bugsmoran
Рейтинг
223
Регистрация
18.02.2010
Vann:
As you could not solve the problem within the given time or the maximum number of tests, the ticket will be forwarded for manual testing to our technician who coordinate further proceeding.

Самое милое, что такое письмо приходит всегда, вне зависимости от того, заполнена форма, на которую ссылка в первом письме или не заполнена. Так что это письмо вообще ничего не значит.

Быстро Вы сдались :)

Ну запощу для будущих поколений.

Делается на основной ноде, а не на виртуалке:

iptables -t nat -A PREROUTING -i vmbr0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.3:80

А SSH так нельзя прокинуть - вылетите, потому что отрезали сук, на котором сидите. Сначала надо либо перенести порт ноды на другой, либо выбрать другой номер порта для виртуалки и указать его в --dport.

Dimanych:

top - 15:06:44 up 214 days, 1:08, 2 users, load average: 12.49, 4.83, 3.11
Tasks: 394 total, 1 running, 393 sleeping, 0 stopped, 0 zombie
Cpu(s): 6.1%us, 4.6%sy, 10.7%ni, 57.0%id, 21.2%wa, 0.0%hi, 0.3%si, 0.0%st
Mem: 8191156k total, 7587896k used, 603260k free, 213216k buffers
Swap: 3998712k total, 2952k used, 3995760k free, 5517564k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ UID COMMAND
12240 mysql 20 0 1615m 927m 4544 S 54 11.6 7046:08 107 mysqld
7924 www 20 0 44116 15m 1512 D 1 0.2 3:36.00 1001 nginx
7925 www 20 0 44380 16m 1504 D 1 0.2 3:51.72 1001 nginx
7923 www 20 0 44380 16m 1492 S 1 0.2 3:34.29 1001 nginx
7926 www 20 0 44380 16m 1572 D 1 0.2 3:43.47 1001 nginx
10537 root 20 0 19340 1656 1032 R 1 0.0 0:02.79 0 top
7191 root 20 0 653m 11m 656 S 0 0.1 0:00.23 0 apache2
22570 root 20 0 653m 11m 652 S 0 0.1 0:00.05 0 apache2
23267 backups 20 0 190m 3684 1876 S 0 0.0 0:00.75 1002 proftpd
28363 power 30 10 656m 18m 5016 D 0 0.2 0:00.01 1005 apache2
1 root 20 0 8356 668 552 S 0 0.0 1:48.76 0 init
2 root 20 0 0 0 0 S 0 0.0 0:00.01 0 kthreadd
3 root RT 0 0 0 0 S 0 0.0 0:50.08 0 migration/0

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

iowait занимает 21%. А в спокойном состоянии он сколько занимает?

Мой пардон, iptables уже это умеет.

Вот наверно единственная конструкция, которая может помочь:

-m string --string "235 Authentication succeeded" --algo kmp

Как этим воспользоваться.

Вот пример письма, которое не использует аутентификацию:

root@example:~# swaks --server example.com --to hidden.address@gmail.com
=== Trying example.com:25...
=== Connected to example.com.
<- 220 example.com ESMTP Exim 4.80 Sun, 23 Sep 2012 10:55:49 +0000
-> EHLO example.com
<- 250-example.com Hello example.com [178.163.169.128]
<- 250-SIZE 52428800
<- 250-8BITMIME
<- 250-PIPELINING
<- 250-AUTH PLAIN LOGIN
<- 250-STARTTLS
<- 250 HELP
-> MAIL FROM:<root@example.com>
<- 250 OK
-> RCPT TO:<hidden.address@gmail.com>
<** 550 relay not permitted
-> QUIT
<- 221 example.com closing connection
=== Connection closed with remote host.

А вот пример письма, которое использует:

root@example:~# swaks --server example.com --to hidden.address@gmail.com --auth-user michael --auth-password СложНыйП123ароль
=== Trying example.com:25...
=== Connected to example.com.
<- 220 example.com ESMTP Exim 4.80 Sun, 23 Sep 2012 10:56:05 +0000
-> EHLO example.com
<- 250-example.com Hello example.com [178.163.169.128]
<- 250-SIZE 52428800
<- 250-8BITMIME
<- 250-PIPELINING
<- 250-AUTH PLAIN LOGIN
<- 250-STARTTLS
<- 250 HELP
-> AUTH LOGIN
<- 334 VXNlcm5hbWU6
-> dmFsZXJpYQ==
<- 334 UGFzc3dvcmQ6
-> dmFsZXJpYQ==
<- 235 Authentication succeeded
-> MAIL FROM:<root@example.com>
<- 250 OK
-> RCPT TO:<hidden.address@gmail.com>
<- 250 Accepted
-> DATA
<- 354 Enter message, ending with "." on a line by itself
-> Date: Sun, 23 Sep 2012 10:56:05 +0000
-> To: hidden.address@gmail.com
-> From: root@example.com
-> Subject: test Sun, 23 Sep 2012 10:56:05 +0000
-> X-Mailer: swaks v20120320.0 jetmore.org/john/code/swaks/
->
-> This is a test mailing
->
-> .
<- 250 OK id=1TFjr3-0001au-Uw
-> QUIT
<- 221 example.com closing connection
=== Connection closed with remote host.

А это значит, что в диалогах честно отправленных письмах присутствует строчка "235 Authentication succeeded". Соответственно заставьте Ваш iptables искать эту строчку через такую конструкцию:

-m string --string "235 Authentication succeeded" --algo kmp

и тогда делать такому письму -J ACCEPT

и наоборот делать -j DROP письмам с текстом "550 relay not permitted"

В любом случае это очень тяжело построить, потому что в сессии идет несколько сообщение и только одно из них будет с этим текстом. То есть нужно вести статистику по пользователю.

А когда Вы водрузите этого мастадонта, то пользователи начнут над Вами смеяться, передавая в поле DATA текст "235 Authentication succeeded" )))

Ну и вариант, когда принимающий сервер будет сразу MTA тоже Ваша смерть. А будет именно так.

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 или у каждого свой?

У Вас /tmp наверняка не слайсом сделан, а просто директория на sda. Поэтому нагрузка перемещается с sdb на sda. Но это всего лишь безпочвенное предположение и игра в угадай мелодию.

А вообще лучше реально показать top/iotop на момент нагрузки. Даже если она всего 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, а понять где Вас хотят обмануть.

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 это пропустит) - Вы знать не можете, если конечно не сниффить каждое подключение, что очень трудоемко и ресурсоемко.

В этот раз я продемонстрировал свои кривые руки. На автомате (устал чего-то под вечер) sysrqd запустил, а он сам себе b-команду дал. Сейчас сервер выйдет из ребута.

Очень извиняюсь за самого себя.

ivan-lev:
:) обычно настраивают так, что между двумя операциями требуется выдержать паузу не менее заданного минимального интервала.

Написать на форуме про такой лимит - не значит его реализовать. Пока ни у одного хостера нет такого ограничения.

Всего: 1963