Levelezzünk! VIII. - Postfix SQL-alapon
2005/06/23 21:40
1704 megtekintés
A cikk már legalább egy éve nem frissült, az akkor még aktuális információk lehet, hogy mára elavultak.
Nagy mennyiségű felhasználó esetén érdemes meggondolnunk az SQL-alapú adattárolást.

Az SQL-alapú felhasználókezelés nem mai ötlet. Sok évvel ezelőtt, elsősorban az ingyenes e-mail szolgáltatóknál bukkant fel az az ötlet, amely szerint sok felhasználó esetén nem érdemes igazi (Unix) usereket felvenni a rendszerünkbe, célszerűbb azok adatait valamilyen adatbázisban eltárolni. Megfelelő eszközök segítségével akár webes felületen keresztül adminisztrálhatjuk mailszerverünket, készíthetünk virtuális domaineket, sőt, akár maguk a felhasználók is elvégezhetnek egyszerűbb beállításokat. A praktikusságon kívül biztonsági előnyök is vannak: ha nincs igazi felhasználó, csökken a kihasználható kiskapuk száma. Szinte mindegyik elterjedt levelezőszerver támogatja az adatbázis-alapú autentikációt, cikkeinkben a Postfix segítségével fogjuk bemutatni azt a metódust, amely alapján akár más MTA-hoz is készíthetünk SQL-felületet.

Leírásainkat elsősorban Debian Sarge felhasználóknak szántuk, de apró módosításokkal bármelyik disztribúción sikerrel alkalmazhatjuk.Először is lássuk a hozzávalókat. Természetesen telepítenünk kell a Postfixet, valamint az elérhető postfix-mysql csomagját. Szükségünk lesz egy adatbázisszerverre is, kis mérete, megbízhatósága és könnyű programozhatósága miatt választásunk a mysql-re esett. A postafiókhoz való hozzáféréshez a már bemutatott Courier családot fogjuk használni (courier-imap, courier-pop, courier-authmysql). A levelezőrendszer működése nagy vonalakban a következőképpen képzelhető el:

  • a beérkező levelet a Postfix fogadja,
  • az adatbázis alapján megvizsgálja, hogy érvényes domainbe érkezett-e a levél,
    érvényes felhasználó számára-e,
  • elhelyezi egy IMAP-mappába,
  • ahonnan a Courier IMAP vagy POP3 protokollal kiszolgálja a levelezőkliens számára.

A levelezéshez szükséges adatbázisunk három táblából fog állni: az alias tábla tartalmazza az álneveket, a domain táblában az érvényes tartományokat fogjuk tárolni, míg a mailbox-ban tartózkodnak majd felhasználóink. Feltételezve, hogy megfelelően telepített és konfigurált mysql szerver fut, készítsünk egy adatbázist postfix néven az alábbi utasításokkal:

USE mysql;
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfix',password('jelszo'));
INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','postfix','postfix','Y');
FLUSH PRIVILEGES;
GRANT USAGE ON postfix.* TO postfix@localhost;
GRANT SELECT, INSERT, DELETE, UPDATE ON postfix.* TO postfix@localhost;
CREATE DATABASE postfix;

Láthatjuk, hogy leendő mysql-felhasználónk postfix névvel és jelszo jelszóval rendelkezik, ezt jegyezzük meg. Az adatbázis elkészítése után jöhetnek a táblák is, kezdjük az aliasszal:

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';
A domain tábla:

USE postfix;
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';

Végül pedig a mailbox tábla:

USE postfix;
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';

Csatlakozz hozzánk!

Ajánljuk

European Schoolnet Academy Ingyenes online tanfolyamok tanároknak
School Education Gateway Ingyenes tanfolyamok és sok más tanárok számára
ENABLE program Program iskoláknak a bullying ellen
Jövő osztályterme Modern tanulási környezetekről a Sulineten