Debian Üzerinde Postfix Mail Server Kurulum Dokumani (Postfix+Mysql+Courier Imap+SMTP Auth+Spamassassin+Clamav)
Hazirlayan : Umut Besler <umutbesler [at] umutbesler.com>
17.04.2006
Bu dokuman Postfix mail server uzerinde virtual domain olusturarak mail hizmeti vermeyi aciklayacaktir.
Kurulum tamamlandığında MySQL üzerinden kullanıcı kontrolü yapan, gelen emaillere virus ve spam kontrolü yapan bir sisteme sahip olacaksınız.
Bu kurulumdan önce daha önce yazmış olduğum postfix dökümanına bir göz atmanızı tavsiye ederim.
Oncelikle kurulmasi gereken paketler:
Debian'ın bize sağladığı en büyük avantajlardan biri olan apt ile kurulum yapacağız.
Tüm paketlerin kurulumu için aşağıdaki komutları sırayla vermelisiniz:
apt-get install postfix-mysql postfix-tls postfix
apt-get install libsasl2 libsasl2-dev libsasl2-modules-sql
apt-get install spamassassin
apt-get install amavisd-new
apt-get install clamav clamav-daemon lha arj
apt-get install unrar zoo nomarch lzop
apt-get install libsasl2-modules libsasl2-modules-gssapi-heimdal
apt-get install courier-authdaemon courier-authmysql courier-imap courier-imap-ssl courier-pop-ssl courier-pop
touch /var/lib/amavis/whitelist_sender
chown amavis:amavis /var/lib/amavis/whitelist_sender
touch /var/lib/amavis/blacklist_sender
chown amavis:amavis /var/lib/amavis/blacklist_sender
Mysql : Domain bilgilerimizi mysql database’inde tutacagiz. Bunun avantaji kullanicilarin database’den direk eklenip silinebilmesidir. Boylece sistem icin web arayuzude yazilmasi kolaylasacaktir.
Postfix : Mail server olarak postfix kullanacagiz.
Courier Imap : Imap ve pop3 server olarak kullanacagiz.
Cyrus Sasl : SMTP Auth yapilabilmesi icin gerekli program.
Amavisd-new : Spam ve virüs kontrolü için gerekli program.
Clamav : Virus programı.
Spamassassin : Spam kontrolü yapan program.
MySql :
Mysql database yaratmak için aşağıdaki komutları verebilirsiniz:
CREATE TABLE `users` (
`id` varchar(128) NOT NULL default '',
`address` varchar(128) NOT NULL default '',
`crypt` varchar(128) NOT NULL default '',
`clear` varchar(128) NOT NULL default '',
`name` varchar(128) NOT NULL default '',
`uid` smallint(5) unsigned NOT NULL default '1000',
`gid` smallint(5) unsigned NOT NULL default '1000',
`home` varchar(128) NOT NULL default '/',
`domain` varchar(128) NOT NULL default '',
`maildir` varchar(255) NOT NULL default '',
`imapok` tinyint(3) unsigned NOT NULL default '1',
`bool1` tinyint(3) unsigned NOT NULL default '1',
`bool2` tinyint(3) unsigned NOT NULL default '1',
`quota` varchar(10) NOT NULL default '5000',
PRIMARY KEY (`id`),
UNIQUE KEY `address` (`address`),
UNIQUE KEY `id` (`id`),
KEY `id_2` (`id`),
KEY `address_2` (`address`)
) ENGINE=MyISAM;
CREATE TABLE `virtual` (
`address` varchar(255) NOT NULL default '',
`goto` text NOT NULL,
UNIQUE KEY `address` (`address`)
) ENGINE=MyISAM;
CREATE TABLE `transport` (
`domain` varchar(128) NOT NULL default '',
`transport` varchar(128) NOT NULL default 'virtual:',
UNIQUE KEY `domain` (`domain`)
) ENGINE=MyISAM;
Transport taki alanlarin aciklamalari:
domain |
Host edeceginiz domain adi. “virtual” ve “local” olarak host edecekleriniz dahil. |
transport |
Host edeceginiz domain tipi. Virtual domainler icin “virtual:”, local kullanicilar icin “local:” yazabilirsiniz. |
Virtual daki alanlarin aciklamalari:
address |
Gelen mail adresi |
goto |
Ustteki mail adresinden gelen maillerin yonlendirilecegi adres. |
Users daki alanlarin aciklamalari:
id |
Kullanici adi. [email protected] seklinde |
address |
Kullanici mail adresi. [email protected] seklinde |
crypt |
Sifrenin sifreli (crypted) hali. Eger sifrenin bu sekilde saklanmasini istemiyorsaniz bos birakabilirsiniz. Bu alana mysqlden veri girerken querinizi encrypt(‘password’) seklinde verebilirsiniz. |
clear |
Sifrenin acik hali. |
name |
Kullanicinin ismi. Postfix icin gerekli degil. Courier icin kullanacagiz. |
uid |
virtual uid |
gid |
virtual gid |
home |
Mail klasorunuz “/” veya “/var/spool/postfix” olabilir. Aşağıda "/var/spool/postfix/virtual" olarak belirledik. Onun için bunu kullanabilirsiniz. |
domain |
Kullanici domain adi. |
maildir |
Kullanicinin maillerinin saklanacagi klasor. Burada tam yolu kullanmanizi tavsiye ederim. Maillerde Maildir yapisini kullanacagimiz icin mutlaka sonraki / isaretini koymak gerekmektedir. (“domain.com/user/Maildir/” seklinde) |
imapok |
Courier imap ile kullanicilarin maillerine ulasmayi saglayan bir ayar. 1 yaziniz. 0 yazan mailine courier uzerinden ulasamaz. |
bool1 |
Ustteki ayar ile ayni |
bool2 |
Ustteki ayar ile ayni |
Simdi databasedeki tablolari tanitalim.
Transport: Bu tablo gelen maillerin domain bilgilerini tutan tablodur. Burada o domain’e ait maillerin virtual mi yoksa sistem uzerinde mi tutulacagi belirlenir.
Virtual: Bu tabloda aliases dosyasindakine benzer bir islem yapilmaktadir. Bir adrese gelen maillerin baska bir adrese/adreslere yonlendirilmesi bu tablodan yapilmaktadir. Mail adresleri arasina “,” konarak bu islem gerceklestirilebilir.
Users: Bu tablo sahip oldugumuz tum kullanicilarin tutuldugu tablodur.
Database ve table’lar yaratildiktan sonra uzerinde arama yapacaginiz alanlardaki indexleri kendiniz ayarlayabilirsiniz.
MySql ayarlarimiz burada bitti. Simdi diger programlarin ayarlarina gecelim.
Postfix
Postfix mail programinin tum ayarlarini main.cf uzerinde yapacagiz daha sonrada 5 adet yeni dosya yaratacagiz.
#main.cf
myhostname = anasunucu.domain.com
mydomain = anasunucu.domain.com
myorigin = $mydomain
mydestination = $myhostname, localhost.localdomain, localhost.localdomain, localhost
unknown_local_recipient_reject_code = 550
relay_domains = $mydestination
alias_maps = hash:/etc/aliases
home_mailbox = Maildir/
transport_maps=mysql:/etc/postfix/config/transport.cf
virtual_mailbox_maps=mysql:/etc/postfix/config/mysql_virt.cf
virtual_minimum_uid = 50 # Burada sistemdeki postfix kullanicisinin uid'inden kucuk bir sayı verilmelidir
virtual_uid_maps=mysql:/etc/postfix/config/uids.cf
virtual_gid_maps=mysql:/etc/postfix/config/gids.cf
virtual_mailbox_base=/var/spool/postfix/virtual
mydestination = $mydomain, $myhostname, $transport_maps
virtual_maps =mysql:/etc/postfix/config/virtual.cf
smtpd_sender_restrictions = reject_unknown_sender_domain
unverified_recipient_reject_code = 550
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,
reject_unauth_destination, reject_unknown_recipient_domain, reject_unverified_recipient
broken_sasl_auth_clients=yes
smtpd_sasl_auth_enable=yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
content_filter = smtp-amavis:[localhost]:10024
#master.cf dosyasinda eger yoksa asagidaki satiri eklememiz gerekmektedir
smtp-amavis unix - - n - 2 lmtp
-o lmtp_data_done_timeout=1200
-o lmtp_send_xforward_command=yes
-o disable_dns_lookups=yes
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
cyrus unix - n n - - pipe
user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
Simdi yeni yaratacagimiz dosyalarin iceriklerini sirayla yazalim:
Bu dosyaları /etc/postfix/config klasörü altında yaratmamız gerekiyor.
mkdir /etc/postfix/config
chown postfix:root /etc/postfix/config
chmod 750 /etc/postfix/config
# transport.cf
user=dbuser
password=dbpassword
dbname=maildb
table=transport
select_field=transport
where_field=domain
hosts=localhost
# mysql_virt.cf
user=dbuser
password=dbpassword
dbname=maildb
table=users
select_field=maildir
where_field=address
hosts=localhost
# uids.cf
user=dbuser
password=dbpassword
dbname=maildb
table=users
select_field=uid
where_field=address
hosts=localhost
# gids.cf
user=dbuser
password=dbpassword
dbname=maildb
table=users
select_field=gid
where_field=address
hosts=localhost
# virtual.cf
user=dbuser
password=dbpassword
dbname=maildb
table=virtual
select_field=goto
where_field=address
hosts=localhost
Courier Imap:
Courier imap programini hem imap hemde pop3 icin kullanabilirsiniz. Ayrica pop3s ve imaps te icinde gelmektedir.
C
ourier imap ayar dosyaları /etc/courier dizinindedir
#authmysqlrc dosyasinda
MYSQL_SERVER localhost #mysql server adresi
MYSQL_USERNAME user
MYSQL_PASSWORD password
MYSQL_SOCKET /tmp/mysql.sock #localhosttan calisiyorsaniz bu gerekli
MYSQL_DATABASE maildb
MYSQL_USER_TABLE users
MYSQL_CRYPT_PWFIELD crypt #Eğer şifreleri şifreli halde saklayacaksanız bu bölümü kullanın
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
MYSQL_WHERE_CLAUSE imapok=1 AND bool1=1 AND bool2=1
Cyrus Sasl
Bunun için tek yapılması gereken ayar, /etc/postfix/sasl/smtpd.conf diye bir dosya olusturmak ve icine
pwcheck_method: auxprop
auxprop_plugin: sql
sql_engine: mysql
sasl_mech_list: login plain cram-md5 digest-md5
mech_list: plain login cram-md5
sql_user: dbuser
sql_passwd: dbpassword
sql_hostnames: localhost
sql_database: maildb
sql_select: select clear from users where address='%u@%r'
Yukarida yapilan tum islemlerden sonra mail paketi kurulumumuz tamamlandi.
Kurulan programların hepsini apt ile kurduğumuz için debian bunların çalıştırma dosyalarını otomatik olarak açılışa ekliyor.
Yinede emin olmak için kontrol etmenizi öneririm.
Sistem bu şekilde sorunsuz olarak çalışacaktır. Eğer herhangi bir şekilde problem olursa sorunun kaynağını bulmak için /var/log/mail.error ve /var/log/mail.info dosyalarına bakabilirsiniz.