FSociety.pt

Infraestrutura Empresarial Segura | Four-Legged Firewall

View on GitHub

šŸ”§ Instalação do Mailcow

Guia completo de instalação do Mailcow Dockerized no servidor de email FSociety.pt


šŸ“‹ ƍndice

  1. Requisitos de Sistema
  2. Informação da VM
  3. Preparação do Sistema
  4. Instalação do Docker
  5. Instalação do Mailcow
  6. Configuração Inicial
  7. Inicialização dos Containers
  8. Verificação Pós-Instalação

šŸ’» Requisitos de Sistema

Hardware MĆ­nimo

Recurso Recomendado Implementado Descrição
vCPU 2+ 2 Processadores virtuais
RAM 6 GB+ 6 GB Memória para 18 containers
Disco 20 GB+ 24 GB Sistema + dados + logs
Rede 1 Gbps 1 Gbps Interface na DMZ

Software

Componente Versão Mínima Descrição
Sistema Operativo Ubuntu 20.04+ / Debian 11+ Linux 64-bit
Docker 20.10+ Container runtime
Docker Compose 2.0+ Orquestração de containers
Kernel 4.18+ Suporte completo a containers

Portas NecessƔrias

Porta Protocolo Serviço Descrição
25 TCP SMTP Email submission (MTA-to-MTA)
80 TCP HTTP Redirect para HTTPS
110 TCP POP3 Email retrieval (inseguro)
143 TCP IMAP Email retrieval
443 TCP HTTPS Web interface, API
465 TCP SMTPS SMTP over SSL
587 TCP SMTP Submission SMTP com STARTTLS
993 TCP IMAPS IMAP over SSL
995 TCP POP3S POP3 over SSL
4190 TCP Sieve Filtros de email

šŸ–„ļø Informação da VM

Configuração no Proxmox

# Criação da VM no Proxmox VE
qm create 108 \
  --name mailcow \
  --memory 6144 \
  --cores 2 \
  --sockets 1 \
  --net0 virtio,bridge=vmbr0,tag=10 \
  --scsihw virtio-scsi-pci \
  --scsi0 local-lvm:24 \
  --ide2 local:iso/ubuntu-24.04-live-server-amd64.iso,media=cdrom \
  --boot order=scsi0;ide2

Parâmetros da VM

Parâmetro Valor Descrição
VM ID 108 Identificador no Proxmox
Nome mailcow Hostname da VM
IP 10.0.0.20 EndereƧo na DMZ
Gateway 10.0.0.1 pfSense DMZ interface
DNS 192.168.1.10 Domain Controller
Bridge vmbr0 (VLAN 10) DMZ network
Hostname mail.fsociety.pt FQDN pĆŗblico

šŸ› ļø Preparação do Sistema

1. Atualizar o Sistema

# Atualizar lista de pacotes
sudo apt update

# Atualizar pacotes instalados
sudo apt upgrade -y

# Instalar pacotes essenciais
sudo apt install -y curl wget git nano vim htop net-tools

2. Configurar Hostname

# Definir hostname
sudo hostnamectl set-hostname mail.fsociety.pt

# Adicionar entrada no /etc/hosts
echo "10.0.0.20 mail.fsociety.pt mail" | sudo tee -a /etc/hosts

# Verificar
hostnamectl

SaĆ­da esperada:

   Static hostname: mail.fsociety.pt
         Icon name: computer-vm
           Chassis: vm

3. Configurar Rede EstƔtica

# Editar netplan
sudo nano /etc/netplan/00-installer-config.yaml

ConteĆŗdo:

network:
  version: 2
  ethernets:
    ens18:
      addresses:
        - 10.0.0.20/24
      routes:
        - to: default
          via: 10.0.0.1
      nameservers:
        addresses:
          - 192.168.1.10
          - 1.1.1.1
        search:
          - fsociety.pt
# Aplicar configuração
sudo netplan apply

# Verificar
ip addr show ens18

4. Configurar Timezone

