Назад | Перейти на главную страницу

Конфигурация exim4 для использования нескольких внешних IP-адресов для отправки почты

У меня есть exim4 на сервере Ubuntu, и у меня есть пул из 20 внешних IP-адресов.

Можно ли настроить exim4 для использования ротации IP-адресов для отправки почты?


Я думаю, что смогу сделать это с помощью балансировки нагрузки iproute / iptables с помощью «привязки», но я хочу знать, возможно ли это с внутренней конфигурацией exim4. Может быть, мне стоит создать несколько внешних smtp_drivers, которые будут использовать один из 20 IP и какую-то функцию random ()?

Вы также можете сделать это из exim, не используя perl:

создайте файл поиска /etc/exim/ips.txt с

1: xxx.xxx.xxx.1
2: xxx.xxx.xxx.2
3: xxx.xxx.xxx.3
4: xxx.xxx.xxx.4

Установите транспорт на:

remote_smtp:
  driver = smtp
  interface = "${lookup {${randint:5}} lsearch {/etc/exim/ips.txt}}"

randint вернет случайное число от 1 до 4, которое затем просматривается в файле и используется, если у вас есть больше ip, просто добавьте в список и увеличьте значение randint до числа ips + 1

Может использоваться теми, кто создал exim без Perl или просто не хочет использовать Perl, сохраняя все внутри exim.

я нашел Эта статья которые показывают, как настроить случайный функция, чтобы выбрать IP-адрес из списка и затем назначить его в качестве интерфейса вывода для драйвера smtp.

По сути, вам нужно настроить функцию:

sub randinet {
  @inet = ("x.x.x.1", "x.x.x.2", "x.x.x.3", "x.x.x.4");
  return $inet[int rand($#inet+1)];
}

и измените драйвер smtp:

remote_smtp:
driver = smtp
interface = "${perl{randinet}}"

Вот очень простой способ

Создайте /etc/exim.pl со следующим содержанием:

use feature qw[state];

sub randomhosts {
  state $current;

  my @inet = (
    "x.x.x.x:hostname1.domain.com",
    "x.x.x.x:hostname2.domain.com",
    "x.x.x.x:hostname3.domain.com"
  );

  if ($_[0] eq 'generate') {
    shift;
    @{$current}{qw[ip host]} = split /:/, $inet[rand @inet];
  }

  return $current->{$_[0]};
}

Заменить x.x.x.x с IP и именем хоста (после двоеточия, которое будет использоваться как HELO).

Теперь добавьте это в начало вашего exim.conf

perl_startup = do '/etc/exim.pl'

Теперь под remote_smtp: раздел добавить это

  interface = "${perl{randomhosts}{generate}{ip}}"
  helo_data = "${perl{randomhosts}{host}}"

Вот и все. Теперь электронные письма будут случайным образом проходить через все IP-адреса, которые вы добавили в Perl-скрипт, и будут использовать действительные HELO.

Вы получите следующую ошибку, если последуете подходу topdog.

есть два транспорта с именем "remote_smtp"

так как вы не можете изменить секцию STARTTRANSPORT в редакторе exim conf.

Даже если вы попытаетесь изменить exim.conf вручную, он будет удален и заменен файлом по умолчанию при перезапуске.

Единственное решение, которое я смог найти в Интернете, было http://forums.cpanel.net/f43/scripts-posteximup-help-205971.html#post845302

Я также разместил заявку на cPanel. посмотрим, как они отреагируют. Постараюсь обновить его, как только получу ответ.