Het installeren van een mailserver op CentOS 7 kan op een aantal manieren, maar een van de meest voorkomende is het gebruik van een combinatie van Postfix en Dovecot.
Postfix is een afzendersoftware en is een van de populairste mailservers ter wereld. Dovecot daarentegen is een mailserver die wordt gebruikt om e-mail te ontvangen via het IMAP- of POP-protocol.
Exim is een mail transfer agent (MTA) die vaak wordt gebruikt in Unix-achtige besturingssystemen. Exim is freeware gedistribueerd onder de voorwaarden van de GNU (General Public Licence) en is een veelzijdig en flexibel e-mailprogramma met uitgebreide functies voor het controleren van inkomende e-mail.
Dovecot is een open source IMAP en POP3 mailserver voor Linux/UNIX-achtige systemen. Beveiliging is de hoeksteen van de focus van dit product op flexibiliteit en snelheid.
Roundcube is een webgebaseerde e-mailinterface die de mogelijkheid biedt om met je mailboxen te werken via IMAP en SMTP. De applicatie heeft krachtige functionaliteit en is qua mogelijkheden vergelijkbaar met desktop e-mailclients zoals Outlook Express of Mozilla Thunderbird.
Log in via SSH op je virtuele server.
Vervolgens moet je het systeem updaten, voer het commando in:
# sudo yum update -y
Na het updaten van het systeem verschijnt een bericht als dit.
Om Apache op je virtuele server te installeren, voer je het volgende commando in:
# sudo yum install httpd -y
Start Apache na de installatie:
# sudo systemctl start httpd.service
Ga daarna naar - http://ServerIP/
en controleer of Apache goed werkt.
Als alles correct werkt, voer dan het commando in om Apache te autorunnen op de virtuele server:
# sudo systemctl enable httpd.service
Gebruik het commando om te downloaden:
# sudo yum install mariadb-server mariadb -y
Nadat het downloaden en installeren is voltooid, moet u MariaDB uitvoeren:
# sudo systemctl start mariadb
Voer het beveiligde installatiescript uit, dat onveilige instellingen zal verwijderen:
# sudo mysql_secure_installation
Voer het root-wachtwoord in, aangezien u de database net hebt aangemaakt, is deze standaard leeg. Ga vervolgens akkoord met de instellingen, voer overal"Y
" in. Voer een nieuw wachtwoord in, bevestig het en ga opnieuw akkoord met de"Y
"-wijzigingen.
MariaDB is nu geïnstalleerd.
Voer het commando in om PHP te installeren:
# sudo yum install php php-mysql -y
Herstart vervolgens Apache zodat het PHP kan uitvoeren:
# sudo systemctl restart httpd.service
Om te testen hoe PHP werkt, moet u een bestand maken, zoals index.php met dit commando:
# echo "<?php phpinfo(); ?>" > /var/www/html/index.php
Open nu de link in uw browser - http://ServerIP/index.php
U zou een pagina met PHP-parameters moeten zien.
Vervolgens moet je het pakket installeren om MariaDB te ondersteunen in 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
Daarna herstart je Apache:
# sudo systemctl restart httpd.service
Klaar. Je hebt Apache, MySQL en PHP geïnstalleerd op de virtuele server.
Extra repositories verbinden
Je moet een extra repository aansluiten om alle componenten te installeren.
# sudo yum install epel-release
Om een verbinding te maken tussen alle componenten van de keten is het nodig om één database te gebruiken. Maak verbinding met de MySQL server:
# mysql -u root -p
Maak een database aan, je moet je eigen wachtwoord opgeven:
CREATE DATABASE vexim;
GRANT ALL ON vexim.* to vexim@localhost identified by 'password';
quit
Als niet alle PHP-modules zijn geïnstalleerd, is een extra installatie nodig.
# yum -y install php-imap php-mbstring php-pdo php-mysql php-cli
Download Postfixadmin en installeer het in de map /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
Bewerk het configuratiebestand config .inc.php
:
# yum -y install dovecot dovecot-mysql
Hernoem de standaardconfiguratie zodat we ernaar kunnen teruggrijpen indien nodig:
# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-orig
# vi /etc/dovecot/dovecot.conf
Sla de volgende items op in het configuratiebestand 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
}
Om database toegang te configureren, maak een apart config bestand dovecot-mysql.conf
aan
# vi /etc/dovecot/dovecot-mysql.conf
en zet de volgende instellingen erin:
## 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
Pas de standaard configuratie aan en bewaar een reservekopie.
######################################################################
# 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 verwijderen
# alternatives --config mta
# systemctl disable postfix
# systemctl stop postfix
# yum -y remove postfix
Ga naar http://server_ip/postfixadmin/setup.php
en volg de installatie-instructies. Na het aanmaken van de superadmin, zal de installer je een wachtwoord hash code geven:
Deze moet worden vervangen in het bestand config.inc.php
(in de root van de postfixadmin directory) in plaats van deze regel:
Vervolgens moet je inloggen onder de aangemaakte gegevens, de nodige domeinen en mailboxen toevoegen.
Roundcube installatie
# yum -y install roundcubemail
Na de installatie moet je de config toevoegen aan de webserver zodat het script opent op http://server_ip/roundcubemail/.
# vi /etc/httpd/conf.d/roundcubemail.conf
Sla de volgende gegevens op:
#
# 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 moet opnieuw worden opgestart na het schrijven:
# systemctl restart httpd.service
Maak voor de verdere installatie een database aan, maak hiervoor verbinding met MySQL:
# mysql -u root -p
en voer query's uit (geef je eigen gegevens op):
CREATE DATABASE roundcubedb;
CREATE USER roundcubeuser@localhost IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES on roundcubedb.* to roundcubeuser@localhost ;
FLUSH PRIVILEGES;
quit
Vervolgens moet je het installatieprogramma http://server_ip/roundcubemail/installer
openen en configureren.
Hiermee is de configuratie voltooid, ga naar Roundcube http://server_ip/roundcubemail/,
log in onder de eerder aangemaakte (in Postfixadmin) box, maak instellingen en gebruik.