Rss

  • youtube
  • linkedin
  • google

Archives for : Linux

Servidor de Email – Parte 4 – Postfix 3

Parte 1 – Configurar arquivo main.cf

Esta é a terceira parte do processo de criação do servidor de Email em um CentOS 7 e a primeira parte da configuração do Postfix. Se chegou aqui por acaso, melhor ler primeiro uma das publicações abaixo:

Parte 1 – Instalação dos Pacotes

Parte 2 – Configuração do MariaDB

Parte 3 – Configuração do Dovecot

O Postfix é a parte mais importante do nosso servidor de email. Ele será responsável por conversar com outros MTAs para que receba e envie as mensagens de correio eletrônico e para que ele possa ser contatado é necessário que ele seja identificável através do nome do servidor ou o seu hostname.



Continue Reading >>

Servidor de Email – Parte 3 – Dovecot

Esta é a terceira parte do processo de criação do servidor de Email em um CentOS 7. Se chegou aqui por acaso, melhor ler primeiro as publicações anteriores

Parte 1 – Instalação dos Pacotes

Parte 2 – Configurar MariaDB

O Dovecot é um MDA (Mail Delivery Agent) que é um agente que transporta as mensagens do Postfix para as caixas de mensagens virtuais. Nesta seção iremos configurar a instalação do Dovecot para forçar os usuários a usarem SSL quando eles se conectarem, desta forma nunca enviando senhas em modo texto simples.

Eu sempre gosto de manter os arquivos originais de qualquer definição para caso eu acabar me perdendo durante as configurações. Eu posso dizer que esse passo não é necessário caso esteja fazendo esse tutorial integralmente, porém, se já tem uma configuração anterior e está apenas usando para melhorá-lo sugiro fortemente que faça copia de seus arquivos.

No nosso caso, os arquivos de configuração estarão em /etc/dovecot/conf.d/. Podemos então fazer a cópia com o comando:

Criando usuário

O Dovecot irá armazenar as mensagens (e todo seu conteúdo) em um diretório que definiremos no arquivo de configuração e para que ele consiga fazer isso é necessário que ele rode sob um usuário com as permissões adequadas. Os comandos abaixo irão criar este usuário e grupo. Usarei um padrão comum aos nomes que facilitam bastante a busca por soluções de problemas pela internet.

Editando Arquivos de Configurações

Primeiro arquivo que vamos configurar é o de autenticação. Como vamos usar uma tabela no banco de dados MariaDB para guardar os usuários e suas senhas vamos apontar isso em dois arquivos. O primeiro define o tipo de autenticação e segundo como o Dovecot irá fazer a validação da autenticação.

Edite o arquivo /etc/dovecot/conf.d/10-auth.conf e descomente (ou adicione) as linhas abaixo:

Depois, edite o arquivo /etc/dovecot/conf.d/auth-sql.conf.ext para que fique com as linhas abaixo:

ATENÇÃO: As ultimas linhas que diferem ligeiramente da original comentada quanto ao argumento home.

Devemos também configurar os dados de conexão com o MariaDB através do arquivo /etc/dovecot/dovecot-sql.conf.ext. Este arquivo não é criado na instalação então nós o criaremos.

NOTA: Use os mesmos dados que usou no passo que configurou a base de dados no MariaDB

Vamos fazer varias alterações no arquivo principal de configuração do Dovecot que é o 10-master.conf. O número a frente do arquivo indica a ordem de carregamento (prioridade). Você pode user qualquer editor que preferir. Eu gosto do Vim porque estou muito acostumado com seus comandos, mas nada impede de que use o nano por exemplo.

Para melhorar a segurança do servidor e reduzir ataques vamos desativar o acesso não criptografado. Para isso baste atribuirmos a porta 0 para os serviços imap e pop3. Somente imaps e pop3s estarão disponíveis. Será necessário usar uma chave SSL que iremos criar logo mais adiante.

Altere também as configurações a seguir:

