Exim4 configuration to use several external ip for mail sending

6,956

Solution 1

I found this article which show how to sets up a random function to pick an IP from a list and then assign it as an output interface to the smtp driver.

Essentially, you have to set up a function:

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)];
}

and modify the smtp driver:

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

Solution 2

You can do this from within exim as well without using perl:

create a lookup file /etc/exim/ips.txt with

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

Set the transport to:

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

randint will return a random number between 1-4 which is then looked up in the file and used if you have more ip's just add to the list and increment the randint value to number ips + 1

Can be used by those who have exim built without perl or just don't want to use perl keeping everthing within exim.

Share:
6,956

Related videos on Youtube

bonsoy
Author by

bonsoy

Updated on September 18, 2022

Comments

  • bonsoy
    bonsoy almost 2 years

    i've got exim4 on ubuntu server and i-ve got a pool of 20 external IP's.

    Is that possible to configure exim4 to use this ip-s rotating to send mail?


    I think i could do this with iproute / iptables load balancing with "link stick" but i want to know if this is possible with exim4 internal configuration. Maybe there i should create several external smtp_drivers that will be using one of 20 IP and some random() func ?

    • Admin
      Admin over 12 years
      Why would you want to?
    • Admin
      Admin over 12 years
      say you want to send 2k emails to server gmail.com but after 1k gmailcom says: "Hey, you've excided maximum allowed emails from ip, try later". This later is 30/60/120 minutes but i have to deliver mail within 30 min.
    • Admin
      Admin over 9 years
      You are just digging yourself deeper into the hole if you try to evade their policy restrictions. See what you can do to simply send less email into Gmail, or get a proper agreement with them to have you exempted from the restriction.
  • Christian
    Christian about 2 years
    According to exim.org/exim-html-current/doc/html/spec_html/… randint:5 should produce a value between 0 and 4, that means 0, 1, 2, 3 or 4. Your list starts with 1, not zero. Is this correct?