Rss

  • youtube
  • linkedin
  • google

Archives for : Linux

Configurando um servidor de Email

Tenho meu próprio servidor de e-mail utilizando Postfix, Dovecot, MariaDB, Spamassassin, Clamav, Amavisd-new, Fail2ban, Nginx, Postfixadmin e Roundcube sob o CentOS 8.
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.

Então deixemos de lado o falatório para irmos direto ao mão na massa.

Instalação dos pacotes

O primeiro passo é instalar todo os pacotes que serão utilizados. O Roundcube e o Postfixadmin rodam sob um webserver com suporte a PHP e cujas contas de e-mail possam ser armazenadas em um servidor de banco de dados. Como Webserver eu utilizo o Nginx e embora prefira o PostgreSQL vou utilizar o MariaDB como SGBD devido ao fato de que a maioria já o utiliza (devido ao WordPress provavelmente).

Então, ao final do processo de instalação, deveremos ter instalado alguns novos repositórios de pacotes.

Ative os repositórios de Extra Packages para a sua distribuição, caso ainda não o tenha feito. Para o CentOS 8 os comando abaixo fará isso.

$ sudo dnf install epel-release

Adicionalmente, instale os pacotes curl, htop, vim, yum-utils, wget, net-tools, chrony e certbot que serão necessários em outros pontos da configuração.

$ sudo dnf install -y curl htop vim yum-utils wget net-tools chrony certbot

Postfix

Postfix é um MTA (mail transfer agent). Um MTA faz a ponte entre os computadores para a troca de mensagens de correio eletronico. Para o nosso caso, é o elemento principal.

A versão do Postfix que utilizarei neste documento é a 3.3. Para saber qual a versão que será instalada digite:

$ sudo dnf info postfix

Para instalar execute o comando

$ sudo dnf install -y postfix postfix-mysql postfix-pcre

Vamos deixar o serviço parado por enquanto mas já configurado para iniciar junto com o Sistema Operacional.

$ sudo systemctl enable postfix

Dovecot

Dovecot é um Servidor de Email Imap e Pop3. Com ele que poderemos enviar e receber as mensagens via Postfix e entre outras coisas controlar o acesso ao serviço via autenticação.
Para instalar o Dovecot com suporte a mysql basta executar o comando:

$ sudo dnf install -y dovecot dovecot-mysql

Mais uma vez, vamos ativar o serviço porém deixá-lo parado.

$ sudo systemctl enable dovecot

Amavis

Amavis é um filtro de conteúdo para correio eletrônico. Com ele é possível filtrar mensagens nocivas usando configurações contra spam, vírus e outros malwares. Abaixo os comandos que o instalam. Ele requer muitas dependencias que serão atualizadas e/ou instaladas junto. Uma dessas dependencias é o SpamAssassin que será configurado mais adiante, juntamente com todos os outros pacotes que estamos instalando.

Primeiro certifique-se de que o repositorio PowerTools está habilitado, pois é a partir dele que instalaremos o Amavisd-New.

$ sudo dnf config-manager --set-enabled powertools

Em seguida instalamos o Amavis e algumas dependencias sendo uma delas o ClamAV que é um antivirus simples e bastante eficiente para os tipos mais comuns de ameaças e totalmente gratuito.

$ sudo dnf -y install amavisd-new clamd perl-Digest-SHA1 perl-IO-stringy

Novamente, vamos ativar os serviços para que sempre iniciem de forma automática, mas por enquanto deixando-os parados.

$ sudo systemctl enable amavisd spamassassin

MariaDB (ou MySQL)

Normalmente, quem usa WordPress já possui instalado e configurado o MariaDB ou o MySQL. Se esse for o seu caso, pode pular esta etapa.

Eu particularmente prefiro o PostgreSQL, mas como a intenção deste documento é permitir que DevOps consigam ter seus proprios serviços e nem sempre dá pra ter varias instancias resolvi usar o MariaDB. Dessa forma, caso necessite adicionar posteriormente o WordPress, não precisará adicionar um SGBD adicional ou mesmo usar wrappers para que ele tenha suporte a PostgreSQL.

Não se preocupe com as configurações neste momento, pois as detalharei mais adiante em outra publicação. Continuando com a instalação devemos executar o comando:

$ sudo dnf install -y mariadb-server

e em seguida ativar o serviço para iniciar junto com o sistema

$ sudo systemctl enable mariadb

Webserver (Nginx + Php-Fpm)

Os ultimos elementos a serem instalados fazem parte do Webserver. É possível que você já tenha um rodando como o Apache então esse ponto pode ser pulado. Se você está iniciando um novo servidor ou se não tem intimidade com a configuração do Apache e PHP, recomendo seguir as dicas dessa instalação.

Eu gosto muito do Nginx e vou usar em conjunto com o Php-Fpm.

$ sudo dnf install -y nginx php-fpm

Neste ponto já temos todos os arquivos necessários para inciar a configuração do Servidor de Email.

Sou muito preguiçoso

Não gosta de ficar digitando ou não está preocupado nos detalhes de cada item instalado. Seus problemas acabaram!

Você pode executar todos os comando deste documento com as linhas abaixo:

ATENÇÃO! Este script é apenas um arquivo com as linhas de comando. Eventualmente pode não funcionar corretamente dependendo das configurações do seu sistema.

$ sudo dnf update
$ sudo dnf install -y epel-release
$ sudo dnf config-manager --set-enabled powertools
$ sudo dnf -y install --enable-repo=epel-release,powertools curl htop vim yum-utils wget net-tools chrony certbot postfix dovecot amavisd-new clamd perl-Digest-SHA1 perl-IO-stringy mariadb-server ngixn php-fpm
$ sudo systemctl enable postfix mariadb spamassassin amavisd dovecot nginx php-fpm 

