makaleler / Debian / Ubuntu / Pardus / Mail, EPosta Server Kurulumu Postfix 2.6 versiyonu

Mail, EPosta Server Kurulumu Postfix 2.6 versiyonu

28.12.2012 11:03:25

Mail server nasıl kurulur? Yazımızı Okuyun.

Merhaba,

Bu yazımızda linux sistemler üzerine mail server kurulumunu anlatacağım.

Test Ortamı...
1-) Virtual Box
2-) İşletim Sistemi : Linux
3-) Dağıtım: Debian Squeeze
4-) Veritabanı: Mysql
5-) Web Sunucu Apache php
6-) DNS server bind
7-) Mail server postfix
8-) Örnek domain

Modem den ve sunucudan açılacak portlar Türk Telekomdan da ayriyetten 25 portu açtırılacak.
a-) DNS için - 53
b-) SMTP için - 25
c-) SMTP Türkiyeden bağlantı için 587
d-) Pop 3 Gelen mailleri çekmek için 110
e-) Web Arayüzü erişimi için 80

Kurulum
Debian Squeeze, Bind kurulumlarını tamamladığınızı varsayıyoruz tamamlamadıysanız bu kurulumlar sitemizde mevcuttur.

Postfix Sunucu
Kuruluma başlamadan önce güncellemelerimiz varsa alalım.
aptitude update && aptitude full-upgrade

Kurulacak Paketler
aptitude install apache2 libapache2-mod-php5 php5-cli php5-common php5-cgi
aptitude install mysql-server phpmyadmin
aptitude install postfix-mysql postfix-tls postfix
aptitude install libsasl2 libsasl2-dev libsasl2-modules-sql
aptitude install spamassassin
aptitude install amavisd-new
aptitude install clamav clamav-daemon lha arj
aptitude install unrar zoo nomarch lzop
aptitude install libsasl2-modules libsasl2-modules-gssapi-heimdal
aptitude install courier-authdaemon courier-authmysql courier-imap courier-imap-ssl courier-pop-ssl courier-pop courier-authlib-mysql
touch /var/lib/amavis/whitelist_sender
chown amavis:amavis /var/lib/amavis/whitelist_sender
touch /var/lib/amavis/blacklist_sender
chown amavis:amavis /var/lib/amavis/blacklist_sender

Mysql: Domain Bilgileri ve Kullanıcı Mail bilgilerini Tutmak için. Avantajı ise kullanıcıların db den direkt eklenip silinmesi için. Web arayüzünün hazırlanmasını daha kolaylaştıracaktır.
Postfix: Mail server
Courier Imap: Imap ve pop3 server
Cyrus Sasl: SMTP Auth yapilabilmesi icin gerekli program.
Amavisd-new: Spam ve virüs kontrolü
Clamav: Virus programı.
Spamassassin: Spam kontrolü yapan program.

Database İşlemleri
# Yeni bir database olsun
CREATE DATABASE  `mail_sunucu` DEFAULT CHARACTER SET utf8 COLLATE utf8_turkish_ci;