# Definir timezone para Europa/Lisboa
sudo timedatectl set-timezone Europe/Lisbon

# Verificar
timedatectl

🐳 Instalação do Docker

1. Remover VersƵes Antigas (se existirem)

sudo apt remove -y docker docker-engine docker.io containerd runc

2. Instalar DependĆŖncias

sudo apt update
sudo apt install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

3. Adicionar Repositório Docker

# Adicionar chave GPG oficial do Docker
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Adicionar repositório
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

4. Instalar Docker Engine

# Atualizar Ć­ndice de pacotes
sudo apt update

# Instalar Docker e plugins
sudo apt install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin

# Verificar instalação
docker --version
docker compose version

SaĆ­da esperada:

Docker version 24.0.7, build afdd53b
Docker Compose version v2.23.0

5. Configurar PermissƵes

# Adicionar utilizador ao grupo docker
sudo usermod -aG docker $USER

# Ativar e iniciar Docker
sudo systemctl enable docker
sudo systemctl start docker

# Verificar status
sudo systemctl status docker

6. Testar Docker

# Executar container de teste
docker run hello-world

šŸ“¦ Instalação do Mailcow

1. Criar Diretório Base

# Criar diretório de instalação
sudo mkdir -p /opt/mailcow-dockerized
cd /opt/mailcow-dockerized

2. Clonar Repositório

# Clonar a última versão estÔvel
sudo git clone https://github.com/mailcow/mailcow-dockerized.git .

# Verificar branch
git branch

3. Gerar Configuração

O script generate_config.sh cria o ficheiro mailcow.conf com configuraƧƵes personalizadas:

# Executar script de configuração
sudo ./generate_config.sh

Interação durante execução:

Mail server hostname (FQDN) - this is not your mail domain, 
but your mail server's hostname: mail.fsociety.pt

Timezone [Europe/Berlin]: Europe/Lisbon

Which branch of mailcow do you want to use?

Available Branches:
- master branch (stable updates) | default, recommended [1]
- nightly branch (unstable updates, testing) | not-production ready [2]
Choose the Branch with it“s number [1/2] 1

4. Verificar Configuração Gerada

# Ver configuração principal
cat mailcow.conf | grep -v "^#" | grep -v "^$"

Principais variƔveis:

MAILCOW_HOSTNAME=mail.fsociety.pt
MAILCOW_TZ=Europe/Lisbon

āš™ļø Configuração Inicial

1. Ajustar mailcow.conf

Editar configurações adicionais antes da primeira inicialização:

sudo nano mailcow.conf

ConfiguraƧƵes importantes:

# Hostname pĆŗblico
MAILCOW_HOSTNAME=mail.fsociety.pt

# Timezone
MAILCOW_TZ=Europe/Lisbon

# Let's Encrypt (produção)
SKIP_LETS_ENCRYPT=n
ACME_CONTACT=admin@fsociety.pt

# Bind IPs (0.0.0.0 para aceitar todas)
HTTP_PORT=80
HTTPS_PORT=443
HTTP_BIND=0.0.0.0
HTTPS_BIND=0.0.0.0

# SQL
DBNAME=mailcow
DBUSER=mailcow
DBPASS=<gerada_automaticamente>
DBROOT=<gerada_automaticamente>

# ConfiguraƧƵes de email
MAILDIR_SUB=Maildir

2. Configurar Limites de Sistema

# Aumentar limites de file descriptors
echo "* soft nofile 65536" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 65536" | sudo tee -a /etc/security/limits.conf

# Configurar sysctl
sudo nano /etc/sysctl.conf

Adicionar:

vm.overcommit_memory=1
net.core.somaxconn=65535
# Aplicar
sudo sysctl -p

šŸš€ Inicialização dos Containers

1. Pull das Imagens Docker

cd /opt/mailcow-dockerized

# Download de todas as imagens (pode demorar 10-15 minutos)
sudo docker compose pull

2. Iniciar Mailcow

# Iniciar todos os containers em background
sudo docker compose up -d

