Re: Routing solution on mail servers with all domain pointing at the same externel IP

Jimmy Brake <[email protected]>
Newsgroups gmane.mail.perdition.user
Message-ID <[email protected]>
Hi,

Wow kind of a busy thread so I am not sure if I fully understand it ..
however .. the setup looks similar to mine. Where I have different
clients in the same or different domains that need to be routed to the
proper server.

I remember it was not easy to setup.

M /usr/lib/libperditiondb_mysql.so.0

m
someIP:3306:dbPerdition:tblPerdition:dbUser:dbPass:servername:concat(user,\'@\',domain):port

server_resp_line

Those are pretty much the only three lines in my config file for
perdition.

You could change these to suite your needs:
"someIP:3306:dbPerdition:tblPerdition:dbUser:dbPass"

You should probably not change these:
"servername:concat(user,\'@\',domain):port"

my mysql table looks like this

mysql> describe perdition;

+------------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+------------+--------------+------+-----+---------+-------+

| user | varchar(128) | NO | MUL | NULL | |

| domain | varchar(255) | NO | MUL | NULL | |

| servername | varchar(255) | NO | MUL | NULL | |

| port | varchar(8) | NO | MUL | NULL | |

+------------+--------------+------+-----+---------+-------+

some rows of users

mysql> select * from perdition limit 0,10;

+------------+----------------+------------------------+------+

| user | domain | servername | port |

+------------+----------------+------------------------+------+

| donotreply | dwalliance.com | node8.youdomain.com | |

| jimmy | dwalliance.com | node8.youdomain.com | |

| inda | dwalliance.com | node8.youdomain.com | |

| support | dwalliance.com | node8.youdomain.com | |

| costarica | dwalliance.com | node8.youdomain.com | |

| cathe | dwalliance.com | node7.youdomain.com | |

| node7 | dwalliance.com | node7.youdomain.com | |

| node6 | dwalliance.com | node6.youdomain.com | |

| donnie | thebrakes.org | node8.youdomain.com | |

| ken | brake.org | node8.youdomain.com | |

+------------+----------------+------------------------+------+

We left the port blank .. when we had the port set to a protocol it
would only allow that protocol. Leaving it blank and people can use
whatever suits them best.

Before any of this will work ... make sure imap / pop work on the mail
hosts, make sure the mysql account works from the perdition server.

Sorry I did not read through the complete thread and I hope this helps.

Jimmy

Stephen Liu wrote:

--- Gustavo Luiz Duarte <[email protected]> wrote:

Well, it worked. Now your courier imap is rejecting the user/pass you
supplied.

Hi Gustavo,

Yes, it works. I must use the password on the user.table of MySQL
maildb, NOT the password to login the mail server.

xen11:~# echo "tag login [email protected] mypasswd" | nc
xen11.satimis.com 143
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE
THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5
AUTH=CRAM-SHA1 IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready.
Copyright 1998-2005 Double Precision, Inc. See COPYING for
distribution information.
tag OK LOGIN Ok.

xen11:~# tail /var/log/mail.log
Dec 3 16:27:40 xen11 imapd: LOGIN: ip=[::ffff:192.168.0.211],
command=LOGIN
Dec 3 16:27:40 xen11 imapd: LOGIN: ip=[::ffff:192.168.0.211],
[email protected]
Dec 3 16:27:40 xen11 imapd: LOGIN: ip=[::ffff:192.168.0.211],
password=mypasswd
Dec 3 16:27:40 xen11 authdaemond: received auth request, service=imap,
authtype=login
Dec 3 16:27:40 xen11 authdaemond: authmysql: trying this module
Dec 3 16:27:40 xen11 authdaemond: SQL query: SELECT id, "", clear,
uid, gid, home, concat(home,'/',maildir), "", name, "" FROM users WHERE
id = "[email protected]" AND (enabled=1)
Dec 3 16:27:40 xen11 authdaemond: authmysql: sysusername=<null>,
sysuserid=5000, sysgroupid=5000, homedir=/var/spool/mail/virtual,
[email protected] , fullname=Stephen,
maildir=/var/spool/mail/virtual/Stephen/, quota=<null>, options=<null>
Dec 3 16:27:40 xen11 authdaemond: Authenticated: sysusername=<null>,
sysuserid=5000, sysgroupid=5000, homedir=/var/spool/mail/virtual,
[email protected] , fullname=Stephen,
maildir=/var/spool/mail/virtual/Stephen/, quota=<null>, options=<null>
Dec 3 16:27:40 xen11 imapd: LOGIN, [email protected] ,
ip=[::ffff:192.168.0.211], protocol=IMAP
Dec 3 16:28:14 xen11 imapd: DISCONNECTED, [email protected] ,
ip=[::ffff:192.168.0.211], headers=0, body=0, rcvd=0, sent=18, time=34

With the same password on Evolution I can send mails but can't receive
mails.

IMAPrev1
Server: xen11.satimis.com
username: [email protected]

Error while Scanning folders in "IMAP server xen11.satimis.com".
Failed sending command to IMAP server xen11.satimis.com: Interrupted
system call

xen11:~# tail /var/log/mail.log
Dec 3 17:02:13 xen11 authdaemond: authmysql: sysusername=<null>,
sysuserid=5000, sysgroupid=5000, homedir=/var/spool/mail/virtual,
[email protected] , fullname=Stephen,
maildir=/var/spool/mail/virtual/Stephen/, quota=<null>, options=<null>
Dec 3 17:02:13 xen11 authdaemond: Authenticated: sysusername=<null>,
sysuserid=5000, sysgroupid=5000, homedir=/var/spool/mail/virtual,
[email protected] , fullname=Stephen,
maildir=/var/spool/mail/virtual/Stephen/, quota=<null>, options=<null>
Dec 3 17:02:13 xen11 imapd: LOGIN, [email protected] ,
ip=[::ffff:192.168.0.110], protocol=IMAP
Dec 3 17:03:25 xen11 postfix/anvil[3590]: statistics: max connection
rate 1/60s for (smtp:220.232.213.178) at Dec 3 16:57:27
Dec 3 17:03:25 xen11 postfix/anvil[3590]: statistics: max connection
count 1 for (smtp:220.232.213.178) at Dec 3 16:57:27
Dec 3 17:03:25 xen11 postfix/anvil[3590]: statistics: max cache size 1
at Dec 3 16:57:27
Dec 3 17:05:44 xen11 imapd: DISCONNECTED, [email protected] ,
ip=[::ffff:192.168.0.110], headers=6318, body=0, rcvd=7778, sent=61498,
time=211
Dec 3 17:05:52 xen11 imapd: Connection, ip=[::ffff:192.168.0.110]
Dec 3 17:05:52 xen11 imapd: LOGIN: ip=[::ffff:192.168.0.110],
command=CAPABILITY
Dec 3 17:06:14 xen11 imapd: Disconnected, ip=[::ffff:192.168.0.110],
time=22

A further question, on remote PC how can remote mail client find the
server-xen11.satimis.com? Use the external IP of the routing mail
server?

B.R.
Stephen

On Thu, Dec 4, 2008 at 01:17, Stephen Liu <[email protected]> wrote:

--- Gustavo Luiz Duarte <[email protected]> wrote:

I suppose IMAP4_FLAGS="-m /etc/perdition_lookup.gdbm.db

--query_key

'\d ' "

Edit /etc/default/perdition

xen11:~# cat /etc/default/perdition | grep IMAP4_FLAGS
# by POP3_FLAGS, POP3S_FLAGS, IMAP4_FLAGS or IMAP4S_FLAGS
IMAP4_FLAGS="-m /etc/perdition_lookup.gdbm.db --query_key '\d' "

xen11:~# /etc/init.d/perdition restart
Stopped /usr/sbin/perdition.pop3 (pid 3458).
No /usr/sbin/perdition.pop3s found running; none killed.
No /usr/sbin/perdition.imap4 found running; none killed.
No /usr/sbin/perdition.imaps found running; none killed.
Starting /usr/sbin/perdition.pop3...
Starting /usr/sbin/perdition.pop3s...
Starting /usr/sbin/perdition.imap4...
Starting /usr/sbin/perdition.imaps...

xen11:~# echo "tag login [email protected] mypasswd" | nc
xen11.satimis.com 143
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE
THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5
AUTH=CRAM-SHA1IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready.
Copyright 1998-2005 Double Precision, Inc. See COPYING for
distribution information.
tag NO Login failed.

hanging here.

xen11:~# tail /var/log/mail.log
Dec 3 15:58:01 xen11 imapd: LOGIN: ip=[::ffff:192.168.0.211],
[email protected]
Dec 3 15:58:01 xen11 imapd: LOGIN: ip=[::ffff:192.168.0.211],
password=mypasswd
Dec 3 15:58:01 xen11 authdaemond: received auth request,

service=imap,

authtype=login
Dec 3 15:58:01 xen11 authdaemond: authmysql: trying this module
Dec 3 15:58:01 xen11 authdaemond: SQL query: SELECT id, "", clear,
uid, gid, home, concat(home,'/',maildir), "", name, "" FROM

usersWHERE

id = "[email protected]" AND (enabled=1)
Dec 3 15:58:01 xen11 authdaemond: supplied password does not match
clearpasswd
Dec 3 15:58:01 xen11 authdaemond: authmysql: REJECT - try next

module

Dec 3 15:58:01 xen11 authdaemond: FAIL, all modules rejected
Dec 3 15:58:01 xen11 imapd: LOGIN FAILED,

[email protected] ,

ip=[::ffff:192.168.0.211]
Dec 3 15:58:21 xen11 imapd: Disconnected,

ip=[::ffff:192.168.0.211],

time=20

Still fail

B.R.
Stephen L

On Thu, Dec 4, 2008 at 00:30, Stephen Liu <[email protected]>

wrote:

--- Gustavo Luiz Duarte <[email protected]> wrote:

You are not supplying the necessary options: -m and

--query_key.

You can set it by command line parameter or in
/etc/perdition/perdition.conf (maybe /etc/defaults too)

Hi Gustavo,

Please advise how to set them on /etc/default/perdition.

cat /etc/default/perdition

######################################################################

# /etc/sysconfig/perdition (RPM based systems)
# /etc/default/perdition (Debian)
#
# Run time configuration parameters for perdition

######################################################################

# Run perdition
# Set to "yes" to run perdition
# Set to any other value to not run perdition
RUN_PERDITION=yes

# Command line parameters to pass to perdition when run in any

mode.

# This is in addition to any mode specific flags.
# That is, it is in addtion to any command line options supplied
# by POP3_FLAGS, POP3S_FLAGS, IMAP4_FLAGS or IMAP4S_FLAGS
#FLAGS=

# Run an instance of perdition in POP3 mode
# Set to "yes" to run this instance of perdition
# Set to any other valye to not run this instance of perdition
POP3=yes

#Command line parameters to pass to perdition when run in POP3

mode

POP3_FLAGS=

# Run an instance of perdition in POP3S mode
# Set to "yes" to run this instance of perdition
# Set to any other valye to not run this instance of perdition
POP3S=yes

#Command line parameters to pass to perdition when run in POP3S

mode

POP3S_FLAGS=

# Run an instance of perdition in IMAP4 mode
# Set to "yes" to run this instance of perdition
# Set to any other valye to not run this instance of perdition
IMAP4=yes

#Command line parameters to pass to perdition when run in IMAP4

mode

IMAP4_FLAGS=

# Run an instance of perdition in IMAP4S mode
# Set to "yes" to run this instance of perdition
# Set to any other valye to not run this instance of perdition
IMAP4S=yes

#Command line parameters to pass to perdition when run in IMAP4S

mode

IMAP4S_FLAGS=
* end *

TIA

B.R.
Stephen L

For some reason I was thinking about the hints I gave you

and

realized
I made a mistake. I forgot to mention that your client needs

to

use

the domain while authenticating. So the test would be:

$ echo "tag login username@domain password" | nc

perdition_host

143

Without the domain (as I had written) perdition cannot

resolve

which

server to connect.

Tried again.

xen11:~# /etc/init.d/perdition restart
Stopped /usr/sbin/perdition.pop3 (pid 2878).
No /usr/sbin/perdition.pop3s found running; none killed.
No /usr/sbin/perdition.imap4 found running; none killed.
No /usr/sbin/perdition.imaps found running; none killed.
/usr/sbin/perdition.pop3 already running.
Starting /usr/sbin/perdition.pop3s...
Starting /usr/sbin/perdition.imap4...
Starting /usr/sbin/perdition.imaps...

xen11:~# echo "tag login [email protected] x10satimis" | nc
xen11.satimis.com 143
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE
THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA

AUTH=CRAM-MD5

AUTH=CRAM-SHA1 IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP

ready.

Copyright 1998-2005 Double Precision, Inc. See COPYING for
distribution information.
tag NO Login failed.

Hanging here. I have to exit it manually with [Ctrl]+c

xen11:~# tail /var/log/mail.log
Dec 3 14:37:01 xen11 imapd: LOGIN:

ip=[::ffff:192.168.0.211],

[email protected]
Dec 3 14:37:01 xen11 imapd: LOGIN:

ip=[::ffff:192.168.0.211],

password=mypasswd
Dec 3 14:37:01 xen11 authdaemond: received auth request,

service=imap,

authtype=login
Dec 3 14:37:01 xen11 authdaemond: authmysql: trying this

module

Dec 3 14:37:01 xen11 authdaemond: SQL query: SELECT id, "",

clear,

uid, gid, home, concat(home,'/',maildir), "", name, "" FROM

users

WHERE

id = "[email protected]" AND (enabled=1)
Dec 3 14:37:01 xen11 authdaemond: supplied password does not

match

clearpasswd
Dec 3 14:37:01 xen11 authdaemond: authmysql: REJECT - try

next

module

Dec 3 14:37:01 xen11 authdaemond: FAIL, all modules rejected
Dec 3 14:37:02 xen11 imapd: LOGIN FAILED,

[email protected] ,

ip=[::ffff:192.168.0.211]
Dec 3 14:37:20 xen11 imapd: Disconnected,

ip=[::ffff:192.168.0.211],

time=19

Still fail.

B.R.
Stephen L

On Wed, Dec 3, 2008 at 15:49, Gustavo Luiz Duarte
<[email protected]> wrote:

On Wed, Dec 3, 2008 at 15:27, Stephen Liu

<[email protected]>

wrote:

--- Gustavo Luiz Duarte <[email protected]> wrote:

On Wed, Dec 3, 2008 at 12:05, Stephen Liu

<[email protected]>

wrote:

Hi Gustavo,

I'll make 2 tests;

1)
test1 - USING TEXT FILE