# Tablolar
CREATE EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `address` varchar(128) COLLATE utf8_turkish_ci NOT NULL DEFAULT '',
  `crypt` varchar(128) COLLATE utf8_turkish_ci NOT NULL DEFAULT '',
  `clear` varchar(128) COLLATE utf8_turkish_ci NOT NULL DEFAULT '',
  `name` varchar(128) COLLATE utf8_turkish_ci NOT NULL DEFAULT '',
  `uid` smallint(5) unsigned NOT NULL DEFAULT '1000',
  `gid` smallint(5) unsigned NOT NULL DEFAULT '1000',
  `home` varchar(128) COLLATE utf8_turkish_ci NOT NULL DEFAULT '/',
  `domain` varchar(128) COLLATE utf8_turkish_ci NOT NULL DEFAULT '',
  `maildir` varchar(255) COLLATE utf8_turkish_ci NOT NULL DEFAULT '',
  `imapok` tinyint(3) unsigned NOT NULL DEFAULT '1',
  `bool1` tinyint(3) unsigned NOT NULL DEFAULT '1',
  `bool2` tinyint(3) unsigned NOT NULL DEFAULT '1',
  `quota` varchar(100) COLLATE utf8_turkish_ci NOT NULL DEFAULT '5000',
  `SILINDI` varchar(1) COLLATE utf8_turkish_ci NOT NULL DEFAULT 'F',
  PRIMARY KEY (`id`),
  UNIQUE KEY `address` (`address`),
  UNIQUE KEY `id` (`id`),
  KEY `id_2` (`id`),
  KEY `address_2` (`address`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=1;

CREATE TABLE `virtual` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `address` varchar(255) COLLATE utf8_turkish_ci NOT NULL DEFAULT '',
  `goto` text COLLATE utf8_turkish_ci NOT NULL,
  `SILINDI` varchar(1) COLLATE utf8_turkish_ci NOT NULL DEFAULT 'F',
  PRIMARY KEY (`id`),
  UNIQUE KEY `ADDRESS` (`address`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=1 ;

CREATE TABLE `transport` (
`domain` varchar(128) NOT NULL default '',
`transport` varchar(128) NOT NULL default 'virtual:',
UNIQUE KEY `domain` (`domain`)
) ENGINE=MyISAM;

INSERT INTO `users` (`id`, `address`, `crypt`, `clear`, `name`, `uid`, `gid`, `home`, `domain`, `maildir`, `imapok`, `bool1`, `bool2`, `quota`, `SILINDI`) VALUES
('1', 'huseyin@example.com', encrypt('123456'), '123456', 'Huseyin', 5000, 5000, '/var/spool/postfix/virtual', 'example.com', 'example.com/huseyin/', 1, 1, 1, '51200000', 'F');

INSERT INTO `virtual` (`id`, `address`, `goto`, `SILINDI`) VALUES
('1', 'root@example.com', 'huseyin@example.com', 'F'),
('2', '@example.com', 'huseyin@example.com', 'F');

INSERT INTO `transport` (`domain`, `transport`) VALUES
('example.com', 'virtual:');


Transport Tablosu: Bu tablo gelen epostaların domain bilgilerini tutar. Burada o domain’e ait epostaların virtual mi yoksa sistem üzerinde mi tutulacağı belirlenir.
Transport Tablosu Alanları
domain: Host edilecek domain adi. “virtual” ve “local” olarak host edecekleriniz dahil.
transport: Host edilecek domain tipi. Virtual domainler için “virtual:”, local kullanıcılar için “local:” yazılabilir.

Virtual Tablosu: Bir e-posta adresine gelen e postaların başka bir eposta adrese yada adreslere yönlendirilmesi bu tablodan yapılır. Eposta adresleri arasına “,” konarak bu işlem yapılabilir.
Virtual Tablosu Alanları
address: Gelen mail adresi
goto: Üstteki mail adresinden gelen maillerin yönlendirileceği adres.

Users Tablosu: Kullanıcıların yer aldığı tablodur.
Users Tablosu Alanları
id: Kullanıcı Adı örnek user@xxx.com
address: Kullanıcı e-mail adresi. user@xxx.com şeklinde
crypt: Şifre kısmının şifreli (crypted) edilmiş hali. Şifrenin bu şekilde saklanmasını istemiyorsanız boş bırakın. Bu alana MYSQL'den veri girerken querynizi encrypt fonksiyonuyla gönderin. encrypt(‘password’) gibi.
clear: Şifrenin yalın hali
name: Kullanicinin ismi. Postfix icin gerekli degil. Courier icin kullanacagiz.
uid: virtual uid
gid: virtual gid Farklı mail adresi içn için tek gid kullanmalıyız.
home: Mail klasorü “/var/spool/postfix/virtual” olabilir.
domain: Kullanıcı domain adı.
maildir: Kullanıcı maillerinin saklanacağı klasör. Burada tam yolu kullanmalıyız. örnek. (“example.com/huseyin/” seklinde)
imapok: Courier imap ile kendi hesabına ulaşımı sağlar. 1 yada 0 değeri alır 1 aktifdir 0 pasif.
bool1: 1 yada 0 biz 1 veriyoruz
bool2: 1 yada 0 biz 1 veriyoruz
quota: Kotayı verir.

Postfix Ayarları
vim /etc/postfix/main.cf
	# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
	# information on enabling SSL in the smtp client.
	#myhostname = boran
	myhostname = mail.otomobilkasko.com
	mydomain = otomobilkasko.com
	myorigin = $mydomain
	alias_maps = hash:/etc/aliases
	alias_database = hash:/etc/aliases
	#mydestination = boran, localhost.localdomain, , localhost
	mydestination = $myhostname, localhost.BORAN, localhost.localdomain, localhost
	unknown_local_recipient_reject_code = 550
	relayhost =
	relay_domains = mysql:/etc/postfix/config/relay_domains.cf
	home_mailbox = Maildir/
	#mynetworks = 127.0.0.0/8 192.168.2.0/24
	mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
	#proxy_interfaces = 85.105.196.73
	mailbox_command = procmail -a "$EXTENSION"
	#mailbox_size_limit = 0
	recipient_delimiter = +
	inet_interfaces = all
	transport_maps = mysql:/etc/postfix/config/transport.cf
	virtual_mailbox_maps = mysql:/etc/postfix/config/mysql_virt.cf
	virtual_mailbox_limit = 51200000
	virtual_minimum_uid = 100
	virtual_transport = virtual
	virtual_create_maildirsize = yes
	virtual_mailbox_extended = yes
	virtual_mailbox_limit_maps = mysql:/etc/postfix/config/mysql_virt_limit.cf
	virtual_mailbox_limit_override = yes
	virtual_maildir_limit_message = Uzgunuz e posta kutunuz dolmustur.
	virtual_overquota_bounce = yes
	# Yonlendirme yapilan mailler cift cift gitmemesi icin no diyoruz
	enable_original_recipient = No
	# Burada sistemdeki postfix kullanicisinin uid'inden kucuk bir sayı verilmelidir
	virtual_uid_maps = mysql:/etc/postfix/config/uids.cf
	virtual_gid_maps = mysql:/etc/postfix/config/gids.cf
	virtual_mailbox_base=/var/spool/postfix/virtual
	mydestination = $mydomain, $myhostname, $transport_maps
	virtual_maps = mysql:/etc/postfix/config/virtual.cf
	smtpd_sender_restrictions = reject_unknown_sender_domain
	unverified_recipient_reject_code = 550
	smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_unknown_recipient_domain, reject_unverified_recipient
	### SASL ###
	broken_sasl_auth_clients = yes
	smtpd_sasl_auth_enable = yes
	smtpd_sasl_security_options = noanonymous
	smtpd_sasl_local_domain = $myhostname
	content_filter = smtp-amavis:[localhost]:10024


vim /etc/postfix/master.cf
	smtp    inet    n       -       n       -       -       smtpd
	587     inet    n       -       n       -       -       smtpd

	smtp-amavis unix - - n - 2 lmtp
	  -o lmtp_data_done_timeout=1200
	  -o lmtp_send_xforward_command=yes
	  -o disable_dns_lookups=yes
	127.0.0.1:10025 inet n - n - - smtpd
	  -o content_filter=
	  -o local_recipient_maps=
	  -o smtpd_helo_restrictions=
	  -o smtpd_client_restrictions=
	  -o smtpd_sender_restrictions=
	  -o smtpd_recipient_restrictions=permit_mynetworks,reject
	  -o mynetworks=127.0.0.0/8

	cyrus unix - n n - - pipe
	  user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}


mkdir /etc/postfix/config/

vim /etc/postfix/config/transport.cf
	user=root
	password=root
	dbname=mail_sunucu
	table=transport
	select_field=transport
	where_field=domain
	hosts=127.0.0.1


vim /etc/postfix/config/mysql_virt.cf
	user=root
	password=root
	dbname=mail_sunucu
	table=users
	select_field=maildir
	where_field=address
	hosts=127.0.0.1


vim /etc/postfix/config/uids.cf
	user=root
	password=root
	dbname=mail_sunucu
	table=users
	select_field=uid
	where_field=address
	hosts=127.0.0.1


vim /etc/postfix/config/gids.cf
	user=root
	password=root
	dbname=mail_sunucu
	table=users
	select_field=gid
	where_field=address
	hosts=127.0.0.1


vim /etc/postfix/config/virtual.cf
	user=root
	password=root
	dbname=mail_sunucu
	table=virtual
	select_field=goto
	where_field=address
	additional_conditions = and SILINDI = 'F'
	hosts=127.0.0.1


vim /etc/postfix/config/mysql_virt_limit.cf
	user = root
	password = root
	dbname = mail_sunucu
	table = users
	select_field = quota
	where_field = address
	hosts = 127.0.0.1


vim /etc/postfix/config/relay_domains.cf
	user = root
	password = root
	hosts = 127.0.0.1
	dbname = mail_sunucu
	# query = SELECT domain FROM domain WHERE domain='%s' and backupmx = true
	query = SELECT domain FROM transport WHERE domain='%s'


IMAP Ayarları
vim /etc/courier/authmysqlrc
	MYSQL_SERVER	localhost  #your mysql server
	MYSQL_USERNAME	uname
	MYSQL_PASSWORD	passwd
	MYSQL_SOCKET	/tmp/mysql.sock  #necessary if you are on localhost
	MYSQL_DATABASE	maildb
	MYSQL_USER_TABLE	users
	MYSQL_CRYPT_PWFIELD	crypt
	MYSQL_CLEAR_PWFIELD	clear
	MYSQL_UID_FIELD	uid
	MYSQL_GID_FIELD	gid
	#MYSQL_LOGIN_FIELD	id
	MYSQL_LOGIN_FIELD	address
	MYSQL_HOME_FIELD	home
	MYSQL_NAME_FIELD	name
	MYSQL_MAILDIR_FIELD	maildir
	MYSQL_WHERE_CLAUSE	imapok=1 AND bool1=1 AND bool2=1 AND SILINDI='F'


vim /etc/courier/authdaemonrc
	authmodulelist="authpam	authmysql"


Cyrus Sasl
vim /etc/postfix/sasl/smtpd.conf
	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: root
	sql_passwd: root
	sql_hostnames: 127.0.0.1
	sql_database: mail_sunucu
	sql_select: select clear from users where address='%u@%r'


Mail Box için klasör oluşturma
cd /var/spool/postfix
mkdir virtual
chown postfix:postfix virtual
cd virtual
mkdir example.com
chown postfix:postfix example.com
chmod 0775 example.com
cd example.com
mkdir huseyin
chmod 0770 huseyin
chown 5000:5000 huseyin


telnet test
telnet localhost 25
ehlo example.com
250-my-new-mailserver
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

mail from:<steve@example.com>
250 2.1.0 Ok

rcpt to:<john@example.com>
250 2.1.5 Ok

data

354 End data with <CR><LF>.<CR><LF>

Hi John,

just wanted to drop you a note.
.

250 2.0.0 Ok: queued as A9D64379C4

quit


Spamassassin Servisini açalım.
vim /etc/default/spamassassin
	ENABLED=1
	CRON=2


Bu yazı eski versiyon üzerinde yazıldığı için yazımızın güncel hali için tıklayınız. /makale.py?tid=224
yazar husonet

Yorumlar

Bu içerik için sizde yorum yapabilirsiniz!
anasayfa | makaleler | haberler | dosyalar | linkler | hakkımızda