Certificado SSL

Para que possamos usar os serviços de criptografia necessários tanto na autenticação do usuário ao acessar sua conta quanto para garantir que o postfixadmin e o roundcube estejam sob conexões seguras devemos criar as chaves SSL validas. Neste ponto faremos a configuração criando uma chave auto-assinada (self-signed) que já é criada durante a instalação do Dovecot. Essa chave não pode ser usada para validar a conexão segura do navegador. Mais tarde iremos alterar essa configuração para usar uma chave SSL obtida através do Certbot (Lets Encrypt) em conjunto com o Nginx e configurações do DNS.

Se estiver seguindo os passos desse tutorial, não será necessário nenhuma mudança no arquivo /etc/dovecot/conf.d/10-ssl.conf que deverá conter as seguintes linhas

Caso os arquivos não existam ou se preferir recriá-los (deve ser feito caso tenha alterado o hostname, por exemplo) faça o seguinte:

Edite o arquivo /etc/pki/dovecot/dovecot-openssl.cnf e altere as entradas de acordo com as informações que você possuir.

Após ter alterado o arquivo, se já existirem os arquivos /etc/pki/dovecot/certs/dovecot.pem e /etc/pki/dovecot/private/dovecot.pem, apague-os e em seguida execute o script mkcert.sh.

A saída do script deverá ser algo parecido com essa:

Outra configuração ainda no arquivo/etc/dovecot/conf.d/10-ssl.conf relacionada a criptografia é o atributo opcional ssl_dh. Adicione ou descomente a linha:

e execute o comando abaixo para gerar o arquivo .pem:

A execução do comando acima costuma demorar bastante, as vezes até perto de 1 hora. É possível também utilizar um comando abaixo para gerar o mesmo arquivo de forma mais rápida.

Arquivo de Log

Por default o Dovecot irá usar o mecanismo de log syslog do CentOS, que normalmente envia as informações para o arquivo /var/log/messages. Como mais adiante irei mostrar como barrar diversas tentativas de ataques e uma delas inclui o uso do script fail2ban, que faz analise de logs é melhor definirmos um arquivo exclusivo para que não tenhamos que monitorar arquivo de log que se altera constantemente.

Para definirmos um arquivo de log exclusivo, vamos abrir o arquivo de configuração de log do Dovecot /etc/dovecot/conf.d/10-logging.conf e alterar ou adicionar as linhas a seguir.

Salve o arquivo e reinicie o serviço

Verifique se o arquivo /var/log/dovecot.log foi criado e contém as informações indicando que o serviço está funcionando normalmente.

Regras de Firewall

Se estiver seguindo este tutorial desde o início em uma instalação padrão, é possível que as portas de conexão estejam fechadas para o exterior. Os comandos abaixo visam liberar as portas imaps (993), pop3s (995) para que seja possível conectar um cliente de e-mail como o Outlook ou Gmail. Mesmo que elas estejam abertas, mais adiante em outra publicação, vou mostrar uma lista de regras básicas de firewall para melhorar a segurança.

Primeiro certifique-se de que o serviço firewalld esteja rodando. Caso esteja parado, provavelmente todas as portas que possuírem um serviço de escuta estarão abertas.

Verifique a linha do estado que pode estar como active (running) ou como inactive (dead). Caso esteja como inactive, não há necessidade de continuar. Se estiver como active, vamos listar quais portas estão abertas externamente.

No exemplo acima, apenas ssh e dhcpv6-client estão permitidas. Vamos então adicionar as portas necessárias para receber e enviar emails externamente.

Como podemos notar no exemplo, adicionamos os serviços imaps e pop3s que estão sendo ouvidas pelo serviço do Dovecot. Mais adiante iremos também adicionar as portas smtp e submission que serão ouvidas pelo serviço do Postfix (master). Note que não abrirei as portas imap e pop3 inseguras porque quero forçar o uso de SSL/TLS.