2)
test2 - USING MYSQL

I have cloned an image of the routing mail server for

test2.

Now

proceed test1 first.

--- Gustavo Luiz Duarte <[email protected]> wrote:

Hi Stephen,

You could use the transport table if the string

"smtp:"

wasn't

there.

Do you really want to use mysql for the lookup? If

you

have

only 3

domain you could use a text file.

USING TEXT FILE:
$ cat << END > /etc/perdition_lookup.txt
satimis.dnsalias.com:192.168.0.209
satimis.changeip.net:192.168.0.208
satimis.com:192.168.0.210
END

$ makegdbm /etc/perdition_lookup.gdbm.db <

/etc/perdition_lookup.txt

$ perdition -m /etc/perdition_lookup.gdbm.db

--query_key

"\d"

Package installed - perdition-mysql

# apt-cache policy perdition-mysql
perdition-mysql:
Installed: 1.17-7etch1
Candidate: 1.17-7etch1
Version table:
*** 1.17-7etch1 0
500 http://ftp.au.debian.org etch/main Packages
500 http://security.debian.org

stable/updates/main

Packages

100 /var/lib/dpkg/status

# cat << END > /etc/perdition_lookup.txt

satimis.dnsalias.com:192.168.0.209
satimis.changeip.net:192.168.0.208
satimis.com:192.168.0.210
END

