29 Ekim 2010 Cuma

Postfix'de Gönderen ve Alan Hesapları Kısıtlama

Postfix'de e-posta gönderen hesapları kısıtlamak için smtpd_sender_resitiriction alıcı hesaplarını kısıtlamak için ise smtpd_recipient_restiriction parametreleri kullanılır. Kısıtlamalar, posta kutusu yada domain bazında yapılabilir.

Gönderen Hesapları Kısıtlamak İçin

1. /etc/postfix/main.cf dosyasina aşığıdaki satırları ekleyelim.
smtpd_sender_restrictions=check_sender_access hash:/etc/postfix/sender_restriction
2. /etc/postfix/sender_restriction isimli ve KontrolDeğeri    Aksiyon  şeklinde yazılmış kuralları içeren bir dosya oluşturalım.
posta_kutusu1@domain1.com      REJECT
posta_kutusu2@domain1.com      REJECT
posta_kutusu1@domain2.com      OK
domain2.com                               REJECT
3. Postfix gelen smtp isteğini incelerken oluşturduğumuz kurallar içinde arama yapıp bir eşleşme arayacak ve gerekli aksiyonu yerine getirecek. Arama işlemini hızlandırmak için oluşturduğumuz dosyayı aşağıdaki komutu kullanarak db formatına çevirelim.
[root@gw ~]# postmap /etc/postfix/sender_restriction
4. postfix hizmetini yeniden başlatalım

[root@gw ~]# /etc/init.d/postfix reload
yada
[root@gw ~]# /etc/init.d/postfix restart

Alan Hesapları Kısıtlamak İçin

1. /etc/postfix/main.cf dosyasina aşığıdaki satırları ekleyelim
smtpd_recipient_restrictions=check_sender_access hash:/etc/postfix/recipient_restriction
2. /etc/postfix/recipient_restriction isimli ve KontrolDeğeri    Aksiyon  şeklinde yazılmış kuralları içeren bir dosya oluşturalım.
posta_kutusu1@domain1.com      REJECT
posta_kutusu2@domain1.com      REJECT
posta_kutusu1@domain2.com      OK
domain2.com                               REJECT
3. Postfix gelen smtp isteğini incelerken oluşturduğumuz kurallar içinde arama yapıp bir eşleşme arayacak ve gerekli aksiyonu yerine getirecek. Arama işlemini hızlandırmak için oluşturduğumuz dosyayı aşağıdaki komutu kullanarak db formatına çevirelim.
[root@gw ~]# postmap /etc/postfix/recipient_restriction
4. postfix hizmetini yeniden başlatalım.

[root@gw ~]# /etc/init.d/postfix reload
yada
[root@gw ~]# /etc/init.d/postfix restart

26 Ekim 2010 Salı

MySQL Master - Slave Replikasyonu

MySQL sunucular arasındaki replikasyon binary log mekanizmasına dayanır. Replikasyonun "master" rolünü üstlenen MySQL sunucusu veritabanları üzerinde oluşan tüm değişiklileri binary log dosyasına yazar, replikasyonun "slave" rolünü üstlenen sunucuları ise master'ın binary loglarını okuyup gerçekleşen değişiklikleri kendileri üzerindeki veritabanlarında gerçekleştirerek replikasyonu gerçekleştirirler.

Replikasyon işleminin gerçekleşebilmesi için master sunucuda binary logging'in devreye alınması gerekmektedir. Replikasyonda rol alacak tüm sunucuların tüm sistemde tek olan (unique) ve server-id parametresi ile belirlenen ID değerine sahip olmaları gerekmektedir.


1. "Master" Rolünü Üstelenecek Sunucunun Ayarlanması

Binary logging işleminin başaltılması için my.cnf  ( windows sunucularda my.ini ) dosyasında yer alan [mysqld] bölümüne aşağıdaki satırlar eklenmelidir. Eklenen server-id değeriyle master sunucunun ID'si "1" olarak ayarlanmıştır.

[mysqld]
log-bin=mysql/bin
server-id=1
Binary logging başlatıldıktan sonra master sunucu, üzerinde gerçekleşen değişikliklerin tamamını log dosyasına yazacaktır. Tüm veritabanları yerine sadece istenen veritabanlarının loglanması için binlog-do-db veya binlog-ignore-db parametreleri kullanılabilir.


 2. "Slave" Rolünü Üstlenecek Sunucuların Ayarlanması

