http://ftp.wl0.org/official/ adresinden postfix in son sürümünü kontrol ediyoruz, uygun olanı indiriyoruz.

wget http://ftp.wl0.org/official/2.7/SRPMS/postfix-2.7.0-1.src.rpm

Kaynak rpm ini indirmemin nedeni rpm üzerinde düzenlemeler yapacak olmam. rpm i açıp dosyalarında düzenlemeleri yapıyoruz:
nano /usr/src/redhat/SPECS/postfix.spec
Benim indirdiğim sürümde bu dosyanın 80. satırından itibaren tanımlamalar yapılmış bendeki tanımlamalar şu şekildeydi:

%define with_cdb          0
%define with_ldap         1
%define with_mysql        0
%define with_mysql_redhat 0
%define with_pcre         0
%define with_pgsql        0
%define with_sasl         0
%define with_spf          0
%define with_dovecot      0
%define with_tls          1
%define with_tlsfix       2
%define with_vda          0

Bunları aşağıdaki gibi düzenledim:

%define with_cdb          0
%define with_ldap         1
%define with_mysql        1
%define with_mysql_redhat 0
%define with_pcre         1
%define with_pgsql        0
%define with_sasl         0
%define with_spf          0
%define with_dovecot      1
%define with_tls          1
%define with_tlsfix       2
%define with_vda          0

Bu düzenleme ile mysql, pcre ve dovecot u aktif ettiğim dikkatinizden kaçmamıştır.

Bir diğer kaynak dosyasını da açıyoruz:


nano /usr/src/redhat/SOURCES/make-postfix.spec
bu dosyada bendeki sürümde 67. satırda açıklamalar bitiyor, buraya bizim aktif etmek istediğimiz özellikleri bildiriyoruz:

POSTFIX_MYSQL=1
POSTFIX_PCRE=1
POSTFIX_DOVECOT=1

Açıklamaların sonuna bu satırları ekledim. Şimdi yaptığımız değişiklikleri derleyelim:

cd /usr/src/redhat/SOURCES/
sh make-postfix.spec
cd ../SPECS/
rpmbuild -ba postfix.spec

Derlemenin sonunda hazırlanan paketlerin bilgisi verilir, bende aşağıdaki şekilde çıktı bu bilgi:

Wrote: /usr/src/redhat/SRPMS/postfix-2.7.0-1.pcre.MySQL.dovecot.rhel5.src.rpm
Wrote: /usr/src/redhat/RPMS/x86_64/postfix-2.7.0-1.pcre.MySQL.dovecot.rhel5.x86_64.rpm
Wrote: /usr/src/redhat/RPMS/x86_64/postfix-debuginfo-2.7.0-1.pcre.MySQL.dovecot.rhel5.x86_64.rpm

Sendmaili kaldırıp hazırlanan paketimizi kuruyoruz.

yum remove sendmail
yum localinstall /usr/src/redhat/RPMS/x86_64/postfix-2.7.0-1.pcre.MySQL.dovecot.rhel5.x86_64.rpm

Kurulan dosyaların ayarlamasını yapıyoruz :

cd /etc/postfix
cp main.cf main.cf.comments
egrep -v '^#|^$' main.cf.comments > main.cf

Bu işlemi yaptıktan sonra main.cf dosyası şu şekile geliyor:

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 550

debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $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
html_directory = /usr/share/doc/postfix-2.7.0-documentation/html
manpage_directory = /usr/share/man
sample_directory = /etc/postfix
readme_directory = /usr/share/doc/postfix-2.7.0-documentation/readme
alias_database = hash:/etc/postfix/aliases
alias_maps = hash:/etc/postfix/aliases
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

Bunu kendimize göre değiştiriyoruz, benim ayarlarım şu şekilde :

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 550

debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $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
html_directory = /usr/share/doc/postfix-2.7.0-documentation/html
manpage_directory = /usr/share/man
sample_directory = /etc/postfix
readme_directory = /usr/share/doc/postfix-2.7.0-documentation/readme
alias_database = hash:/etc/postfix/aliases
alias_maps = hash:/etc/postfix/aliases
#smtpd_sasl_type = dovecot
#smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes

smtpd_sasl_type = dovecot
#smtpd_sasl_path = private/auth
smtpd_sasl_path = /var/spool/postfix/private/auth
myhostname = mail.alanadiniz.com
mydomain = alanadiniz.com
#inet_interfaces = all
#mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks_style = host
#relay_domains = mysql:/etc/postfix/mysql_relay_domains_maps.cf
mail_spool_directory = /var/spool/mail
home_mailbox = Maildir/
#
# postfix is uid/gid 100/102 - 102:106
# postdrop is gid 101 - 105
virtual_transport = virtual
virtual_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_minimum_uid = 102
virtual_uid_maps = static:102
virtual_gid_maps = static:105
virtual_mailbox_base = /home/vmail
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
#
# Additional for quota support
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Mailbox has exceeded quota size.
virtual_overquota_bounce = yes

#smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination

smtpd_recipient_restrictions =
 permit_sasl_authenticated,
# reject_non_fqdn_sender,
# reject_non_fqdn_recipient,
# reject_unknown_sender_domain,
# reject_unknown_recipient_domain,
 permit_mynetworks,
 reject_unauth_destination,
 reject_unlisted_recipient,
 check_policy_service inet:127.0.0.1:2501
 reject_unauth_pipelining,
# reject_invalid_hostname,
 reject_rbl_client zen.spamhaus.org,
 reject_rbl_client list.dsbl.org

Postfix’in mysql ile çalışmasınıistemiştik, bunun için gerekli mysql tablolarını açıyoruz, tabloları kolay yönetim için postfixadmin destekli olarak açıyorum. Tabii ki güvenli olması için postfixe özel mysql db ve kullanıcısı açıyorum.


