Como construir sua própria nuvem para você e seus amigos no Debian Wheezy

Receba sua privacidade e controle seus dados em apenas algumas horas: crie sua própria nuvem para você e seus amigos

Algumas das peças mais pessoais da sua identidade são armazenadas em servidores em todo o mundo além do seu controle

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 smartphones. 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 smartphones que você usa muito junto com o Google Maps. Isso significa que o Google não só sabe o que você faz do seu calendário, mas também onde você está, onde você mora, onde trabalha. E, ao correlacionar os dados de localização do GPS entre usuários, o Google também pode contar com quem você pode se socializar agora.

O seu hábito diário de distribuir as suas informações mais pessoais afetará sua vida de forma que ninguém possa até procurar

Para resumir, se você é um usuário médio da internet, o Google tem informações atualizadas e detalhadas sobre seus interesses, preocupações, paixões, perguntas, durante quase 10 anos. Possui uma coleção de algumas de suas mensagens mais pessoais (e-mails, SMS), um detalhamento de suas atividades diárias e sua localização diária, e uma imagem de alta qualidade de sua rede social. Um conhecimento tão íntimo de você provavelmente vai além do que seus amigos mais próximos, sua família ou seu amor conhecem de você.

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 especialistas de classe mundial em análise de dados, 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 (história real). Quem sabe o que será possível com dados de alta qualidade, como o Google tem, o que ultrapassa os hábitos de compras? Ao conectar os pontos, talvez seja possível prever como seus gostos ou opiniões políticas mudarão nos próximos anos. Hoje, empresas que você nunca ouviu falar alegam ter pontos de dados 500 sobre você, 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 ser pirateado Assim como a Sony foi recentemente pirateada e todos os seus dados pessoais acabam na esfera pública para sempre?

Uma das razões pelas quais a maioria de nós confiou nossos dados pessoais a essas empresas é que eles fornecem seus serviços gratuitamente. Mas, como é de graça? O valor da conta média do Google varia de acordo com o método usado para estimá-lo: 1000 USD / ano conta a quantidade de tempo que você investir na escrita de e-mails, enquanto o valor da sua conta para o setor de propaganda está em algum lugar entre 220 USD / ano de 500 USD / ano. Portanto, o serviço não é exatamente gratuito: você paga por meio de propaganda e os usos ainda desconhecidos que nossos dados podem encontrar no futuro.

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.

Reivindique sua privacidade e a das pessoas que você gosta apenas em 5h

Não tem que ser assim. Você pode viver no século 21st, ter um smartphone, usar e-mail e GPS diariamente e ainda manter sua privacidade. Tudo o que você precisa fazer é recuperar o controle sobre seus dados pessoais: e-mails, calendário, contatos, arquivos, etc. Prism-Break.org site lista programas que ajudam a controlar o destino de seus dados pessoais. Além dessas opções, a maneira mais segura e poderosa de recuperar o controle sobre seus dados pessoais é hospedar sua própria nuvem criando seu próprio servidor. Mas você pode simplesmente não ter tempo e energia para pesquisar exatamente como fazer isso e fazê-lo funcionar sem problemas.

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, vamos configurar um sistema que substitui o Gmail, o Google Drive / Dropbox, os Contatos do Google, o Google Calendar e o 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.

Construiremos um sistema que

  1. suporta um número arbitrário de domínios e usuários. Isso facilita o compartilhamento de seu servidor com a família e os amigos, para que eles também tenham controle sobre seus dados pessoais e possam compartilhar o custo do servidor com você. As pessoas que compartilham seu servidor podem usar seus próprios nome de domínio ou compartilhe o seu.
  2. Permite enviar e receber seus e-mails de qualquer rede 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. criptografa o tráfego da rede 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. oferece antispam state-of-the-art, combinando listas negras de spammers conhecidos, greylisting automático e filtragem de spam adaptativo. Re-treinamento do filtro de spam adaptativo se um e-mail é mal classificado é simplesmente feito movendo o spam dentro ou fora da pasta de Lixo / Spam. Além disso, o servidor contribuirá para os esforços de luta contra o spam baseados na comunidade.
  5. requer apenas alguns minutos de manutenção de vez em quando, basicamente para instalar atualizações de segurança e verificar brevemente os logs do servidor. Adicionar um novo endereço de e-mail resume-se a adicionar um registro a um banco de dados. 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.

 

Este artigo foi inspirado e baseou-se em trabalhos anteriores

Este artigo se baseia em dois outros artigos, nomeadamente 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, …).
  • Eu adicionei 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.

Obter um servidor privado virtual, um nome de domínio, e configurá-los

Let’s start by setting the basic infrastructure: our virtual private server and our nome de domínio.

I’ve had an excellent experience with the Virtual Private Servers (VPS) do 1984.is de Linode. Neste artigo, usaremos Debian Wheezy, para o qual tanto o 1984 como o Linode fornecem imagens pré-fabricadas para implantar no seu VPS. Eu gosto do 1984 porque os servidores estão alojados na Islândia, que são exclusivamente de energia renovável (geotérmica e hidrelétrica) e, portanto, não contribuem para a mudança climática, ao contrário as usinas de energia do carvão em que a maioria dos datacenters baseados nos EUA atualmente correu em. Além disso, eles enfatizam liberdades civis, transparência, liberdade de Software livre.

