Postfix Courier-IMAP MySQL Squirrel Mail ile Virtual Hosting

From Lapis Wiki

Jump to: navigation, search
Bu makale NASIL bölümü serisinin bir parçasıdır
MasaÜstü Donanım Dağıtımlar
Tarayıcılar Programlama Linux ve Oyunlar

Konu başlıkları

Postfix+Courier-IMAP+MySQL+Squirrel Mail ile Virtual Hosting

Giriş

Bu dosya Gelecek Kurumsal Linux'un bir geliştirme versiyonuna postfix kullanılarak sanal kullanicilara posta transferi ve dağıtımının nasıl yapılabileceğini anlatır. Gelecek Kurumsal Linux Fedora Core 2 üzerine geliştirilmiştir.

Kullanicilarin bilgilerini bir MySQL database'inde tutacağız. Buradaki bilgilerden postfix ve courier-imap yer yer yararlanacak. Kullanicilar maillerine squirrelmail ile ulaşacak. Bunun için öncelikle sistemde PHP desteği olan bir web server gerekiyor. Bunu sağlamak için GKL'de sadece bir değişiklik yapmamız gerekiyor. Bir sonraki bölümde bu ayar anlatılıyor.

Apache ile ilgili

GKL'de aslında Fedora Core 2'dan kaynaklanan bir sorun var. O da /etc/httpd/conf/httpd.conf dosyasinin 423, 425 ve 426. satırlarındaki şu kodlar:

<IfModule mod_mime_magic.c>
MIMEMagicFile /usr/share/magic.mime
# MIMEMagicFile conf/magic
</IfModule>

Sanırım sorun mime_magic modulunun yuklu olmamasından kaynaklanıyor, şu an için bu modül bizi ilgilendirmediğinden bu satırları başlarına # koyarak etkisiz hale getirebiliriz.

Şimdi httpd'yi restart ettiğimizde bir sorun kalmayacak.

MySQL ayarları

GKL'de kurulum sırasında MySQL'i seçtiyseniz sorun yok, eğer seçmediyseniz Add/Remove Applications'tan MySQL'i kurabilirsiniz. Yapılacak bir ayarı yok şu an için MySQL'e daha sonra döneceğiz. Yalnız local user olarak bağlanıp bağlanamadığınızı görmek için komut satırında mysql yazın ve enter'a basın eğer her şey yolunda gibi görünüyorsa sorun yok. Şimdi postfixadmin kurulumuna geçebiliriz.

postfixadmin kurulumu

Bu programın şu an için bir rpm paketi yok. O yüzden yeni kullanıcılar tarafından biraz zahmetli sayılabilecek bir kaç işlem yapmamız gerekiyor.

  1. Öncelikle postfixadmin*.tar.gz paketini /var/www veya daha güvenli olabilecek bir dizine açın. Ben örnek olarak /var/www'ye açıyorum. Şimdi /var/www/postfixadmin-2.0.4 dizininde postfixadmin'in dosyaları duruyor.
  
  2. Daha sonra o dizini web server tarafından erişilebilecek hale getirelim:
     cd /var/www/
     chown -R apache:apache postfixadmin-2.0.4
     cd /var/www/postfixadmin-2.0.4
     chmod 640 *.php *.css
     cd /var/www/postfixadmin-2.0.4/admin/
     chmod 640 *.php *.css
     cd /var/www/postfixadmin-2.0.4/users/
     chmod 640 *.php *.css
     cd /var/www/postfixadmin-2.0.4/templates/
     chmod 640 *.php *.css
  
  3. Şimdi de MySQL üzerinde postfixadmin'in ihtiyacı olan databaseleri ve kullanicilari oluşturalım. Bunun için aşağıdaki komutu çalıştırmanız yeterli.
     mysql -u root < DATABASE.TXT
  
  4. Son olarak da postfixadminin ayarlarını yapabildiğimiz config.php.inc dosyasını oluşturup değiştirmemiz lazım:
     mv /var/www/postfixadmin-2.0.4/config.inc.php.sample
     /var/www/postfixadmin-2.0.4/config.inc.php
     Ve config.inc.php içinde $CONF['domain_path'] 'i YES, $CONF['domain_in_mailbox'] 'u NO yapın tabii sizin tercihinize göre değişir. Herşeyi ayarladıktan sonra da bu dosyaya geri donup $CONF['database_password'] 'u değiştirmeyi unutmayın tabii bunun paralel'inde MySQL'deki ilgili user'in şifresini de değiştirmelisiniz.
  
  5. Son olarak postfixadmin klasöründeki admin dizinine erişimi kısıtlamalıyız. Bunun için httpd.conf dosyasına şunları eklemek ve daha sonra default olarak 'admin' olan admin şifresini htpasswd komutuyla değiştirmek:
     <Directory "/var/www/postfixadmin-2.0.4/admin">
     AllowOverride AuthConfig
     </Directory>
     Örneğin :
     htpasswd /var/www/postfixadmin-2.0.4/.htpasswd admin
     Bir de /etc/httpd/conf.d/postfixadmin.conf adli bir dosya yaratıp içine şunları eklersek postfixadmin'imize kolayca erişebiliriz:
     Alias /postfixadmin /var/www/postfixadmin-2.0.4

