Самое милое, что такое письмо приходит всегда, вне зависимости от того, заполнена форма, на которую ссылка в первом письме или не заполнена. Так что это письмо вообще ничего не значит.
Быстро Вы сдались :)
Ну запощу для будущих поколений.
Делается на основной ноде, а не на виртуалке:
iptables -t nat -A PREROUTING -i vmbr0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.3:80
А SSH так нельзя прокинуть - вылетите, потому что отрезали сук, на котором сидите. Сначала надо либо перенести порт ноды на другой, либо выбрать другой номер порта для виртуалки и указать его в --dport.
Нажмите пожалуйста на единичку, чтобы видеть все ядра.
iowait занимает 21%. А в спокойном состоянии он сколько занимает?
Мой пардон, iptables уже это умеет.
Вот наверно единственная конструкция, которая может помочь:
Как этим воспользоваться.
Вот пример письма, которое не использует аутентификацию:
А вот пример письма, которое использует:
А это значит, что в диалогах честно отправленных письмах присутствует строчка "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 тоже Ваша смерть. А будет именно так.
Ну вообще оно конечно сработает и на локалхосте. Но Ок, ответ понял.
Это не ответ на мой вопрос, но ладно.
Вы такой сильный программист? Вы понимаете, что Вам придется открыть сорцы 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, а понять где Вас хотят обмануть.
Странно. Обычно люди, которые борятся со спамом на твердую пятерку, знают, что 25 порт - это порт MTA, а для MSA[а Вам нужен именно MSA] есть и дополнительные порты (хотя 25 тоже иногда работает).
Более того, у некоторых сервисов нет сабмишшена на порту 25. Например у mail.ru и gmail.com:
Один из немногих, у кого нашел MSA в том числе на 25-м порту - hotmail.com
Я это к тому, что у Вас чужой PHP-скрипт подключется к чужому 25 порту. Будет ли он использовать команду AUTH или наоборот как через релей отправит все локальным пользователям (MTA это пропустит) - Вы знать не можете, если конечно не сниффить каждое подключение, что очень трудоемко и ресурсоемко.
В этот раз я продемонстрировал свои кривые руки. На автомате (устал чего-то под вечер) sysrqd запустил, а он сам себе b-команду дал. Сейчас сервер выйдет из ребута.
Очень извиняюсь за самого себя.
Написать на форуме про такой лимит - не значит его реализовать. Пока ни у одного хостера нет такого ограничения.