# which makegdbm
/usr/bin/makegdbm

# which perdition
/usr/sbin/perdition

# makegdbm /etc/perdition_lookup.gdbm.db <

/etc/perdition_lookup.txt

# perdition -m /etc/perdition_lookup.gdbm.db

--query_key

"\d"

both without complaint

Now I haven't figured out how to test perdition.

There

are

2

databases

running on this routing mail server, MySQL maildb and
perdition_lookup.gdbm.db. Do I need to stop MySQL

maildb

to

test

perdition? How can the remote mail clients connect

their

mail

servers?

What server settings shall I use? Please shed me

some

light.

TIA

No need for stopping you MySQL.

If everything is wright (I haven't tested, I can have

skipped

something), you can point your mail clients to the

hostname

where

perdition is installed and use it normally.

Sorry I can't resolve how can the mail client (Evolution)

find

its

server over Internet with following settings;

The mail client doesn't know wich server to use. It always

use

the

routing server. The routing server redirects it to the

correct

imap

server. Make sure your are using the right protocol imap4

or

imap4s.

Server Type: IMAP

Server : xen11.satimis.com (hostname of the routing mail

server

where

perdition is running

User: satimis

satimis is user of satimis.com, satimis.changeip.net and
satimis.dnsalias.com as well as user of the routing mail

server,

xen11.satimis.com

I tried it without success.

Note that perdition's default protocol is pop3. To use

imap

suply

the

option -P IMAP4

xen11:~# /etc/init.d/perdition start
/usr/sbin/perdition.pop3 already running.
Starting /usr/sbin/perdition.pop3s...
Starting /usr/sbin/perdition.imap4...
Starting /usr/sbin/perdition.imaps...

How are you configuring perdition? Have you modified your
/etc/init.d/perdition script to contain the correct

parameters?

xen11:~# hostname
xen11.satimis.com

pop3 is already running. I have to manually run

/etc/init.d/perdition

to start pop3s, imap4 and imaps

You can use nc to test it:
$ echo "tag login username password" | nc perdition_host

143

In username and password you use valid username and

password

for

your

real imap server.

I suppose running above command on the routing mail

server

where

perdition is installed.

# echo "tag login satimis mypassword" | nc

xen11.satimis.com

143

* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE
THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA

AUTH=CRAM-MD5

AUTH=CRAM-SHA1 IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP

ready.

Copyright 1998-2005 Double Precision, Inc. See COPYING

fordistribution

information.
tag NO Login failed.

For pop3:
$ echo -e "user username\npass password | nc

perdition_host

110

xen11:~# echo -e "user satimis\npass x11satimis | nc

xen11.satimis.com

110

waiting for input

You can look at perdition logs to find information about

what

is

going on.

No special configuration is need for your pop/imap

servers.

Just

assure that they are listening on standard ports.

I have only ONE external IP. All ports are forwarded to

the

routing

mail server except port 53.

B.R.
Stephen L

[]'s
Gustavo Duarte

B.R.
Stephen

USING MYSQL:
You have some alternatives:
1. Continue with your tblPerdition and populate it,

so

that

user

column has the domain, hostname column has the

localIP

and

port

column
you leave empty (supposing your real pop/imap servers

listen

to

standard ports).

Then you would do (supposing you have mysql perdition

library

in

/usr/lib):

perdition -M /usr/lib/libperditiondb_mysql.so.0

--query_key

"\d"

-m

"<dbhost>:<dbport>:dbPerdition:tblPerdition:perdition:perdition"

(substituting <dbhost> and <dbport> by you db

hostname

and

port)

2. Modify your transport table so that the string

smtp

and

localIP

are
in diferent columns. Then you create a view

concatenating

them

for

the
postfix query. A bit more complicated but easier to

maintain

when

you

have lots of domains and servers.

[]'s
Gustavo Duarte

On Wed, Dec 3, 2008 at 02:28, Stephen Liu

<[email protected]>

wrote:

Hi Gustavo,

The URL I sent you has information about using

mysql

as

lookup

library:

http://www.vergenet.net/linux/perdition/perditiondb.5.shtml

I suppose you're referring to following section;

MYSQL
This map library can be used by specifying the full

path

to

the

library

using the -M|--map_library command line option or

configuration

file

option.

E.g.
perdition -M /usr/lib/libperditiondb_mysql.so.0
......

I'll start from there.

I suppose the name of this database is

"dbPerdition"

to

be

created

on

MySQL

mysql> create database dbPerdition;

mysql> GRANT

SELECT,INSERT,UPDATE,DELETE,CREATE,DROP

-> ON dbPerdition.* TO 'perdition' IDENTIFIED by

'perdition';

the 1st "perdition" on above second line is

"database

user".

The

2nd

"perdition" is "database password".

mysql> CREATE TABLE `tblPerdition` (
-> `user` varchar(128), null '' default '',
-> `servername` varchar(255) null '' default '',
-> `port` varchar(8) YES NULL,
-> PRIMARY KEY (`user`),
-> ) ;

Afterwards I'll edit data on 'tblPerdition" table.

The table you've shown doesn't have information

about

the

hostnames/localIPs. Where is it? In the transport

table?

Yes.

mysql> SELECT * from transport;

+------+----------------------+--------------------+-----------+---------+

| pkid | domain | hostname

|

transport |

enabled |

+------+----------------------+--------------------+-----------+---------+

| 1 | satimis.dnsalias.com | smtp:192.168.0.209

|

:[]

|

1 |
| 2 | satimis.changeip.net | smtp:192.168.0.208

|

:[]

|

1 |
| 3 | satimis.com | smtp:192.168.0.210

|

:[]

|

1 |

+------+----------------------+--------------------+-----------+---------+

3 rows in set (0.00 sec)

# cat /etc/postfix/mysql_transport_maps.cf
user=mail
password=mypassword
dbname=maildb
table=transport
select_field=hostname
where_field=domain
hosts=127.0.0.1
additional_conditions = and enabled = 1
* end *

I've never used mysql to do it, so I don't know

the

details

and

how

flexible it is. Maybe you'll need to create a view

in

your

database

for the perdition lookup with the domain as key

and

the

localIP

as

value.

Unfortunately I don't have any example. But the

two

URLs

I

sent

you

have all information you need. In particular, look

at

--query_key

option and mysql database access library.

Whether you meant "--query_key FORMAT[,FORMAT...]:"

on;

http://www.vergenet.net/linux/perdition/perdition.8.shtml

Thanks

B.R.
Stephen L

Send instant messages to your online friends

http://uk.messenger.yahoo.com

______________________________________________
Perdition-users mailing list
[email protected]
http://lists.vergenet.net/listinfo/perdition-users

Send instant messages to your online friends

http://uk.messenger.yahoo.com

______________________________________________
Perdition-users mailing list
[email protected]
http://lists.vergenet.net/listinfo/perdition-users

Send instant messages to your online friends

http://uk.messenger.yahoo.com

______________________________________________
Perdition-users mailing list
[email protected]
http://lists.vergenet.net/listinfo/perdition-users

Send instant messages to your online friends

http://uk.messenger.yahoo.com

______________________________________________
Perdition-users mailing list
[email protected]
http://lists.vergenet.net/listinfo/perdition-users

Send instant messages to your online friends

http://uk.messenger.yahoo.com

______________________________________________
Perdition-users mailing list
[email protected]
http://lists.vergenet.net/listinfo/perdition-users

Send instant messages to your online friends

http://uk.messenger.yahoo.com

______________________________________________
Perdition-users mailing list
[email protected]
http://lists.vergenet.net/listinfo/perdition-users

Send instant messages to your online friends http://uk.messenger.yahoo.com
______________________________________________
Perdition-users mailing list
[email protected]
http://lists.vergenet.net/listinfo/perdition-users

______________________________________________
Perdition-users mailing list
[email protected]
http://lists.vergenet.net/listinfo/perdition-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.