Replikasyona katılabilmesi için "Slave" sunucularında server-id değerlerinin belirlenmiş olması gerekmektedir.Aşağıdaki satırları my.cnf ( windows sunucularda my.ini ) dosyasına ekleyerek sunucunun server-id değerini "2" olarak ayarlamış oluyoruz.

Slave sunucunun master üzerinde gerçekleşen tüm değişiklikler yerine sadece istenen değişiklikleri almasını sağlama mümkün. Aşağıdaki satırları ekleyerek kav ve avantfax isimli veritabanlarının ve amavisd veritabanında yer alan quarantine isimli tablonunu replikasyon dışında tutulmasını sağlayabiliriz.

[mysqld]
server-id=2
replicate-ignore-db=kav
replicate-ignore-db=avantfax
replicate-ignore-table=amavisd.quarantine
Benzer şekilde replicate-do-db ve replicate-do-table paramaetrelerini kullanarak hangi veritabanı ve tabloların replikasyonunun yapılacağını belirlemek mümkündür.

3. Replikasyon için kullanıcı hesabının oluşturulması.

Replikasyon işlemi sırasında slave sunuclar master sunucuya MySQL kullanıcısı ve parolası kullanarak bağlanmalıdır. Bu nedenle master üzerinde bir kullanıcı hesabı oluşturulmalıdır. "REPLICATION SLAVE" hakkında sahip herhangi bir kullanıcı hesabı replikasyon amacıyla kullanılabilir.

Replikasyona katılacak slave sunuclar için tek bir kullanıcı hesabı kullanılabileceği gibi her slave için ayrı bir hesap da kullanılabilir.

Aşağıdaki satırları mysql oturumu altında çalıştırarak replikasyon için kullanacağımız hesabı oluşturalım.


mysql>CREATE USER 'replicator'@'%slave_adresi' IDENTIFIED BY 'replicator_password';

mysql>GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%slave_adresi';


Oluşturduğumuz replicator isimli kullanıcı sadece "slave_adresi" ile tanımlanan adresten bağlanacak şekilde yetkilendirildiğine dikkat edin, eğer aynı kullanıcıyı farklı adresler için kullanacaksa kullanıcı hesabı, domain adı kullanılarak 'replicator'@'%.test.com' gibi) yada host adresi belirtilmemeden ('replicator'@'%' gibi) oluşturulmalıdır.


4. Master Sunucunun Binary Log Pozisyonunun Belirlenmesi.

Slave sunucuların replikasyona başlayabilmesi için master sunucunun log pozisyonunu bilmeleri gerekmektedir. Replikasyon yapacağınız veritabanları veri içeriyorsa öncelikle bu verilerin değişmelerini engellemek ve mevcut verileri dump ederek bir kopyasını almanız gerekmektedir. Eğer verilerin değişmesi engellenmezse alınacak olan log pozisyonu ve dump edilecek veri arasında tutarsızlık oluşacağından replikasyon sonrasında sunucular üzerindeki veri'nin bütünlüğü bozulacaktır.

Master sunucunun log pozisyonunu öğrenmek için aşağıdaki adımları takip edin

Bu komut sonrasında veritabanları READ LOCK ile kilitlenerek değiştirilmeleri engelenecektir.


mysql> FLUSH TABLES WITH READ LOCK;

Log dosyası pozisyonunu öğrenmek için aşağıdaki komutu çalıştıralım.

Komut sonucunda log dosyasının adının mysql-bin.000005 olduğunu ve şu an 179 numaralı pozisyonda oluğumuzu belirlemiş olduk.

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 |      179 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.02 sec)