SaĆ­da esperada:

[+] Running 18/18
 āœ” Container mailcowdockerized-unbound-mailcow-1           Started
 āœ” Container mailcowdockerized-mysql-mailcow-1             Started
 āœ” Container mailcowdockerized-redis-mailcow-1             Started
 āœ” Container mailcowdockerized-clamd-mailcow-1             Started
 āœ” Container mailcowdockerized-olefy-mailcow-1             Started
 āœ” Container mailcowdockerized-memcached-mailcow-1         Started
 āœ” Container mailcowdockerized-postfix-mailcow-1           Started
 āœ” Container mailcowdockerized-dovecot-mailcow-1           Started
 āœ” Container mailcowdockerized-rspamd-mailcow-1            Started
 āœ” Container mailcowdockerized-php-fpm-mailcow-1           Started
 āœ” Container mailcowdockerized-sogo-mailcow-1              Started
 āœ” Container mailcowdockerized-nginx-mailcow-1             Started
 āœ” Container mailcowdockerized-acme-mailcow-1              Started
 āœ” Container mailcowdockerized-netfilter-mailcow-1         Started
 āœ” Container mailcowdockerized-watchdog-mailcow-1          Started
 āœ” Container mailcowdockerized-dockerapi-mailcow-1         Started
 āœ” Container mailcowdockerized-ofelia-mailcow-1            Started
 āœ” Container mailcowdockerized-postfix-tlspol-mailcow-1    Started

3. Verificar Status dos Containers

# Listar containers
sudo docker compose ps

Todos os 18 containers devem estar com status Up:


āœ… Verificação Pós-Instalação

1. Verificar Logs

# Ver logs de todos os containers
sudo docker compose logs --tail=50

# Ver logs de um container especĆ­fico
sudo docker compose logs -f nginx-mailcow

2. Testar Acesso Web

# Teste local
curl -I http://localhost

# Teste HTTPS (após Let's Encrypt)
curl -I https://mail.fsociety.pt

3. Aceder Ć  Interface Web

URL: https://mail.fsociety.pt

Credenciais padrão:

āš ļø IMPORTANTE: Alterar a password imediatamente após o primeiro login!

4. Verificar Portas Abertas

# Verificar portas em escuta
sudo ss -tlnp | grep -E ':(25|80|110|143|443|465|587|993|995|4190)'

5. Verificar Let’s Encrypt

# Ver logs do ACME (Let's Encrypt)
sudo docker compose logs acme-mailcow

# Certificado deve ser gerado automaticamente
sudo docker compose exec acme-mailcow ls -la /var/lib/acme/certs/

6. Comandos Úteis

# Parar todos os containers
sudo docker compose down

# Reiniciar Mailcow
sudo docker compose restart

# Ver uso de recursos
sudo docker stats

# Atualizar Mailcow
sudo ./update.sh

šŸ” Primeiros Passos Pós-Instalação

1. Alterar Password de Admin

  1. Aceder a https://mail.fsociety.pt
  2. Login: admin / moohoo
  3. Ir a System → Administrator
  4. Alterar password para uma forte

2. Adicionar DomĆ­nio

Seguir o guia 03-dominios-mailboxes.md

3. Configurar DNS

Seguir o guia 07-dns-records.md

4. Configurar Rspamd

Seguir o guia 04-rspamd.md


šŸŽ“ Informação AcadĆ©mica

Campo Informação
Instituição ESTG - Instituto Politécnico do Porto
Unidade Curricular Administração de Sistemas II
Ano Letivo 2025/2026
Autores Ryan Barbosa, Hugo Correia, Igor AraĆŗjo

**[ā¬…ļø Anterior: README](/fsociety-infrastructure/08-mailcow/)** | **[ƍndice](/fsociety-infrastructure/08-mailcow/)** | **[Próximo: Configuração āž”ļø](/fsociety-infrastructure/08-mailcow/02-configuracao.html)**

Última atualização: Dezembro 2025