Comment construire votre propre nuage pour vous et vos amis sur Debian Wheezy

Récupérez votre vie privée et contrôlez vos données en quelques heures seulement: créez votre propre nuage pour vous et vos amis

Certaines des pièces les plus personnelles de votre identité sont stockées sur des serveurs à travers le monde au-delà de votre contrôle

Let’s say you’ve been a Gmail user between 2006 and 2013 like me, meaning you received 30’000+ emails and wrote about 5000 emails over that 7 year period. Some of the emails you sent or received are very personal, maybe so personal that you probably wouldn’t like even some family members or close friends to go through them systematically. Maybe you also drafted a few emails that you never sent because you changed your mind at the last minute. But even if you never sent them, these emails are still stored somewhere on a server. As a result, it’s fair to say that Google servers know more about your personal life than your closest friends or your family.

Statistically, it’s a safe bet to consider that you’ve got a smartphone. You can barely use the phone without using the contacts app which stores your contacts in Google Contact on Google servers by default. So not only does Google know about your emails, but also about your offline contacts: who you like to call, who calls you, whom you text, and what you text them about. You don’t have to take my word for it, you can verify for yourself by taking a look at the permissions you gave apps such as the Google Play Service to read the list of people that called you and the SMS you got. Do you also use the calendar app that comes with your phone? Unless you explicitly opted out while setting up your calendar, this means that Google knows precisely what you’re up to, at every time of the day, day after day, year after year. The same applies if you chose an iPhone over an Android phone, except Apple gets to know about your correspondance, contacts and schedule instead of Google.

Do you also take great care to keep the contacts in your directory up-to-date, updating your friend’s, colleagues’s and and family’s email addresses and phone numbers when they move to a new job or change carrier? That gives Google an extraordinarily accurate, up-to-date picture of your social network. And you love the GPS of your smartphone que vous utilisez beaucoup avec Google Maps. Cela signifie que Google sait non seulement ce que vous faites de votre calendrier, mais aussi où vous êtes, où vous vivez, où vous travaillez. Et en corrélant les données de localisation GPS entre les utilisateurs, Google peut également dire avec qui vous pouvez socialiser en ce moment.

Votre habitude quotidienne de transmettre vos informations les plus personnelles aura un impact sur votre vie d'une manière que personne ne peut même prévoir

En résumé, si vous êtes un internaute moyen, Google dispose d'informations actualisées et détaillées sur vos centres d'intérêt, vos inquiétudes, vos passions, vos questions, sur des années presque 10. Il contient une collection de certains de vos messages les plus personnels (e-mails, SMS), un détail heure par heure de vos activités quotidiennes et de votre emplacement, ainsi qu'une image de haute qualité de votre réseau social. Une telle connaissance intime de vous va probablement au-delà de ce que vos amis les plus proches, votre famille ou votre amoureux connaissent de vous.

It wouldn’t come to mind to give this mass of deeply personal information to complete strangers, for instance by putting it all on a USB key and leaving it on a table in a random cafe with a note saying ‘Personal data of Olivier Martin, use as you please’. Who knows who might find it and what they would do with it? Yet, we have no problem handing in core pieces of your identity to strangers at IT companies with a strong interest in our data (that’s how they make their bread) and experts de classe mondiale en analyse de données, perhaps just because it happens by default without us thinking about it when we hit that green ‘Accept’ button.

With so much high-quality information, over the years, Google may well get to know you better than you can ever hope to know yourself: heck, crawling through my digital past right now, I can’t remember having written half of the emails I sent five years ago. I am surprised and pleased to rediscover my interest in marxism back in 2005 and my joining ATTAC (an organization which strives to limit speculation and improve social justice by taxing financial transactions) the next year. And god knows why I was so much into dancing shoes back in 2007. These is pretty harmless information (you wouldn’t have expected me to reveal something embarassing here, would you? ;-). But by connecting the dots between high-quality data over different aspects of your life (what, when, with whom, where, …) over such time spans, one may extrapolate predictive statements about you. For instance, from the shopping habits of a 17-year-old girl, supermarkets can tell that she is pregnant before her dad even hears about it (histoire vraie). Qui sait ce qui deviendra possible avec des données de haute qualité comme Google a, qui va bien au-delà des habitudes d'achat? En reliant les points, peut-être que l'on peut prédire comment vos goûts ou vos opinions politiques vont changer dans les années à venir. Aujourd'hui, les entreprises que vous n'avez jamais entendu prétendre avoir des points de données 500 sur vous, including religion, sexual orientation and political views. Speaking of politics, what if you decide to go into politics in 10 years from now? Your life may change, your views too, and you may even forget, but Google won’t. Will you have to worry that your opponent is in touch with someone who has access to your data at Google and can dig up something embarassing on you from those bottomless wells of personal data you gave away over the years? How long until Google or Facebook se faire pirater tout comme Sony a été récemment piraté et toutes vos données personnelles finissent dans la sphère publique pour toujours?

L'une des raisons pour lesquelles la plupart d'entre nous ont confié nos données personnelles à ces entreprises est qu'elles fournissent leurs services gratuitement. Mais est-ce vraiment gratuit? La valeur du compte Google moyen varie en fonction de la méthode utilisée pour l'estimer: 1000 USD / année compte pour le temps que vous investissez dans la rédaction des courriels, tandis que la valeur de votre compte pour l'industrie de la publicité est quelque part entre 220 USD / année et 500 USD / année. Donc, le service n'est pas vraiment gratuit: vous payez pour cela à travers la publicité et les utilisations encore inconnues que nos données pourraient trouver dans le futur.

I’ve been writing about Google mostly because that’s the company I’ve entrusted most of my digital identify to so far and hence the one I know best. But I may well have written Apple or Facebook . These companies truly changed the world with their fantastic advances in design, engineering and services we love(d) to use, every day. But it doesn’t mean we should stack up all our most personal data in their servers and entrust them with our digital lives: the potential for harm is just too large.

Réclamez votre vie privée et celle de vos proches en 5h

Ca ne doit pas forcément être comme ca. Vous pouvez vivre au 21st siècle, avoir un smartphone, utiliser la messagerie électronique et le GPS sur une base quotidienne, tout en conservant votre vie privée. Tout ce que vous avez à faire est de reprendre le contrôle de vos données personnelles: emails, agenda, contacts, fichiers, etc. website répertorie les logiciels qui aident à contrôler le sort de vos données personnelles. Au-delà de ces options, la façon la plus sûre et la plus efficace de reprendre le contrôle de vos données personnelles consiste à héberger votre cloud en construisant votre propre serveur. Mais il se peut que vous n'ayez pas le temps et l'énergie de faire des recherches sur la façon de le faire et de le faire fonctionner correctement.

That’s where the present article fits in. In just 5 hours, we will set up a server to host your emails, contacts, calendars and files for you, your friends and your family. The server is designed to act as a hub or cloud for your personal data, so that you always retain full control over it. The data will automatically be synchronized between your PC/laptop, your phone and your tablet. Essentially, nous allons configurer un système qui remplace Gmail, Google Drive / Dropbox, Google Contacts, Google Agenda et Picasa.