Eğer her şey yolunda gittiyse şu anda http://localhost/postfixadmin/admin adresine şifrenizi girerek login olabilmeniz lazım. Orada yeni domain, domain admini, domainlere mailbox ekleyebilirsiniz.

Postfix ayarları

GKL'de postfix ön tanımlı olarak geliyor fakat MySQL desteği yok. Bunun için postfix source rpm'sini bulup yeniden derlemelisiniz, şu adresten yararlanabilirsiniz. Büyük olasılıkla GKL'nin dağıtım sürümünde postfix paketi bu özellikle birlikte gelecek. Bunun dışında bir kaç ayar yapmamız lazım. Aşağıda main.cf'teki değişkenerin alması gereken değerleri görüyorsunuz.

#::::::::::::::::::::: main.cf ::::::::
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
myhostname = gkl.localdomain
mydomain = localdomain
myorigin = $myhostname
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain
unknown_local_recipient_reject_code = 450
mynetworks = 127.0.0.1 192.168.1.0/24
alias_maps = hash:/etc/postfix/aliases
home_mailbox = Maildir/
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.0.18/samples
readme_directory = /usr/share/doc/postfix-2.0.18/README_FILES
alias_database = hash:/etc/postfix/aliases

virtual_mailbox_base = /var/spool/virtual
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_gid_maps = mysql:/etc/postfix/mysql_virtual_gid_maps.cf
virtual_uid_maps = mysql:/etc/postfix/mysql_virtual_uid_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_limit = 51200000
virtual_minimum_uid = 5000
virtual_transport = virtual

#:::::::::::::: mysql_virtual_alias_maps.cf ::::::::::::::
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
#:::::::::::::: mysql_virtual_domains_maps.cf ::::::::::::::
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = domain
select_field = description
where_field = domain
#:::::::::::::: mysql_virtual_gid_maps.cf ::::::::::::::
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = gid
where_field = username
#:::::::::::::: mysql_virtual_mailbox_maps.cf ::::::::::::::
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
#:::::::::::::: mysql_virtual_uid_maps.cf ::::::::::::::
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = uid
where_field = username

Yukarıda gördüğünüz değerleri ilgili dosyarlara ekleyin. myhostname, mydomain, mydestination, myorigin, mynetworks, inet_interfaces bunların değerleri nasıl bir mail server kurmak istediğinizle ilgili bu degiskenler hakkında daha fazla bilgiyi postfix.org'ta bulabilirsiniz.

Şu noktada postfixadminle birlikte oluşturduğumuz databaselere bir değişiklik yapmalıyız. mysql'a root olarak login olduktan sonra aşağıdaki komutları çalıştırarak bu değişiklikleri yapabiliriz.

USE postfix;
ALTER TABLE mailbox ADD uid int(10) unsigned DEFAULT '6000' NOT NULL,
ADD gid int(10) unsigned DEFAULT '6000' NOT NULL;

Şimdi de virtual_mailbox_base 'de belirttiğimiz dizini yaratmalıyız:

mkdir /var/spool/virtual
chown -R 6000:6000 /var/spool/virtual

