CentOS 7'ye bir posta sunucusu kurmak çeşitli şekillerde yapılabilir, ancak en yaygın olanlardan biri Postfix ve Dovecot'un bir kombinasyonunu kullanmaktır.
Postfix bir gönderici yazılımıdır ve dünyadaki en popüler posta sunucularından biridir. Dovecot ise IMAP veya POP protokolünü kullanarak e-posta almak için kullanılan bir posta sunucusudur.
Exim, Unix benzeri işletim sistemlerinde yaygın olarak kullanılan bir posta aktarım aracıdır (MTA). Exim, GNU (Genel Kamu Lisansı) koşulları altında dağıtılan ücretsiz bir yazılımdır ve gelen e-postaları kontrol etmek için kapsamlı özelliklere sahip çok yönlü ve esnek bir e-posta aracıdır.
Dovecot, Linux/UNIX benzeri sistemler için açık kaynaklı bir IMAP ve POP3 posta sunucusudur. Güvenlik, bu ürünün esneklik ve hıza odaklanmasının temel taşı olmuştur.
Roundcube, IMAP ve SMTP kullanarak posta kutularınızla çalışma olanağı sağlayan web tabanlı bir e-posta arayüzüdür. Uygulama güçlü işlevselliğe sahiptir ve Outlook Express veya Mozilla Thunderbird gibi masaüstü e-posta istemcileriyle karşılaştırılabilir.
Sanal sunucunuza SSH üzerinden giriş yapın.
Daha sonra sistemi güncellemeniz gerekiyor, komutu girin:
# sudo yum update -y
Sistemi güncelledikten sonra aşağıdaki gibi bir mesaj görünecektir.
Apache'yi sanal sunucunuza kurmak için komutu girin:
# sudo yum install httpd -y
Kurulumdan sonra Apache'yi başlatın:
# sudo systemctl start httpd.service
Bundan sonra, - http://ServerIP/
adresine gidin ve Apache'nin düzgün çalışıp çalışmadığını kontrol edin
Her şey doğru çalışıyorsa, Apache'yi sanal sunucuda otomatik çalıştırmak için komutu girin:
# sudo systemctl enable httpd.service
İndirmek için şu komutu kullanın:
# sudo yum install mariadb-server mariadb -y
İndirme ve yükleme tamamlandıktan sonra MariaDB'yi çalıştırmanız gerekir:
# sudo systemctl start mariadb
Güvensiz ayarları kaldıracak olan güvenli kurulum betiğini çalıştırın:
# sudo mysql_secure_installation
Kök parolasını girin, veritabanını yeni oluşturduğunuz için varsayılan olarak boştur. Daha sonra ayarları kabul edin, her yere"Y
" girin. Yeni bir parola girin, onaylayın ve tekrar"Y
" değişikliklerini kabul edin.
MariaDB şimdi yüklendi.
PHP'yi kurmak için şu komutu girin:
# sudo yum install php php-mysql -y
Ardından, PHP'yi çalıştırabilmesi için Apache'yi yeniden başlatın:
# sudo systemctl restart httpd.service
PHP'nin nasıl çalıştığını test etmek için, bu komutu kullanarak index.php gibi bir dosya oluşturmanız gerekir:
# echo "<?php phpinfo(); ?>" > /var/www/html/index.php
Şimdi bağlantıyı tarayıcınızda açın - http://ServerIP/index.php
PHP parametrelerini içeren bir sayfa görmelisiniz.
Daha sonra PHP'de MariaDB'yi desteklemek için paketi yüklemeniz gerekir:
# sudo yum -y install php-mysql php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel
Bundan sonra Apache'yi yeniden başlatın:
# sudo systemctl restart httpd.service
Bitti. Sanal sunucuya Apache, MySQL ve PHP yüklediniz.
Ek depoları bağlama
Tüm bileşenleri yüklemek için ek bir depo bağlamanız gerekecektir.
# sudo yum install epel-release
Zincirin tüm bileşenleri arasında bir bağlantı oluşturmak için tek bir veritabanı kullanmak gerekir. MySQL sunucusuna bağlanın:
# mysql -u root -p
Bir veritabanı oluşturun, kendi şifrenizi belirlemelisiniz:
CREATE DATABASE vexim;
GRANT ALL ON vexim.* to vexim@localhost identified by 'password';
quit
Tüm PHP modüllerinin kurulu olmaması durumunda, ek bir kurulum gereklidir.
# yum -y install php-imap php-mbstring php-pdo php-mysql php-cli
Postfixadmin'i indirin ve /var/www/html/postfixadmin
klasörüne kurun.
# wget http://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-3.0/postfixadmin-3.0.tar.gz
# tar xpf postfixadmin-3.0.tar.gz
# mv postfixadmin-3.0 /var/www/html/postfixadmin
# chown -R apache:apache /var/www/html/postfixadmin
# rm postfixadmin-3.0.tar.gz
# cd /var/www/html/postfixadmin > # vi config.inc.php
config .inc.php
yapılandırma dosyasını düzenleyin:
# yum -y install dovecot dovecot-mysql
Gerekirse geri dönebilmemiz için varsayılan yapılandırmayı yeniden adlandırın:
# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-orig
# vi /etc/dovecot/dovecot.conf
Aşağıdaki girdileri dovecot.conf
yapılandırma dosyasına kaydedin:
## Dovecot configuration file
base_dir = /var/run/dovecot/
auth_default_realm = site.com
auth_mechanisms = plain login cram-md5
protocols = imap pop3
listen = *
disable_plaintext_auth = no
dotlock_use_excl = yes
first_valid_gid = 5
first_valid_uid = 25
mail_location = maildir:/var/vmail/%d/%u
mail_privileged_group = mail
passdb {
args = /etc/dovecot/dovecot-mysql.conf
driver = sql
}
service auth {
unix_listener auth-client {
group = exim
mode = 0660
user = exim
}
unix_listener auth-master {
group = exim
mode = 0600
user = exim
}
user = root
}
ssl = no
userdb {
args = /etc/dovecot/dovecot-mysql.conf
driver = sql
}
verbose_proctitle = yes
protocol imap {
imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
}
protocol pop3 {
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
pop3_uidl_format = %08Xu%08Xv
}
protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
postmaster_address = info@site.com
}
Veritabanı erişimini yapılandırmak için ayrı bir dovecot-mysql.conf
yapılandırma dosyası oluşturun
# vi /etc/dovecot/dovecot-mysql.conf
ve aşağıdaki ayarları içine yerleştirin:
## Dovecot database configuration
driver = mysql
connect = host=localhost dbname=vexim user=vexim password=password
default_pass_scheme = CRAM-MD5
password_query = SELECT `username` as `user`, `password` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
user_query = SELECT 93 AS `uid`, 93 AS `gid` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
# yum -y install exim exim-mysql cyrus-sasl
# mv /etc/exim/exim.conf /etc/exim/exim.conf-orig
# vi /etc/exim/exim.conf
Yedek bir kopya tutarken varsayılan yapılandırmayı değiştirin.
######################################################################
# MAIN CONFIGURATION SETTINGS #
######################################################################
primary_hostname = mail.site.com
hide mysql_servers = localhost/vexim/vexim/password
domainlist local_domains = ${lookup mysql{SELECT `domain`
FROM `domain` WHERE
`domain`='${quote_mysql:$domain}' AND
`active`='1'}}
domainlist relay_to_domains = ${lookup mysql{SELECT `domain`
FROM `domain` WHERE
`domain`='${quote_mysql:$domain}' AND
`active`='1'}}
hostlist relay_from_hosts = localhost:127.0.0.0/8:192.168.1.0/24
auth_advertise_hosts = *
acl_not_smtp = acl_not_smtp
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
qualify_domain = site.com
qualify_recipient = site.com
allow_domain_literals = true
exim_user = exim
exim_group = exim
never_users = root
rfc1413_query_timeout = 0s
sender_unqualified_hosts = +relay_from_hosts
recipient_unqualified_hosts = +relay_from_hosts
ignore_bounce_errors_after = 45m
timeout_frozen_after = 15d
helo_accept_junk_hosts = 192.168.1.0/24
auto_thaw = 1h
smtp_banner = "$primary_hostname, ESMTP EXIM $version_number"
smtp_accept_max = 50
smtp_accept_max_per_connection = 25
smtp_connect_backlog = 30
smtp_accept_max_per_host = 20
split_spool_directory = true
remote_max_parallel = 15
return_size_limit = 70k
message_size_limit = 64M
helo_allow_chars = _
smtp_enforce_sync = true
log_selector =
+all_parents
+connection_reject
+incoming_interface
+lost_incoming_connection
+received_sender
+received_recipients
+smtp_confirmation
+smtp_syntax_error
+smtp_protocol_error
-queue_run
syslog_timestamp = no
######################################################################
# ACL CONFIGURATION #
# Specifies access control lists for incoming SMTP mail #
######################################################################
begin acl
acl_not_smtp:
deny message = Sender rate overlimit - $sender_rate / $sender_rate_period
ratelimit = 50 / 1h / strict
accept
acl_check_rcpt:
deny message = "Lookup failed"
condition = ${if eq{$host_lookup_failed}{1}}
accept hosts = :
deny message = "incorrect symbol in address"
domains = +local_domains
local_parts = ^[.] : ^.*[@%!/|]
deny message = "incorrect symbol in address"
domains = !+local_domains
local_parts = ^[./|] : ^.*[@%!] : ^.*/\.\./
accept local_parts = postmaster
domains = +local_domains
deny message = "HELO/EHLO required by SMTP RFC"
condition = ${if eq{$sender_helo_name}{}{yes}{no}}
accept authenticated = *
deny condition = ${if eq{$sender_helo_name}
{$interface_address}{yes}{no}}
hosts = !127.0.0.1 : !localhost : *
message = "My IP in your HELO! Access denied!"
deny condition = ${if match{$sender_helo_name}
{N^d+$N}{yes}{no}}
hosts = !127.0.0.1 : !localhost : *
message = "Incorrect HELO string"
warn
set acl_m0 = 30s
warn
hosts = +relay_from_hosts:4.3.2.1/32:192.168.1.0/24 #disable waits for 'friendly' hosts
set acl_m0 = 0s
warn
logwrite = Delay $acl_m0 for $sender_host_name
[$sender_host_address] with HELO=$sender_helo_name. Mail
from $sender_address to $local_part@$domain.
delay = $acl_m0
accept domains = +local_domains
endpass
message = "No such user"
verify = recipient
accept domains = +relay_to_domains
endpass
message = "i don't know how to relay to this address"
verify = recipient
deny message = "you in blacklist - $dnslist_domain n $dnslist_text"
dnslists = opm.blitzed.org :
cbl.abuseat.org :
bl.csma.biz
accept hosts = +relay_from_hosts
deny message = "Homo hominus lupus est"
acl_check_dаta:
deny malware = */defer_ok
message = "Your message contains viruses: $malware_name"
accept
######################################################################
# ROUTERS CONFIGURATION #
# Specifies how addresses are handled #
######################################################################
# THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT! #
# An address is passed to each router in turn until it is accepted. #
######################################################################
begin routers
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
no_more
system_aliases:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE
`address`='${quote_mysql:$local_part@$domain}' OR
`address`='${quote_mysql:@$domain}'}}
dovecot_user:
driver = accept
condition = ${lookup mysql{SELECT `goto` FROM
`alias` WHERE
`address`='${quote_mysql:$local_part@$domain}' OR
`address`='${quote_mysql:@$domain}'}{yes}{no}}
transport = dovecot_delivery
######################################################################
# TRANSPORTS CONFIGURATION #
######################################################################
# ORDER DOES NOT MATTER #
# Only one appropriate transport is called for each delivery. #
######################################################################
begin transports
remote_smtp:
driver = smtp
dovecot_delivery:
driver = pipe
command = /usr/libexec/dovecot/deliver -d $local_part@$domain
message_prefix =
message_suffix =
delivery_date_add
envelope_to_add
return_path_add
log_output
user = exim
address_pipe:
driver = pipe
return_output
address_reply:
driver = autoreply
######################################################################
# RETRY CONFIGURATION #
######################################################################
begin retry
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h
######################################################################
# REWRITE CONFIGURATION #
######################################################################
begin rewrite
######################################################################
# AUTHENTICATION CONFIGURATION #
######################################################################
begin authenticators
auth_plain:
driver = dovecot
public_name = PLAIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
auth_login:
driver = dovecot
public_name = LOGIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
auth_cram_md5:
driver = dovecot
public_name = CRAM-MD5
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
Postfix'i Kaldırma
# alternatives --config mta
# systemctl disable postfix
# systemctl stop postfix
# yum -y remove postfix
http://server_ip/postfixadmin/setup.php
adresine gidin ve kurulum talimatlarını izleyin. Superadmin'i oluşturduktan sonra, yükleyici size bir parola karma kodu verecektir:
Bu satır yerine config.inc.php
dosyasında (postfixadmin dizininin kök dizininde) değiştirilmelidir:
Ardından, oluşturulan veriler altında oturum açmanız, gerekli etki alanlarını ve posta kutularını eklemeniz gerekir.
Roundcube kurulumu
# yum -y install roundcubemail
Kurulumdan sonra yapılandırmayı web sunucusuna eklemeniz gerekir, böylece komut dosyası http://server_ip/roundcubemail/
adresinde açılır.
# vi /etc/httpd/conf.d/roundcubemail.conf
Aşağıdaki verileri kaydedin:
#
# Round Cube Webmail is a browser-based multilingual IMAP client
#
Alias /roundcubemail /usr/share/roundcubemail
Alias /webmail /usr/share/roundcubemail
<Directory /usr/share/roundcubemail/>
Options none
AllowOverride Limit
Require all granted
</Directory>
<Directory /usr/share/roundcubemail/installer>
Options none
AllowOverride Limit
Require all granted
</Directory>
# Those directories should not be viewed by Web clients.
<Directory /usr/share/roundcubemail/bin/>
Order Allow,Deny
Deny from all
</Directory>
<Directory /usr/share/roundcubemail/plugins/enigma/home/>
Order Allow,Deny
Deny from all
</Directory>
Yazma işleminden sonra Apache yeniden başlatılmalıdır:
# systemctl restart httpd.service
Daha fazla kurulum için bir veritabanı oluşturun, bu amaçla MySQL'e bağlanın:
# mysql -u root -p
ve sorguları çalıştırın (kendi verilerinizi belirtin):
CREATE DATABASE roundcubedb;
CREATE USER roundcubeuser@localhost IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES on roundcubedb.* to roundcubeuser@localhost ;
FLUSH PRIVILEGES;
quit
Daha sonra http://server_ip/roundcubemail/installer
yükleyicisini açmanız ve yapılandırmanız gerekir.
Bu yapılandırmayı tamamlar, Roundcube http://server_ip/roundcubemail/
adresine gidin, önceden oluşturulmuş (Postfixadmin'de) kutu altında oturum açın, ayarları yapın ve kullanın.