Para se certificar de que as portas estão mesmo abertas você pode tentar fazer telnet nas portas 993 e 995 de outro sistema na mesma rede e verificar se o arquivo /var/log/dovecot.log exibirá as tentativas. Se não tiver condições no momento de fazer o teste desta forma verifique a saída do comando abaixo?

E isso é tudo por enquanto. A seguir vamos configurar o Postfix 3.

Corrigindo erro de módulos não carregados no Centos 6.x

Um problema comum após atualizar um kernel via yum no Centos é a não criação dos módulos do novo kernel.
Um exemplo desse erro acontece quando se tentar usar grep como no print abaixo.

Isso indica que não há o diretório 2.6.32-042stab123.9 e portando nenhum módulo em seu conteúdo pode ser carregado.

Para corrigir este problema o caminho mais simples é essa receita:

Isso irá criar o diretório e as dependências de módulos para o kernel atualmente em uso (uname -r).

Caso o problema não seja resolvido com os comandos acima. Tente reinstalar o kernel via yum com os comandos abaixo.

E em seguida tente os comandos listados anteriormente.

Espero que lhe seja útil tanto quando foi para mim.

Como limpar mensagens adiadas da fila do Postfix

Hoje eu estava observando o arquivo de log do Postfix (em CentOS 6.X o padrão é /var/log/maillog) e vi um monte de mensagens sendo adiadas.

e essas mensagens repetiam de tempos em tempos.

Continue Reading >>

Como corrigir Data/hora no Centos 6.X para seu timezone inclusive nos logs

Hoje eu me deparei com um problema ao utilizar o Fail2ban que me ajuda demais a manter o servidor no ar mesmo sob ataques de brute-force.

Um dos meus filtros não estavam barrando as diversas tentativas de autenticação em um dos meus serviços embora estivesse tudo certo. Resolvi aumentar o tempo de Findtime na configuração comum e ele começou a barrar.

Então era hora de entender porque com um findtime baixo ele não conseguia barrar. Comecei a checar detalhadamente as configurações e percebi que mesmo tendo alterado a hora para meu timezone para o horario oficial de Brasilia, os logs continuavam a exibir o horario em UTC. Desconfiei que pudesse ser isso e resolvi alterar o horário que é colocado nos logs (/var/log/messages).

Bingo!

Após a alteração e confirmar que os logs estavam usando o mesmo horario que o reportado em date mudei o findtime para os valores que desejava e tudo funcionou como esperado.

Segue a receita para alterar o horario.

As informações de Timezone ficam no arquivo /etc/localtime e caso ele não esteja no que você quer basta substitui-lo pelo que deseja e que esteja presente em /usr/share/zoneinfo/. No meu caso, como queria o horario de Brasília, utilizei /usr/share/zoneinfo/America/Sao_Paulo.

Agora é só testar usando o comando date e verificar a saída que deverá ser algo como:

Mesmo após essas mudanças, os logs continuarão a terem o horário da forma antiga. Para alterar isso edite o arquivo /etc/sysconfig/clock e adicione as linhas abaixo para refletir também o seu timezone.

No meu caso, precisei reiniciar o servidor para que as alterações surtissem efeito mas pode ser que apenas reiniciando o serviço rsyslog já resolva.

Até a próxima.

Como corrigir erro de LOCALE no Linux Debian/Ubuntu

Hoje precisei olhar os logs de um servidor FTP que roda sob o pure-ftp e percebi que os horários estavam todos em UTC .
Como eu precisava enviar parte dos logs a um terceiro que faz uso dele e não está familiarizado com sistemas, poderia acabar ocorrendo algum mal entendido. Resolvi então que deveria manter os logs de todas as aplicações no fuso horário brasileiro.
De acordo com a documentação do pure-ftp ele utiliza as variáveis de ambiente para determinar qual será o horário incluído nos logs

Continue Reading >>

Servidor de Email – Parte 1 – Instalações necessárias

