{"id":42,"date":"2009-09-19T01:37:53","date_gmt":"2009-09-18T22:37:53","guid":{"rendered":"http:\/\/www.umutbesler.com\/?page_id=42"},"modified":"2021-11-10T11:56:05","modified_gmt":"2021-11-10T08:56:05","slug":"debian-uzerinde-postfix-mail-server-kurulum-dokumani-postfixmysqlcourier-imapsmtp-authspamassassinclamav","status":"publish","type":"page","link":"http:\/\/www.umutbesler.com\/dokumanlar\/debian-uzerinde-postfix-mail-server-kurulum-dokumani-postfixmysqlcourier-imapsmtp-authspamassassinclamav\/","title":{"rendered":"Debian \u00dczerinde Postfix Mail Server Kurulum Dokumani (Postfix+Mysql+Courier Imap+SMTP Auth+Spamassassin+Clamav)"},"content":{"rendered":"

Debian \u00dczerinde Postfix Mail Server Kurulum Dokumani (Postfix+Mysql+Courier Imap+SMTP Auth+Spamassassin+Clamav)<\/strong>
\nHazirlayan :<\/strong> Umut Besler
\n17.04.2006<\/p>\n

Bu dokuman Postfix mail server uzerinde virtual domain olusturarak mail hizmeti vermeyi aciklayacaktir.
\nKurulum tamamland\u0131\u011f\u0131nda MySQL \u00fczerinden kullan\u0131c\u0131 kontrol\u00fc yapan, gelen emaillere virus ve spam kontrol\u00fc yapan bir sisteme sahip olacaks\u0131n\u0131z.<\/p>\n

Bu kurulumdan \u00f6nce daha \u00f6nce yazm\u0131\u015f oldu\u011fum postfix<\/a> d\u00f6k\u00fcman\u0131na bir g\u00f6z atman\u0131z\u0131 tavsiye ederim.<\/p>\n

Oncelikle kurulmasi gereken paketler:
\nDebian’\u0131n bize sa\u011flad\u0131\u011f\u0131 en b\u00fcy\u00fck avantajlardan biri olan apt ile kurulum yapaca\u011f\u0131z.
\nT\u00fcm paketlerin kurulumu i\u00e7in a\u015fa\u011f\u0131daki komutlar\u0131 s\u0131rayla vermelisiniz:<\/p>\n

apt-get install postfix-mysql postfix-tls postfix
\napt-get install libsasl2 libsasl2-dev libsasl2-modules-sql
\napt-get install spamassassin
\napt-get install amavisd-new
\napt-get install clamav clamav-daemon lha arj
\napt-get install unrar zoo nomarch lzop
\napt-get install libsasl2-modules libsasl2-modules-gssapi-heimdal
\napt-get install courier-authdaemon courier-authmysql courier-imap courier-imap-ssl courier-pop-ssl courier-pop
\ntouch \/var\/lib\/amavis\/whitelist_sender
\nchown amavis:amavis \/var\/lib\/amavis\/whitelist_sender
\ntouch \/var\/lib\/amavis\/blacklist_sender
\nchown amavis:amavis \/var\/lib\/amavis\/blacklist_sender<\/p>\n

Mysql :<\/strong> Domain bilgilerimizi mysql database\u2019inde tutacagiz. Bunun avantaji kullanicilarin database\u2019den direk eklenip silinebilmesidir. Boylece sistem icin web arayuzude yazilmasi kolaylasacaktir.<\/p>\n

Postfix :<\/strong> Mail server olarak postfix kullanacagiz.
\nCourier Imap :<\/strong> Imap ve pop3 server olarak kullanacagiz.
\nCyrus Sasl :<\/strong> SMTP Auth yapilabilmesi icin gerekli program.
\nAmavisd-new : <\/strong>Spam ve vir\u00fcs kontrol\u00fc i\u00e7in gerekli program.
\nClamav : <\/strong>Virus program\u0131.
\nSpamassassin : <\/strong>Spam kontrol\u00fc yapan program.<\/p>\n

MySql :
\n<\/strong>Mysql database yaratmak i\u00e7in a\u015fa\u011f\u0131daki komutlar\u0131 verebilirsiniz:
\n
\nCREATE TABLE `users` (
\n`id` varchar(128) NOT NULL default '',
\n`address` varchar(128) NOT NULL default '',
\n`crypt` varchar(128) NOT NULL default '',
\n`clear` varchar(128) NOT NULL default '',
\n`name` varchar(128) NOT NULL default '',
\n`uid` smallint(5) unsigned NOT NULL default '1000',
\n`gid` smallint(5) unsigned NOT NULL default '1000',
\n`home` varchar(128) NOT NULL default '\/',
\n`domain` varchar(128) NOT NULL default '',
\n`maildir` varchar(255) NOT NULL default '',
\n`imapok` tinyint(3) unsigned NOT NULL default '1',
\n`bool1` tinyint(3) unsigned NOT NULL default '1',
\n`bool2` tinyint(3) unsigned NOT NULL default '1',
\n`quota` varchar(10) NOT NULL default '5000',
\nPRIMARY KEY (`id`),
\nUNIQUE KEY `address` (`address`),
\nUNIQUE KEY `id` (`id`),
\nKEY `id_2` (`id`),
\nKEY `address_2` (`address`)
\n) ENGINE=MyISAM;<\/code><\/p>\n

CREATE TABLE `virtual` (
\n`address` varchar(255) NOT NULL default '',
\n`goto` text NOT NULL,
\nUNIQUE KEY `address` (`address`)
\n) ENGINE=MyISAM;<\/code><\/p>\n


\n<\/code><\/code><\/p>\n

CREATE TABLE `transport` (
\n`domain` varchar(128) NOT NULL default '',
\n`transport` varchar(128) NOT NULL default 'virtual:',
\nUNIQUE KEY `domain` (`domain`)
\n) ENGINE=MyISAM;
\n<\/code>
\nTransport taki alanlarin aciklamalari:<\/strong><\/p>\n\n\n\n\n
domain<\/td>\nHost edeceginiz domain adi. \u201cvirtual\u201d ve \u201clocal\u201d olarak host edecekleriniz dahil.<\/td>\n<\/tr>\n
transport<\/td>\nHost edeceginiz domain tipi. Virtual domainler icin \u201cvirtual:\u201d, local kullanicilar icin \u201clocal:\u201d yazabilirsiniz.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n

Virtual daki alanlarin aciklamalari:<\/strong><\/p>\n\n\n\n\n
address<\/td>\nGelen mail adresi<\/td>\n<\/tr>\n
goto<\/td>\nUstteki mail adresinden gelen maillerin yonlendirilecegi adres.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n

Users daki alanlarin aciklamalari:<\/strong><\/p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
id<\/td>\nKullanici adi. user@domain.com<\/a> seklinde<\/td>\n<\/tr>\n
address<\/td>\nKullanici mail adresi. user@domain.com<\/a> seklinde<\/td>\n<\/tr>\n
crypt<\/td>\nSifrenin sifreli (crypted) hali. Eger sifrenin bu sekilde saklanmasini istemiyorsaniz bos birakabilirsiniz. Bu alana mysqlden veri girerken querinizi encrypt(\u2018password\u2019) seklinde verebilirsiniz.<\/td>\n<\/tr>\n
clear<\/td>\nSifrenin acik hali.<\/td>\n<\/tr>\n
name<\/td>\nKullanicinin ismi. Postfix icin gerekli degil. Courier icin kullanacagiz.<\/td>\n<\/tr>\n
uid<\/td>\nvirtual uid<\/td>\n<\/tr>\n
gid<\/td>\nvirtual gid
\nHer domain icin tek gid kullanmanizi tavsiye ederim.<\/td>\n<\/tr>\n
home<\/td>\nMail klasorunuz \u201c\/\u201d veya \u201c\/var\/spool\/postfix\u201d olabilir. A\u015fa\u011f\u0131da “\/var\/spool\/postfix\/virtual” olarak belirledik. Onun i\u00e7in bunu kullanabilirsiniz.<\/td>\n<\/tr>\n
domain<\/td>\nKullanici domain adi.<\/td>\n<\/tr>\n
maildir<\/td>\nKullanicinin maillerinin saklanacagi klasor. Burada tam yolu kullanmanizi tavsiye ederim. Maillerde Maildir yapisini kullanacagimiz icin mutlaka sonraki \/ isaretini koymak gerekmektedir. (\u201cdomain.com\/user\/Maildir\/\u201d seklinde)<\/td>\n<\/tr>\n
imapok<\/td>\nCourier imap ile kullanicilarin maillerine ulasmayi saglayan bir ayar. 1 yaziniz. 0 yazan mailine courier uzerinden ulasamaz.<\/td>\n<\/tr>\n
bool1<\/td>\nUstteki ayar ile ayni<\/td>\n<\/tr>\n
bool2<\/td>\nUstteki ayar ile ayni<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n

Simdi databasedeki tablolari tanitalim.<\/p>\n

Transport: <\/em><\/strong>Bu tablo gelen maillerin domain bilgilerini tutan tablodur. Burada o domain\u2019e ait maillerin virtual mi yoksa sistem uzerinde mi tutulacagi belirlenir.<\/p>\n

Virtual: <\/em><\/strong>Bu tabloda aliases dosyasindakine benzer bir islem yapilmaktadir. Bir adrese gelen maillerin baska bir adrese\/adreslere yonlendirilmesi bu tablodan yapilmaktadir. Mail adresleri arasina \u201c,\u201d konarak bu islem gerceklestirilebilir.<\/p>\n

Users: <\/em><\/strong>Bu tablo sahip oldugumuz tum kullanicilarin tutuldugu tablodur.<\/p>\n

Database ve table\u2019lar yaratildiktan sonra uzerinde arama yapacaginiz alanlardaki indexleri kendiniz ayarlayabilirsiniz.
\nMySql ayarlarimiz burada bitti. Simdi diger programlarin ayarlarina gecelim.<\/p>\n

Postfix<\/strong><\/p>\n

Postfix mail programinin tum ayarlarini main.cf uzerinde yapacagiz daha sonrada 5 adet yeni dosya yaratacagiz.<\/p>\n


\n

#main.cf<\/p>\n

myhostname = anasunucu.domain.com
\nmydomain = anasunucu.domain.com
\nmyorigin = $mydomain
\nmydestination = $myhostname, localhost.localdomain, localhost.localdomain, localhost
\nunknown_local_recipient_reject_code = 550
\nrelay_domains = $mydestination
\nalias_maps = hash:\/etc\/aliases
\nhome_mailbox = Maildir\/<\/p>\n

transport_maps=mysql:\/etc\/postfix\/config\/transport.cf
\nvirtual_mailbox_maps=mysql:\/etc\/postfix\/config\/mysql_virt.cf
\nvirtual_minimum_uid = 50 # Burada sistemdeki postfix kullanicisinin uid'inden kucuk bir say\u0131 verilmelidir
\nvirtual_uid_maps=mysql:\/etc\/postfix\/config\/uids.cf
\nvirtual_gid_maps=mysql:\/etc\/postfix\/config\/gids.cf
\nvirtual_mailbox_base=\/var\/spool\/postfix\/virtual
\nmydestination = $mydomain, $myhostname, $transport_maps
\nvirtual_maps =mysql:\/etc\/postfix\/config\/virtual.cf<\/p>\n

smtpd_sender_restrictions = reject_unknown_sender_domain
\nunverified_recipient_reject_code = 550
\nsmtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,
\nreject_unauth_destination, reject_unknown_recipient_domain, reject_unverified_recipient<\/p>\n

broken_sasl_auth_clients=yes
\nsmtpd_sasl_auth_enable=yes
\nsmtpd_sasl_security_options = noanonymous
\nsmtpd_sasl_local_domain = $myhostname<\/p>\n

<\/code>content_filter = smtp-amavis:[localhost]:10024
\n<\/code><\/p>\n


\n

#master.cf dosyasinda eger yoksa asagidaki satiri eklememiz gerekmektedir<\/p>\n

smtp-amavis unix - - n - 2 lmtp
\n-o lmtp_data_done_timeout=1200
\n-o lmtp_send_xforward_command=yes
\n-o disable_dns_lookups=yes
\n127.0.0.1:10025 inet n - n - - smtpd
\n-o content_filter=
\n-o local_recipient_maps=
\n-o smtpd_helo_restrictions=
\n-o smtpd_client_restrictions=
\n-o smtpd_sender_restrictions=
\n-o smtpd_recipient_restrictions=permit_mynetworks,reject
\n-o mynetworks=127.0.0.0\/8<\/p>\n

<\/code>cyrus unix - n n - - pipe
\nuser=cyrus argv=\/cyrus\/bin\/deliver -e -r ${sender} -m ${extension} ${user}
\n<\/code><\/p>\n


\n

Simdi yeni yaratacagimiz dosyalarin iceriklerini sirayla yazalim:
\nBu dosyalar\u0131 \/etc\/postfix\/config klas\u00f6r\u00fc alt\u0131nda yaratmam\u0131z gerekiyor.
\n
\nmkdir \/etc\/postfix\/config
\nchown postfix:root \/etc\/postfix\/config
\nchmod 750 \/etc\/postfix\/config<\/p>\n

# transport.cf
\nuser=dbuser
\npassword=dbpassword
\ndbname=maildb
\ntable=transport
\nselect_field=transport
\nwhere_field=domain
\nhosts=localhost<\/p>\n

# mysql_virt.cf
\nuser=dbuser
\npassword=dbpassword
\ndbname=maildb
\ntable=users
\nselect_field=maildir
\nwhere_field=address
\nhosts=localhost<\/p>\n

# uids.cf
\nuser=dbuser
\npassword=dbpassword
\ndbname=maildb
\ntable=users
\nselect_field=uid
\nwhere_field=address
\nhosts=localhost<\/p>\n

# gids.cf
\nuser=dbuser
\npassword=dbpassword
\ndbname=maildb
\ntable=users
\nselect_field=gid
\nwhere_field=address
\nhosts=localhost<\/p>\n

<\/code># virtual.cf
\nuser=dbuser
\npassword=dbpassword
\ndbname=maildb
\ntable=virtual
\nselect_field=goto
\nwhere_field=address
\nhosts=localhost
\n<\/code>
\nCourier Imap:<\/strong><\/p>\n

Courier imap programini hem imap hemde pop3 icin kullanabilirsiniz. Ayrica pop3s ve imaps te icinde gelmektedir.<\/p>\n

C ourier imap ayar dosyalar\u0131 \/etc\/courier dizinindedir
\n
\n#authmysqlrc dosyasinda
\nMYSQL_SERVER localhost #mysql server adresi<\/code><\/p>\n

MYSQL_USERNAME user
\nMYSQL_PASSWORD password<\/p>\n

<\/code>MYSQL_SOCKET \/tmp\/mysql.sock #localhosttan calisiyorsaniz bu gerekli
\nMYSQL_DATABASE maildb
\nMYSQL_USER_TABLE users
\nMYSQL_CRYPT_PWFIELD crypt #E\u011fer \u015fifreleri \u015fifreli halde saklayacaksan\u0131z bu b\u00f6l\u00fcm\u00fc kullan\u0131n
\nMYSQL_CLEAR_PWFIELD clear
\nMYSQL_UID_FIELD uid
\nMYSQL_GID_FIELD gid
\nMYSQL_LOGIN_FIELD id
\nMYSQL_HOME_FIELD home
\nMYSQL_NAME_FIELD name
\nMYSQL_MAILDIR_FIELD maildir
\nMYSQL_WHERE_CLAUSE imapok=1 AND bool1=1 AND bool2=1
\n<\/code>
\nCyrus Sasl<\/strong><\/p>\n

Bunun i\u00e7in tek yap\u0131lmas\u0131 gereken ayar, \/etc\/postfix\/sasl\/smtpd.conf diye bir dosya olusturmak ve icine
\n
\npwcheck_method: auxprop
\nauxprop_plugin: sql
\nsql_engine: mysql
\nsasl_mech_list: login plain cram-md5 digest-md5
\nmech_list: plain login cram-md5
\nsql_user: dbuser
\nsql_passwd: dbpassword
\nsql_hostnames: localhost
\nsql_database: maildb
\nsql_select: select clear from users where address='%u@%r'
\n<\/code>
\nYukarida yapilan tum islemlerden sonra mail paketi kurulumumuz tamamlandi.
\nKurulan programlar\u0131n hepsini apt ile kurdu\u011fumuz i\u00e7in debian bunlar\u0131n \u00e7al\u0131\u015ft\u0131rma dosyalar\u0131n\u0131 otomatik olarak a\u00e7\u0131l\u0131\u015fa ekliyor.
\nYinede emin olmak i\u00e7in kontrol etmenizi \u00f6neririm.<\/p>\n

Sistem bu \u015fekilde sorunsuz olarak \u00e7al\u0131\u015facakt\u0131r. E\u011fer herhangi bir \u015fekilde problem olursa sorunun kayna\u011f\u0131n\u0131 bulmak i\u00e7in \/var\/log\/mail.error ve \/var\/log\/mail.info dosyalar\u0131na bakabilirsiniz.<\/p>\n","protected":false},"excerpt":{"rendered":"

Debian \u00dczerinde Postfix Mail Server Kurulum Dokumani (Postfix+Mysql+Courier Imap+SMTP Auth+Spamassassin+Clamav) Hazirlayan : Umut Besler 17.04.2006 Bu dokuman Postfix mail server uzerinde virtual domain olusturarak mail hizmeti vermeyi aciklayacaktir. Kurulum tamamland\u0131\u011f\u0131nda MySQL \u00fczerinden kullan\u0131c\u0131 kontrol\u00fc yapan, gelen emaillere virus ve spam kontrol\u00fc yapan bir sisteme sahip olacaks\u0131n\u0131z. Bu kurulumdan \u00f6nce daha \u00f6nce yazm\u0131\u015f oldu\u011fum postfix d\u00f6k\u00fcman\u0131na bir […]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":16,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"http:\/\/www.umutbesler.com\/wp-json\/wp\/v2\/pages\/42"}],"collection":[{"href":"http:\/\/www.umutbesler.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/www.umutbesler.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/www.umutbesler.com\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.umutbesler.com\/wp-json\/wp\/v2\/comments?post=42"}],"version-history":[{"count":5,"href":"http:\/\/www.umutbesler.com\/wp-json\/wp\/v2\/pages\/42\/revisions"}],"predecessor-version":[{"id":192,"href":"http:\/\/www.umutbesler.com\/wp-json\/wp\/v2\/pages\/42\/revisions\/192"}],"up":[{"embeddable":true,"href":"http:\/\/www.umutbesler.com\/wp-json\/wp\/v2\/pages\/16"}],"wp:attachment":[{"href":"http:\/\/www.umutbesler.com\/wp-json\/wp\/v2\/media?parent=42"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}