-
Notifications
You must be signed in to change notification settings - Fork 2
Etat des configurations du service Mail
Maintenant on créer le container mariaDB nommé dbWoodyToys
docker run --detach --name dbWoodyToys --env MARIADB_USER=test-user --env MARIADB_PASSWORD=woody --env MARIADB_ROOT_PASSWORD=woody mariadb:latest
Pour se connecter à la DB via mySQL/mariaDB rentrer la commande:
docker exec -it dbWoodyToys mysql -u root -p
Créer la database nommé woodyToys:
CREATE DATABASE woodyToys;Créer maintenant un utilisateur et donné lui les droits:
CREATE USER 'admin'@'127.0.0.1' IDENTIFIED BY 'validerSVP';
GRANT SELECT ON woodyToys.* TO 'admin'@'127.0.0.1';
--recharge la db
FLUSH PRIVILEGES;Accéder maintenant dans la db grâce à USE woodyToys; et créer 3 tables:
Qui permet de gérer les différents dommaines qui recevront des mails
CREATE TABLE `domains` (
`id` int(11) NOT NULL auto_increment,
`domain_name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
);Qui de toutes évidences va stocker tous nos utilisateurs et leur adresse mails:
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`domain_id` int(11) NOT NULL,
`password` varchar(106) NOT NULL,
`email` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
FOREIGN KEY (domain_id) REFERENCES domains(id) ON DELETE CASCADE
);Qui permettra de lié deux emails ensemble:
CREATE TABLE `aliases` (
`id` int(11) NOT NULL auto_increment,
`domain_id` int(11) NOT NULL,
`source` varchar(100) NOT NULL,
`destination` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (domain_id) REFERENCES domains(id) ON DELETE CASCADE
);Insérer les premières données dans votre db grâce à:
INSERT INTO domains (domain_name)
VALUES ('m1-2.ephec-ti.be');
INSERT INTO users (domain_id, password , email)
VALUES ('1', 'CenClair', 'user1@m1-2.ephec-ti.be');
INSERT INTO users (domain_id, password , email)
VALUES ('1', 'pasHash', 'user2@m1-2.ephec-ti.be');
Vérifier que tous c'est bien passé avec:
SELECT * FROM domains;et
SELECT * FROM users;Pour commencer créer un simple containeur ubuntu nommé "mail" grâce à la commande:
docker run -it -d --name mail -p 25:25 ubuntu
Rendez-vous ensuite dans le container grâce à la commande:
docker exec -it mail bash
Mettez ensuite tous à jour avec:
apt-get update
Et installer postfix grâce à:
apt install postfix postfix-mysql
Pendant l'installation, il vous serra demandé d'accepter quelque chose donc entrer 'y'. Ensuite sélectionnez le type de configuration "internet site" donc entrer '2'. Enfin lorsqu'on vous demande "System mail name" entrer 'm1-2.ephec-ti.be'
Remplacer le fichier "main.cf" par:
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 2
# Configuration d'SSL/TLS
smtpd_tls_cert_file=/etc/letsencrypt/live/m1-2.ephec-ti.be/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/m1-2.ephec-ti.be/privkey.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
# Activation d'SMTP et envoie à dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
# Restrictions
smtpd_helo_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_invalid_helo_hostname,
reject_non_fqdn_helo_hostname
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_unlisted_recipient,
reject_unauth_destination
smtpd_sender_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_sender,
reject_unknown_sender_domain
smtpd_relay_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
defer_unauth_destination
# Configuration général de postfix
myhostname = m1-2.ephec-ti.be
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydomain = m1-2.ephec-ti.be
myorigin = $mydomain
mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
# Dit que c'est dovecot qui s'occupe de l'envoie de mail en local
virtual_transport = lmtp:unix:private/dovecot-lmtp
# Connexion à la db
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf,
mysql:/etc/postfix/mysql-virtual-email2email.cf
# Restrictions + paramètres de MTA
disable_vrfy_command = yes
strict_rfc821_envelopes = yes
#smtpd_etrn_restrictions = reject
#smtpd_reject_unlisted_sender = yes
#smtpd_reject_unlisted_recipient = yes
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtp_always_send_ehlo = yes
#smtpd_hard_error_limit = 1
smtpd_timeout = 30s
smtp_helo_timeout = 15s
smtp_rcpt_timeout = 15s
smtpd_recipient_limit = 40
minimal_backoff_time = 180s
maximal_backoff_time = 3h
# Codes d'erreurs
invalid_hostname_reject_code = 550
non_fqdn_reject_code = 550
unknown_address_reject_code = 550
unknown_client_reject_code = 550
unknown_hostname_reject_code = 550
unverified_recipient_reject_code = 550
unverified_sender_reject_code = 550
Créez maintenant les fichier permettant à postfix d'avoir les infos lui permettant de se connecter à la db et quelle commande SQL à faire pour vérifier que l'élément existe:
user = admin
password = validerSVP
hosts = 172.17.0.3
dbname = woodyToys
query = SELECT 1 FROM domains WHERE domain_name='%s'
user = admin
password = validerSVP
hosts = 172.17.0.3
dbname = woodyToys
query = SELECT 1 FROM users WHERE email='%s'
user = admin
password = validerSVP
hosts = 172.17.0.3
dbname = woodyToys
query = SELECT destination FROM aliases WHERE source='%s'
user = admin
password = validerSVP
hosts = 172.17.0.3
dbname = woodyToys
query = SELECT email FROM users WHERE email='%s'
Enfin modifier le fichier "master.cf" qui sert à postfix pour démarrer les différents services dont il a besoin:
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (no) (never) (100)
# ==========================================================================
smtp inet n - y - - smtpd
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_reject_unlisted_recipient=no
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
smtps inet n - - - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
pickup unix n - y 60 1 pickup
cleanup unix n - y - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - y 1000? 1 tlsmgr
rewrite unix - - y - - trivial-rewrite
bounce unix - - y - 0 bounce
defer unix - - y - 0 bounce
trace unix - - y - 0 bounce
verify unix - - y - 1 verify
flush unix n - y 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - y - - smtp
relay unix - - y - - smtp
-o syslog_name=postfix/$service_name
showq unix n - y - - showq
error unix - - y - - error
retry unix - - y - - error
discard unix - - y - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - y - - lmtp
anvil unix - - y - 1 anvil
scache unix - - y - 1 scache
postlog unix-dgram n - n - 1 postlogd
maildrop unix - n n - - pipe
flags=DRXhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix - n n - 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman unix - n n - - pipe
flags=FRX user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}
Aller dans le container mail grâce à:
docker exec -it mail bash
Installer maintenant docker grâce à:
apt install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql
Tous d'abord configurer le fichier "dovecot.conf" pour activer les protocols et faire le lien avec les autres fichiers de configuration:
!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp
postmaster_address = postmaster at m1-2.ephec-ti.be
dict {
}
!include conf.d/*.conf
!include_try local.conf
Dans /etc/dovecot/conf.d/10-mail.conf trouver la variable "mail_location" qui est l'endroit où se situeront les mails et remplacez la ligne par:
mail_location = maildir:/var/mail/vhosts/%d/%n/
Créons maintenant le répertoire ou se trouveront les mails stocké grâce à:
sudo mkdir -p /var/mail/vhosts/m1-2.ephec-ti.be
Maintenant nous allons donné les droits du répertoire mail à vmail que nous mettrons dans le groupe du même nom:
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/mail
chown -R vmail:vmail /var/mail
Dans le fichier /etc/dovecot/conf.d/10-auth.conf copier les lignes suivantes:
disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-system.conf.ext
!include auth-sql.conf.ext
Rempalcer le fichier /etc/dovecot/conf.d/auth-sql.conf.ext (qui permet créer l'authentification des utilisateurs) par:
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/vmail/vhosts/%d/%n
}
Pour renseigner dovecot sur la DB, dans le fichier /etc/dovecot/dovecot-sql.conf.ext décommenter et changer les variables suivantes:
driver = mysql
connect = host=172.17.0.3 dbname=woodyToys user=admin password=validerSVP
default_pass_scheme = SHA512-CRYPT
password_query = SELECT email as user, password FROM users WHERE email='%u';
Enfin remplacer le fichier /etc/dovecot/conf.d/10-master.conf par:
service imap-login {
inet_listener imap {
port = 0
}
inet_listener imaps {
port = 993
ssl = yes
}
}
service pop3-login {
inet_listener pop3 {
port = 0
}
inet_listener pop3s {
port = 995
ssl = yes
}
}
service submission-login {
inet_listener submission {
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
service imap {
}
service pop3 {
}
service submission {
}
service auth {
unix_listener auth-userdb {
mode = 0600
user = vmail
}
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
user = dovecot
}
service auth-worker {
user = vmail
}
service dict {
unix_listener dict {
}
}
Ce fichier renseigne à Dovecot comment utilisé les différents services dont il a besoin.
- Analyse service DNS
- Etat des configurations du service DNS
- Documentation du service DNS
- Sécurisation du service DNS
- Analyse service web
- Etat des configurations du service web
- Documentation du service web
- Sécurisation du service web
- Analyse du service Services internes
- Etat des configurations du service Services internes
- Documentation du service Services internes
- Sécurisation du service Services internes
- Analyse service mail
- Etat des configurations du service mail
- Documentation du service mail
- Sécurisation du service mail