Pode ser uma boa ideia iniciar um arquivo para armazenar os vários senhas precisaremos definir no servidor (contas de usuário, contas de e-mail, contas na nuvem, banco de dados 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 pense por mais de 10 anos, também com satisfação. Para este artigo, vamos configurar uma zona com o nome jhausse.net. Em seguida, adicionamos um host chamado cloud.jhausse.net 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.

Finalmente, defina o Registro PTR (reverso DNS) para que o Endereço IP of the host maps back to its name. If you don’t understand the previous sentence, read Este artigo para obter o fundo. Se você usar o Linode, poderá definir o registro PTR no painel de controle na seção Acesso Remoto. Com 1984, entre em contato com o suporte técnico que irá ajudá-lo com isso.

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

Então, em / etc / ssh / sshd_config, montamos

 PermitRootLogin não

e recarregue o servidor ssh

 serviço ssh recarregar

Then, we’ll need to change the hostname of the server. Edit / etc / hostname de modo que tenha apenas uma única linha com o seu nome de host, no nosso caso

 nuvem

Then, edit the ssh server’s public key files /etc/ssh/ssh_host_rsa_key.pub, /etc/ssh/ssh_host_dsa_key.pub, /etc/ssh/ssh_host_ecdsa_key.pub de modo que o final do arquivo reflita seu nome de host ou instância root @ cloud. Em seguida, reinicie o sistema para se certificar de que o nome do host está fixo onde quer que esteja

 reinicialização

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

 apt-get update apt-get dist-upgrade service exim4 parar apt-get remover exim4 rpcbind apt-get autoremove apt-get install vim

Eu gosto de usar o vim para editar arquivos de configuração remotamente. Para isso, ajuda a ativar automaticamente o destaque de sintaxe. Fazemos isso adicionando

 syn on

to ~ / .vimrc.

Configure postfix e dovecot para enviar e receber e-mails

 apt-get instale o postfix-mysql dovecot-core dovecot-imapd dovecot-mysql mysql-servidor dovecot-lmtpd postgrey

No Postfix menu de configuração, selecionamos Site da Internet, e defina o nome do e-mail do sistema para jhausse.net.

Agora vamos configurar um banco de dados para armazenar a lista de domínios hospedados no nosso servidor, a lista de usuários para cada um desses domínios (juntamente com sua senha) e uma lista de alias de email (para encaminhar e-mails de um determinado endereço para outro 1).

 mysqladmin -p create mailserver mysql -p mailserver mysql> GRANT SELECT ON mailserver. * TO 'mailuser' @ 'localhost' IDENTIFICADO POR 'mailuserpass'; mysql> FLUSH PRIVILEGES; mysql> CREATE TABLE `virtual_domains` (` id` int (11) NOT NULL auto_increment, `nome` varchar (50) NOT NULL, PRIMARY KEY (` id`)) ENGINE = InnoDB DEFAULT CHARSET = utf8; mysql> CREATE TABLE `virtual_users` (` id` int (11) NOT NULL auto_increment, `domain_id` int (11) NOT NULL,` password` varchar (106) NOT NULL, `email` varchar (100) NÃO NULL, PRIMÁRIO KEY (`id`), UNIQUE KEY` email` (`email`), FOREIGN KEY (domain_id) REFERÊNCIAS virtual_domains (id) ON DELETE CASCADE) ENGINE = InnoDB DEFAULT CHARSET = utf8; mysql> CREATE TABLE `virtual_aliases` (` id` int (11) NOT NULL auto_increment, `domain_id` int (11) NOT NULL,` source` varchar (100) NOT NULL, `destination` varchar (100) NO NULL, PRIMARY KEY (`id`), FOREIGN KEY (domain_id) REFERÊNCIAS virtual_domains (id) ON DELETE CASCADE) ENGINE = InnoDB DEFAULT CHARSET = utf8;

Vamos hospedar o jhausse.net 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 roudy@jhausse.net.

 mysql> INSERT INTO virtual_domains (`name`) VALUES ('jhausse.net'); mysql> INSERT INTO virtual_domains (`name`) VALUES ('otherdomain.net'); mysql> INSERT INTO virtual_aliases (`domain_id`,` fonte`, `destino`) VALUES ('1', 'postmaster', 'roudy@jhausse.net'); mysql> INSERT INTO virtual_aliases (`domain_id`,` fonte`, `destino`) VALUES ('2', 'postmaster', 'roudy@jhausse.net');

Agora, adicionamos uma conta de e-mail hospedada localmente roudy@jhausse.net. Primeiro, geramos um hash de senha para ele:

 doveadm pw -s SHA512-CRYPT

e, em seguida, adicione o hash ao banco de dados

 mysql> INSERT INTO `mailserver``virtual_users` (` domain_id`, `password`,` email`) VALORES ('1', '$ 6 $ YOURPASSWORDHASH', 'roudy@jhausse.net');

Agora que nossa lista de domínios, alias e usuários estão em vigor, configuraremos o postfix (servidor SMTP, para o correio de saída). Substitua o conteúdo de /etc/postfix/main.cf com o seguinte:

 myhostname = cloud.jhausse.net myorigin = / etc / mailname mydestination = localhost.localdomain, localhost mynetworks_style = host # Desativamos a retransmissão no caso geral smtpd_recipient_restrictions = allow_mynetworks, reject_unauth_destination # Requisitos em servidores que nos contatam: verificamos que o cliente não é um spammer # conhecido (reject_rbl_client) e usar um mecanismo graylist # (postgrey) para ajudar a reduzir o spam (check_policy_service) smtpd_client_restrictions = allow_mynetworks, reject_rbl_client zen.spamhaus.org, check_policy_service inet: 127.0.0.1: 10023 disable_vrfy_command = sim inet_interfaces = all smtpd_banner = $ myhostname ESMTP $ mail_name (Debian / GNU) biff = não append_dot_mydomain = não readme_directory = não # parâmetros TLS smtpd_tls_cert_file = / etc / ssl / certs / cloud.crt smtpd_tls_key_file = / etc / ssl / private / cloud.key smtpd_use_tls = sim smtpd_tls_auth_only = yes smtp_tls_security_level = pode smtp_tls_loglevel = 1 smtpd_tls_loglevel = 1 smtpd_tls_received_header = sim smtpd_ tls_session_cache_database = btree: $ {data_directory} / smtpd_scache smtp_tls_session_cache_database = btree: $ {data_directory} / smtp_scache # Entrega alias_maps = hash: / etc / aliases alias_database = hash: / etc / aliases message_size_limit = 50000000 recipient_delimiter = + # As próximas linhas são úteis para configurar um MX de backup para myfriendsdomain.org # relay_domains = myfriendsdomain.org # relay_recipient_maps = # Domínios virtuais virtual_transport = lmtp: unix: private / dovecot-lmtp virtual_mailbox_domains = mysql: / etc / postfix / mysql-virtual-mailbox-domain. cf virtual_mailbox_maps = mysql: /etc/postfix/mysql-virtual-mailbox-maps.cf virtual_alias_maps = mysql: /etc/postfix/mysql-virtual-alias-maps.cf local_recipient_maps = $ virtual_mailbox_maps

Agora precisamos ensinar o postfix a descobrir quais domínios gostaríamos que ele aceitasse e-mails para usar o banco de dados que acabamos de configurar. Crie um novo arquivo /etc/postfix/mysql-virtual-mailbox-domains.cf e adicione o seguinte:

 user = mailuser senha = mailuserpass hosts = 127.0.0.1 dbname = pergunta do servidor de correio = SELECT 1 FROM virtual_domains WHERE nome = '% s'

Nós ensinamos postfix para descobrir se existe uma conta de e-mail específica criando /etc/postfix/mysql-virtual-mailbox-maps.cf com o seguinte conteúdo

 user = mailuser password = hosts de mailuserpass = 127.0.0.1 dbname = query server server = SELECT 1 FROM virtual_users WHERE email = '% s'

Finalmente, o postfix usará /etc/postfix/mysql-virtual-alias-maps.cf para procurar alias de e-mail

 user = mailuser password = mailuserpass hosts = 127.0.0.1 dbname = query server server = SELECIONAR virtual_aliases.destination como destino FROM virtual_aliases, virtual_domains WHERE virtual_aliases.source = '% u' AND virtual_aliases.domain_id = virtual_domains.id AND virtual_domains.name = '% d'

Com tudo isso no lugar, agora é hora de testar se o postfix pode consultar nosso banco de dados corretamente. Nós podemos fazer isso usando mapa postal:

 postmap -q jhausse.net mysql: /etc/postfix/mysql-virtual-mailbox-domains.cf postmap -q roudy@jhausse.net mysql: /etc/postfix/mysql-virtual-mailbox-maps.cf postmap -q postmaster @ jhausse.net mysql: /etc/postfix/mysql-virtual-alias-maps.cf postmap -q bob@jhausse.net mysql: /etc/postfix/mysql-virtual-alias-maps.cf

Se você configurar tudo corretamente, as duas primeiras consultas devem retornar 1, a terceira consulta deve retornar roudy@jhausse.net e o último não devolve nada.

Now, let’s set up dovecot (the IMAP server, to fetch incoming mail on the server from our devices). Edit /etc/dovecot/dovecot.conf para definir os seguintes parâmetros:

 # Habilite o protocolo instalado #! Include_try /usr/share/dovecot/protocols.d/*.protocol protocols = imap lmtp

o que só permitirá que imap (nos permita buscar e-mails) e lmtp (que postfix usará para receber e-mails recebidos para dovecot). Editar /etc/dovecot/conf.d/10-mail.conf para definir os seguintes parâmetros:

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

que irá armazenar e-mails em / var / mail / domainname / username. Observe que essas configurações são espalhadas em locais diferentes no arquivo, e às vezes já estão lá para nós configurarmos: precisamos apenas comentá-los. As outras configurações que já estão no arquivo, você pode deixar como está. Teremos que fazer o mesmo para atualizar configurações em muitos outros arquivos no restante deste artigo. Dentro /etc/dovecot/conf.d/10-auth.conf, defina os parâmetros:

 disable_plaintext_auth = yes auth_mechanisms = plain #! include auth-system.conf.ext! include auth-sql.conf.ext

In /etc/dovecot/conf.d/auth-sql.conf.ext, defina os seguintes parâmetros:

 Passdb {driver = sql args = /etc/dovecot/dovecot-sql.conf.ext} userdb {driver = static args = uid = mail gid = mail home = / var / mail /% d /% n}

onde acabamos de ensinar dovecot que os usuários têm seus e-mails em / var / mail / domainname / username e para procurar senhas do banco de dados que acabamos de criar. Agora, ainda precisamos ensinar o Dovecot como exatamente usar o banco de dados. Para fazer isso, coloque o seguinte /etc/dovecot/dovecot-sql.conf.ext:

 driver = mysql connect = host = localhost dbname = servidor de servidor de email = senha do usuário do correio postal = mailuserpass default_pass_scheme = SHA512-CRYPT password_query = SELECIONE o e-mail como usuário, senha FROM virtual_users WHERE email = '% u';

Nós agora corrigimos permissões em arquivos de configuração

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

Quase lá! Nós só precisamos editar mais alguns arquivos. Dentro /etc/dovecot/conf.d/10-master.conf, defina os seguintes parâmetros:

 serviço imap-login {inet_listener imap {#port = 143 port = 0} inet_listener imaps {port = 993 ssl = yes}} serviço pop3-login {inet_listener pop3 {#port = porta 110 = 0} inet_listener pop3s {#port = 995 #ssl = sim porta = 0}} serviço lmtp {unix_listener / var / spool / postfix / private / dovecot-lmtp {mode = 0666 group = postfix user = postfix} user = mail} service auth {unix_listener auth-userdb {mode = 0600 user = mail #group =} # Postfix smtp-auth unix_listener / var / spool / postfix / private / auth {mode = 0666 user = postfix group = postfix} # O processo de autenticação é executado como este usuário. #user = $ default_internal_user usuário = dovecot} service auth-worker {user = mail}

Note que nós configuramos portas para todos os serviços, mas sim para 0, o que efetivamente os desabilita. Então, em /etc/dovecot/conf.d/15-lda.conf, especifique um endereço de e-mail para o postmaster:

 postmaster_address = postmaster@jhausse.net

Por último, mas não menos importante, precisamos gerar um par de público e chave privada para o servidor, que usaremos em dovecot e postfix:

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

Certifique-se de especificar o seu Nome de domínio totalmente qualificado (FQDN) do servidor, no nosso caso:

 Nome comum (por exemplo, FQDN do servidor ou SEU nome) []: cloud.jhausse.net

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 = necessário 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!

 serviço de reinicialização do dovecot serviço de reinicialização do postfix

Do próprio servidor, tente enviar um email para um usuário local:

 telnet localhost 25 EHLO cloud.jhausse.net CORREIO: youremail@domain.com rcpt para: roudy@jhausse.net data Assunto: Olá! Este é um teste, para verificar se o cloud.jhausse.net está pronto para ser um MX! Felicidades, Roudy. SAIR

O servidor deve aceitar nosso email com uma mensagem como

 250 2.0.0 Ok: enfileirado como 58D54101DB

Verifique os logs em /var/log/mail.log se tudo corresse bem. Deve haver uma linha dizendo algo como

 Nov 14 07: 57: 06 nuvem dovecot: lmtp (4375, roudy@jhausse.net): ... salvou o email no 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 cloud.jhausse.net:25 -starttls smtp EHLO cloud.jhausse.net CORREIO: roudy@jhausse.net rcpt para: bob@gmail.com

para qual o servidor deve responder

 554 5.7.1 <bob@gmail.com>: acesso ao relé negado

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 Serviço indisponível; Host do cliente [87.68.61.119] bloqueado usando zen.spamhaus.org; http://www.spamhaus.org/query/bl?ip=87.68.61.119

Isso significa que você está tentando entrar em contato com o servidor Endereço 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 main.cf 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 tente enviar um e-mail válido por SMTP na porta 25, que os servidores de e-mail comuns usam para se comunicar:

 openssl s_client -connect cloud.jhausse.net:25 -starttls smtp EHLO cloud.jhausse.net CORREIO DE: youremail@domain.com rcpt para: roudy@jhausse.net

para qual o servidor deve responder

 Host do cliente rejeitado: Greylisted, consulte http://postgrey.schweikert.ch/help/jhausse.net.html

o que mostra que pós-cinza 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 cloud.jhausse.net:993 1 login roudy@jhausse.net "mypassword" LISTA 2 "" "*" 3 SELECIONE INBOX 4 UID buscar 1: 1 (UID RFC822.SIZE BANDEIRAS 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/master.cf:

 submissão net - - - - smtpd -o nome_do_syslog = postfix / submissão -o smtpd_tls_security_level = encrypt -o smtpd_sasl_auth_enable = yes -o smtpd_client_restrictions = permissão_sasl_authenticated, rejeitar -o smtpd_sasl_type = dovecot -o smtpd_sasl_path = private / auth -o smtpd_sasl_security_options = noanonymous - o smtpd_recipient_restrictions = permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination

e recarregue o postfix

 service postfix reload

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 cloud.jhausse.net:587 -starttls smtp EHLO cloud.jhausse.net

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

 CORREIO: asdf@jkl.net rcpt para: bob@gmail.com 554 5.7.1 <bob@gmail.com>: Acesso de retransmissão negado

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 cloud.jhausse.net:587 -starttls smtp EHLO cloud.jhausse.net AUTH PLAIN DGplYW5AMTk4NGNsb3VQLm5ldAA4bmFmNGNvNG5jOA == CORREIO DE: asdf@jkl.net rcpt para: bob@gmail.com

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

 telnet cloud.jhausse.net 25 EHLO cloud.jhausse.net CORREIO DE: youremail@domain.com rcpt para: postmaster@jhausse.net data Assunto: Virtual alias test Caro postmaster, Muito tempo sem ouvir! Espero que o seu MX esteja funcionando de forma suave e segura. Sinceramente, Roudy. SAIR

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

 openssl s_client -crlf -connect cloud.jhausse.net:993 1 login roudy@jhausse.net "mypassword" LISTA 2 "" "*" 3 SELECIONAR CAIXA * 2 EXISTS * 2 RECENT 4 LOGOUT

Neste ponto, temos um servidor de email funcional, tanto para emails de entrada como de saída. Podemos configurar nossos dispositivos para usá-lo.

PS: did you remember to try sending an email to an account hosted by the server through port 25 novamente, para verificar se você não está mais bloqueado pelo postgrey?

Evitar que o SPAM chegue à sua caixa de entrada

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 por isso.

 apt-get instalar dspam dovecot-antispam postfix-pcre dovecot-sieve

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, defina os seguintes parâmetros para esses valores:

 TrustedDeliveryAgent "/usr/sbin/sendmail" UntrustedDeliveryAgent "/ usr / lib / dovecot / entrega -d% u" Tokenizer osb IgnoreHeader Status do X-Spam IgnoreHeader X-Spam-Scanned IgnoreHeader X-Virus-Scanner-Resultado IgnoreHeader X-Virus -Scanned IgnoreHeader X-DKIM IgnoreHeader Assinatura DKIM IgnoreHeader DomínioKey-Assinatura IgnoreHeader X-Google-Dkim-Signature ParseToHeaders em ChangeModeOnParse off ChangeUserOnParse ServerPID completo /var/run/dspam/dspam.pid ServerDomainSocketPath "/ var / run / dspam / dspam. meia "ClientHost /var/run/dspam/dspam.sock

Então, em /etc/dspam/default.prefs, altere os seguintes parâmetros para:

 spamAction = entregar # {quarentena | tag | entregar} -> padrão: quarentena signatureLocation = cabeçalhos # {mensagem | cabeçalhos} -> default: message showFactors = on

Agora precisamos conectar o dspam ao postfix e ao dovecot adicionando essas duas linhas no final do /etc/postfix/master.cf:

 dspam unix -nn -10 pipe flags = usuário = dspam argv = / usr / bin / dspam --deliver = inocente, spam --user $ recipient -i -f $ remetente - $ recipient dovecot unix - nn - - pipe flags = Usuário de DRhu = mail: mail argv = / usr / lib / dovecot / entrega -f $ {remetente} -d $ {destinatário}

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/main.cf Para mudar o smtpd_client_restrictions ao seguinte:

 smtpd_client_restrictions = permit_mynetworks, reject_rbl_client zen.spamhaus.org, check_policy_service inet: 127.0.0.1: 10023, pc_customer_cliente_de_check: / etc / postfix / dspam_filter_access

No final do arquivo, também adicione:

 # Para o DSPAM, digitalize apenas um e-mail de cada vez dspam_destination_recipient_limit = 1

Agora precisamos especificar o filtro que definimos. Basicamente, diremos ao postfix para enviar todos os emails (/./) para dspam através de um socket unix. Crie um novo arquivo / etc / postfix / dspam_filter_access e coloque a seguinte linha:

 /./ 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.confedite o imap mail_plugins parâmetro de plugins tal que:

 mail_plugins = $ mail_plugins antispam

e adicione uma seção para o lmtp:

 protocol lmtp {# Lista separada por espaço de plugins para carregar (o padrão é global mail_plugins). mail_plugins = $ mail_plugins sieve}

Nós agora configuramos o plugin dovecot-antispam. Editar /etc/dovecot/conf.d/90-plugin.conf para adicionar o seguinte conteúdo à seção do plugin:

 plugin {... # Antispam (DSPAM) antispam_backend = dspam antispam_allow_append_to_spam = YES antispam_spam = Lixo; Spam antispam_trash = Lixo; lixeira antispam_signature = Assinatura X-DSPAM antispam_signature_missing = erro antispam_dspam_binary = / usr / bin / dspam antispam_dspam_args = --user; % u; - deliver =; - source = error antispam_dspam_spam = --class = spam antispam_dspam_notspam = --class = inocente antispam_dspam_result_header = X-DSPAM-Resultado}

e em /etc/dovecot/conf.d/90-sieve.conf, especifique um script de peneira padrão que será aplicado a todos os usuários do servidor:

 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 com o seguinte conteúdo:

 require ["regex", "fileinto", "imap4flags"]; # Catch mail marcado como Spam, exceto Spam re-treinado e entregue na caixa de correio se allof (cabeçalho: regex "X-DSPAM-Resultado" "^ (Spam | Vírus | Bl [ao] cklisted) $", não cabeçalho: contém "X -SPAM-Reclassificado "Inocente") {# Marcar como lida # setflag "\ Visto"; # Mover para o arquivo da pasta Junk em "Junk"; # Pare de processar aqui pare; }

Agora precisamos compilar este script para que o dovecot possa executá-lo. Também precisamos dar permissões apropriadas.

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

Por fim, precisamos corrigir permissões em dois arquivos de configuração do postfix que o dspam precisa ler:

 chmod 0644 /etc/postfix/dynamicmaps.cf /etc/postfix/main.cf

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

 serviço de reinicialização do dovecot serviço de reinicialização do postfix

e testar o antispam, entrando em contato com o servidor de um host remoto (por exemplo, o computador que estamos usando para configurar o servidor):

 openssl s_client -connect cloud.jhausse.net:25 -starttls smtp EHLO cloud.jhausse.net CORREIO DE: youremail@domain.com rcpt para: roudy@jhausse.net DATA Assunto: Teste DSPAM Oi Roudy, como você gostaria de comer algum presunto hoje à noite? Seu, J. SAIR

Let’s check if the mail arrived:

 openssl s_client -crlf -connect cloud.jhausse.net:993 1 login roudy@jhausse.net "mypassword" LISTA 2 "" "*" 3 SELECIONE INBOX 4 UID buscar 3: 3 (UID RFC822.SIZE BANDEIRAS BODY.PEEK [] )

Qual deve devolver algo o email com uma coleção da bandeira ajustada pelo Spam que se parece com isto:

 X-DSPAM-Resultado: Inocente X-DSPAM-Processado: Sun Oct 5 16: 25: 48 2014 X-DSPAM-Confiança: 1.0000 X-DSPAM-Probabilidade: 0.0023 X-DSPAM-Signature: 5431710c178911166011737 X-DSPAM-Factores: 27 , Recebido * Postfix + com, 0.40000, Recebido * com + # + id, 0.40000, como + # + # + # + ham, 0.40000, alguns + # + hoje, 0.40000, Recebido * certificado + solicitado, 0.40000, Recebido * client + certificado, 0.40000, Recebido * para + roudy, 0.40000, Recebido * Sol + # + # + # + 16, 0.40000, Recebido * Sol + # + Oct, 0.40000, Recebido * roudy + # + # + # + Oct, 0.40000, eat + some, 0.40000 , Recebido * 5 + # + # + 16, 0.40000, Recebido * cloud.jhausse.net + # + # + # + id, 0.40000, Roudy + # + # + # + para, 0.40000, Recebido * Out + x + 16, 0.40000, para + # + # + ham, 0.40000, Recebido * Não + # + # + solicitado, 0.40000, Recebido * jhausse.net + # + # + Oct, 0.40000, Recebido * 256 + 256, 0.40000, como + # + # + alguns, 0.40000, Recebido * ESMTPS + id, 0.40000, como + # + # + para, 0.40000, hoje à noite + Yours, 0.40000, Received * com + cipher, 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.

Verifique se os e-mails que você envia passam por filtros de spam

Nosso objetivo nesta seção será fazer com que nosso servidor de e-mail apareça o mais limpo possível para o mundo e dificultar que os spammers enviem e-mails em nosso nome. Como efeito colateral, isso nos ajudará a obter nossos e-mails por meio dos filtros de spam de outros servidores de e-mail.

Estrutura de Políticas do Remetente

Sender Policy Framework (SPF) is a record that your add to your zone which declares which mail servers on the whole internet can send emails for your domain name. Setting it up is very easy, use the SPF wizard at microsoft.com to generate your SPF record, and then add it to your zone as a TXT record. It will look like this:

 jhausse.net 300 IN TXT v = spf1 mx mx: cloud.jhausse.net - todos

PTR reverso

We discussed this point mais cedo 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.

OpenDKIM

When we activate 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-tools

E configure-o editando /etc/opendkim.conf para que fique assim:

 ## ## opendkim.conf - arquivo de configuração para o filtro OpenDKIM ## Canonicalization relaxado / relaxado ExternalIgnoreList refile: / etc / opendkim / TrustedHosts InternalHosts refile: / etc / opendkim / TrustedHosts Refil de KeyTable: / etc / opendkim / KeyTable LogWhy Sim MinimumKeyBits Modo 1024 sv PidFile /var/run/opendkim/opendkim.pid SigningTable refile: /etc/opendkim/ SigningTable Socketinet: 8891 @ localhost Syslog Sim SyslogSuccess SimDiretório Temporário / var / tmp UMask 022 ID de Usuário 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 com o seguinte conteúdo

 127.0.0.1

e um novo arquivo chamado / etc / opendkim / KeyTable com o seguinte conteúdo

 cloudkey jhausse.net:mail:/etc/opendkim/mail.private

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 e adicione a seguinte linha:

 *@jhausse.net cloudkey

which tells OpenDKIM that every emails of the jhausse.net 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:

 cat mail.txt

e depois adicioná-lo ao seu arquivo de zona como registro TXT, que deve ficar assim

 mail._domainkey.cloud1984.net. 300 IN TXT v = DKIM1; k = rsa; p = MIGfMA0GCSqG ...

Finalmente, precisamos informar ao postfix para assinar e-mails de saída. No fim de /etc/postfix/main.cf, adicionar:

 # Agora para o OpenDKIM: assinaremos todos os e-mails enviados smtpd_milters = inet: 127.0.0.1: 8891 non_smtpd_milters = $ smtpd_milters milter_default_action = aceitar

E recarregue os serviços correspondentes

 serviço postfix reload service opendkim restart

Now let’s test if our OpenDKIM public key can be found and matches the chave privada:

 opendkim-testkey -d jhausse.net -s mail -k mail.privado -vvv

que deve retornar

 opendkim-testkey: tecla OK

Para isso, você pode precisar esperar um pouco até que o servidor de nomes tenha recarregado a zona (no Linode, isso acontece a cada 15min). Você pode usar cavar para verificar se a zona foi recarregada ainda.

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. Para enviar um email para um endereço de teste fornecido a nós Brandon’s webpage, podemos executar o seguinte comando no servidor

 mail -s CloudCheck ihAdmTBmUH@www.brandonchecketts.com

On Brandon’s webpage, you should then see result = pass in the ‘DKIM Signature’ section, and Resultado: passe in the ‘SPF Information’ section. If our emails pass this test, just regenerate an OpenDKIM key without the -t alterne, carregue a nova chave no arquivo de zona e volte a testar se ainda passar nos testes. Se sim, parabéns! Você acabou de configurar o OpenDKIM e o SPF no seu servidor!

Host calendários, contatos, arquivos com Owncloud e configurar um webmail com 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.

A instalação do Owncloud é direta e está bem descrita aqui. 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 http://download.opensuse.org/repositories/isv:/ownCloud:/community/Debian_7.0/ / >> >> /etc/apt/sources.list.d/owncloud.list wget http: // download. opensuse.org/repositories/isv:ownCloud:community/Debian_6.0/Release.key apt-key add - <Liberar.chave apt-get update apt-get instalar apache2 owncloud roundcube

Quando solicitado, escolha dbconfig e então diga que você quer roundcube usar mysql. Então, forneça o mysql senha de root e defina uma boa senha para o usuário do roundcube mysql. Em seguida, edite o arquivo de configuração do roundcube /etc/roundcube/main.inc.php para que o login no roundcube seja padronizado para usar seu servidor 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

e editar /etc/apache2/ports.conf para definir os seguintes parâmetros:

 NameVirtualHost *: 80 Listen 80 Nome_do_servidor www.jhausse.net <IfModule mod_ssl.c> # Se você adicionar NameVirtualHost *: 443 aqui, você também terá que alterar # a instrução VirtualHost em / etc / apache2 / sites-available / default- ssl # para <VirtualHost *: 443> # servidor Indicação de nome para SSL nomeado hosts virtuais atualmente não é suportado pelo MSIE em Windows XP. NameVirtualHost *: 443 Ouvir 443 </ IfModule> <IfModule mod_gnutls.c> Ouvir 443 </ IfModule>

We’ll set up a default site para conexões criptografadas com o servidor da Web como https://www.jhausse.net para / Var / www. Editar / etc / apache2 / sites-available / default-ssl:

 <VirtualHost _default_: 443> ServerAdmin webmaster @ localhost DocumentRoot / var / www Nome_do_servidor www.jhausse.net [...] <Diretório / var / www / owncloud> Negar de todo </ Diretório> [...] 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 http://www.jhausse.net para / Var / www. Editar / etc / apache2 / sites-available / default:

 <VirtualHost _default_: 443> DocumentRoot / var / www NomeServidor www.jhausse.net [...] <Diretório / var / www / owncloud> Negar de todos </ Directory> </ VirtualHost>

That way, we can serve pages for www.jhausse.net by putting them in /var/www. The ‘Deny from all’ directive prevents access to Owncloud through www.jhausse.net: we will set it up to access it through https://cloud.jhausse.net ao invés.

Vamos agora configurar o webmail (roundcube) para que seja acessado através de https://webmail.jhausse.net. Editar / etc / apache2 / sites-available / roundcube para ter o seguinte conteúdo:

 <IfModule mod_ssl.c> <VirtualHost *: 443> ServerAdmin webmaster @ localhost DocumentRoot / var / lib / roundcube # O nome do host sob o qual você gostaria de acessar o webmail ServerName webmail.jhausse.net <Directory /> Opções FollowSymLinks AllowOverride Nenhum </ Directory> ErrorLog $ {APACHE_LOG_DIR} /error.log # Os valores possíveis incluem: debug, info, notice, alert, erro, crit, # alert, emerg. LogLevel warn CustomLog $ {APACHE_LOG_DIR} /ssl_access.log combinados # SSL Engine Switch: # Habilitar / Desabilitar SSL para este host virtual. SSLEngine em # não permitem conexões não seguras # SSLRequireSSL SSLCipherSuite HIGH: MEDIUM # Um certificado autoassinado (snakeoil) pode ser criado instalando # o pacote ssl-cert. Veja #usus/share/doc/apache2.2-common/README.Debian.gz para mais informações. # Se a chave e o certificado estiverem armazenados no mesmo arquivo, apenas a diretiva # SSLCertificateFile será necessária. SSLCertificateFile /etc/ssl/certs/cloud.crt SSLCertificateKeyFile /etc/ssl/private/cloud.key # Esses aliases não funcionam corretamente com vários hosts em seu servidor apache # Descomente-os a usá-lo ou adapte-os ao seu Alias ​​de configuração / programa / js / tiny_mce / / usr / share / tinymce / www / # Acesso aos arquivos tinymce <Diretório "/ usr / share / tinymce / www /"> Opções Índices MultiViews FollowSymLinks AllowOverride Nenhum Ordem permitir, negar permissão de todos </ Directory > <Directory / var / lib / roundcube /> Opções + FollowSymLinks # Isso é necessário para analisar /var/lib/roundcube/.htaccess. Veja seu conteúdo # antes de definir AllowOverride como None. AllowOverride Todos os pedidos permitem, negam permissão de todos os </ Directory> # Protegendo diretórios básicos: <Diretório / var / lib / roundcube / config> Opções -FollowSymLinks AllowOverride Nenhum </ Directory> <Diretório / var / lib / roundcube / temp> Opções -FollowSymLinks AllowOverride Nenhum Ordem permite, nega Deny de todos os </ Directory> <Diretório / var / lib / roundcube / logs> Opções -FollowSymLinks AllowOverride Nenhum Ordem permite negar Deny de todos </ Directory> <FilesMatch "\. (Cgi | shtml | phtml | php) $ "> SSLOptions + StdEnvVars </ FilesMatch> <Diretório / usr / lib / cgi-bin> SSLOptions + StdEnvVars </ Diretório> # Ajustes do protocolo SSL: # O padrão seguro e padrão, mas ainda, SSL / TLS Em conformidade com a abordagem de desligamento # é que o mod_ssl envia o alerta de notificação de fechamento, mas não espera # o alerta de notificação de fechamento do cliente. Quando você precisa de uma abordagem # de desligamento diferente, você pode usar uma das seguintes variáveis: # o ssl-unclean-shutdown: # Isso força um desligamento imundo quando a conexão é fechada, ou seja, não # SSL alerta de notificação de fechamento é enviado ou permitido para recebimento. Isso viola # o padrão SSL / TLS, mas é necessário para alguns navegadores com morte cerebral. Use # isto quando você receber erros de E / S por causa da abordagem padrão, em que # mod_ssl envia o alerta de notificação de fechamento. # o ssl-accurate-shutdown: # Isso força um desligamento preciso quando a conexão é fechada, ou seja, um alerta de notificação de fechamento # SSL é enviado e o mod_ssl aguarda o alerta # de fechamento de notificação do cliente. Isso é compatível com o padrão 100% SSL / TLS, mas na prática muitas vezes faz com que as conexões sejam suspensas com navegadores com morte cerebral. Use # this somente para navegadores em que você saiba que o número de implementação SSL deles # funciona corretamente. # Aviso: A maioria dos problemas de clientes quebrados também está relacionada ao recurso de keep-alive HTTP #, então você também quer desativar o # keep-alive para esses clientes também. Use a variável "nokeepalive" para isso. # Da mesma forma, é necessário forçar alguns clientes a usar HTTP / 1.0 para solucionar # sua implementação HTTP / 1.1 quebrada. Use as variáveis ​​"downgrade-1.0" e # "force-response-1.0" para isso. BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade 1.0 force-response-1.0 # O MSIE 7 e o mais recente devem poder usar o KeepMail BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </ VirtualHost> </ IfModule>

e declare o servidor em seu DNS, por exemplo:

 webmail.jhausse.net. 300 NO CNAME cloud.jhausse.net.

Now let’s enable these three websites

 a2ensite default default-ssl serviço roundcube apache2 restart

e o webmail, acessível sob https://webmail.jhausse.net, should basically work. Log in using the full email (e.g. roudy@jhausse.net) 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.

Por último, mas não menos importante, criaremos um host virtual para owncloud, colocando o seguinte conteúdo em / etc / apache2 / sites-available / owncloud:

 <IfModule mod_ssl.c> <VirtualHost *: 443> ServidorAdmin webmaster @ localhost DocumentRoot / var / www / owncloud NomeServidor cloud.jhausse.net <Directory /> Opções FollowSymLinks AllowOverride Nenhum </ Directory> <Diretório / var / www / owncloud> Opções Índices FollowSymLinks MultiViews AllowOverride Todos Order permitem, negam permissão de todos </ Directory> ScriptAlias ​​/ cgi-bin / / usr / lib / cgi-bin / <Directory "/ usr / lib / cgi-bin"> AllowOverride Nenhuma Opções + ExecCGI -MultiViews + SymLinksIfOwnerMatch Order permite, negue o Allow de todos </ Directory> ErrorLog $ {APACHE_LOG_DIR} /error.log # Os valores possíveis incluem: debug, info, notice, alert, erro, crit, # alert, emerg. LogLevel warn CustomLog $ {APACHE_LOG_DIR} /ssl_access.log combinado # SSL Engine Switch: # Habilitar / Desabilitar SSL para este host virtual. SSLEngine em # não permitem conexões não seguras # SSLRequireSSL SSLCipherSuite ALTA: MÉDIA SSLCertificateFile /etc/ssl/certs/cloud.crt SSLCertificateKeyFile /etc/ssl/private/cloud.key <FilesMatch "\. (Cgi | shtml | phtml | php) $ "> SSLOptions + StdEnvVars </ FilesMatch> <Diretório / usr / lib / cgi-bin> SSLOptions + StdEnvVars </ Diretório> BrowserMatch" MSIE [2-6] "\ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force- response-1.0 # O MSIE 7 e o mais recente devem poder usar o KeepMail BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </ VirtualHost> </ IfModule>

e ativar o owncloud executando

 a2ensite serviço owncloud apache2 recarregar

Então vá em frente configurar owncloud conectando-se a https://cloud.jhausse.net/ em um navegador da web.

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

Sincronize seus dispositivos com a nuvem

Para sincronizar seus e-mails, basta usar seu cliente de e-mail favorito: o programa de e-mail padrão no Android ou iOS, k9mailou Thunderbird no seu PC. Ou você também pode usar o webmail que configuramos.

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.

Para arquivos, existe um aplicativo Android chamado Owncloud para acessar seus arquivos a partir do seu telefone e carregar automaticamente fotos e vídeos que você leva para a sua nuvem. Acessar seus arquivos no seu Mac / PC é fácil e bem descrito na documentação do Owncloud.

Últimas dicas

During the first few weeks, it’s a good idea to monitor / var / log / syslog de /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.

Para adicionar outro usuário de email, basta adicionar uma linha ao virtual_users mesa do servidor de e-mail DB.

Para adicionar um domínio, basta adicionar uma linha ao virtual_domains mesa. Então atualize / etc / opendkim / SigningTable para obter e-mails de saída assinados, carregar a chave OpenDKIM para a zona e recarregar o OpenDKIM.

O Owncloud possui seu próprio DB de usuário, que pode ser gerenciado fazendo login no Owncloud como administrador.

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 de relay_recipient_maps setting in Postfix’s main.cf 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 1984.is, I set up a basic but sufficient automatic backup system using on crontabs and scp.

 

One Response

Deixe um comentário

Este site usa o Akismet para reduzir o spam. Saiba como seus dados de comentário são processados.

GTranslate Your license is inactive or expired, please subscribe again!