5. Mevcut Veriyi Dump Ederek Bir Kopyasını Alma
Daha önce kilitlediğimiz mevcut veriyi mysqldump isimli aracı ve veritabanlari üzerinde yetkili bir kullanıcı hesabı kullanarak dump edelim. Komutu çalıştırdığımızda user_name isimli kullanıcı için parola girmemiz istenecektir. 
$ mysqldump --all-databases --lock-all-tables -u user_name -p >databasedump.db
Yukarıdaki komut sunucu üzerindeki tüm dosyaları dump edecektir. Sadece replikasyonunu yapacağımız veritabanını dump etmek için.
Dump ettiğimizi veriyi slave sunuculara import ederek mevcut veriyi bu sunuculara aktarmış olacağız. Dump işlemini tamaladıktan sonra aşağıdaki komutu çalıştırarak tablolar üzerindeki kilidi kaldıralım.
$ mysqldump --lock-all-tables -u user_name -p --databases db1 db2 >databasedump.db


mysql> UNLOCK TABLES;

6. Dump Edilen Veriyi Slave Sunucuya Import Etme

Dump edilen veriyi slave sunucuda içeri almak için MySQL hizmetini başlatmamız gerekiyor fakat replikasyon ayarlarını tamamlamadığımızdan sunucuyu --skip-slave-start opsiyonu ile başlatamamız gerekiyor. Bunun için my.cnf dosyasına skip-slave-start parmaetresini ekledikten sonra hizmeti başlatıyoruz.

mysqldump aracı ile elde ettiğimiz databasedump.db isimli dosyayı slave sunucuya aldıktandan aşağıdaki komutu kullanarak içeri aktaracağız. 
Bu işlemin ardından master sunucudan aldığımız veritabanı kpyası slave sunucuya aktarılmış oldu.

$ mysql -u user_name -p < database.dump

7. Slave sunucunun replikasyon için ayarlanması

Slave sunucunun master sunucuya bağlanmak için ihtiyaç duayacağı bilgileri CHANGE MASTER TO komutu ile belirliyoruz. Slave sunucu, replikasyona başlayabilmek için master sunucunun adresine, log dosyasının adına, log dosyasının pozisyonuna, replikasyon için kullanılacak kullanıcı hesabının adına ve parolasına ihtiyaç duyacaktır. Daha önce belirlediğimiz bu değerleri kullanrak oluşturduğumuz  komutu slave sunucuda çalıştırarak replikasyon ayarlarını tamalayalım.
mysql> CHANGE MASTER TO
                   MASTER_HOST='master_sunucu_adresi',
                   MASTER_USER='replicator',
                   MASTER_PASSWORD='replicator_password',
                   MASTER_LOG_FILE='mysql-bin.000005',
                   MASTER_LOG_POS=179;
CHANGE MASTER TO komutuyla birlikte kullanabileceğiniz parametrelerin listesine buradan ulaşabilirsiniz.

Slave sunucunun ayarlarını tamamladıktansonra START SLAVE komutuyla slave sunucunun replikasyona başlaması sağlanır. Komut çalıştırıldıktan sonra slave, master sunucuya  bağlanıp, dump işleminden sonra gerçekleşen değişiklikleri almaya başlayacaktır.

mysql> START SLAVE;
Slave sunucuda greçekleşen replikasyon işleminin durmunu SHOW SLAVE STATUS komutuya takip edebilirsiniz. Komut master sunucu ve replikasyon süreci ve varsa oluşan hatalar konusunda bir çok veriden oluşan bir rapor üretir

Slave sunucunun, replikasyon işlemine otomatik olarak başlaması için my.cnf dosyasına eklenen skip-slave-start paramtresi kaldırılmalıdır.


20 Ekim 2010 Çarşamba

CenOS üzerine NTP kurulumu

NTP, sistem saatinin belirlenen bir kaynakla senkronize edilmesi için kullanılan bir protokoldür. Özellikle geniş ağlarda çalışan bilgisayarların saatlerinin senkronize edilmesinde kullanılır. Kerberos gibi zaman bağımlı yapıların kullanılmasında sunucu ve istemciler arasındaki saat senkronizasyonun yapılmış olması mutlak bir gerekliliktir.

CentOs üzerine NTP kurmak için aşağıdaki komutu çalıştırmanız yeterlidir.

[root@gw ~]# yum install ntp.x86_64
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: mirror.vit.com.tr
 * base: mirror.vit.com.tr
 * extras: mirror.vit.com.tr
 * updates: mirror.vit.com.tr
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package ntp.x86_64 0:4.2.2p1-9.el5.centos.2.1 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
 Package     Arch           Version                          Repository    Size
