Integration af Postfix, Courier-imap og MySQL

Hvem er jeg

Michael Rasmussen

Udelukkende anvendt GNU/Linux siden 1999

Underviser i systemprogrammering, distribuerede systemer, databaser samt webprogrammering.

Programmeringssprog er C/C++, Java, Perl, PHP, Python og SQL

Systemadministration på GNU/Linux og BSD

Debian

Redhat

OpenBSD

System: Oversigt og sammenhæng

Postfix

Forudsætninger:

Version 2.x

Understøttelse af MySQL

Tilføjelse i filsystemet

Cd /var/spool/postfix

Mkdir virtual && chgrp ”virtual” virtual && chmod 770 virtual

Cd virtual

Opret en mappe for hvert virtuel domæne og giv den virtuelle bruger skriverettighed

Postfix - master.cf

Nedenstående linje skal tilføjes, for at få Postfix til at understøtte aflevering af til virtuelle brugere

#==========================================================================

# service type private unpriv chroot wakeup maxproc command + args

# (yes) (yes) (yes) (never) (100)

# ==========================================================================

virtual unix - n n - - virtual

Postfix - main.cf

Nedenstående linjer skal tilføjes, for at få Postfix til at understøtte aflevering af til virtuelle brugere

mydestination = $myhostname, localhost.$mydomain, $mydomain, mail.$mydomain, $transport_maps

transport_maps=mysql:/etc/postfix/transport.cf

virtual_mailbox_maps=mysql:/etc/postfix/mysql_virt.cf

virtual_uid_maps=mysql:/etc/postfix/uids.cf

virtual_gid_maps=mysql:/etc/postfix/gids.cf

virtual_maps=mysql:/etc/postfix/virtual.cf

#Nedenstående bør ændres, hvis man ikke kører Postfix chroot.

virtual_mailbox_base=/

Courier-imap

Forudsætninger:

Oversat med understøttelse af MySQL

Bemærk: Man kan ikke oversætte Courier-imap, hvis man er logget på som root!

I filen authdaemonrc skal MySQL autentificering være tilføjet. Rækkefølgen bestemmer også prioriteringen af opslag!:

authmodulelist="authmysql authpwd"

Courier-imap - authmysqlrc

Nedenstående linjer skal tilføjes for understøttelse af virtuelle brugere

MYSQL_SERVER localhost

MYSQL_USERNAME postfix

MYSQL_PASSWORD bigsecret

#Hvis der køres chroot, skal du lave et hardlink til jail – derfor skal jail være placeret på samme filsystem!!!!

MYSQL_SOCKET /var/run/mysql/mysql.sock

# Hvis TCP ønskes. Kan af sikkerhedsmæssige grunde ikke anbefales

# MYSQL_PORT 0

MYSQL_DATABASE maildb

MYSQL_USER_TABLE users

MYSQL_CRYPT_PWFIELD crypt

MYSQL_CLEAR_PWFIELD clear

MYSQL_UID_FIELD uid

MYSQL_GID_FIELD gid

MYSQL_LOGIN_FIELD id

MYSQL_HOME_FIELD home

MYSQL_NAME_FIELD name

MYSQL_MAILDIR_FIELD maildir

# Hvis man vil sætte maksimal størrelse på brugernes postmappe

# MYSQL_QUOTA_FIELD quota

MYSQL_WHERE_CLAUSE imapok=1 AND bool1=1 AND bool2=1

MySQL

MySQL >= 3.23.x

MySQL - transport

Beskriver hvilken service, der skal håndtere aflevering af mails

mysql> describe transport;

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

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

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

| domain | varchar(128) | | UNI | | |

| transport | varchar(128) | | | | |

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

4 rows in set (0.07 sec)

Transport kan antage værdien local: eller virtual:

MySQL - virtual

Beskriver mapning mellem adresser. Kan benyttes på samme måde som alias. Address er den virtuelle adresse, mens goto er, hvor mail sendes til lokalt – kan være en kommasepareret liste.

mysql> describe virtual;

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

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

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

| address | varchar(255) | | MUL | | |

| goto | varchar(255) | | MUL | 0 | |

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

4 rows in set (0.00 sec)

MySQL - users

Beskrivelsen af brugerne. Courier-imap benytter også denne tabel, så derfor skal felter stemme overens med opsætningen af authmysqlrc.

mysql> describe users;

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

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

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

| id | varchar(128) | | PRI | | |

| address | varchar(128) | | UNI | | |

| crypt | varchar(128) | | | | |

| clear | varchar(128) | | | | |

| name | varchar(128) | | | | |

| uid | smallint(5) unsigned | | | 5000 | |

| gid | smallint(5) unsigned | | | 5000 | |

| home | varchar(128) | | | / | |

| domain | varchar(128) | | | | |

| maildir | varchar(255) | | | | |

| quota | int(11) unsigned | | | 0 | |

| imapok | tinyint(3) unsigned | | | 1 | |

| bool1 | tinyint(3) unsigned | | | 1 | |

| bool2 | tinyint(3) unsigned | | | 1 | |

| userid | int(11) unsigned | | MUL | 0 | |

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

17 rows in set (0.21 sec)

gid skal have skriverettighed til mappen virtual og domæne i filsystemet, mens uid skal have skriverettighed til maildir-mappen placeret under domæne.

MyPFXAdmin

Apache >= 1.23.x

PHP >= 4.06

Understøttelse for MySQL

MyPFXAdmin - installation

Udpak tar-pakken

Skift til bruger root

Kopier filerne til en mappen med adgang fra web

Kør scriptet config.pl -> ./config.pl

Uden options gøres alt automatisk med forvalgte indstillinger.

Med ./config [-i | --interactive] startes en menu-baseret installation. Hvis man ikke ved, hvad scriptet gør, anbefales det på det kraftigste, at man følger rækkefølgen i hovedmenuen!!!!

Referencer

Postfix

http://www.postfix.org/docs.html

Courier-imap

http://www.inter7.com/courierimap.html

MySQL

http://dev.mysql.com/doc/

MyPFXAdmin

ftp://ftp.datanom.net/pub/MyPFXAdmin/

Slides

http://www.datanom.net/foredrag/postfix-courier-mysql/

2004-05-11T01:26:30