Just doing this for yourself will already be a big step. But then, a significant fraction of your personal information will still leak out and end up on some servers in the silicon valley, just because so many of the people you interact with every day use Gmail and have smartphones. So it’s a good idea to have some of the people you are closest to join the adventure.

Nous allons construire un système qui

  1. prend en charge un nombre arbitraire de domaines et d'utilisateurs. Cela facilite le partage de votre serveur avec la famille et les amis, afin qu'ils puissent également contrôler leurs données personnelles et partager le coût du serveur avec vous. Les personnes partageant votre serveur peuvent utiliser leur propre nom de domaine ou partagez le vôtre.
  2. vous permet d'envoyer et de recevoir vos emails depuis n'importe quel réseau upon successfully logging in onto the server. This way, you can send your emails from any of your email addresses, from any device (PC, phone, tablet), and any network (at home, at work, from a public network, …)
  3. crypte le trafic réseau when sending and receiving emails so people you don’t trust won’t fish out your password and won’t be able to read your private emails.
  4. offre un antispam à la fine pointe de la technologie, combinant des listes noires de spammeurs connus, le greylisting automatique et le filtrage adaptatif du spam. Le recyclage du filtre anti-spam adaptatif si un e-mail est mal classé est simplement fait en déplaçant le spam dans ou hors du dossier Courrier indésirable / spam. En outre, le serveur contribuera aux efforts de lutte contre le spam communautaires.
  5. nécessite quelques minutes d'entretien de temps en temps, essentiellement pour installer les mises à jour de sécurité et vérifier brièvement les journaux du serveur. L'ajout d'une nouvelle adresse e-mail revient à ajouter un enregistrement à un base de données. Apart from that, you can just forget about it and live your life. I set up the system described in this article 14 months ago and the thing has just been running smoothly since then. So I completely forgot about it, until I recently smiled at the thought that casually pressing the ‘Check email’ button of my phone caused electrons to travel all the way to Iceland (where my server sits) and back.

To go through this article, you’ll need a minimum of technical capabilities. If you know what is the difference between SMTP and IMAP, what is a DNS, and have a basic understanding of TCP/IP, you know enough to follow through. You will also need a basic working knowledge of Unix (working with files from the command line, basic system administration). And you’ll need a total of 5 hours of time to set it up.


Cet article a été inspiré et s'appuie sur des travaux antérieurs

Cet article s'inspire largement de deux autres articles, à savoir Xavier Claude‘s and Drew Crawford‘s introduction to email self-hosting.

The article includes all the features of Xavier’s and Draw’s articles, except from three features that Drew had and which I didn’t need, namely push support for email (I like to check email only when I decide to, otherwise I get distracted all the time), fulltext search in email (which I don’t have a use for), and storing emails in an encrypted form (my emails and data are not critical to the point that I have to encrypt them locally on the server). If you need any of these features, feel free to just add them by following to the respective section of Drew’s article, which is compatible with the present one.

Compared to Xavier’s and Drew’s work, the present article improves on several aspects:

  • it fixes bugs and typos based on my experience with Drew’s article and the numerous comments on his original article. I also went through the present article, setting up the server from scratch several times to replicate it and make sure it would work right out of the box.
  • low maintenance: compared to Xavier’s work, the present article adds support for multiple email domains on the server. It does so by requiring the minimum amount of server maintenance possible: basically, to add a domain or a user, just add one row to a mysql table and that’s it (no need to add sieve scripts, …).
  • J'ai ajouté un webmail.
  • I added a section on setting up a cloud, to host not just your emails but also your files, your addressbook / contacts (emails, phone numbers, birthdays, …), calendars and pictures for use across your devices.

Obtenez un serveur privé virtuel, un nom de domaine et configurez-les

Let’s start by setting the basic infrastructure: our virtual private server and our nom de domaine.

I’ve had an excellent experience with the Virtual Private Servers (VPS) de et Linode. Dans cet article, nous utiliserons Debian Wheezy, pour lequel 1984 et Linode fournissent des images prêtes à l'emploi à déployer sur votre VPS. J'aime 1984 parce que les serveurs sont hébergés en Islande qui fonctionnent exclusivement sur des énergies renouvelables (géothermiques et hydroélectriques) et ne contribuent donc pas au changement climatique, contrairement à les centrales électriques au charbon sur lesquelles la plupart des datacenters basés aux États-Unis fonctionnent actuellement. En outre, ils ont mis l'accent sur libertés civiles, transparence, liberté et Logiciel libre.

Ce pourrait être une bonne idée de démarrer un fichier pour stocker les différents mots de passe nous devrons définir sur le serveur (comptes d'utilisateur, comptes de messagerie, comptes de cloud, base de données accounts). It’s definitely a good idea to encrypt this file (maybe with GnuPG), so that it won’t be too easy to attack your server even if the computer you use to set up your server gets stolen or compromised.

For registering a domain name, I’ve been using the services of gandi pour plus de 10 ans maintenant, aussi avec satisfaction. Pour cet article, nous allons mettre en place une zone avec le nom Nous ajoutons ensuite un hôte nommé to it, set the MX record to that host. While you’re at it, set short Time To Lives (TTL) to your records like 300 seconds so that you’ll be able to make changes to your zone and test the result rapidly while you’re setting up the server.

Enfin, définissez le Enregistrement PTR (inverse DNS) de sorte que la adresse IP of the host maps back to its name. If you don’t understand the previous sentence, read Cet article pour obtenir l'arrière-plan. Si vous utilisez Linode, vous pouvez définir l'enregistrement PTR dans le panneau de configuration de la section Accès à distance. Avec 1984, contactez le support technique qui vous aidera.

On the server, we will start by adding a non-privledged user, so that we don’t end up working as root all the time. Also, to log in as root will require an extra layer of security.

 adduser roudy

Puis dans / etc / ssh / sshd_config, nous fixons

 PermitRootLogin no

et rechargez le serveur ssh

 service ssh recharge

Then, we’ll need to change the hostname of the server. Edit / etc / hostname de sorte qu'il n'a qu'une seule ligne avec votre nom d'hôte, dans notre cas


Then, edit the ssh server’s public key files /etc/ssh/, /etc/ssh/, /etc/ssh/ de sorte que la fin du fichier reflète votre nom d'hôte, ou instance root @ cloud. Redémarrez ensuite le système pour vous assurer que le nom d'hôte est bien fixé


We will update the system and remove services we don’t need to reduce the risk of remote attacks.

 apt-get mise à jour apt-get service dist-upgrade exim4 stop apt-get supprimer exim4 rpcbind apt-get autoremove apt-get installer vim

J'aime utiliser vim pour éditer des fichiers de configuration à distance. Pour cela, il permet d'activer automatiquement la coloration syntaxique. Nous le faisons en ajoutant

 syn sur

to ~ / .vimrc.

Configurer postfix et dovecot pour envoyer et recevoir des emails

 apt-get installer postfix postfix-mysql dovecot-core dovecot-imapd dovecot-mysql serveur mysql dovecot-lmtpd postgrey

dans le Postfix menu de configuration, nous sélectionnons Site Internetet définissez le nom du courrier système sur

Nous allons maintenant mettre en place une base de données pour stocker la liste des domaines hébergés sur notre serveur, la liste des utilisateurs pour chacun de ces domaines (avec leur mot de passe), et une liste d'alias mail (pour transférer les emails d'une adresse à une autre un).

 mysqladmin -p créer un serveur de messagerie mysql -p serveur de messagerie mysql> GRANT SELECT sur serveur de mails. * TO 'mailuser' @ 'localhost' IDENTIFIÉ PAR 'mailuserpass'; mysql> FLUSH PRIVILEGES; mysql> CREATE TABLE `virtual_domains` (` id` int (11) NON NULL auto_increment, `name` varchar (50) NON NULL, PRIMARY KEY (` id`)) MOTEUR = InnoDB DEFAULT CHARSET = utf8; mysql> CREATE TABLE `virtual_users` (` id` int (11) NOT NULL auto_increment, `domain_id` int (11) NOT NULL,` mot de passe` varchar (106) NOT NULL, `email` varchar (100) NOT NULL, PRIMAIRE KEY (`id`), UNIQUE KEY` email` (`email`), FOREIGN KEY (id_domaine) REFERENCES virtual_domains (id) ON SUPPRIMER CASCADE) ENGINE = InnoDB DEFAULT CHARSET = utf8; mysql> CREATE TABLE `virtual_aliases` (` id` int (11) NON NULL auto_increment, `domain_id` int (11) NOT NULL,` source` Varchar (100) NON NULL, `destination` Varchar (100) NON NUL, PRIMAIRE KEY (`id`), FOREIGN KEY (id_domaine) REFERENCES virtual_domains (id) ON SUPPRIMER CASCADE) ENGINE = InnoDB DEFAULT CHARSET = utf8;