================================================================================
Installing:
 ntp         x86_64         4.2.2p1-9.el5.centos.2.1         base         1.3 M
Transaction Summary
================================================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
Total download size: 1.3 M
Is this ok [y/N]: y
Downloading Packages:
ntp-4.2.2p1-9.el5.centos.2.1.x86_64.rpm                  | 1.3 MB     00:03
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : ntp                                                          1/1
Installed:
  ntp.x86_64 0:4.2.2p1-9.el5.centos.2.1
Complete!

Kullandığım sistem 64 bit olduğu için ntp.x86_64 paketini kurdum, sisteminize 64bit değilse yükleyeceğiniz paket ntp.i386 olmalıdır. Paket kurulumundan sonra servis ayarlarını içeren /etc/ntp.conf dosyasına göz atalım


# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
# Permit all access over the loopback interface.  This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict -6 ::1
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org
server 1.centos.pool.ntp.org
server 2.centos.pool.ntp.org
restrict ile başlayan satırlar zamanlama kaynağı olarak kullanılan kaynakların servis üzerindeki kısıtlamalarını gösterir.

server adresleri ise zaman kaynağı olarak kullanılacak sunucuların adreslerini gösterir, kullanacağınız adresleri belirleyip buraya yazmalısınız.

Sisteminiz Active Directory kullanıyorsanız AD sunucunuzu buraya ekleyebilirsiniz böylece kerberos kullanırken yaşayabileceğiniz saat farkı problemlerini ortadan kaldırmış olursunuz.

ntp hizmetinini kullandığı bir diğer dosyada /etc/ntp/step-tickers dosyasıdır. Bu dosya içinde ntpdate programı tarafından zamanlama kaynağı olarak kullanılacak sunucuların adresleri yer alır.

0.centos.pool.ntp.org
1.centos.pool.ntp.org
2.centos.pool.ntp.org
ntpdate programının kullanmasını istediğiniz sunucuları bu dosya içine yazmalısınız. AD ile entegrasyon yapacaksanız AD sunucunuzun adresini bu dosyaya ekleyin.

ntp.conf ve step-tickers dosyalarını düzenledikten sonra ntp hizmetinin başlatalım
[root@gw ~]# /etc/init.d/ntpd start
ntpd: Synchronizing with time server:                      [  OK  ]
Starting ntpd:                                             [  OK  ]
[root@gw ~]#
sistem açıldığında ntp hizmetinin başlamasını sağlayalıp kurulum işini sonlandıralım.


[root@gw ~]# chkconfig ntpd on

19 Ekim 2010 Salı

Samba - Active Directory Entegrasyonu

Samba - AD entegrasyonu için ön koşullar
  • Kullandığınız Samba sürümünün 3.0.20 nin üzerinde olması gerekmektedir.
  • Kerberos
  • ntp (AD sunucusu ile aynı saat ayarına sahip olmayı garantilemek için )

Samba ve Kerberos hizmetlerinin yapılandırılması
1. Sisteminizde ntp istemcisi kurulu değilse kurup ayarlarını yaparak ve AD sunucusu ile Samba sunucusu arasında saat farkı olmamasını sağlayın.
2. kerberos ayarlarının yapılandırılması

Kerberos'un zaman bağımlı bir protokol olduğunu dikkate alarak /etc/ntp.conf dosyası içine AD sunucunuzu eklemeniz gerekmektedir. Kullancağınız /etc/krb5.conf  dosyası aşağıdakine benzer olmalıdır, domain tanımlarını sisteminize uygun olarak değiştirerek /etc/krb5.conf dosyanızı oluşturun.

[libdefaults]
 default_realm = HFF.COM.TR
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 forwardable = yes
[realms]
  HFF.COM.TR = {
  kdc = 192.168.1.221
  admin_server = 192.168.1.221
  default_domain = HFF.COM.TR
 }
[domain_realm]
 .hff.com.tr = HFF.COM.TR
 hff.com.tr = HFF.COM.TR
