Repository 32bit  Forum
Repository 64bit  Wiki

Postfix virtual domain quota in Slackware 10

Da Slacky.eu.
Versione delle 18:36, 19 set 2006, autore: L1q1d (Discussione | contributi)

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Indice

Introduzione

Questo HowTo ti guiderà all'installazione e alla configurazione di un sistema per la gestione della posta elettronica basato sul lavoro congiunto di Postfix, Courier-imap e Mysql su una distribuzione Slackware

Quello che otterremo è un sistema con domini ed utenti virtuali amministrabile attraverso interfaccia web che metterà a disposizione i server SMTP, POP3, IMAP ed un servizio di Webmail

La realizzazione è stata testata su una Slackware 10. Al momento della stesura di questo HowTo le versioni dei programmi utilizzati sono:

  • Postfix-2.1.5
  • Courier-imap-3.0.7
  • Postfixadmin-2.0.5
  • Squirrelmail-1.4.3a
  • Mysql-4.0.21

Per le versioni successive controllate la relativa documentazione.

Requisiti

Un sistema Slackware Linux dove non sia installato sendmail o alcun altro MTA e con Apache, PHP e Mysql up and run. Per controllare che sia tutto in ordine, da root, esegui i comandi:

# sendmail

deve restituire:

sendmail: command not found
# echo "<? phpinfo(); ?>" > /var/www/htdocs/info.php

poi apri il browser e collegati all'indirizzo http://localhost/info.php e controlla che sia caricato il modulo mysql

Lista della spesa

I software di cui abbiamo bisogno sono:

Courier-imap lo si può tranquillamente prendere precompilato per Slackware da Robert Stan all'indirizzo www.linuxpackages.net (attenzione alle dipendenze, si trovano nel file install/slack-required).

Postfix normalmente non si trova precompilato con il supporto a Mysql, ed in più a noi serve applicare la patch VDA per la gestione delle quote, per questo sarebbe consigliabile compilarlo a mano. Qui puoi trovare un pacchetto che ho compilato con tutto ciò che ci serve e il relativo Slackbuild da modificare per le versioni successive.

Postfixadmin e Squirrelmail vanno semplicemente scaricati dalle relative homepage.

Installazione

Postfix

Installare il pacchetto postfix, da utente root:

# installpkg postfix-2.1.4-i386-1mvx.tgz

NB. Se vuoi ricompilare il pacchetto a mano trovi le opzioni nello Slackbuild

verifichiamo che l'utente ed il gruppo postfix siano stati creati e creiamo la directory che ospiterà le mailbox degli utenti virtuali:

# grep "postfix" /etc/group
postfix:x:76:
# grep "postfix" /etc/passwd
postfix:x:76:76:The postfix MTA:/var/spool/postfix:/bin/false

# mkdir /home/virtual
# chown -R postfix:postfix /home/virtual
# chmod -R 0751 /home/virtual

Courier-imap

Se abbiamo scaricato il pacchetto di Robert Stan probabilmente dovremo installare anche i pacchetti fam e openldap-client (scaricabili sempre da www.linuxpackages.net) e controllare che sia installato il pacchetto openssl

# installpkg fam-2.7.0-i486-1rob.tgz
# installpkg openldap-client-2.2.15-i486-1rob.tgz
# installpkg courier-imap-3.0.7-i486-1rob.tgz

se volete compilare courier-imap queste sono le opzioni: da utente normale, non root:

$ ./configure --prefix=/usr \
    --sysconfdir=/etc/courier-imap \
    --libexecdir=/usr/libexec/courier-imap \
    --localstatedir=/var \
    --with-authdaemonvar=/var/run/authdaemon \
    --with-trashquota \
    --with-db=gdbm \
    --with-authshadow \
    --with-authpwd \
    --with-authmysql \
    --with-mysql-libs=/usr/lib/mysql \
    --with-mysql-includes=/usr/include/mysql \

$ make
$ make check

da utente root:

# make install-strip
# make install-configure

Postfixadmin

Scompattiamo semplicemente postfixadmin nella directory in cui verrà eseguito e sistemiamo i permessi. Assumiamo che il file scaricato sia in /tmp/ e che il server apache sia eseguito con user/group nobody/nobody:

# cd /var/www/htdocs/
# tar -xzvf /tmp/postfixadmin-2.0.5.tgz

# mv postfixadmin-2.0.5 postfixadmin
# chown -R nobody:nobody postfixadmin

# cd /var/www/htdocs/postfixadmin
# chmod 640 *.php *.css

# cd /var/www/htdocs/postfixadmin/admin/
# chmod 640 *.php .ht*

# cd /var/www/htdocs/postfixadmin/images/
# chmod 640 *.gif *.png

# cd /var/www/htdocs/postfixadmin/languages/
# chmod 640 *.lang

# cd /var/www/htdocs/postfixadmin/templates/
# chmod 640 *.tpl

# cd /var/www/htdocs/postfixadmin/users/
# chmod 640 *.php