Buradaki 6000 değeri virtual_uid/gid_maps değişkenlerinden geliyor. Ve virtual_minimum_uid değerinden düşük olmamalı. Biz burada postfixadmin'de user yaratırken uid ve gid vermenin mümkün olmamasından dolayı sabit bir uid kullandık ama postfixadmin'in kodu değiştirilip de bu özellik sağlanırsa /var/spool/virtual dizini ve altdizinlerinin permissionları daha farklı olmalı. Şu anda postfix daemon'ı virtual userlar için mail alıp gönderebilir durumda olmalı.

Courier-imap kurulumu, yapılandırması

GKL'de courier-imap kurulu gelmediğinden tarball'undan yeniden derledim, courier-imap.rpm ve courier-imap-mysql.rpm dosyalarını oluşturdum. Büyük olasılıkla GKL'nin yeni sürümünde bunlar kullanıcılar için önceden yapılmış olacak. Bu dosyaların nasıl yaratıldığını öğrenmek istiyorsanız http://www.courier-mta.org/imap adresindeki RPM installation notes kısmına bakabilirsiniz.

Bizim yapmamız gereken bir kaç ayar var. courier-imap'ı mysql desteğiyle kurduktan sonra courier'in kurulduğu dizinin altındaki etc dizininde authmysqlrc dosyası olması lazım. Benim sisitemimde /usr/lib/courier-imap/etc/authmysqlrc dosyasi. Bu dosyadaki ayarlar şöyle olmaslı:

MYSQL_SERVER localhost
MYSQL_USERNAME postfix
MYSQL_PASSWORD postfix
MYSQL_PORT 0
MYSQL_OPT 0
MYSQL_DATABASE postfix
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD '/var/spool/virtual'
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD CONCAT('/var/spool/virtual','/',maildir)

ayni dizindeki imapd dosyasinda da şunlar değişmeli:

IMAPDSTART=YES
MAILDIRPATH=.

Şu an için POP3 servisi vermek istemediğimizden aynı dizindeki pop3d dosyasındaki POP3DSTART macrosunun değerini NO yapıyoruz. Aynı dizindeki pop3d-ssl dosyasının içindeki POP3DSSLSTART macrosunu da NO yapıyoruz.

Bu aşamada email client programımızla localhost'taki IMAP serverına daha önceden postfixadmin yoluyla girdiğimiz bir kullanıcının bilgilerini kullanarak bağlanabiliyor olmalıyız. Eğer durum buysa squirrelmail'in bizim email client yoluyla yaptığımız şeyi her kullanıcı için web server üzerinden yapması için squirrelmail'i ayarlamaya geçebiliriz.

squirrelmail ayarları

squirrelmail'in sistemde kurulu olduğu dizinin altındaki conf/conf.pl dosyasını kullanarak birkaç ayar daha yapmamız gerekiyor. (bendeki adresi /usr/share/squirrelmail/conf/conf.pl) Programı çalıştırdığınızda karşınıza gelen menüdeki 'Set predefined settings for specific IMAP servers' kısmına girip orada courier yazdıktan sonra enter'a basın. Bu işlem courier server için gereken bazı ayarları otomatik yapacaktır. Bir de Server Settings başlığı altındaki Sendmail or SMTP ayarını SMTP olarak değiştirin, server adresi olarak localhost'u göstersin. Yine Server Settings altında IMAP settings başlığı altındaki Server Software kısmına da courier yazın. Diğer ayarlar ise squirrelmail'in görünümü, yüklenebilecek pluginler gibi seçenekler bunlar daha sonra serverınızı güzelleştirecek seçenekler.

Aşağıdaki kodu da /etc/httpd/conf.d/ dizini altında squirrelmail.conf adlı dosyaya ekleyin.

Alias /webmail /usr/share/squirrelmail

Evet, ayarlarımızın sonuna geldik eğer hala çalıştırmadıysanız şu sırada çalıştırmaya başlayın böylece http://localhost/webmail adresinden virtual userlarınız hesaplarına ulaşabilir durumda olacaktır.

/etc/init.d/httpd restart
/etc/init.d/mysqld restart
/etc/init.d/postfix restart
/etc/init.d/courier-imap

Karşınıza çıkabilecek sorunlarda onurgu at boun nokta edu nokta tr 'ye mail atabilirsiniz.


Bu belge yandaki adresden alınmıştır: http://www.indigo.c-f-h.net/yazilar/howto1.html