yukarıda büyük harf kullanılarak yazılmış ifadelerin küçük harf kullanılarak yazılması durumunda kerberos AD'ye bağlanamayacaktır. Kerberos ayarlarınızın doğruluğunu kinit komutunu kullanarak test edebilirsiniz. kinit komutuna parametre olarak verilen domain adının büyük harflerle yazıldığına
dikkat edin. Komutu çalıştırdığınızda belirtilen kullanıcı için parola girmenizi isteyecektir. Girdiğiniz parola ile AD üzerinde oturum açılabilirse komut, herhangi bir mesaj göstermeden sonlanacaktır.
[root@backup ~]# kinit ckalayci@HFF.COM.TR
Password for ckalayci@HFF.COM.TR:
[root@backup ~]#
AD ile Samba sunucusu arasında 5dk daha fazla bir zaman farkı varsa kinit komutunu çalıştırdığınızda aşağıdaki hata mesajı görüntülenecektir.
[root@backup ~]# kinit ckalayci@HFF.COM.TR
Password for ckalayci@HFF.COM.TR:
kinit(v5): Clock skew too great while getting initial credentials
[root@backup ~]#
Sisteminiz üzerine NTP kurup, AD sunucunuzun ntpd tarafından kaynak olarak kullanılmasını sağlayarak AD sunucunuz ile Samba sunucunuz sistem saatlerinin senkronize olmasını ve bu şekilde kalmasını sağlayabilirsiniz.

3. Samba ayarlarının yapılandırılması
 
Samba servis'inin ayarları /etc/samba/smb.conf dosyasi içinde yer alır. Samba - AD entegrasyonu için kullanacağımız parametreleri bu dosya içinde yer alan [global] başlıklı alan altında yapacağız.
[global]
        workgroup=hff
        realm = HFF.COM.TR
        preferred master = no
        server string = Samba Server Version %v
        security = ADS
        encrypt passwords = yes
        log level = 3
        log file = /var/log/samba/log.%m
        max log size = 50
        winbind enum users = yes
        winbind enum groups = yes
        winbind use default domain = Yes
        winbind nested groups = Yes
        winbind separator = +
        idmap uid = 10000-20000
        idmap gid = 10000-20000
        password server = 192.168.1.221
Kullandığımız parametreleri kısaca anlatayım .
 
.winbind use default domain = Yes kullanıcılar oturum açarken DOMAIN\KullanıcıAdı şeklinde oturum açmak yerine sadece KullanıcıAdı kullanarak oturum açılabilmesi için kullanılır.
 
.idmap uid = 10000-20000 ve idmap gid = 10000-20000 AD üzerinde tanımlı kullanıcılar, yerel sunucu üzerindeki kullanıcılara çevrilirken kullanılacak uid ve gid değerlerinin belirlenmesi için kullanılır.
 
Bu değerler belirlenirken verilecek min. değer en son eklenmiş yerel kullanıcı için belirlenmiş uid ve gid değerlerinden büyük olmalıdır. Eğer burada belirtilen değerler yerel değerler ile çakıştığında kullanıcı nssswitch.conf dosyasında belirtilen sıra göz önüne alınarak değerlendirilir.

.winbind enum users = yes ve winbind enum groups = yes   getent komutu kullanılarak kullanıcı ve grup bilgilerinin belirlenmesine izin verir.

Samba üzerinde bir paylaşım oluşturalım, bunun için /etc/samba/smb.conf dosyası içine aşağıdaki satırları ekledim. Sizde kendi sisteminiz üzerinde bir test klasörü oluşturup bunu samba üzerinden paylaşıma açın.

[TEST]
        comment = TEST Paylasimi
        path = /Yedekler
        browseable = yes
        read only = no
        inherit acls = yes
        inherit permissions = yes
        create mask = 700
        directory mask = 700

testparm komutu kullanarak girdiğiniz parametrelerin yazım şeklinin doğru olup olmadığını kontrol edebilirisiniz. Yazılan parametrelerin geçerli olması için smb servisini ve winbind serivisini yeniden başlatalım.
[root@backup Yedekler]# /etc/init.d/smb restart
Shutting down SMB services:                                [  OK  ]
Shutting down NMB services:                                [  OK  ]
Starting SMB services:                                     [  OK  ]
Starting NMB services:                                     [  OK  ]
[root@backup Yedekler]#
[root@backup Yedekler]# /etc/init.d/winbind restart
Shutting down Winbind services:                            [  OK  ]
Starting Winbind services:                                 [  OK  ]
[root@backup Yedekler]#
Yaptığınız ayarların doğruluğunu test etmek için wbinfo komutunu kullanabilirsiniz.wbinfo -u komutu AD üzerinde tanımlanmış kullanıcıların listesini, wbinfo -g komutu grupların listesini vermelidir. wbinfo komutunu kullanarak yapabileceğiniz diğer testleri görmek için
[root@backup Yedekler]# wbinfo --help