NB. controlliamo che il percorso del file /var/www/htdocs/postfixadmin/admin/.htpasswd sia correttamente impostato nella variabile "AuthUserFile" del file /var/www/htdocs/postfixadmin/admin/.htaccess

creiamo la struttura del database:

# cd /var/www/htdocs/postfixadmin
# mysql -u root -p < DATABASE.TXT

ora l'installazione di postfixadmin dovrebbe essere a posto, vedremo dopo il file di configurazione


Squirrelmail

Come per postfixadmin scompattiamo semplicemente squirrelmail nella directory in cui verrà eseguito e sistemiamo i permessi. Valgono le stesse considerazioni di postfixadmin

# cd /var/www/htdocs/
# tar xzvf /tmp/squirrelmail-1.4.3a.tar.gz

# mv squirrelmail-1.4.3a squirrelmail
# chown -R root:root squirrelmail

creiamo la directory per i file delle preferenze degli utenti e per i file temporanei

# cd /var/www/
# cp -r /var/www/htdocs/squirrelmail/data /var/www/data-squirrelmail
# chown nobody:nobody data-squirrelmail
# chmod 0730 data-squirrelmail

# mkdir /var/www/attach-squirrelmail
# chown nobody:nobody attach-squirrelmail
# chmod 0730 attach-squirrelmail

Configurazione

Postfix

Il file di configurazione di postfix da modificare è /etc/postfix/main.cf Prima di tutto facciamo una copia per sicurezza

# cd /etc/postfix
# cp main.cf main.cf.orig

Controlliamo che lo script di installazione di postfix abbia configurato correttamente le direttive myhostname e mydomain

# postconf myhostname
myhostname = nomemacchina.nomedominio.it
# postconf mydomain
mydomain = nomedominio.it

NB. Lo script di installazione mette queste due direttive in fondo al file. Per pulizia vi consiglio di spostarle nelle relative sezioni.

Ora vanno aggiunte/modificate le seguenti linee

/etc/postfix/main.cf

myorigin = $myhostname
mydestination = $myhostname, localhost.$mydomain, localhost

mynetworks = 127.0.0.0/8, ip.della.rete(es 192.168.0.0/24 )
relay_domains = $mydestination, mysql:/etc/postfix/mysql_relay_domains_maps.cf
 
# mynetworks è importantissimo: si deve settare in maniera corretta altrimenti si 
# può diventare degli open-relay: in questa situazione chiunque da internet può 
# usare il nostro postfix per inviare posta e si rischia di venire blacklistati 
# (e quindi essere di fatto tagliati fuori in partenza) 
# un buon test di open-relay sul proprio MTA è questo: 
# $telnet relay-test.mail-abuse.org


# ADDRESS REDIRECTION (VIRTUAL DOMAIN)
#
# The VIRTUAL_README document gives information about the many forms
# of domain hosting that Postfix supports.
virtual_gid_maps = static:76
virtual_uid_maps = static:76
virtual_minimum_uid = 76
virtual_mailbox_base = /home/virtual
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
#virtual_mailbox_limit = 51200000
virtual_transport = virtual
#virtual_trash_count = YES
#virtual_trash_name = .Trash

# Limits only INBOX part (usefull when
# using when you have IMAP users)
#virtual_mailbox_limit_inbox = yes

# maps of soft disk quotas
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_quota_maps.cf
virtual_mailbox_limit_override = yes

# I use Courier IMAP compatibles files.
virtual_maildir_extended = yes

# Usefull for Courier IMAP..
#virtual_maildir_suffix = Maildir/

# Generate maildirsize files or not
virtual_create_maildirsize = yes

# Indica di utilizzare il formato Maildir e non il "vecchio" mbox
home_mailbox = Maildir/

# Settiamo gli alias di sistema
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases

creiamo i file che servono a postfix per eseguire le query sul database /etc/postfix/mysql_virtual_alias_maps.cf

user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address

/etc/postfix/mysql_virtual_domains_maps.cf

user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = domain
select_field = description
where_field = domain

/etc/postfix/mysql_virtual_mailbox_maps.cf

user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username

/etc/postfix/mysql_virtual_quota_maps.cf

user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username

/etc/postfix/mysql_relay_domains_maps.cf

user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '1'

ATTENZIONE Questi file contengono le password per l'accesso al database, in seguito vedremo come dare i giusti permessi per proteggerli

modifichiamo l'alias per l'utente di sistema root /etc/postfix/aliases

# Person who should get root's mail. Don't receive mail as root!
root:           marco

A questo punto, occorrerà utilizzare il comando newaliases per rendere effettive le modifiche (verrà creato un file aliases.db)

Siamo pronti per avviare il server:

# sh /etc/rc.d/rc.postfix start

Courier-imap

I file ma modificare sono authdaemonrc e authmysqlrc /etc/courier-imap/authdaemonrc

authmodulelist="authcustom authcram authuserdb authmysql authshadow authpwd"

/etc/courier-imap/authmysqlrc

MYSQL_SERVER		localhost
MYSQL_USERNAME		postfix
MYSQL_PASSWORD		postfix
MYSQL_PORT		3306
MYSQL_OPT		0
#MYSQL_SOCKET		/var/run/mysql/mysql.sock
MYSQL_DATABASE		postfix
MYSQL_UID_FIELD		'76'
MYSQL_GID_FIELD		'76'
MYSQL_HOME_FIELD	'/home/virtual'
MYSQL_USER_TABLE	mailbox
MYSQL_LOGIN_FIELD	username
MYSQL_CLEAR_PWFIELD	password
#MYSQL_CRYPT_PWFIELD	password
MYSQL_NAME_FIELD	name
MYSQL_MAILDIR_FIELD	maildir
MYSQL_QUOTA_FIELD	quota
MYSQL_WHERE_CLAUSE	active='1'

NB. Fate molta attenzione a non lasciare spazi dopo i valori dati alle variabili, solo tabulazioni! Pena la mancata connessione al db. Sfortunatamente courier ritorna solamente un anonimo "login error"

Robert Stan nel suo Slackbuild ha tolto il flag di esecuzione alla libreria authdaemond.mysql. Per chi avesse scelto questo pacchetto è necessaria questa operazione. controlliamo o modifichiamo i permessi di authdaemond.mysql

# chmod 0755 /usr/libexec/courier-imap/authlib/authdaemond.mysql

Avviamo il server:

# sh /etc/rc.d/rc.courier-imap start

Postfixadmin

il file di configurazione è config.inc.php

# cd /var/www/htdocs/postfixadmin/
# cp config.inc.php.sample config.inc.php

qui riporto solo alcune delle variabili da settare, le altre sono comunque ben spiegate il linea

/var/www/htdocs/postfixadmin/config.inc.php

// Database Config
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'postfixadmin';
$CONF['database_name'] = 'postfix';

// Mail Server
$CONF['smtp_server'] = "localhost";
$CONF['smtp_port'] = "25";

// Encrypt
// se nel file di configurazione di courier-imap
// avete scelto "MYSQL_CLEAR_PWFIELD     password"
// qui dovete mettere cleartext
$CONF['encrypt'] = 'cleartext';

// Mailboxes
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';

// Default Domain Values
$CONF['aliases'] = '-1';
$CONF['mailboxes'] = '-1';
$CONF['maxquota'] = '10';

// Quota
$CONF['quota'] = 'YES';
$CONF['quota_multiplier'] = '1048576';

Postfix Admin ha 3 "livelli" di amministrazione.

per la prima configurazione devi andare al Site Admin la password di default per il Site Admin è admin/admin.

Squirrelmail

Squirrelmail mette a disposizione uno script in perl per la sua configurazione.

# cd /var/www/htdocs/squirrelmail/config
# ./conf.pl

altrimenti si può editare a mano il file di configurazione. elenco solo alcune opzioni

/var/www/htdocs/squirrelmail/config/config.php

$domain                 = 'vostrodominio.it';
$imapServerAddress      = 'localhost';
$imapPort               = 143;
$useSendmail            = false;
$smtpServerAddress      = 'localhost';
$smtpPort               = 25;
$sendmail_path          = '/usr/sbin/sendmail';
$pop_before_smtp        = false;
$imap_server_type       = 'courier';
$invert_time            = false;
$optional_delimiter     = 'detect';

$default_unseen_notify          = 3;
$default_unseen_type            = 1;

$data_dir                 = '/var/www/data-squirrelmail/';
$attachment_dir           = '/var/www/attach-squirrelmail/';

sul sito di squirrelmail trovate numerosi plugin che estendono questo già ottimo programma con nuove funzioni. Alcuni li trovate già nella directory /var/www/htdocs/squirrelmail/plugins.

In particolare segnalo il plugin "quota_usage" scaricabile dal sito per tenere sott'occhio dimensione e spazio utilizzato sulla mailbox


Sicurezza

Ovviamente ricordiamoci di cambiare le password di accesso al database e nei file /etc/courier-imap/authmysqlrc, /etc/postfix/mysql_*.cf e /var/www/htdocs/postfixadmin/config.inc.php proteggiamo poi questi file da sguardi indiscreti

# cd /etc/postfix
# chown postfix:root mysql_*.cf
# chmod 0400 mysql_*.cf

# cd /etc/courier-imap
# chown root:root authmysqlrc
# chmod 0600 authmysqlrc

# cd /var/www/htdocs/postfixadmin/
# chown nobody:root config.inc.php
# chmod 0400 config.inc.php

cambiamo anche utente e password di accesso a http://domain.tld/postfixadmin/admin/

# cd /var/www/htdocs/postfixadmin/admin
# htpasswd .htpasswd pippo
New password:
Re-type new password:

Autore: Marco Vittozzi <mvittox (at) europe (dot) com>

Data: 27/08/2004

Licenza: GPL

Strumenti personali
Namespace

Varianti