Com tudo instalado podemos iniciar as configurações. Comecemos pelo MariaDB.

Docker em Ubuntu. Service nginx failed to build: ADD failed: stat /var/lib/docker/tmp/docker-builder(;)/startup.sh: no such file or directory

Docker em Ubuntu

Às vezes, ao usar Laradock, este erro ocorre depois de tentar uma reconstrução de container com no such file or directory mensagem em docker-compose up -d –build nginx comando.

Não está claro para mim qual é a questão real, mas executando o comando com sudo, podemos executá-lo com sucesso.

Seems that the regular user need access rights to directory /var/lib/docker/tmp/ but do not have. So, running with sudo the trouble is bypassed and the build can finished normally.

Depois de construir containers com sudo, é possível descarregá-lo e recarregar sem sudo.

Servidor de Email – Parte 4 – Postfix 3

Parte 1 – Configurar arquivo main.cf

Esta é a quarta parte do processo de criação do servidor de Email em um CentOS 8 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 lendo >>

Servidor de Email – Parte 3 – Dovecot

Esta é a terceira parte do processo de criação do servidor de Email em um CentOS 8. 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:



Continue lendo >>

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.


# iptables -L -n | grep "meu ip"
FATAL: Could not load /lib/modules/2.6.32-042stab123.9/modules.dep: No such file or directory


#
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:


# mkdir -p /lib/modules/uname -r


# cd /lib/modules/uname -r
[root@vps3 2.6.32-042stab123.9]# depmod
[root@vps3 2.6.32-042stab123.9]# ls -lah
total 64K
drwxr-xr-x 2 root root 4.0K Oct 18 16:11 .
dr-xr-xr-x 10 root root 4.0K Oct 18 16:11 ..
-rw-r--r-- 1 root root 45 Oct 18 16:11 modules.alias
-rw-r--r-- 1 root root 12 Oct 18 16:11 modules.alias.bin
-rw-r--r-- 1 root root 69 Oct 18 16:11 modules.ccwmap
-rw-r--r-- 1 root root 0 Oct 18 16:11 modules.dep
-rw-r--r-- 1 root root 12 Oct 18 16:11 modules.dep.bin
-rw-r--r-- 1 root root 73 Oct 18 16:11 modules.ieee1394map
-rw-r--r-- 1 root root 141 Oct 18 16:11 modules.inputmap
-rw-r--r-- 1 root root 81 Oct 18 16:11 modules.isapnpmap
-rw-r--r-- 1 root root 74 Oct 18 16:11 modules.ofmap
-rw-r--r-- 1 root root 99 Oct 18 16:11 modules.pcimap
-rw-r--r-- 1 root root 43 Oct 18 16:11 modules.seriomap
-rw-r--r-- 1 root root 131 Oct 18 16:11 modules.softdep
-rw-r--r-- 1 root root 49 Oct 18 16:11 modules.symbols
-rw-r--r-- 1 root root 12 Oct 18 16:11 modules.symbols.bin
-rw-r--r-- 1 root root 189 Oct 18 16:11 modules.usbmap
[root@vps3 2.6.32-042stab123.9]# iptables -L -n | grep "meu ip"
[root@vps3 2.6.32-042stab123.9]#
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.

mv /boot/grub/grub.conf /boot/grub/grub.conf.bak
yum -y reinstall kernel

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.

Jan 5 15:02:03 vps3 postfix/smtp[27441]: 3187E2180015: to=<undesired@domain.com>, relay=domain.com[167.114.XXX.XXX]:25, delay=254553, delays=254538/0.2/15/0, dsn=
4.4.2, status=deferred (conversation with domain.com[167.114.XXX.XXX] timed out while receiving the initial server greeting)
Jan 5 15:02:03 vps3 postfix/smtp[27442]: CDED02180014: to=<undesired@domain.com.br>, relay=domain.com[167.114.XXX.XXX]:25, delay=258753, delays=258738/0.13/15/0, dsn
=4.4.2, status=deferred (conversation with domain.com[167.114.XXX.XXX] timed out while receiving the initial server greeting)
Jan 5 15:02:03 vps3 postfix/smtp[27443]: C8EE72180012: to=<undesired@domain.com.br>, relay=domain.com[167.114.XXX.XXX]:25, delay=258753, delays=258738/0.14/15/0, dsn
=4.4.2, status=deferred (conversation with domain.com[167.114.XXX.XXX] timed out while receiving the initial server greeting)
Jan 5 15:02:03 vps3 postfix/smtp[27444]: CDCE32180013: to=<undesired@domain.com.br>, relay=domain.com[167.114.XXX.XXX]:25, delay=258753, delays=258738/0.15/15/0, dsn
=4.4.2, status=deferred (conversation with domain.com[167.114.XXX.XXX] timed out while receiving the initial server greeting)

e essas mensagens repetiam de tempos em tempos.

Continue lendo >>

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

Data 

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.

# ln -sf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime

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

# date Wed Dec 9 15:55:58 BRST 2015

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.

ZONE="America/Sao_Paulo"
UTC=false ARC=false

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.

# service rsyslog restart

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 lendo >>

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 lendo >>

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:

bash-4.1$ psql psql (9.3.5)
Digite "help" para ajuda.

postgres=# CREATE DATABASE teste WITH ENCODING='UTF8';
ERRO:  codificação "UTF8" não corresponde a configuração regional "pt_BR.iso88591"
DETALHE:  A definição de LC_TYPE escolhida requer codificação "LATIN1".
postgres=#

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 lendo >>