Backup MX
PostFix
PostFix als Backup MX
Dit heb ik gedaan om te zorgen dat mijn mailserver als backup/failback mailserver kan fungeren.
Maak een tabel in je postfix database:
CREATE TABLE domainsbackup ( id int(9) unsigned NOT NULL auto_increment, domain varchar(255) NOT NULL default , active tinyint(1) unsigned default '1', PRIMARY KEY (id), KEY id (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
In deze tabel kan je het domein aangeven wat geaccepteerd mag worden door de mailserver en later bezorgt mag worden op de eerste mailserver. Ook kan je aangeven of die optie nu actief moet zijn of niet.
In het main.cf configbestand, voegen we de regels toe:
# Backup MX relay_domains = mysql:/etc/postfix/mysql_backupmx.cf
in 'mysql_backupmx.cf' heb ik het volgende staan:
hosts = localhost user = *db gebruiker* password = *db wachtwoord* dbname = *db naam* table = domainsbackup select_field = domain where_field = domain additional_conditions = and active = '1'
Nu herstarten we postfix, en gaan met die banaan
postfix reload
Niet Spam & Virusscannen van backup domeinen
In de amavis home map een bestand aanmaken: backup_domains
Met de volgende inhoud:
domeinnaam.nl 1 domeinnaam2.nl 1
Amavis configuratie '/etc/amavisd.conf' openen. Volgende regels erin:
@bypass_virus_checks_maps = ( \read_hash("$MYHOME/backup_domains") ); @bypass_spam_checks_maps = ( \read_hash("$MYHOME/backup_domains") );
amavis reloaden, en gaan met die banaan.
Sync script
Script om db te dumpen naar een backup_domains file:
#!/usr/local/bin/php <?php ##Config $amavisd = '/usr/local/sbin/amavisd'; $amavisd_conf = '/etc/amavisd.conf'; $amavisd_domains_noscan = '/etc/backup_domains'; $debug = false; ## Create connection to database include ('../webroot/slave/config.php'); connect('pfix'); ## Debug? if( ($_SERVER['argc'] > 2) or (($_SERVER['argv'][1] != '-d') and ($_SERVER['argc'] == 2)) ) die('Usage: '.$_SERVER['argv'][0]." [-d]\n -d Debugging on\n"); if($_SERVER['argv'][1] == '-d') $debug = true; ## Generate new file if ($debug) echo "DEBUG: Generating new file\n*****************************\n"; $query = "select * from backupmx where active=1"; $result = mysql_query($query) or die('ERROR: Error in query: '.$query."\nERROR: ".mysql_error()); $fp = fopen($amavisd_domains_noscan,"w"); while ( $row = mysql_fetch_assoc($result)) { fputs($fp,$row['domain']." 1\n"); if ($debug) echo "DEBUG: ".$row['domain']." Added!\n"; } fclose($fp); ## Reload amavisd if ($debug) echo "*****************************\nDEBUG: Amavisd reloading...\n"; $reload = `$amavisd -c $amavisd_conf reload 2>&1 | grep Error`; if($reload != "") echo "ERROR: Amavisd NOT reloaded!\nERROR: $reload\n"; else if ($debug) echo "DEBUG: Amavisd is succesfully reloaded\n"; ?>
Cron friendly ;) bij een error blijft amavisd wel draaien en krijg je dus een mailtje met de foutmelding