Nous allons accueillir le domain. If there are other domains you’d like to host, you can also add them. We also set up a postmaster address for each domain, which forwards to

 mysql> INSERT INTO virtual_domains (`name`) VALEURS (''); mysql> INSERT INTO virtual_domains (`name`) VALEURS (''); mysql> INSERT INTO virtual_aliases (`domain_id`,` source`, `destination`) VALEURS ('1', 'postmaster', ''); mysql> INSERT INTO virtual_aliases (`domain_id`,` source`, `destination`) VALEURS ('2', 'postmaster', '');

Nous ajoutons maintenant un compte de messagerie hébergé localement D'abord, nous générons un hash de mot de passe pour cela:

 doveadm pw -s SHA512-CRYPT

puis ajoutez le hachage à la base de données

 mysql> INSERT INTO `mailserver`.`virtual_users` (` domain_id`, `password`,` email`) VALEURS ('1', '$ 6 $ YOURPASSWORDHASH', '');

Maintenant que notre liste de domaines, alias et utilisateurs est en place, nous allons configurer postfix (serveur SMTP, pour le courrier sortant). Remplacer le contenu de /etc/postfix/ avec ce qui suit:

 myhostname = myorigin = / etc / mailname mydestination = localhost.localdomain, localhost mynetworks_style = hôte # Nous désactivons le relais dans le cas général smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination # Exigences sur les serveurs qui nous contactent: nous vérifions que le client n'est pas un # spammeur connu (reject_rbl_client) et un mécanisme de graylist # (postgrey) pour aider à réduire le spam (check_policy_service) smtpd_client_restrictions = permit_mynetworks, reject_rbl_client, check_policy_service inet: disable_vrfy_command = yes inet_interfaces = all smtpd_banner = $ monhostname ESMTP $ mail_name (Debian / GNU) biff = non append_dot_mydomain = non readme_directory = non # Paramètres TLS smtpd_tls_cert_file = / etc / ssl / certs / cloud.crt smtpd_tls_key_file = / etc / ssl / private / cloud.key smtpd_use_tls = oui smtpd_tls_auth_only = oui smtp_tls_security_level = peut smtp_tls_loglevel = 10023 smtpd_tls_loglevel = 1 smtpd_tls_received_header = oui smtpd_ tls_session_cache_database = btree: $ {répertoire_données} / smtpd_scache smtp_tls_session_cache_database = btree: $ {répertoire_données} / smtp_scache # Livraison alias_maps = hachage: / etc / alias alias_database = hachage: / etc / alias message_size_limit = 1 recipient_delimiter = + # Les lignes suivantes sont utiles pour configurer une sauvegarde MX pour # relay_domains = # relay_recipient_maps = # Domaines virtuels virtual_transport = lmtp: unix: privé / dovecot-lmtp virtual_mailbox_domains = mysql: / etc / postfix / mysql-virtual-boîte aux lettres-domaines. cf virtual_mailbox_maps = mysql: /etc/postfix/ virtual_alias_maps = mysql: /etc/postfix/ local_recipient_maps = $ virtual_mailbox_maps

Maintenant, nous devons enseigner à postfix pour savoir quels domaines nous aimerions qu'il accepte les courriels pour l'utilisation de la base de données que nous venons de créer. Créer un nouveau fichier /etc/postfix/ et ajoutez ce qui suit:

 user = mailuser mot_de_passe = mailuserpass hosts = nom_base_127.0.0.1 = requête serveur_serveur = SELECT 1 FROM virtual_domains WHERE nom = '% s'

Nous enseignons postfix pour savoir si un compte email existe en créant /etc/postfix/ avec le contenu suivant

 user = mailuser mot_de_passe = mailuserpass hosts = nom_base_127.0.0.1 = requête serveur_serveur = SELECT 1 FROM virtual_users OERE email = '% s'

Enfin, postfix utilisera /etc/postfix/ rechercher des alias de messagerie

 user = mailuser mot_de_passe = mailuserpass hosts = nom_base = mailserver requête = SELECT virtual_aliases.destination comme destination FROM virtual_aliases, virtual_domains OERE virtual_aliases.source = '% u' ET virtual_aliases.domain_id = AND = '% d'

Avec tout cela en place, il est maintenant temps de tester si postfix peut interroger notre base de données correctement. Nous pouvons le faire en utilisant carte postale:

 postmap -q mysql: /etc/postfix/ carte postale -q mysql: /etc/postfix/ postmap -q postmaster @ mysql: /etc/postfix/ carte postale -q mysql: /etc/postfix/

Si vous configurez tout correctement, les deux premières requêtes doivent retourner 1, la troisième requête devrait retourner et le dernier ne devrait rien rendre du tout.

Now, let’s set up dovecot (the IMAP server, to fetch incoming mail on the server from our devices). Edit /etc/dovecot/dovecot.conf pour définir les paramètres suivants:

 # Activer le protocole installé #! Include_try /usr/share/dovecot/protocols.d/*.protocol protocols = imap lmtp

qui ne permettra que l'imap (pour nous permettre d'aller chercher des emails) et lmtp (que postfix utilisera pour passer les emails entrants à dovecot). modifier /etc/dovecot/conf.d/10-mail.conf pour définir les paramètres suivants:

 mail_location = maildir: / var / mail /% d /% n [...] mail_privileged_group = mail [...] first_valid_uid = 0

qui stockera les emails dans / var / mail / domainname / username. Notez que ces paramètres sont répartis à différents endroits dans le fichier, et sont parfois déjà là pour nous de définir: nous avons juste besoin de les commenter. Les autres paramètres qui sont déjà dans le fichier, vous pouvez laisser tel quel. Nous devrons faire la même chose pour mettre à jour les paramètres dans beaucoup plus de fichiers dans le reste de cet article. Dans /etc/dovecot/conf.d/10-auth.conf, définissez les paramètres:

 disable_plaintext_auth = oui auth_mechanisms = plain #! inclure le fichier auth-system.conf.ext! inclure le fichier auth-sql.conf.ext

