CentOS 7 жүйесінде пошта серверін орнату бірнеше жолмен жасалуы мүмкін, бірақ ең көп таралғандардың бірі Postfix және Dovecot тіркесімін пайдалану болып табылады.
Postfix – жіберу бағдарламасы және әлемдегі ең танымал пошта серверлерінің бірі. Dovecot, екінші жағынан, IMAP немесе POP протоколы арқылы электрондық хаттарды қабылдау үшін пайдаланылатын пошта сервері.
Exim – Unix тәрізді операциялық жүйелерде жиі қолданылатын поштаны тасымалдау агенті (MTA). Exim – GNU (General Public License) шарттары бойынша шығарылған тегін бағдарламалық құрал және кіріс электрондық поштаны тексеруге арналған кең мүмкіндіктері бар жан-жақты және икемді электрондық пошта құралы.
Dovecot — Linux/UNIX тәрізді жүйелерге арналған ашық бастапқы IMAP және POP3 пошта сервері. Қауіпсіздік бұл өнімнің икемділік пен жылдамдыққа бағытталған негізгі ірге тасы болды.
Roundcube — IMAP және SMTP арқылы пошта жәшіктерімен жұмыс істеуге мүмкіндік беретін веб негізіндегі электрондық пошта интерфейсі. Қолданбаның қуатты функционалдығы бар және мүмкіндіктері бойынша Outlook Express немесе Mozilla Thunderbird сияқты жұмыс үстелі электрондық пошта клиенттерімен салыстыруға болады.
Біз виртуалды серверге SSH арқылы кіреміз.
Содан кейін жүйені жаңарту керек, пәрменді енгізіңіз:
# sudo yum update -y
Жүйені жаңартқаннан кейін келесі хабарлама пайда болады.
Apache бағдарламасын виртуалды серверге орнату үшін пәрменді енгізіңіз:
# sudo yum install httpd -y
Орнатқаннан кейін Apache іске қосыңыз:
# sudo systemctl start httpd.service
Осыдан кейін http://ServerIP/
мекенжайына өтіп, Apache жұмысын тексеріңіз
Егер бәрі дұрыс жұмыс істесе, виртуалды серверде Apache-ді автоқосу пәрменін енгізіңіз:
# sudo systemctl enable httpd.service
Жүктеп алу үшін пәрменді пайдаланыңыз:
# sudo yum install mariadb-server mariadb -y
Жүктеп алу және орнату аяқталғаннан кейін MariaDB іске қосу керек:
# sudo systemctl start mariadb
Қауіпті параметрлерді жойатын қауіпсіз орнату сценарийін іске қосыңыз:
# sudo mysql_secure_installation
Түбірлік құпия сөзді енгізіңіз, себебі сіз дерекқорды жаңадан жасағансыз, ол әдепкі бойынша бос. Содан кейін параметрлермен келісіп, барлық жерде « Y
» енгізіңіз. Жаңа құпия сөзді енгізіңіз, оны растаңыз және « Y
» өзгерістерімен қайтадан келісіңіз.
MariaDB орнатылған.
PHP орнату үшін пәрменді енгізіңіз:
# sudo yum install php php-mysql -y
Әрі қарай, PHP-мен жұмыс істей алатындай етіп Apache қайта іске қосыңыз:
# sudo systemctl restart httpd.service
PHP-ді тексеру үшін мына пәрменді пайдаланып, index.php сияқты файлды жасау керек:
# echo "<?php phpinfo(); ?>" > /var/www/html/index.php
Енді браузерде сілтемені ашыңыз - http://ServerIP/index.php
Сіз PHP параметрлері бар бетті көресіз.
Әрі қарай, PHP-де MariaDB-ге қолдау көрсету үшін буманы орнату керек:
# 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
Осыдан кейін Apache бағдарламасын қайта іске қосыңыз:
# sudo systemctl restart httpd.service
Дайын. Сіз виртуалды серверге Apache, MySQL және PHP орнаттыңыз.
Қосымша репозиторийлерді қосу
Барлық құрамдастарды орнату үшін қосымша репозиторийді қосу керек.
# sudo yum install epel-release
Тізбектің барлық құрамдас бөліктері арасында байланыс құру үшін бір мәліметтер қорын пайдалану қажет. MySQL серверіне қосылайық:
# mysql -u root -p
Деректер базасын жасаңыз, сіз өзіңіздің құпия сөзіңізді көрсетуіңіз керек:
CREATE DATABASE vexim; GRANT ALL ON vexim.* to vexim@localhost identified by 'password'; quit
Барлық PHP модульдері орнатылмаған жағдайда, қосымша орнату қажет.
# yum -y install php-imap php-mbstring php-pdo php-mysql php-cli
Postfixadmin жүктеп алып, оны /var/www/html/postfixadmin
қалтасына орнатыңыз
# 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
конфигурация файлын өңдеңіз:
# yum -y install dovecot dovecot-mysql
Қажет болса, қайта оралу үшін стандартты конфигурацияның атын өзгертейік:
# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-orig # vi /etc/dovecot/dovecot.conf
Келесі жазбаларды dovecot.conf:
## 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 }
Для настройки доступа к база данных, создаем отделный конфиг dovecot-mysql.conf
# vi /etc/dovecot/dovecot-mysql.conf
и прописываем в него следующие настройки:
## 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
Сақтық көшірмені сақтай отырып, стандартты конфигурацияны өзгертеміз.
###################################################################### # 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 жойылуда
# alternatives --config mta # systemctl disable postfix # systemctl stop postfix # yum -y remove postfix
http://server_ip/postfixadmin/setup.php
сілтемесін орындаңыз және орнату нұсқауларын орындаңыз. Superadmin жасағаннан кейін орнатушы сізге пароль хэш кодын береді:
Оны мына жолдың орнына config.inc.php
файлында (postfixadmin каталогының түбірінде) ауыстыру қажет:
Әрі қарай, жасалған деректерді пайдаланып жүйеге кіру керек, қажетті домендер мен пошта жәшіктерін қосыңыз.
Roundcube орнату
# yum -y install roundcubemail
Орнатқаннан кейін, сценарий http://server_ip/roundcubemail/
мекенжайында ашылатындай етіп конфигурацияны веб-серверге қосу керек.
# vi /etc/httpd/conf.d/roundcubemail.conf
Біз келесі деректерді сақтаймыз:
# # 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>
Жазудан кейін Apache-ді қайта іске қосу керек:
# systemctl restart httpd.service
Әрі қарай орнату үшін біз деректер базасын жасаймыз, ол үшін MySQL-ге қосыламыз:
# mysql -u root -p
және біз сұрауларды орындаймыз (біз өз деректерімізді береміз):
CREATE DATABASE roundcubedb; CREATE USER roundcubeuser@localhost IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES on roundcubedb.* to roundcubeuser@localhost ; FLUSH PRIVILEGES; quit
Содан кейін http://server_ip/roundcubemail/installer
орнатушысын ашып, оны конфигурациялау керек.
Бұл орнатуды аяқтайды, Roundcube http://server_ip/roundcubemail/
өтіңіз, бұрын жасалған (Postfixadmin жүйесінде) пошта жәшігін пайдаланып жүйеге кіріңіз, параметрлерді жасаңыз және оны пайдаланыңыз.