Блог

2016.02.22

Защита почты от нахождения IP сервера

Очень часто сервера подвергаются DDoS атаки именно когда злоумышленники узнают настоящий IP сервера. Даже если вы скрываете его под различными фильтрами и прокси серверами типо CloudFlare, есть одно узкое место о котором часто забывают.

При отправке письма с сервера (регистрация, восстановление пароля..), в письме указывается реальный IP сервера. Это очень простой способ узнать реальный IP и очень сложно это скрыть. Почтовый сервер обязан писать свой IP откуда шлёт письмо, даже если вы используете сторонний smtp сервер.

Чтобы скрыть IP можно воспользоваться сервисами которые позволяют слать письма через Api, тогда IP будет сервера того кто предоставляет услугу отправки писем.

Например сервис https://mailgun.com предоставляет api для отправки писем, а также отправку через smtp. До 10к/месяц писем бесплатно, этого должно хватить для обычного сервера.

Вы можете использовать предоставляемую библиотеку или использовать маленькую функцию которая написана ниже.

Полезная функция для отправки писем через Api без использования библиотек:

function mg_send($to, $subject, $message) {

  $_API_KEY = 'api:key-abcde12345negmo2xef8ynlel1035foq';
  $_API_DOMAIN = 'mmodb.info';
  $_FROM = 'webmaster <postmaster@mmodb.info>';

  $ch = curl_init();

  curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
  curl_setopt($ch, CURLOPT_USERPWD, $_API_KEY);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

  $plain = strip_tags(nl2br($message));

  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
  curl_setopt($ch, CURLOPT_URL, 'https://api.mailgun.net/v2/'.$_API_DOMAIN.'/messages');
  curl_setopt($ch, CURLOPT_POSTFIELDS, array(
        'from' => $_FROM,
        'to' => $to,
        'subject' => $subject,
        'html' => $message,
        'text' => $plain
  ));

  $j = json_decode(curl_exec($ch));

  $info = curl_getinfo($ch);

  if($info['http_code'] != 200) die("Error Send mail.");

  curl_close($ch);

  return $j;
}

// пример отправки письма
mg_send('admin@mmodb.info', 'test mail', 'lorem ipsum');

Так вы защитите свой сервер от раскрытия реального IP адреса.