18 Ekim 2010 Pazartesi

Postfix Active Directory entegrasyonu.

Bu yazımda Active Directory ile Postfix ve Dovecot entegrasyonunun nasıl yapılacağından bahsedeceğim.

Kullancıların AD üzerinde tutulduğu, POP3/IMAP oturumların Dovecot kullanılarak açıldığı bir sistem kuracağız.

1. Postfix - AD Entegrasyonu

Kullanıcı hesapları AD üzerinde olacağından, bu hesaplara ait posta kutularının sahipliği için kullanılacak bir hesabı Linux üzerinde açmamız gerekiyor.

# useradd vmail -c 'Virtual Mail User' -s /bin/false

vmail kullanıcısı oturum açma amacıyla kullanılmasını engellemek için kullanıcının varsayılan kabuk yorumlayıcısını /bin /false olarak ayarladık.

vmail isimli kullanıcının UserID,GroupID ve home klasör bilgilerine ihityaç duyacağımızdan bu bilgileri not etmeliyiz.

[root@gw ~]# cat /etc/passwd|grep vmail
vmail:x:529:529:Virtual user:/home/vmail:/bin/false
[root@gw ~]# cat /etc/group|grep vmail
vmail:x:529:


User ID: 529, Group ID: 529, home: /home/vmail


Postfix'in kullanıcı hesabının kontrolü için AD'ye bağlanırken ihtiyaç duyacağı kullanıcı hesabını oluşturarak devam edelim. Ben bu iş için, postfix isimli bir kullanıcı hesabını AD üzerinde oluşturdum.

AD üzerinde kullandığım domain adı "test.com.tr" kullanıcı adıysa "postfix" bu bilgileri kullanarak
Postfix - AD entegrasyonu için kullanılacak /etc/postfix/ad_users.cf isimli bir dosya oluşturalım.

server_host = 192.168.2.1
search_base = dc=test,dc=com,dc=tr
version = 3
query_filter = (&(objectclass=person)(samaccountname=%u))
result_attribute = samaccountname
result_format = %s/Maildir/
bind = yes
bind_dn = test\postfıx
bind_pw = 12#as8192@KLM

AD entegrasyonu için kullandığımız dosya içindeki parametreleri kısaca açıklayım.

server_host = 192.168.2.1  AD sunucusunun adresini gösterir.

search_base = dc=test,dc=com,dc=tr kullanıcı hesaplarıın yer aldığı context' in adresini gösterir.

version = 3 kullanılacak ldap protokolünün versiyon numarasını gösterir.


query_filter = (&(objectclass=person)(samaccountname=%u)) arama işleminin hangi tür objelerde yapılacağı ve arama kriteri için  hangi alanın kullanılcağını gösterir.

result_attribute = samaccountname arama sonunda eşleşme bulunduğunda döndürelecek değeri gösterir.

result_format = %s/Maildir/ döndürülen değerin hangi formatta kullanılacağını belirler.

Aşağıdaki parametrelere AD üzerinde arama yapmadan önce oturum açmak için kullanılacak bilgileri, içerir sorgulama için oturum açmak gerekli değilse bubilgilerin kullanılmasına gerek yoktur.

bind = yes
bind_dn = test\postfıx
oturum açarken kullanılacak hesabının adı
bind_pw = 12#as8192@KLM oturum açarken kullanılacak hesabın parolası.

Dosyayı oluşturduktan sonra yapılandırmayı aşağıdaki komutu çalıştırarak kontrol edebiliriz.
[root@gw ~]# postmap -q ckalayci ldap:/etc/postfix/ad_users.cf
ckalayci/Maildir/

