Installation af en mailserver på CentOS 7 kan gøres på flere måder, men en af de mest almindelige er at bruge en kombination af Postfix og Dovecot.
Postfix er en afsender-software og er en af de mest populære mailservere i verden. Dovecot er på den anden side en mailserver, der bruges til at hente e-mail ved hjælp af IMAP- eller POP-protokollen.
Exim er en mail transfer agent (MTA), der ofte bruges i Unix-lignende operativsystemer. Exim er freeware, der distribueres i henhold til GNU (General Public Licence) og er et alsidigt og fleksibelt e-mail-værktøj med omfattende funktioner til kontrol af indgående e-mail.
Dovecot er en open source IMAP- og POP3-mailserver til Linux/UNIX-lignende systemer. Sikkerhed har været hjørnestenen i dette produkts fokus på fleksibilitet og hastighed.
Roundcube er en webbaseret e-mail-grænseflade, der giver mulighed for at arbejde med dine postkasser ved hjælp af IMAP og SMTP. Programmet har en stærk funktionalitet og kan sammenlignes med desktop-e-mail-klienter som Outlook Express eller Mozilla Thunderbird.
Log ind via SSH på din virtuelle server.
Dernæst skal du opdatere systemet ved at indtaste kommandoen:
# sudo yum update -y
Efter opdatering af systemet vises en besked som denne.
For at installere Apache på din virtuelle server skal du indtaste kommandoen:
# sudo yum install httpd -y
Start Apache efter installationen:
# sudo systemctl start httpd.service
Gå derefter til - http://ServerIP/
og tjek, at Apache fungerer korrekt
Hvis alt fungerer korrekt, skal du indtaste kommandoen for at starte Apache automatisk på den virtuelle server:
# sudo systemctl enable httpd.service
Brug kommandoen til at downloade:
# sudo yum install mariadb-server mariadb -y
Når download og installation er afsluttet, skal du køre MariaDB:
# sudo systemctl start mariadb
Kør det sikre installationsscript, som fjerner usikre indstillinger:
# sudo mysql_secure_installation
Indtast root-adgangskoden, da du lige har oprettet databasen, er den tom som standard. Accepter derefter indstillingerne, skriv"Y
" overalt. Indtast en ny adgangskode, bekræft den, og accepter igen "Y
"-ændringerne.
MariaDB er nu installeret.
For at installere PHP skal du indtaste kommandoen:
# sudo yum install php php-mysql -y
Genstart derefter Apache, så den kan køre PHP:
# sudo systemctl restart httpd.service
For at teste, hvordan PHP fungerer, skal du oprette en fil, f.eks. index.php, ved hjælp af denne kommando:
# echo "<?php phpinfo(); ?>" > /var/www/html/index.php
Åbn nu linket i din browser - http://ServerIP/index.php
Du bør se en side med PHP-parametre.
Dernæst skal du installere pakken, der understøtter MariaDB i PHP:
# 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
Derefter genstarter du Apache:
# sudo systemctl restart httpd.service
Færdig. Du har installeret Apache, MySQL og PHP på den virtuelle server.
Tilslutning af yderligere repositorier
Du skal forbinde et ekstra repository for at installere alle komponenterne.
# sudo yum install epel-release
For at skabe en forbindelse mellem alle komponenterne i kæden er det nødvendigt at bruge en database. Opret forbindelse til MySQL-serveren:
# mysql -u root -p
Opret en database, du skal angive din egen adgangskode:
CREATE DATABASE vexim;
GRANT ALL ON vexim.* to vexim@localhost identified by 'password';
quit
Hvis ikke alle PHP-moduler er installeret, er det nødvendigt med en ekstra installation.
# yum -y install php-imap php-mbstring php-pdo php-mysql php-cli
Download Postfixadmin, og installer det i mappen /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
Rediger konfigurationsfilen config .inc.php:
# yum -y install dovecot dovecot-mysql
Omdøb standardkonfigurationen, så vi kan vende tilbage til den, hvis det bliver nødvendigt:
# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-orig
# vi /etc/dovecot/dovecot.conf
Gem følgende poster i konfigurationsfilen 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
}
For at konfigurere databaseadgang skal du oprette en separat konfigurationsfil dovecot-mysql.conf
# vi /etc/dovecot/dovecot-mysql.conf
og sæt følgende indstillinger ind i den:
## 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
Ændr standardkonfigurationen, mens du beholder en sikkerhedskopi.
######################################################################
# 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
Afinstallation af Postfix
# alternatives --config mta
# systemctl disable postfix
# systemctl stop postfix
# yum -y remove postfix
Gå til http://server_ip/postfixadmin/setup.php
og følg installationsvejledningen. Når du har oprettet superadmin, vil installationsprogrammet give dig en hashkode til adgangskoden:
Den skal udskiftes i filen config.inc.php
(i roden af postfixadmin-biblioteket) i stedet for denne linje:
Derefter skal du logge ind under de oprettede data og tilføje de nødvendige domæner og postkasser.
Installation af Roundcube
# yum -y install roundcubemail
Efter installationen skal du tilføje konfigurationen til webserveren, så scriptet åbnes på http://server_ip/roundcubemail/.
# vi /etc/httpd/conf.d/roundcubemail.conf
Gem følgende data:
#
# 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 skal genstartes efter skrivning:
# systemctl restart httpd.service
For yderligere installation skal du oprette en database, til dette formål skal du oprette forbindelse til MySQL:
# mysql -u root -p
og udfør forespørgsler (angiv dine egne data):
CREATE DATABASE roundcubedb;
CREATE USER roundcubeuser@localhost IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES on roundcubedb.* to roundcubeuser@localhost ;
FLUSH PRIVILEGES;
quit
Dernæst skal du åbne installationsprogrammet http://server_ip/roundcubemail/installer
og konfigurere.
Dette afslutter konfigurationen, gå til Roundcube http://server_ip/roundcubemail/,
log ind under den tidligere oprettede (i Postfixadmin) boks, foretag indstillinger og brug.