Tenho meu próprio servidor de e-mail utilizando postfix, dovecot, MariaDB, spamassassin, clamav, Amavisd-new, fail2ban, nginx, postfixadmin e roundcube sob o CentOS 7.
Embora já tenha diversas receitas de como configurar este pacote, precisei de muitas horas para entender como manter o serviço rodando corretamente, cada configuração no main.cf e no master.cf e no fim conseguir diminuir a enxurrada de spam que chega a cada instante.
E anti-spam é o foco desta publicação. Sofri e continuo sofrendo com as constantes tentativas de utilizarem meus serviços como um zumbi ou disseminador de vírus, fraudes e tudo o mais que puderem.

Perdi a conta de quantas vezes meu serviço de DNS parou por excesso de tentativas de conexão que entupiam a memória e forçava o S.O. a cortar processos para economizar recursos e o named era o escolhido por ser o elo mais fraco.
Então, este artigo tem foco na configuração adequada para serviços de email privado, de poucos usuários e poucos domínios. Certamente muito do que está neste pequeno manual serve para serviços mais parrudos, mas acredito que para estes casos o uso de ferramentas ou serviços dedicados e especializados deva ser sempre levado em consideração.



Continue Reading >>

Criando base de dados no PostgreSQL com encoding diferente

Como criar uma base de dados UTF8 em um servidor em LATIN1 ou como criar uma base de dados LATIN1 em um servidor em UTF8?

O PostgreSQL tem dessas coisas. Ele não permite que se crie Bases de Dados com Encoding diferentes em um mesmo template.
Hoje tentei criar uma nova base de dados em UTF8 e me deparei com o seguinte:

Isso acontece porque o locale do S.O. está em latin1 e quando foi instalado o PostgreSQL ele absorve esta configuração.
Quando tentei instalar em um encoding diferente do padrão definido ele reclamou por não estar de acordo com o template padrão que é o template1.

Continue Reading >>

Como diminuir o tamanho de discos virtuais VMDK – parte 3

Se desejar ler a parte 1 deste tutorial, clique aqui.
Se desejar ler a parte 2 deste tutorial, clique aqui.

No item anterior fizemos uma clonagem de um disco com uma única partição. Nas próximas linhas vou mostrar como clonei um disco com uma única partição primária e uma lógica para duas partições primárias e uma lógica com um ponto de montagem para o swap que originalmente estava em um arquivo.

NOTA: Utilizei como fonte esse site, para resolver problemas com a inicialização do novo disco. Faça como eu, sempre cite suas fontes.

Usando como base as informações da parte 1 deste tutorial, adicionaremos um novo disco à máquina virtual.

Continue Reading >>

Como diminuir o tamanho de discos virtuais VMDK – parte 2

Se ainda não leu a parte 1, pode acessar ela por aqui.

Continuando o tutorial, iremos agora iniciar a clonagem dos discos. A primeira parte da clonagem é de um disco que não contem o sistema operacional. Se quiser ir direto para a clonagem com o sistema inicializável, pode pular esta parte e ir direto para a parte 3.

Hora de iniciar a clonagem. Iniciamos a máquina virtual no modo terminal (para caso tenha ambiente gráfico) e logamos como root ou nos tornamos root com o comando su – para que seja possível executar as instruções de particionamento, formatação e clonagem, respectivamente sem necessidade de sudo a todo comando.

No terminal digite fdisk -l para que sejam listados os discos e as partições:

Repare que nossos discos aparecem como sendo /dev/sda, /dev/sdb, /dev/sdc (marquei em vermelho para ficar mais visível) e ao lado o seu tamanho. Essa ordem a, b, c é a ordem de conexão na porta IDE. Como nosso disco foi incluído em Secundário Slave e o Primário Slave está o CDROM (vide imagem na parte 1) ele é o terceiro disco do sistema, ou seja, o /dev/sdc.
Iremos a partir de agora particionar e formatar a unidade. Digite o comando fdisk /dev/sdc.

Continue Reading >>