1

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

Он имеет http-прокси, который позволяет ему получать доступ к другим серверам, и я могу делать запросы wget по ip или имени хоста, которые я добавил в файл hosts.

Я пытался сделать правило NAT для перенаправления всего трафика, предназначенного для порта 25 на порт 80, но безуспешно.

Есть ли способ отправить электронную почту через командную строку в ситуации, подобной моей? Мне нужно, чтобы сервер отправлял автоматические электронные письма на основе некоторых моих заданий cron.

1 ответ1

1

И да и нет.

Конечно, можно заставить MTA говорить по SMTP через нестандартный порт, но только если сервер на другом конце этого ожидает . И вы обнаружите, что никто никогда не слушает SMTP на порте 80 - поэтому ваш сервер будет проводить большую часть своего времени, пытаясь общаться с чьим-то Apache. Для обмена сообщениями между серверами (MX) это порт 25, конец истории.

Таким образом, вы не можете просто изменить порт. Вместо того, чтобы напрямую подключаться к почтовым серверам получателей (из записей MX), вашему MTA нужно будет ретранслировать всю почту через определенный сервер, настроенный для приема SMTP через порт 80.


Но делать это относительно легко, до тех пор , пока у вас есть второй сервер, которому разрешено отправлять почту. Установите MTA там (например, OpenSMTPD или Postfix), настройте его на прослушивание порта 80 и доверять IP-адресу вашего "исходного" сервера для ретрансляции. (В качестве альтернативы, вместо белого списка IP-адресов аутентификация по имени пользователя и паролю SMTP была бы даже лучше.)

Вот (непроверенный) пример OpenSMTPD:

table relay-in-ip { "12.34.56.78" }
listen on 0.0.0.0 port 80 tls-require
listen on :: port 80 tls-require
accept from source <relay-in-ip> for any relay

Точно так же для аутентифицированного SMTP:

table relay-in-auth { "someuser"="somepassword" }
listen on 0.0.0.0 port 80 tls-require auth <relay-in-auth> tag AUTHED
listen on :: port 80 tls-require auth <relay-in-auth> tag AUTHED
accept tagged AUTHED from any for any relay

(Обязательно проверьте сервер ретрансляции - было бы Bad ™, если бы он позволял всему Интернету передавать сообщения через. Даже если я не совсем понимаю, почему.)

После того, как вы это настроите, обычно требуется только одна настройка на "исходном" сервере для ретрансляции всей почты - в зависимости от MTA, опция может называться "relay host" или "smarthost", и она почти всегда принимает хост: спецификация порта:

accept for any relay via "tls://relay.example.com:80"

Если требуется аутентификация:

table relay-out-auth { "foo"="someuser:somepassword" }
accept for any relay via "tls+auth://foo@smtp.gmail.com:587" auth <relay-out-auth>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .