lo scopo di questa breve guida è l'installazione di un server di posta con controllo antispam, funzionalita' antivirus, controllo RBL e drop di IP da firewall:
maildiriniziamo l'installazione dal CD n. 1 della distribuzione Debian GNU/Linux [http://cdimage.debian.org/debian-cd/ stable] (per la release 3.1r2 questo è il [http://cdimage.debian.org/debian-cd/3.1_r2/i386/iso-cd/debian-31r2-i386-binary-1.iso cd 1])
ovviamente vogliamo utilizzare la versione del sistema operativo "stabile" ma, nella oramai consueta tradizione debian, i pacchetti della release stabile sono un pò vecchiotti
per ovviare a questo "inconveniente" possiamo utilizzare i [http://www.backports.org backports] che ci forniscono pacchetti aggiornati (spesso provenienti da testing o da unstable) installabili sulla nostra release
alcuni sistemisti potranno storcere il naso, ok, possiamo anche essere d'accordo; ma questo non toglie che i pacchetti provenienti dalla "stable" siano troppo spesso datati
l'installazione che segue, a voler essere sinceri, poteva anche essere portata a termine utilizzando esclusivamente pacchetti della release stabile senza la contaminazione dei backports, nello specifico utilizzando le release 4.1 di mysql e la versione 4 di php. tutto sommato cambia pochissimo, potete anche procedere con l'installazione esclusivamente dalla stabile (gli adattamenti saranno veramente limitati)
aggiorniamo le sorgenti apt in /etc/apt/sou rces.list:
# backports deb http://debian.acantho.net/backports.org/ sarge-backports main contrib non-free deb http://www.backports.org/debian/ sarge-backports main
installiamo i pacchetti necessari:
# apt-get update; apt-get dist-upgrade # apt-get install jed jedstate mc links lynx htop
giusto per non perdere le buone abitudini, settiamo il prompt ed alcuni banali alias aggiungendo la seguente definizione al termine del file '/root/.bashrc':
<pre> export LS_OPTIONS='–color=auto' eval "`dircolors`" alias ls='ls $LS_OPTIONS' alias ll='ls $LS_OPTIONS -l' alias l='ls $LS_OPTIONS -lA' PS1='\[\033[01;31m\]\u\[\033[01;36m\]@\[\033[01;32m\]\h\[\033[00m\]:\[\033[01;34m\] \w\[\033[00m\] \$ ' </pre>
siamo pronti per iniziare l'installazione dei componenti principali del sistema: apache, php, mysql
# apt-get -t sarge-backports install mysql-common # apt-get install mysql-server-5.0 # apt-get install apache2 php5 php5-imap php5-gd php5-mysql libapache2-mod-php5 php-pear
dobbiamo quindi controllare, intanto, che apache2 e php funzionino correttamente. salviamo questo banale codice come phpinfo.php in /var/www/
<? phpinfo(); ?>
e puntiamo il nostro browser (firefox, ovvio) all'indirizzo http://server/phpinfo.php (dove server è il nome o l'indirizzo ip del server)
ovviamente tutto funzionerà perfettamente e vi verrà presentata la pagina di informazioni di php5
sistemiamo 'pear'
# pear install -o Log Mail Mail_Mime DB Date File # pear -d preferred_state=beta install -a Services_Weather # pear install -o Auth_SASL Net_SMTP # apt-get install libmcrypt4
passiamo all'installazione di phpmyadmin per la gestione (in comodità) del database
# apt-get install phpmyadmin
prima di procedere in qualsiasi direzione dobbiamo sistemare il database
cambiamo la password di root di mysql
# mysql -u root mysql
mysql> SET PASSWORD FOR root@localhost=PASSWORD('new_password');
a questo punto ci colleghiamo con il browser all'indirizzo: http://server/phpmyadmin
ci connettiamo come root utilizzando la password appena impostata. andiamo su privilegi e selezioniamo l'utente root con host "server". rimuoviamo l'utente.
dovranno rimanete solamente gli utenti debian-sys-maint (da localhost) e root con password (sempre da localhost)
ATTENZIONE: 'se vogliamo installare anche il pacchetto postfixadmin possiamo configurare le tabelle mysql direttamente durante l'installazione del pacchetto seguente. queste che seguono sono le tabelle strettamente necessarie per l'autenticazione. consiglio quindi di saltare questa parte e passare direttamente al setup di postfix'
creiamo un nuovo database chiamato "postfix" (collate latin1_bin) dalla homepage di phpmyadmin. andiamo ad eseguire il seguente codice (tab SQL):
<pre> USE postfix; CREATE TABLE `alias` (
`address` varchar(255) NOT NULL default '', `goto` text NOT NULL, `domain` varchar(255) NOT NULL default '', `created` datetime NOT NULL default '0000-00-00 00:00:00', `modified` datetime NOT NULL default '0000-00-00 00:00:00', `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (address)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Aliases'; CREATE TABLE `domain` (
`domain` varchar(255) NOT NULL default '', `description` varchar(255) NOT NULL default '', `aliases` int(10) NOT NULL default '0', `mailboxes` int(10) NOT NULL default '0', `maxquota` int(10) NOT NULL default '0', `transport` varchar(255) default NULL, `backupmx` tinyint(1) NOT NULL default '0', `created` datetime NOT NULL default '0000-00-00 00:00:00', `modified` datetime NOT NULL default '0000-00-00 00:00:00', `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (domain)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Domains'; CREATE TABLE `mailbox` (
`username` varchar(255) NOT NULL default '', `password` varchar(255) NOT NULL default '', `name` varchar(255) NOT NULL default '', `maildir` varchar(255) NOT NULL default '', `quota` int(10) NOT NULL default '0', `domain` varchar(255) NOT NULL default '', `created` datetime NOT NULL default '0000-00-00 00:00:00', `modified` datetime NOT NULL default '0000-00-00 00:00:00', `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`username`)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Mailboxes'; INSERT INTO domain (domain,description) VALUES ('domain.tld','Test Domain'); INSERT INTO alias (address,goto) VALUES ('alias@domain.tld', 'user@domain.tld'); INSERT INTO mailbox (username,password,name,maildir)
VALUES ('user@domain.tld','$1$caea3837$gPafod/Do/8Jj5M9HehhM.','Mailbox User','user@domain.tld/');
</pre>
La password (MD5 encrypted) è "secret" ($1$caea3837$gPafod/Do/8Jj5M9HehhM.)
a questo punto dobbiamo aggiungere l'utente mysql che potrà leggere e scrivere le tavole appena inserite. andiamo sulla homepage di phpmyadmin e scegliamo "privilegi", quindi "aggiungi un nuovo utente"
nome utente: postfix host: locale (localhost) password: la_password
quindi "esegui". a questo punto scegliamo i privilegi specifici al database, scegliendo "postfix" dal menu drop-down nei privilegi specifici al database.
possiamo assegnare all'utente "postfix@localhost" sul database "postfix" i privilegi: SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP e CREATE TEMPORARY TABLES
(oppure, dal prompt mysql: "GRANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , INDEX , ALTER , CREATE TEMPORARY TABLES ON `postfix` . * TO 'postfix'@'localhost';")
a questo punto l'utente postfix potrà (da localhost) accedere alle tabelle che descrivono utenti e alias e potrà quindi essere utilizzato per l'autenticazione di postfix
aggiungiamo il gruppo e l'utente a cui apparterrà tutta la posta:
# addgroup –gid 9999 vmail # adduser –uid 9999 –gid 9999 –disabled-login vmail
aggiungiamo i pacchetti necessari
# apt-get install postfix postfix-mysql postgrey postfix-doc
per ora, nella configurazione richiesta, indichiamo solamente il satellite system. effettueremo la configurazione manuale più avanti. alla richiesta del nome utente a cui inviare la mail di 'root' possiamo specificare un utente di sistema che solitamente utilizziamo per connetterci al server. il resto, per ora, tutto di default
dobbiamo quindi istruire postfix per leggere le informazioni dei domini, degli utenti e delle mailbox direttamente dal database mysql. dovremmo quindi gestire 5 file diversi: mysql_virtual_mailbox_maps.cf, mysql_virtual_mailbox_limit_maps.cf, mysql_virtual_alias_maps.cf, mysql_virtual_domains_maps.cf, mysql_relay_domains_maps.cf
salveremo tutti questi file nella cartella principale di postfix '/etc/postfix/'
user = postfix password = postfix hosts = 127.0.0.1 dbname = postfix table = mailbox select_field = maildir where_field = username #additional_conditions = and active = '1'
user = postfix password = postfix hosts = 127.0.0.1 dbname = postfix table = mailbox select_field = quota where_field = username #additional_conditions = and active = '1'
user = postfix password = postfix hosts = 127.0.0.1 dbname = postfix table = alias select_field = goto where_field = address
user = postfix password = postfix hosts = 127.0.0.1 dbname = postfix table = domain select_field = domain where_field = domain #additional_conditions = and backupmx = '0' and active = '1'
user = postfix password = postfix hosts = 127.0.0.1 dbname = postfix table = domain select_field = domain where_field = domain additional_conditions = and backupmx = '1'
è il momento di passare alla configurazione principale di postfix ('main.cf')
una configurazione base può essere simile alla seguente:
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no append_dot_mydomain = no myhostname = mailserver mydomain = domain alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = localhost, $myhostname, localhost.$mydomain, localhost.localdomain relayhost = RELAYHOST mynetworks = 127.0.0.0/8, 192.168.0.0/24 mailbox_command = procmail -a "$EXTENSION" mailbox_size_limit = 0 message_size_limit = 102400000 virtual_mailbox_limit = 512000000 recipient_delimiter = + inet_interfaces = all virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_gid_maps = static:9999 virtual_mailbox_base = /srv/vmail virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf #virtual_mailbox_limit = 51200000 virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_minimum_uid = 9999 virtual_transport = virtual virtual_uid_maps = static:9999 # Additional for quota support virtual_create_maildirsize = yes virtual_mailbox_extended = yes virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf virtual_mailbox_limit_override = yes virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later. virtual_overquota_bounce = yes
ovviamente 'myhostname', 'mydomain', 'relayhost', 'mynetworks' devono essere impostati con valori che rispecchiano la vostra configurazione.
per sicurezza dovremo anche:
chmod 640 mysql_* chgrp postfix mysql_*
e dovremo creare la directory dove andranno depositate tutte le mail dei domini gestiti:
# mkdir /srv/vmail # chown vmail:vmail /srv/vmail
iniziamo installando i demoni imap e pop3 dai pacchetti courier:
apt-get install courier-imap courier-imap-ssl courier-maildrop courier-pop\
courier-pop-ssl courier-ssl courier-authdaemon courier-authmysql couriergraph
dobbiamo istruire i demoni courier per poter effettuare l'autenticazione attraverso mysql. per prima cosa dobbiamo modificare il file /etc/courier/authdaemonrc sostituendo:
authmodulelist="authmysql authpam"
e poi modificando il file /etc/courier/authmysqlrc nel seguente modo:
<pre> MYSQL_CRYPT_PWFIELD password MYSQL_DATABASE postfix MYSQL_GID_FIELD '9999' MYSQL_HOME_FIELD '/srv/vmail' MYSQL_LOGIN_FIELD username MYSQL_MAILDIR_FIELD maildir MYSQL_NAME_FIELD name MYSQL_OPT 0 MYSQL_PASSWORD postfix MYSQL_QUOTA_FIELD quota MYSQL_SERVER localhost MYSQL_UID_FIELD '9999' MYSQL_USERNAME postfix MYSQL_USER_TABLE mailbox </pre>
a questo punto non ci scordiamo di far ripartire il demone dell'autenticazione di courier
# /etc/init.d/courier-authdaemon restart
prelevare il file http://high5.net/postfixadmin/download.php?file=postfixadmin-2.1.0.tgz postfixadmin e scompattarlo (sotto '/usr/src', dove cercheremo di tenere tutti i file di installazione)
scompattiamolo e copiamo il contenuto nella root del webserver, aggiustiamo i prerequisiti del postfixadmin:
# tar xzf postfixadmin-2.1.0.tgz # mkdir /var/www/postfixadmin # cp -r postfixadmin-2.1.0/* /var/www/postfixadmin/ # cd /var/www/postfixadmin/ # cp config.inc.php.sample config.inc.php
a questo punto possiamo utilizzare lo script già presente nella distribuzione postfixadmin per generare tutti i database e gli utenti necessari semplicemente con:
# cd /var/www/postfixadmin/ # mysql -u root -p <DATABASE_MYSQL.TXT # for i in motd* ; do mv $i $i.old; done
per evitare che i menù vadano a capo si possono sostituire tutte le occorrenze di '"750"' con '"1050"' nel file 'stylesheet.css'
# cd /var/www/postfixadmin # chmod 640 *.php *.css # cd /var/www/postfixadmin/admin/ # chmod 640 *.php .ht* # cd /var/www/postfixadmin/images/ # chmod 640 *.gif *.png # cd /var/www/postfixadmin/languages/ # chmod 640 *.lang # cd /var/www/postfixadmin/templates/ # chmod 640 *.tpl # cd /var/www/postfixadmin/users/ # chmod 640 *.php
dobbiamo modificare il file '.htaccess' che si trova nella cartella '/var/www/postfixadmin/admin/' rispecchiando il corretto path; nel file '/etc/apache2/sites-available/default' controlliamo la direttiva AllowOverride all'interno della directory '/var/www/' che deve essere impostata a 'All' per la corretta interpretazione dei file .htaccess
per ottenere una struttura delle mail tipo: /srv/vmail/domain.tld/mailaddress/ dobbiamo impostare i seguenti parametri nel file 'config.inc.php' (che si trova sempre in '/var/www/postfixadmin')
$CONF['domain_path'] = 'YES'; $CONF['domain_in_mailbox'] = 'NO';
sempre all'interno del file 'config.inc.php' modificare la lingua, la mail dell'amministratore, gli alias predefiniti ed il welcome text
$CONF['default_language'] = 'it'; $CONF['admin_email'] = 'postmaster@change-this-to-your.domain.tld'; $CONF['default_aliases'] = array (
'abuse' => 'abuse@change-this-to-your.domain.tld',
'hostmaster' => 'hostmaster@change-this-to-your.domain.tld',
'postmaster' => 'postmaster@change-this-to-your.domain.tld',
'webmaster' => 'webmaster@change-this-to-your.domain.tld'
);
possiamo quindi gestire i domini e le singole caselle mail dagli url:
* http://mailserver/postfixadmin (per gli amministratori dei vari domini) * http://mailserver/postfixadmin/admin (per l'amministratore di tutto) * http://mailserver/postfixadmin/users (per gli utenti, da qui ognuno può gestire la propria email)
* I pacchetti dell'installazione * [http://info.usrobots.net/files/postfixadmin-2.1.0.tgz Postfixadmin v. 2.1.0]