In /etc/dovecot/conf.d/auth-sql.conf.ext, définissez les paramètres suivants:

 passdb {driver = arguments sql = /etc/dovecot/dovecot-sql.conf.ext} userdb {driver = arguments statiques = uid = mail gid = mail accueil = / var / mail /% d /% n}

où nous venons d'apprendre à dovecot que les utilisateurs ont leurs emails dans / var / mail / domainname / username et de chercher mots de passe de la base de données que nous venons de créer. Maintenant, nous avons encore besoin d'apprendre à dovecot comment utiliser la base de données. Pour ce faire, mettez ce qui suit dans /etc/dovecot/dovecot-sql.conf.ext:

 driver = mysql connect = hôte = localhost dbname = serveur mail utilisateur = mailuser mot de passe = mailuserpass default_pass_scheme = SHA512-CRYPT password_query = CHOISIR email en tant qu'utilisateur, mot de passe FROM virtual_users WHERE email = '% u';

Nous corrigeons maintenant les permissions sur les fichiers de configuration

 chown -R mail: dovecot / etc / dovecot chmod -R o-rwx / etc / dovecot

Presque là! Nous avons juste besoin d'éditer quelques fichiers de plus. Dans /etc/dovecot/conf.d/10-master.conf, définissez les paramètres suivants:

 service imap-login {inet_listener imap {#port = port 143 = 0} inet_listener imaps {port = 993 ssl = oui}} service pop3-login {inet_listener pop3 {#port = port 110 = 0} inet_listener pop3s {#port = 995 #ssl = oui port = 0}} service lmtp {unix_listener / var / spoule / postfix / private / dovecot-lmtp {mode = groupe 0666 = postfix utilisateur = postfix} utilisateur = mail} service auth {unix_listener auth-userdb {mode = 0600 utilisateur = mail #group =} # Postfix smtp-auth unix_listener / var / spoule / postfix / private / auth {mode = utilisateur 0666 = groupe postfix = postfixe} # Le processus d'authentification est exécuté en tant que cet utilisateur. #user = $ default_internal_user utilisateur = dovecot} service auth-worker {utilisateur = mail}

Notez que nous définissons les ports pour tous les services, mais les imaps vers 0, ce qui les désactive effectivement. Puis dans /etc/dovecot/conf.d/15-lda.conf, spécifiez une adresse e-mail pour le postmaster:

 postmaster_address =

Last but not least, nous devons générer une paire de public et Clé privée pour le serveur, que nous utiliserons à la fois dans dovecot et postfix:

 openssl req -new -newkey rsa: 4096 -x509 -jours 365 -nodes -out "/etc/ssl/certs/cloud.crt" -keyout "/etc/ssl/private/cloud.key"

Assurez-vous que vous spécifiez votre nom de domaine complet (FQDN) du serveur, dans notre cas:

 Nom commun (par exemple, nom de domaine complet du serveur ou VOTRE nom) []:

If you don’t, our clients may complain that the server name in the SSL certificate does not match the name of the server they are connecting to. We tell dovecot to use these keys by setting the following parameters in /etc/dovecot/conf.d/10-ssl.conf:

 ssl = obligatoire ssl_cert = </etc/ssl/certs/cloud.crt ssl_key = </etc/ssl/private/cloud.key

That’s it! Now on to testing the postfix and dovecot servers!

 service dovecot restart service postfix restart

À partir du serveur, essayez d'envoyer un e-mail à un utilisateur local:

 telnet localhost 25 EHLO MAIL DE: rcpt à: data Objet: Hallo! Ceci est un test, pour vérifier si est prêt à être un MX! À la vôtre, Roudy. QUITTER

Le serveur devrait accepter notre email avec un message comme

 250 2.0.0 Ok: en attente sous 58D54101DB

Vérifiez les journaux /var/log/mail.log si tout s'est bien passé. Il devrait y avoir une ligne disant quelque chose comme

 Nov 14 07: 57: Dovecot cloud 06: lmtp (4375, ... sauvegarde du courrier dans INBOX

So far so good? Good. Now, let’s try the same from a different machine, like the computer we are using to set up the server. We’ll talk to the server using encryption (TLS) this time:

 openssl s_client -connect -starttls smtp EHLO MAIL DE: rcpt à:

auquel le serveur devrait répondre

 554 5.7.1 <>: accès relais refusé

That’s good: had the server accepted the mail, it would have meant that we set up postfix as an open relay for all the spammers of the world and beyhond to use. Instead of the ‘Relay access denied’ message, you may instead get the message

 554 5.7.1 Service indisponible; Hôte client [] bloqué à l'aide de;

Cela signifie que vous essayez de contacter le serveur à partir d'un adresse IP that is considered as a spammer’s address. I got this message while trying to connect to the server through my regular Internet Service Provider (ISP). To fix this issue, you can try to connect from another host, maybe another server you have access to through SSH. Alternatively, you can reconfigure Postfix’s not to use Spamhaus’s RBL, reload postfix, and verify that the above test works. In both cases, it’s important that you find a solution that works for you because we’ll test other things in a minute. If you chose to reconfigure Postfix not to use RBLs, don’t forget to put the RBLs back in and to reload postfix after finishing the article to avoid getting more spam than necessary.

Now let’s essayez d'envoyer un e-mail valide via SMTP sur le port 25, que les serveurs de messagerie utilisent pour se parler:

 openssl s_client -connect -starttls smtp EHLO MAIL DE: rcpt à:

auquel le serveur devrait répondre

 Client host rejeté: Greylisted, voir

ce qui montre que postgrey is working as it should. What postgrey does it to reject emails with a temporary error if the sender has never been seen before. The technical rules of email require email servers to try to deliver the email again. After five minutes, postgrey will accept the email. Legit email servers around the world will try repeatidly to redeliver the email to us, but most spammers won’t. So, wait for 5 minutes, try to send the email again using the command above, and verify that postfix now accepts the email.

Afterwards, we’ll check that we can fetch the two emails that we just sent ourselves by talking IMAP to dovecot:

 openssl s_client -crlf -connect Connexion 1 "mypassword" LISTE 2 "" "*" 3 SELECT ENVOI 4 UID récupère 1: 1 (UID RFC822.SIZE FLAGS BODY.PEEK [] ) 5 LOGOUT

where you should replace mypassword with the password you set for this email account. If that works, we basically have a functional email server which can receive our incoming emails, and from which we get retreive these emails from our devices (PC/laptop, tablets, phones, …). But we can’t give it our emails to send unless we send them from the server itself. We’ll now allow postfix to forward our emails, but only upon successful authentification, that is after it could make sure that the email comes from someone who has a valid account on the server. To do so, we’ll open a special, SSL-only, SASL-authentified email submission service. Set the following parameters in /etc/postfix/

 soumission inet n - - - - smtpd -o syslog_name = postfix / soumission -o smtpd_tls_security_level = chiffrer -o smtpd_sasl_auth_enable = oui -o smtpd_client_restrictions = autoriser_sasl_authenticated, rejeter -o smtpd_sasl_type = dovecot -o smtpd_sasl_path = privé / auth -o smtpd_sasl_security_options = noanonymous - o smtpd_recipient_restrictions = permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination

et recharger le postfix

 service postfix recharger

Now, let’s try to use this service from a different machine than than the server, to verify postfix will now relay our emails and nobody else’s:

 openssl s_client -connect -starttls smtp EHLO

Notice the ‘250-AUTH PLAIN’ capabilities advertized by server, which doesn’t appear when we connect to port 25.

 MAIL DE: rcpt à: 554 5.7.1 <>: accès relais refusé QUITTER

That’s good, postfix won’t relay our emails if he doesn’t know us. So let’s authentify ourselves first. To do so, we first need to generate an authentification string:

 echo -ne'0roudy@jhausse.net0mypassword'|base64

and let’s try to send emails through the server again:

 openssl s_client -connect -starttls smtp EHLO AUTOMNE DGPLYW5AMTk4NGNsb3VQLm5ldAA4bmFmNGNvNG5jOA == MAIL DE: rcpt à:

which postfix should now accept. To complete the test, let’s verify that our virtual aliases work by sending an email to and making sure it goes to

 telnet 25 EHLO MAIL DE: rcpt à: data Objet: Test d'alias virtuel Cher maître de poste, Long time no hear! J'espère que votre MX fonctionne correctement et en toute sécurité. Sincèrement, Roudy. QUITTER

Let’s check the mail made it all the way to the right inbox:

 openssl s_client -crlf -connect Connexion 1 "mypassword" LISTE 2 "" "*" 3 SELECT INBOX * 2 EXISTE * 2 4 RÉCENT LOGOUT

À ce stade, nous avons un serveur de messagerie fonctionnel, à la fois pour les mails entrants et sortants. Nous pouvons configurer nos appareils pour l'utiliser.

PS: vous souvenez-vous de essayez d'envoyer un e-mail à un compte hébergé par le serveur via le port 25 encore une fois, pour vérifier que vous n'êtes plus bloqué par postgrey?

Empêchez le SPAM d'atteindre votre INBOX

For the sake of SPAM filtering, we already have Realtime BlackLists (RBLs) and greylisting (postgrey) in place. We’ll now take our spam fighting capabilities up a notch by adding adaptative spam filtering. This means we’ll add artificial intelligence to our email server, so that it can learn from experience what is spam and what is not. We will use dspam pour ça.

 apt-get installer dspam dovecot-antispam postfix-pcre dovecot-tamis

dovecot-antispam is a package that allows dovecot to retrain the spam filter if we find an email that is misclassified by dspam. Basically, all we need to do is to move emails in or out of the Junk/Spam folder. dovecot-antispam will then take care of calling dspam to retrain the filter. As for postfix-pcre and dovecot-sieve, we will use them respectively to pass incoming emails through the spam filter and to automatically move spam to the user’s Junk/Spam folder.

In /etc/dspam/dspam.conf, définissez les paramètres suivants sur ces valeurs:

 TrustedDeliveryAgent "/ usr / sbin / sendmail" UntrustedDeliveryAgent "/ usr / lib / dovecot / deliver -d% u" Tokenizer osb IgnoreHeader Statut X-Spam IgnoreHeader X-Spam-Scanné IgnoreHeader X-Virus-Scanner-Résultat IgnoreHeader X-Virus -Scanné IgnoreHeader X-DKIM IgnoreHeader DKIM-Signature IgnoreHeader DomainKey-Signature IgnoreHeader X-Google-Dkim-Signature ParseToHeaders sur ChangeModeOnParse sur ChangeUserOnParse ServerPID complet /var/run/dspam/ ServerDomainSocketPath "/ var / run / dspam / dspam. sock "ClientHost /var/run/dspam/dspam.sock

Puis dans /etc/dspam/default.prefs, modifiez les paramètres suivants pour:

 spamAction = deliver # {quarantaine | tag | deliver} -> default: quarantine signatureLocation = en-têtes # {message | headers} -> default: message showFactors = on

Maintenant, nous devons connecter dspam à postfix et dovecot en ajoutant ces deux lignes à la fin de /etc/postfix/

 dspam unix - nn - Drap 10 pipe = Ru utilisateur = dspam argv = / usr / bin / dspam --deliver = innocent, spam --user $ destinataire -i -f $ expéditeur - $ destinataire dovecot unix - nn - - pipe flags = DRhu utilisateur = mail: courrier argv = / usr / lib / dovecot / deliver -f $ {expéditeur} -d $ {destinataire}

Now we will tell postfix to filter every new email that gets submitted to the server on port 25 (normal SMTP traffic) through dspam, except if the email is submitted from the server itself (permit_mynetworks). Note that the emails we submit to postfix with SASL authentication won’t be filtered through dspam either, as we set up a separate submission service for those in the previous section. Edit /etc/postfix/ pour changer le smtpd_client_restrictions les éléments suivants:

 smtpd_client_restrictions = allow_mynetworks, reject_rbl_client, check_policy_service inet: 10023, check_client_access pcre: / etc / postfix / dspam_filter_access

À la fin du fichier, ajoutez également:

 # Pour DSPAM, ne numériser qu'un seul courrier à la fois. Dspam_destination_recipient_limit = 1

Nous devons maintenant spécifier le filtre que nous avons défini. Fondamentalement, nous dirons à postfix d'envoyer tous les emails (/./) à dspam via un socket unix. Créer un nouveau fichier / etc / postfix / dspam_filter_access et mettez la ligne suivante dedans:

 /./ FILTER dspam: unix: /run/dspam/dspam.sock

That’s it for the postfix part. Now let’s set up dovecot for spam filtering. In /etc/dovecot/conf.d/20-imap.conf, éditez le imap mail_plugins paramètre plugins tel que:

 mail_plugins = $ mail_plugins antispam

et ajoutez une section pour lmtp:

 protocol lmtp {# Liste des plugins séparés par des espaces à charger (par défaut, il s'agit de plugins de messagerie globaux). mail_plugins = $ mail_plugins crible}

Nous configurons maintenant le plugin dovecot-antispam. modifier /etc/dovecot/conf.d/90-plugin.conf pour ajouter le contenu suivant à la section plugin:

 plugin {... # Antispam (DSPAM) antispam_backend = dspam antispam_allow_append_to_spam = OUI antispam_spam = Junk; Spam antispam_trash = Corbeille; antispam_signature = Signature X-DSPAM antispam_signature_missing = erreur antispam_dspam_binary = / usr / bin / dspam antispam_dspam_args = --user; % u; - deliver =; - source = erreur antispam_dspam_spam = --class = spam antispam_dspam_notspam = --class = innocent antispam_dspam_result_header = Résultat X-DSPAM}

et dans /etc/dovecot/conf.d/90-sieve.conf, spécifiez un script de test par défaut qui s'appliquera à tous les utilisateurs du serveur:

 sieve_default = /etc/dovecot/default.sieve

What is sieve and why do we need a default script for all users? Sieve lets us automatize tasks on the IMAP server. In our case, we won’t all emails identified as spam to be put in the Junk folder instead of in the Inbox. We would like this to be the default behavior for all users on the server; that’s why we just set this script as default script. Let’s create this script now, by creating a new file /etc/dovecot/default.sieve avec le contenu suivant:

 require ["regex", "fileinto", "imap4flags"]; # Catch mail étiqueté comme Spam, sauf Spam recyclé et remis à la boîte aux lettres si allof (en-tête: regex "X-DSPAM-Result" "^ (Spam | Virus | Bl [ao] cklisted) $", pas en-tête: contient "X -DSPAM-Reclassified "" Innocent ") {# Marquer comme lu # setflag" \ Seen "; # Déplacez-vous dans le dossier du dossier de courrier indésirable dans "Junk"; # Arrête le traitement ici stop; }

Maintenant, nous devons compiler ce script pour que dovecot puisse l'exécuter. Nous devons également lui accorder les autorisations appropriées.

 cd / etc / dovecot sievec. chown mail.dovecot default.siev * chmod 0640 default.sieve chmod 0750 default.svbin

Enfin, nous devons corriger les permissions sur deux fichiers de configuration postfix que dspam doit lire:

 chmod 0644 /etc/postfix/ /etc/postfix/

That’s it! Let’s restart dovecot and postfix

 service dovecot restart service postfix restart

et tester l'antispam, en contactant le serveur depuis un hôte distant (par exemple, l'ordinateur que nous utilisons pour configurer le serveur):

 openssl s_client -connect -starttls smtp EHLO MAIL DE: rcpt à: DONNEES Objet: Test DSPAM Salut Roudy, comment voulez-vous manger du jambon ce soir? Bien à vous, J. QUITTER

Let’s check if the mail arrived:

 openssl s_client -crlf -connect Connexion 1 "mypassword" LISTE 2 "" "*" 3 SELECT ENVOI 4 UID récupère 3: 3 (UID RFC822.SIZE FLAGS BODY.PEEK [] )

Ce qui devrait renvoyer quelque chose l'email avec une collection de drapeau définie par SPAM qui ressemble à ceci:

 X-DSPAM-Résultat: Innocent X-DSPAM-Traitée: Sun Oct 5 16: 25: 48 2014 X-DSPAM-Confiance: 1.0000 X-DSPAM-Probabilité: 0.0023 X-DSPAM-Signature: 5431710c178911166011737 X-DSPAM-Facteurs: 27 , Reçu * Postfix + avec, 0.40000, Reçu * avec + # + id, 0.40000, comme + # + # + # + ham, 0.40000, certains + # + ce soir, 0.40000, Reçu * certificat + demandé, 0.40000, Reçu * client + certificat, 0.40000, Reçu * pour + roudy, 0.40000, Reçu * Dim + # + # + # + 16, 0.40000, Reçu * Dim + # + Oct, 0.40000, Reçu * roudy + # + # + # + Oct, 0.40000, manger + certains, 0.40000 , Reçu * 5 + # + # + 16, 0.40000, Reçu * + # + # + # + id, 0.40000, Roudy + # + # + # + à, 0.40000, Reçu * Oct + # + 16, 0.40000, à + # + # + jambon, 0.40000, Reçu * Non + # + # + demandé, 0.40000, Reçu * + # + # + Oct, 0.40000, Reçu * 256 + 256, 0.40000, comme + # + # + certains, 0.40000, Reçu * ESMTPS + id, 0.40000, comment + + + # + à, 0.40000, ce soir + à vous, 0.40000, Reçu * avec + chiffrement, 0.40000 5 LOGOUT

Good! You now have adaptive spam filtering set up for the users of your server. Of course, each user will need to train the filter in the first few weeks. To train a message as spam, just move it to a folder called “Spam” or “Junk” using any of your devices (PC, tablet, phone). Otherwise it’ll be trained as ham.

Assurez-vous que les e-mails que vous envoyez passent par les filtres anti-spam

Notre objectif dans cette section sera de rendre notre serveur de messagerie aussi propre que possible dans le monde et d'empêcher les spammeurs d'envoyer des emails à notre nom. Comme un effet secondaire, cela va nous aider à obtenir nos e-mails à travers les filtres anti-spam d'autres serveurs de messagerie.

Cadre de politique de l'expéditeur

Sender Policy Framework (SPF) est un enregistrement que vous ajoutez à votre zone et qui déclare quels serveurs de messagerie sur Internet peuvent envoyer des courriels pour votre nom de domaine. La configuration est très facile, utilisez l'assistant SPF à pour générer votre enregistrement SPF, puis ajoutez-le à votre zone sous la forme d'un enregistrement TXT. Il ressemblera à ceci: 300 DANS TXT v = spf1 mx mx: -all

Reverse PTR

Nous avons discuté de ce point plus tôt in this article, it’s a good idea that you set up the reverse DNS for your server correctly, so that doing a reverse lookup on the IP address of your server returns the actual name of your server.


Quand nous activons OpenDKIM, postfix will sign every outgoing email using a cryptographic key. We will then deposit that key in our zone, on the DNS. That way, every mail server in the world will be able to verify if the email actually came from us, or if it was forged by a spammer. Let’s install opendkim:

 apt-get install opendkim opendkim-outils

Et configurez-le en éditant /etc/opendkim.conf pour que ça ressemble à ceci:

 ## ## opendkim.conf - fichier de configuration pour le filtre OpenDKIM ## Canonicalisation relaxée / détendue ExternalIgnoreList refile: / etc / opendkim / TrustedHosts refile interne: / etc / opendkim / TrustedHosts Fichier de clés: / etc / opendkim / KeyTable LogWhy Oui MinimumKeyBits 1024 Mode sv PidFile /var/run/opendkim/ Repose de table de signature: / etc / opendkim / SigningTable Socket inet: 8891 @ localhost Syslog Oui SyslogSuccess Oui TemporaryDirectory / var / tmp UMask 022 ID utilisateur opendkim: opendkim

We’ll need a couple of additional files which we will store in / etc / opendkim:

 mkdir -pv / etc / opendkim / cd / etc / opendkim /

Let’s create a new file / etc / opendkim / TrustedHosts avec le contenu suivant

et un nouveau fichier appelé / etc / opendkim / KeyTable avec le contenu suivant


This tells OpenDKIM that we want to use an encryption key named ‘cloudkey’ whose contents can be found in /etc/opendkim/mail.private. We will create another file named / etc / opendkim / SigningTable et ajoutez la ligne suivante:

 * cloudkey

which tells OpenDKIM that every emails of the domain should be signed using the key ‘cloudkey’. If we have other domains which we want to sign, we can add them here too.

The next step is to generate that key and fix permissions on OpenDKIM’s config files.

 opendkim-genkey -r -s mail [-t] chown -Rv opendkim: opendkim / etc / opendkim chmod 0600 / etc / opendkim / * chmod 0700 / etc / opendkim

At first, it’s a good idea to use the -t which will signal to other mail servers that you are just in testing mode, and that they shouldn’t discard emails based on your OpenDKIM signature (yet). You can get your OpenDKIM key from the mail.txt file:

 chat mail.txt

puis ajoutez-le à votre fichier de zone sous forme d'enregistrement TXT, qui devrait ressembler à ceci 300 EN TXT v = DKIM1; k = rsa; p = MIGfMA0GCSqG ...

Enfin, nous devons dire à postfix de signer les emails sortants. Au bout du /etc/postfix/, ajouter:

 # Maintenant pour OpenDKIM: nous allons signer tous les emails sortants smtpd_milters = inet: 8891 non_smtpd_milters = $ smtpd_milters milter_default_action = accepter

Et rechargez les services correspondants

 service service de rechargement postfix redémarrage opendkim

Now let’s test if our OpenDKIM public key can be found and matches the Clé privée:

 opendkim-testkey -d -s mail -k mail.private -vvv

qui devrait revenir

 opendkim-testkey: touche OK

Pour cela, vous devrez peut-être attendre un peu jusqu'à ce que le serveur de noms ait rechargé la zone (sur Linode, cela se produit tous les 15min). Vous pouvez utiliser creuser pour vérifier si la zone a été rechargée pour le moment.

If this works, let’s test if other servers can validate our OpenDKIM signatures and SPF record. To do this, we can use Brandon Checkett’s email test. Pour envoyer un email à une adresse de test qui nous a été donnée le Brandon’s webpage, nous pouvons exécuter la commande suivante sur le serveur

 mail -s CloudCheck

On Brandon’s webpage, you should then see résultat = passe in the ‘DKIM Signature’ section, and Résultat: passe in the ‘SPF Information’ section. If our emails pass this test, just regenerate an OpenDKIM key without the -t basculez, transférez la nouvelle clé dans le fichier de zone et retestez-la si elle continue de passer les tests. Si oui, félicitations! Vous venez de configurer avec succès OpenDKIM et SPF sur votre serveur!

Hébergez des calendriers, des contacts, des fichiers avec Owncloud et configurez un webmail avec Roundcube

Now that we have a top-notch email server, let’s add to it the possibility to store your contacts, calendars, and files in the cloud. These are services that the Owncloud provides out of the box. While we’re at it, we’ll also set up a webmail, so you can check email even if you’re travelling without electronics, or in case your phone and laptop run out of battery.

L'installation de Owncloud est irréprochable et est bien décrite ici . On Debian, it boils down to adding the owncloud repository to your apt sources, downloading owncloud’s release key and adding it to your apt keyring, and then installing owncloud itself using apt-get:

 echo 'deb /' >> /etc/apt/sources.list.d/owncloud.list wget http: // télécharger. apt-key ajouter - <Release.key apt-get mise à jour apt-get installer apache2 owncloud roundcube

Lorsque vous y êtes invité, choisissez dbconfig puis dis que tu veux cube rond à utiliser mysql. Ensuite, fournissez le mysql mot de passe root et définir un bon mot de passe pour l'utilisateur mysql roundcube. Ensuite, modifiez le fichier de configuration roundcube /etc/roundcube/ de sorte que la connexion sur roundcube utilisera par défaut votre serveur IMAP:

 $ rcmail_config ['default_host'] = 'ssl: // localhost'; $ rcmail_config ['default_port'] = 993;

Now we will set up the apache2 webserver with SSL so that we can talk to Owncloud and Roundcube using encryption for our passwords and data. Let’s turn on Apache’s ssl module:

 a2enmod ssl

et éditer /etc/apache2/ports.conf pour définir les paramètres suivants:

 NameVirtualHost *: 80 Écouter 80 ServerName <IfModule mod_ssl.c> # Si vous ajoutez NameVirtualHost *: 443 ici, vous devrez également changer # l'instruction VirtualHost dans / etc / apache2 / sites-available / default- ssl # à <VirtualHost *: 443> # serveur Nom Indication pour SSL nommé Hôtes virtuels n'est actuellement pas supporté par MSIE sur Fenêtres XP. NameVirtualHost *: 443 Écouter 443 </ IfModule> <IfModule mod_gnutls.c> Écouter 443 </ IfModule>

We’ll set up a default website pour les connexions cryptées au serveur web pour / Var / www. modifier / etc / apache2 / sites-disponible / default-ssl:

 <VirtualHost _default_: 443> ServeurAdmin webmaster @ localhost DocumentRoot / var / www NomServeur [...] <Répertoire / var / www / owncloud> Refuser tous </ Directory> [...] SSLCertificateFile / etc /ssl/certs/cloud.crt SSLCertificateKeyFile /etc/ssl/private/cloud.key [...] </ VirtualHost>

and let’s also set up a website for unencrypted connections to pour / Var / www. modifier / etc / apache2 / sites-disponible / par défaut:

 <VirtualHost _default_: 443> DocumentRoot / var / www NomServeur [...] <Répertoire / var / www / owncloud> Refuser tous </ Directory> </ VirtualHost>

That way, we can serve pages for by putting them in /var/www. The ‘Deny from all’ directive prevents access to Owncloud through we will set it up to access it through au lieu.

Nous allons maintenant configurer le webmail (roundcube) de sorte qu'il sera accessible via modifier / etc / apache2 / sites-disponible / roundcube avoir le contenu suivant:

 <IfModule mod_ssl.c> <VirtualHost *: 443> ServerAdmin webmaster @ localhost DocumentRoot / var / lib / roundcube # Nom d'hôte sous lequel vous souhaitez accéder au webmail ServerName <Directory /> Options FollowSymLinks AllowOverride Aucun </ Directory> ErrorLog $ {APACHE_LOG_DIR} /error.log # Les valeurs possibles incluent: debug, info, avis, warn, error, crit, # alert, emerg. LogLevel avertit CustomLog $ {APACHE_LOG_DIR} /ssl_access.log combiné # Commutateur de moteur SSL: # Activer / désactiver SSL pour cet hôte virtuel. SSLEngine on # n'autorise pas les connexions non sécurisées # SSLRequireSSL SSLCipherSuite HIGH: MEDIUM # Un certificat autosigné (snakeoil) peut être créé en installant # le paquet ssl-cert. Voir # /usr/share/doc/apache2.2-common/README.Debian.gz pour plus d'informations. # Si la clé et le certificat sont stockés dans le même fichier, seule la directive # SSLCertificateFile est nécessaire. SSLCertificateFile /etc/ssl/certs/cloud.crt SSLCertificateKeyFile /etc/ssl/private/cloud.key # Ces alias ne fonctionnent pas correctement avec plusieurs hôtes sur votre serveur Apache. # Débranchez-les pour les utiliser ou adaptez-les à votre configuration Alias ​​/ programme / js / minuscule_mce / / usr / share / tinymce / www / # Accès aux fichiers tinymce <Répertoire "/ usr / share / tinymce / www /"> Options Index MultiViews FollowSymLinks AllowOverride Aucun Autoriser l'autorisation, refuser l'autorisation à tous </ Directory > <Répertoire / var / lib / roundcube /> Options + FollowSymLinks # Ceci est nécessaire pour analyser /var/lib/roundcube/.htaccess. Voir son # contenu avant de définir AllowOverride sur None. AllowOverride Autoriser tout autoriser, refuser l'accès à tous les répertoires </ Directory> #: <Répertoire / var / lib / roundcube / config> Options -FollowSymLinks AllowOverride Aucun </ Directory> <Répertoire / var / lib / roundcube / temp> Options -FollowSymLinks AllowOverride Aucun Ordre autoriser, refuser Deny à partir de tous </ Directory> <Directory / var / lib / roundcube / logs> Options -FollowSymLinks AllowOverride Aucun Ordre autoriser, refuser Deny de tous </ Directory> <FilesMatch "\ (cgi | shtml | phtml | php) $ "> SSLOptions + StdEnvVars </ FilesMatch> <Répertoire / usr / lib / cgi-bin> SSLOptions + StdEnvVars </ Directory> # Ajustements de protocole SSL: # Le standard par défaut et sécurisé SSL / TLS shutdown conforme approche # est que mod_ssl envoie l'alerte de notification close mais n'attend pas # l'alerte close notify du client. Lorsque vous avez besoin d'une approche différente de shutdown #, vous pouvez utiliser l'une des variables suivantes: # o ssl-unclean-shutdown: # Ceci force un arrêt non propre lorsque la connexion est fermée, c.-à-d. no # SSL close notifier l'alerte est envoyé ou autorisé à être reçu. Cela viole la norme SSL / TLS, mais est nécessaire pour certains navigateurs mortels. Utilisez # ceci lorsque vous recevez des erreurs d'E / S en raison de l'approche standard où # mod_ssl envoie l'alerte de notification de fermeture. # o ssl-accurate-shutdown: # Cela force un arrêt précis lorsque la connexion est fermée, c.-à-d. Une alerte de fermeture de # SSL close est envoyée et mod_ssl attend l'alerte close notify # du client. Ceci est conforme à la norme 100% SSL / TLS, mais en # pratique provoque souvent des connexions suspendues avec des navigateurs morts. Utilisez # ceci uniquement pour les navigateurs où vous savez que leur # implémentation SSL fonctionne correctement. # Remarque: La plupart des problèmes de clients rompus sont également liés à la fonction HTTP # keep-alive, de sorte que vous souhaitiez généralement également désactiver # keep-alive pour ces clients. Utilisez la variable "nokeepalive" pour cela. # De même, il faut obliger certains clients à utiliser HTTP / 1.0 pour contourner # leur implémentation HTTP / 1.1 brisée. Utilisez les variables "downgrade-1.0" et # "force-response-1.0" pour cela. BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-réponse-1.0 # MSIE 7 et plus récent devrait être capable d'utiliser keepalive BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </ VirtualHost> </ IfModule>

et déclarez le serveur dans votre DNS, par exemple: 300 EN CNAME

Now let’s enable these three websites

 a2ensite par défaut ssl roundcube service apache2 redémarrer

et le webmail, accessible sous, should basically work. Log in using the full email (e.g. and the password you set in mailserver DB at the beginning of this article. The first time you connect, the browser will warn you that the certificate was not signed by a certification authority. That’s fine, just add an exception.

Last but not least, nous allons créer un hôte virtuel pour owncloud en mettant le contenu suivant dans / etc / apache2 / sites-disponibles / owncloud:

 <IfModule mod_ssl.c> <VirtualHost *: 443> WebAdmin ServerAdmin @ localhost DocumentRoot / var / www / owncloud NomServeur <Directory /> Options FollowSymLinks AllowOverride Aucun </ Directory> <Répertoire / var / www / owncloud> Options Indexes FollowSymLinks MultiViews AllowOverride Tout Autoriser Autoriser, refuser l'autorisation de tous </ Directory> ScriptAlias ​​/ cgi-bin / / usr / lib / cgi-bin / <Répertoire "/ usr / lib / cgi-bin"> AllowOverride Aucune Options + ExecCGI -MultiViews + SymLinksIfOwnerMatch Ordre autoriser, refuser Autoriser de tout </ Directory> ErrorLog $ {APACHE_LOG_DIR} /error.log # Les valeurs possibles incluent: déboguer, info, avis, avertir, erreur, crit, # alerte, emerg. LogLevel avertit CustomLog $ {APACHE_LOG_DIR} /ssl_access.log combiné # Commutateur de moteur SSL: # Activer / désactiver SSL pour cet hôte virtuel. SSLEngine sur # n'autorise pas les connexions non sécurisées # SSLRequireSSL SSLCipherSuite HIGH: MEDIUM SSLCertificateFile /etc/ssl/certs/cloud.crt SSLCertificateKeyFile /etc/ssl/private/cloud.key <FilesMatch "\. (Cgi | shtml | phtml | php) $ "> SSLOptions + StdEnvVars </ FilesMatch> <Répertoire / usr / lib / cgi-bin> SSLOptions + StdEnvVars </ Directory> NavigateurMatch" MSIE [2-6] "\ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force- response-1.0 # MSIE 7 et plus récent devrait être capable d'utiliser keepalive BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </ VirtualHost> </ IfModule>

et activer owncloud en cours d'exécution

 a2ensite service owncloud apache2 recharger

Alors allez-y un configurer owncloud en se connectant à dans un navigateur web.

That’s it! Now you’ve got your own Google Drive, Calendar, Contacts, Dropbox, and Gmail! Enjoy your freshly recovered privacy! 🙂

Synchronisez vos appareils sur le cloud

Pour synchroniser vos e-mails, vous pouvez simplement utiliser votre client de messagerie préféré: le programme de messagerie standard sur Android ou iOS, k9mail, ou Thunderbird sur votre PC. Ou vous pouvez également utiliser le webmail que nous avons mis en place.

How to sync your calendar and contacts with the cloud is described in the doc of owncloud. On Android, I’m using the CalDAV-Sync and CardDAV-Sync apps which act as bridges between the Android calendar and contacts apps of the phone and the owncloud server.

Pour les fichiers, il y a une application Android appelée Owncloud pour accéder à vos fichiers depuis votre téléphone et télécharger automatiquement des photos et des vidéos que vous prenez sur votre nuage. Accéder à vos fichiers sur votre Mac / PC est facile et bien décrit dans la documentation Owncloud.

Derniers conseils

During the first few weeks, it’s a good idea to monitor / var / log / syslog et /var/log/mail.log on a daily basis and make sure everything everything is running smoothly. It’s important to do so before you invite others (friends, family, …) to be hosted on your server; you might loose their trust in self-hosting for good if they trust you with their data and the server suddently becomes unavailable.

Pour ajouter un autre utilisateur, ajoutez simplement une ligne à virtual_users table du serveur de courrier DB.

Pour ajouter un domaine, ajoutez simplement une ligne au virtual_domains table. Puis mettre à jour / etc / opendkim / SigningTable Pour récupérer les e-mails sortants, téléchargez la clé OpenDKIM dans la zone et rechargez OpenDKIM.

Owncloud a sa propre base de données utilisateur qui peut être gérée en se connectant à Owncloud en tant qu'administrateur.

Finally, it’s important to think in advance of a solution in case your server becomes temporarily unavailable. For instance, where would your mails go until your server returns? One solution would be to find a friend who can act as your backup MX, while you act as his backup MX (see the relay_domains et relay_recipient_maps setting in Postfix’s file). Similarly, what if your server is compromised and a malicious individual erases all your files there? For that, it’s important to think of a regular backup system. Linode offers backups as an option. On, I set up a basic but sufficient automatic backup system using on crontabs and scp.


une réponse

Laisser un commentaire

Ce site utilise Akismet pour réduire les spams. Découvrez comment vos données de commentaire sont traitées.