CREATE TABLE IF NOT EXISTS `admin` (
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `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`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Postfix Admin - Virtual Admins';

CREATE TABLE IF NOT EXISTS `alias` (
  `address` varchar(255) NOT NULL,
  `goto` text NOT NULL,
  `domain` varchar(255) NOT NULL,
  `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`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Postfix Admin - Virtual Aliases';

CREATE TABLE IF NOT EXISTS `alias_domain` (
  `alias_domain` varchar(255) NOT NULL,
  `target_domain` varchar(255) NOT NULL,
  `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 (`alias_domain`),
  KEY `active` (`active`),
  KEY `target_domain` (`target_domain`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Postfix Admin - Domain Aliases';

CREATE TABLE IF NOT EXISTS `config` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) CHARACTER SET latin1 NOT NULL DEFAULT '',
  `value` varchar(20) CHARACTER SET latin1 NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci COMMENT='PostfixAdmin settings' ;

CREATE TABLE IF NOT EXISTS `domain` (
  `domain` varchar(255) NOT NULL,
  `description` varchar(255) CHARACTER SET utf8 NOT NULL,
  `aliases` int(10) NOT NULL DEFAULT '0',
  `mailboxes` int(10) NOT NULL DEFAULT '0',
  `maxquota` bigint(20) NOT NULL DEFAULT '0',
  `quota` bigint(20) NOT NULL DEFAULT '0',
  `transport` varchar(255) NOT 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`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Postfix Admin - Virtual Domains';

CREATE TABLE IF NOT EXISTS `domain_admins` (
  `username` varchar(255) NOT NULL,
  `domain` varchar(255) NOT NULL,
  `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `active` tinyint(1) NOT NULL DEFAULT '1',
  KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Postfix Admin - Domain Admins';

CREATE TABLE IF NOT EXISTS `fetchmail` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `mailbox` varchar(255) NOT NULL,
  `src_server` varchar(255) NOT NULL,
  `src_auth` enum('password','kerberos_v5','kerberos','kerberos_v4','gssapi','cram-md5','otp','ntlm','msn','ssh','any') CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL,
  `src_user` varchar(255) NOT NULL,
  `src_password` varchar(255) NOT NULL,
  `src_folder` varchar(255) NOT NULL,
  `poll_time` int(11) unsigned NOT NULL DEFAULT '10',
  `fetchall` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `keep` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `protocol` enum('POP3','IMAP','POP2','ETRN','AUTO') CHARACTER SET utf8 COLLATE utf8_turkish_ci DEFAULT NULL,
  `usessl` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `extra_options` text,
  `returned_text` text,
  `mda` varchar(255) NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;

CREATE TABLE IF NOT EXISTS `log` (
  `timestamp` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `username` varchar(255) NOT NULL,
  `domain` varchar(255) NOT NULL,
  `action` varchar(255) NOT NULL,
  `data` text NOT NULL,
  KEY `timestamp` (`timestamp`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Postfix Admin - Log';

CREATE TABLE IF NOT EXISTS `mailbox` (
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8 NOT NULL,
  `maildir` varchar(255) NOT NULL,
  `quota` bigint(20) NOT NULL DEFAULT '0',
  `local_part` varchar(255) NOT NULL,
  `domain` varchar(255) NOT NULL,
  `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`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Postfix Admin - Virtual Mailboxes';

CREATE TABLE IF NOT EXISTS `vacation` (
  `email` varchar(255) NOT NULL,
  `subject` varchar(255) CHARACTER SET utf8 NOT NULL,
  `body` text CHARACTER SET utf8 NOT NULL,
  `cache` text NOT NULL,
  `domain` varchar(255) NOT NULL,
  `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `active` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`email`),
  KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Postfix Admin - Virtual Vacation';

CREATE TABLE IF NOT EXISTS `vacation_notification` (
  `on_vacation` varchar(255) CHARACTER SET latin1 NOT NULL,
  `notified` varchar(255) CHARACTER SET utf8 COLLATE utf8_turkish_ci NOT NULL,
  `notified_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`on_vacation`,`notified`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Postfix Admin - Virtual Vacation Notifications';

ALTER TABLE `vacation_notification`
  ADD CONSTRAINT `vacation_notification_pkey` FOREIGN KEY (`on_vacation`) REFERENCES `vacation` (`email`) ON DELETE CASCADE;

Şimdi postfix main.cf de belirtiğimiz dosyaları mysql ile ilişkili olarak yapılandırıyoruz. Her bir dosyayı ve içeriğini aşağıya yazacağım, burada mysql bağlantı bilgileri, user, password ve db ismi postfix_bilgi olarak geçecek siz bunları kendi verdiğiniz bilgilere göre değiştirmelisiniz.

/etc/postfix/mysql_relay_domains_maps.cf

user = postfix_bilgi
password = postfix_bilgi
hosts = localhost
dbname = postfix_bilgi
#additional_conditions = and backupmx = '1'
query = SELECT domain FROM domain WHERE domain = '%s'

/etc/postfix/mysql_virtual_alias_maps.cf

user = postfix_bilgi
password = postfix_bilgi
hosts = localhost
dbname = postfix_bilgi
query = SELECT goto FROM alias WHERE address = '%s'

/etc/postfix/mysql_virtual_domains_maps.cf

user = postfix_bilgi
password = postfix_bilgi
hosts = localhost
dbname = postfix_bilgi
#additional_conditions = and backupmx = '0' and active = '1'
query= SELECT description FROM domain WHERE domain ='%s'

/etc/postfix/mysql_virtual_mailbox_maps.cf

user = postfix_bilgi
password = postfix_bilgi
hosts = localhost
dbname = postfix_bilgi
#additional_conditions = and active = '1'
query = SELECT maildir FROM mailbox WHERE username = '%s'

/etc/postfix/mysql_virtual_mailbox_limit_maps.cf

user = postfix_bilgi
password = postfix_bilgi
hosts = localhost
dbname = postfix_bilgi
#additional_conditions = and active = '1'
query = SELECT quota FROM mailbox WHERE username = '%s'

/etc/postfix/master.cf de düzenlemeleri yapıyoruz. Burada ttnet in smtp portu için submission’ı aktif edeceğiz.

#submission inet n       -       n       -       -       smtpd

başındaki # işaretini kaldırıyoruz.

Maillerin saklanacağı alanı açıp izinleri veriyoruz, main.cf ayar dosyamızda bu dizini /home/vmail olarak belirlemiştik:

cd /home
mkdir vmail
chown postfix.postdrop vmail

Dovecot

Dovecot kurulumunu yum ile yapıyoruz :
yum install dovecot

Dovecot konfigürasyon dosyasını aşağıdaki şekle getiriyoruz, burda hantal imap desteği ile bir işim olmayacağı için sadece pop3 desteğini aktif ediyorum. Sql yapılandırmasını ayrı bir dosyada yapacağız, uid ve gid leri postfix uidi ve postdrop gid i olarak yapmayı unutmamalısınız, aksi takdirde dovecot postfix ile birlikte düzgün çalışnayacaktır.

#protocols = imap imaps pop3 pop3s
protocols = pop3
disable_plaintext_auth = no
first_valid_uid = 102

#ssl:
#ssl_disable = no
#ssl_cert_file = /usr/share/ssl/s/Cert.pem
#ssl_key_file = /usr/share/ssl/s/PrivateKey.pem

#default_mail_env = maildir:/var/spool/postfix/virtual/%u
default_mail_env = maildir:/home/vmail/%d/%n
protocol pop3 {
        pop3_uidl_format = %08Xu%08Xv
}

auth default {
    mechanisms = plain login cram-md5 digest-md5

    passdb sql {
        args = /etc/dovecot-sql.conf
    }

    userdb static {
        args = uid=103 gid=105 home=/home/vmail/%d/%n
    }

    socket listen {
        client {
            user = postfix
            group = postfix
            path = /var/spool/postfix/private/auth
            mode = 0660
        }
    }
}

/etc/dovecot-sql.conf dosyasını da aşağıdaki şekilde yapıyoruz, mysql kullanıcı ve şifresini postfix_bilgi olarak yaptım ben siz kendinize göre düzenlemelisiniz :

driver = mysql
connect = host=/var/lib/mysql/mysql.sock dbname=postfix user=postfix_bilgi password=postfix_bilgi
default_pass_scheme = MD5
password_query = SELECT username AS user, password FROM mailbox WHERE username = '%u'

SQLgrey

SQLgrey’in son sürümünü kontrol ediyoruz:
http://sourceforge.net/projects/sqlgrey/files/

Şu anki son sürüm olan 1.76 yı indirip kurulumuna geçiyoruz, kurulumu yönetimi kolay olması için yum ile gerçekleştireceğim.

wget http://downloads.sourceforge.net/project/sqlgrey/sqlgrey-1.7%20%28devel%29/1.7.6/sqlgrey-1.7.6.tar.bz2?use_mirror=ignum
rpmbuild -ta sqlgrey-1.7.6.tar.bz2
yum localinstall /usr/src/redhat/RPMS/noarch/sqlgrey-1.7.6-1.noarch.rpm

sqlgrey için mysql de bir db açıyoruz, ayrı bir kullanıcı ve şifre açıyoruz, bunları sqlgrey configurasyon dosyasına giriyoruz:

nano /etc/sqlgrey/sqlgrey.conf

bu dosyanın en sonuna mysql bilgilerini ekliyoruz:

db_type = mysql
db_name = sqlgreyicinacilanisim
db_host = localhost
db_port = default
db_user = sqlgreyicinacilanuser
db_pass = sqlgreyicinverilensifre

“RHEL5 Linux postfix’i dovecot ve mysql desteği ile kurup sqlgrey filtresini aktif etme” hakkında 2 yorum yapılmış

  1. Ahmet diyor ki:

    Merhaba;

    yazdıklarınızı uygularken postfix.spec derlemesinde hata ile karşılaşıyorum.. Verdiği hata ise;

    Failed build dependencies:
    MySQL-shared is needed by postfix-2.7.0-1.pcre.MySQL.dovecot.rhel5.i386
    MySQL-devel is needed by postfix-2.7.0-1.pcre.MySQL.dovecot.rhel5.i386

    Nasıl çözebilirim.. Yardımcı olursanız sevinirim..

  2. admin diyor ki:

    mysql destekli derlemek için mysql shared libraryleri ve mysql-devel rpm paketleri içerisindeki libraryler gereklidir. Bunları isterseniz “yum install mysql-shared” ve “yum install mysql-devel” komutları ile kurabilirsiniz, eğer klasik bir sürüm kullanmıyorsanız mysql.com dan makinanıza uygun mysql paketlerini indirip mysql i yum localinstall ile yeniden kurmanızı tavsiye ederim.

    Bir boş vaktim olduğunda mysql.com dan indirilen mysql paketlerinin kurulumunu yazayım.

    Rpmlerle ilgili ihtiyacınız olabilecek ufak 1-2 not daha:
    sisteminizde bulunan mysql rpm lerini bulmak için “rpm-qa | grep mysql” komutunu kullanabilir, “rpm -e paketismi” komutu ile sisteminizdeki paketi kaldırabilirsiniz.

Bir Cevap Yazın