Debian yüklü bir makinaya SMTP/POP3/IMAP server kuracağız. Bu sistem bilgileri MySQL veritabanından alacak. Böylece web üzerinden bilgiler rahatlıkla güncellenebilecek.
Kurulması gereken paketler:
postfix
postfix-mysqlcourier-authdaemon
courier-authmysql
courier-imap
courier-imap-ssl
courier-pop-ssl
courier-poplibsasl2
libsasl2-dev
libsasl2-modules
libsasl2-modules-gssapi-heimdal
libsasl2-modules-sql
Paketlerin açıklamaları:
postfix: SMTP Server için
courier: POP3 ve IMAP Server için
libsasl2: SMTP kimlik doğrulama için
MySQL’in kurulu olduğunu ve aşağıdaki şekilde yapılandırıldığını varsayıyoruz.
User: mail@localhost
Pass: 12345678
DB: mail
mail schema’sı için yukarıdaki kullanıcıya tam yetki verilmiş olması gerekiyor. Ayrıca kullanıcının @localhost şeklinde ayarlanmış olması güvenlik için gerekli.
CREATE TABLE `domains` ( #domain bilgilerinin tutulduğu tablo
`domain` VARCHAR(128) NOT NULL, #domain adı
`transport` VARCHAR(32) NOT NULL DEFAULT ‘virtual:’, #domain tipi, ‘local:’ ya da ‘virtual:’ olacak.
PRIMARY KEY (`domain`)
)
CHARACTER SET ascii;CREATE TABLE `mailboxes` ( #posta kutularının ve hesapların tutulduğu tablo
`address` VARCHAR(128) NOT NULL, #mail adresi
`passwd` VARCHAR(128) DEFAULT NULL, #açık mail şifresi
`name` VARCHAR(128) DEFAULT NULL, #
`maildir` VARCHAR(128) NOT NULL, #maildir yolu (’user/’ şeklinde)
`imapok` TINYINT(1) UNSIGNED NOT NULL DEFAULT ‘1′, #pop3 ve imap hesabı aktif ise 1 değilse 0
PRIMARY KEY (`address`)
)
CHARACTER SET ascii;
home (ev) klasörü;
/var/mail
user kullanıcısı için mail klasörü;
/var/mail/user
/var/mail ve alt dizinler için;
Sahiplik mail:mail
İzinler 700
+t modu olmamalı (Debian ilk kurulduğunda sanırım +t şeklinde geliyor).
Debian için bendeki mail uid=8, mail gid=8.
Ev dizininin altına maildirmake ile mail klasörleri yaratılabilir.
Dikkat edilecek noktalar;
ASCII yapılandırma dosyaları unix tarzı olmalı. (CR LF değil, sadece LF).
Yapılandırma dosyalarındaki açıklama satırlarının belirteçleri en başta olmalı. (# en başta olmalı, yoksa hata verebiliyor.)
Yapılandırma dosyalarının izinleri paketlerin okuyabileceği şekilde ayarlanmış olmalı.
Mail klasörlerinin bulunduğu ev dizini ve mail klasörlerinde +t modu olmamalı ve izinler doğru ayarlanmış olmalı.
Courier kullanıcı kontrolü için,
/etc/courier/authmysqlrc aşağıdaki gibi ayarlanmış olmalı. #MySQL server adresi
MYSQL_SERVER 127.0.0.1
#MySQL kullanıcı adı ve şifresi
MYSQL_USERNAME mail
MYSQL_PASSWORD 12345678
#Veritabanı adı
MYSQL_DATABASE mail#Socket dosyası fakat gerek yok.
#MYSQL_SOCKET /tmp/mysql.sockMYSQL_USER_TABLE mailboxes
#Crypted ve açık şifre alanları. Açık şifre alanını kullandım.
#MYSQL_CRYPT_PWFIELD cryptpasswd
MYSQL_CLEAR_PWFIELD passwd#Kullanıcı ve grup no alanları. Ben mail:mail kullandığım için sabit.
MYSQL_UID_FIELD ‘8′
MYSQL_GID_FIELD ‘8′#Fikrim yok. Tabloda NULL olsa bile sorun yapmıyor.
MYSQL_NAME_FIELD name#Kullanıcı adı alanı. İki program arasında uyumluluk olması için adresi seçtim.
MYSQL_LOGIN_FIELD address#home ve maildir dizinleri. Home dizinini sabit kullandım. Maildir user/ şeklinde olmalı.
MYSQL_HOME_FIELD ‘/var/mail’
MYSQL_MAILDIR_FIELD maildir#Where sorgusu. IMAP ve POP3 için aktifliğini sorgulattım. 1 de olabilir.
MYSQL_WHERE_CLAUSE imapok = 1
courier-authmysql modülünü çalıştırmak için,
/etc/courier/authdaemonrc içinde aşağıdaki değişiklik yapılmalı.
authmodulelist = “authpam authmysql”
/etc/postfix/main.cf içinde temel ayarları aşağıdaki gibi yapıyoruz.
alias_maps = hash:/etc/aliases
transport_maps = mysql:/etc/postfix/mysql/transport_maps.cf
virtual_maps = mysql:/etc/postfix/mysql/virtual_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cfvirtual_uid_maps = static:8
virtual_gid_maps = static:8
virtual_minimum_uid = 8
virtual_minimum_gid = 8
virtual_mailbox_base = /var/mailmyhostname = localhost
mydomain = localhost
myorigin = localhost
#mynetworks =
mydestination = $transport_maps
relay_domains = localhostsmtpd_sender_restrictions = reject_unknown_sender_domain
smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination, reject_unknown_recipient_domain, reject_unverified_recipientbroken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = localhost
/etc/postfix/master.cf içinde gerekmediği sürece değişiklik yapmıyoruz.
SMTP kimlik doğrulaması için;
/etc/postfix/sasl/smtpd.conf aşağıdaki gibi olmalı.
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: mail
sql_passwd: 12345678
sql_hostnames: 127.0.0.1
sql_database: mail
sql_select: SELECT passwd FROM mailboxes WHERE address=’%u@%r’
Aşağıdaki dosyaları oluşturuyoruz:
/etc/postfix/mysql/transport_maps.cf
hosts=127.0.0.1
user=mail
password=12345678
dbname=mail
table=domains
select_field=transport
where_field=domain
/etc/postfix/mysql/virtual_maps.cf
hosts=127.0.0.1
user=mail
password=12345678
dbname=mail
table=mailboxes
select_field=address
where_field=address
/etc/postfix/mysql/virtual_mailbox_maps.cf
hosts=127.0.0.1
user=mail
password=12345678
dbname=mail
table=mailboxes
select_field=maildir
where_field=address
Ayarlarımız tamamdır. Şimdi courier ve postfix’i aşağıdaki komutlar ile yeniden başlatıyoruz:
/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-imap restart
/etc/init.d/postfix restart
MySQL tablolarındaki ayarlara göre SMTP/POP3/IMAP sunucumuz artık çalışıyor.
Son güncelleme: 22.10.2007
Merhaba,
Debian 5.0 üzerinde aynı şekilde kurulumu tamamladım. Ancak virtual domain ler ve bunlara bağlı olarak kullanıcılar naısl oluşturulacak ?
Saygılarımla..
amacımız mail sunucumuzun bilgilerini mysql’den alması olduğuna göre; bilgileri(domain’leri ve mail adreslerini) yazının başında belirtilen mysql tablolarına eklemek durumundasınız. ya bir program aracılığı ile ya da mysql command line üzerinden. bu konfigurasyondan bir mucize beklemeyin. buradaki amaç sadece bilgileri mysql’den almak. eğer bilgileri mysql’den alırsak mail sunucumuzu doğrudan kendi yazacağımız betikler ve programlar üzerinden mysql tablolarını değiştirerek kontrol edebiliriz.