AD bağlantısı tamamlandıktan sonra Postfix'in yapılandırma dosyası üzerinde gerekli ayarlamaları yapalım.Bunun için /etc/postfix/main.cf dosyasını açıp mydestination parametresinin bulunduğu satırı aşağıdaki gibi düzenleyelim.

mydestination = $myhostname, localhost.$mydomain, localhost
ve aşağıdaki satırları main.cf dosyasına ekleyelim.

virtual_mailbox_domains = $mydomain
virtual_mailbox_base = /home/vmail/
virtual_mailbox_maps = ldap:/etc/postfix/ad_users.cf
virtual_uid_maps = static:529
virtual_gid_maps = static:529

Burada kullanılan virtual_mailbox_base, virtual_uids_maps ve virtual_gid_maps değerleri parametrelerine, posta kutularının sahipliği için açtığımız vmail kullanıcısına ait home dizini, uid ve guid değerlerini giriyoruz.

main.cf fosyasının kaydedip postfix'i yeniden başlattığımızda Postfix - AD entegrasyonu tamamlanacak ve AD üzerinde tanımlanmş kullanıcılara e-posta gönderdiğinizde Postfix gelen e-postaları kabul etmeye başlayacaktır.

[root@gw ~]# /etc/init.d/postfix reload
yada
 [root@gw ~]# /etc/init.d/postfix restart
2. Dovecot - AD entegrasyonu

Dovecot - AD entegrasyonu için kullanılacak ayarları içerecek /etc/dovecot_ad.conf isimli bir dosya oluşturup aşağıdaki satırları bu dosyaya ekleyelim.

hosts=192.168.2.1
base=dc=test,dc=com,dc=tr
ldap_version=3
auth_bind=yes
auth_bind_userdn=test\%n

İkinci olarak /etc/dovecot.conf dosyası içine, daha önce açtığımız vmail kullanıcısının user id, group id ve home dizini bilgilerini içeren aşağıdaki satırı ekleyelim.

auth_username_format = %Lu

passdb ldap {
  args = /etc/dovecot_ad.conf
}

userdb static {
args=uid=529 gid=529 home=/home/vmail/%Lu
}

Yukarıdaki satırlar Dovecot kullanılarak oturum açıldığında kullanıcının e-postalarının saklandığı dizinin yeri ve
bu dizinin sahiplik bilgilerini gösteriyor. home parametresinin son kısmında yer alan %Lu oturum açılırken belirtilen kullanıcı adının küçük harfe çevrilerek kullanılmasını sağlamaktadır.

dovecot.conf dosyasını kaydettikten sonra Dovecot servisini yeniden başlatarak Dovecot - AD entegrasyonunu tamamlıyoruz.

[root@gw ~]# /etc/init.d/dovecot reload
 yada

[root@gw ~]# /etc/init.d/dovecot restart

31 Ağustos 2010 Salı

Postfix'in relayhost olarak kullanımı.

Posta sunucunuz kendisine bırakılan e-postanın nihayi dağıtımı kendi üzerinde değilse dağıtımını iki farklı şekilde yapabilir. E-postayı ya doğrudan alıcının posta sunucusuna bırakmaya çalışır yada relayhost kullanarak e-postanın dağıtımını servis sağlayıcısının posta sunucusuna bırakır.

Eğer domainize ait MX kaydı sunucunuzu yönettiğiniz posta sunucusunu göstermiyorsa, sunucunuz ikinci dağıtım yolunu kullanarak dağıtım yapmalıdır. Aksi taktirde alıcının posta sunucusu MX kayıtlarınızda yer alan IP adresiyle, kendisiyle bağlantı kuran sunucunun IP adresinin aynı olmadığını görecek ve bağlantıyı geri çevirecektir.

Postfix çalışan posta sunucunuzun, servis sağlayıcınızın üzerinden e-posta göndermesini sağlamak için relayhost ayarlarını yapılandırmanız gereklidir. Relayhost yapılandırması için servis sağlayıcınızın posta sunucusunun adresine ve bu sunucu üzerinde kimlik doğrulaması yapabileceğiniz kullanıcı adı ve parola çiftine ihtiyaç duyacaksınız.

Örnek bir sistem tasarlayarak relayhost ayarlarını nasıl kullanıldığına bakalım.

Tasarlanan Sistem

Sunucumuz domain1.com alanadını barındırıyor olsun, servis sağlayımızın posta sunucusunu adresi mail.isp.com bu sunucu üzerinde oturum açmak için kullanacağımız kullanıcı adı kullanıcı1, parolası ise parola1 olsun. Postfix sunucumuzu relayhost kullanmak üzere ayarlamak için /etc/postfix/main.cf dosyasını düzenlememiz gerekecek. main.cf dosyasini açtıktan sonra aşağıdaki satırları ekleyerek işe başlayalım.

relayhost =[mail.isp.com]:587

smtp_sasl_auth_enable = yes

smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd


İlk satırda yer alan relayhost anahtarı relayhost olarak kullanılacak sunucunun adresini gösteriyor, bu adresin "[]" işaretleri girdiğiniz adres için MX sorgulaması yapılmasını engeller. Posta sunucusuna yaılacak SMTP bağlantısı standart port üzerinden yapılmayacaksa ":" işareti kullanılarak bağlantının yapılacağı port numarası  belirtilir. Örneğimizde bağlantı için 587 numaralı port kullanılmıştır.

smtp_sasl_auth_enable anahtarı isp sunucusu üzerinden posta gönderebilmek için kimlik doğrulaması yapılması gerektiğini, smtp_sasl_password_maps anahtarı ise kimlik doğrulaması için kullanılcak bilgilerin bulunduğu dosyanın yerini gösteriyor.

Bu satırları main.cf dosyasına ekledikten sonra /etc/postfix/sasl_passwd doyasını oluşturmamız gerekiyor, bu dosyanın içeriği aşağıdaki gibi olmalıdır

mail.isp.com kullanici1@domain1.com:parola1

Dosya kullanıcı adı ve parola içeridiğinden dosyanın yetkisiz kişiler tarafından açılmasını engellemek için dosyanın kullanıcı haklarını değiştirelim.


[root@gateway ~]#chown root.root /etc/postfix/sasl_passwd

[root@gateway ~]# chmod 600 /etc/postfix/sasl_passwd

[root@gateway ~]# ls -l /etc/postfix/sasl_passwd

[root@gateway ~]# ls -l /etc/postfix/sasl_passwd

-rw------- 1 root root 85 Dec 4 2009 /etc/postfix/sasl_passwd


Düz metin dosyaların okuma hızı database dosyalarına oranla düşük olduğundan postfix bu dosyayı database formunda olmasını tercih eder. Bu dosyayı database formuna çevirmek için postmap komutunu kullanmamız gerekiyor, bu işlemi aşağıdaki komutu çalıştırarak yapacağız.

[root@gateway ~]# postmap hash:/etc/postfix/sasl_passwd

[root@gateway ~]# ls -l /etc/postfix/sasl_passwd.db

-rw------- 1 root root 12288 Dec 4 2009 /etc/postfix/sasl_passwd.db

postmap komutundan sonra sasl_passwd.db dosyası oluşturuldu. Şimdi yapmamız gereken postfix'in yeni ayarları kullanmasını sağlamak,

[root@gateway ~]# postfix reload

postfix/postfix-script: refreshing the Postfix mail system

Postfix yeni ayarlarla çalışmaya başladıktan sonra dışarıya gönderilen e-postaların dağıtımı için servis sağlayıcının sunucusunu kullanmaya başlayacaktır, maillog dosyasını izleyerek sistemin beklediğiniz şekilde çalışıp çalışmadığını izleyebilirsiniz.

[root@gateway ~]# tail -f /var/log/maillog

Jul 21 12:37:59 gateway postfix/smtp[14677]: 2539747D25C: to=<asdzx@domain2.com>, relay=mail.isp.com[A.B.C.D], delay=0, status=sent (250 2.6.0 2129 bytes received in 00:00:00; Message id BOZ86019 accepted for delivery)

Jul 21 12:38:33 gw postfix/anvil[15397]: statistics: max connection rate 2/60s for (smtp:192.168.1.96) at Jul 21 12:35:10

Jul 21 12:38:33 gw postfix/anvil[15397]: statistics: max connection count 1 for (smtp:192.168.1.89) at Jul 21 12:33:15