ATTENZIONE: Rilevati {{ system_issue_count }} avvisi di configurazione o stato del server!
Controlla la box degli avvisi di sistema di seguito per verificare PTR, Record A hostname, MTA-STS, servizi e porte firewall.
Avvisi di Sistema e Diagnostica
Diagnostica automatica per PTR, DNS Hostname, MTA-STS, Postfix/Dovecot/Rspamd, Firewall e APT{% if not item.ok %} ⚠️ {% else %} ✓ {% endif %} {{ item.title }}
{% if item.ok %} ● Attivo / OK {% elif item.level == 'danger' %} ✖ Errore Critico {% else %} ▲ Avviso {% endif %}{{ item.message }}
Overview
Mail traffic (14 days)
Privacy-safe: only counts and sizes by local mailbox — no subjects or bodies. Open statistics · Traffic list
{% if traffic_chart_svg %}No traffic chart yet. Stats are collected from Postfix logs every few minutes.
{% endif %} {% if mail_summary and mail_summary.today %}System Status
Recent queue items
{% if recent_queue %}| Queue ID | Sender | Recipients |
|---|---|---|
| {{ item.queue_id }} | {{ item.sender }} |
{% for rcpt in item.recipients or [] %}
{{ rcpt.address }}
{% endfor %}
|
Queue is currently empty.
{% endif %}Recent backups
{% if recent_backups %}| Name | Path |
|---|---|
| {{ item.name }} | {{ item.path }} |
No local backup runs found yet.
{% endif %}Mail traffic
Only local mailbox, direction, size and time — no subjects, bodies or remote addresses.
| When | Direction | Mailbox | Size |
|---|---|---|---|
| {{ item.event_at }} | {{ 'Received' if item.direction == 'inbound' else 'Sent' }} | {{ item.mailbox }} |
{{ item.size_human }} ({{ item.size_bytes }} B) |
| No traffic events yet. Wait for the collector timer or open Statistics and click “Collect now”. | |||
Statistics
{{ mail_summary.privacy_note if mail_summary else 'Privacy-safe traffic statistics.' }} Retention: {{ mail_summary.retention_days if mail_summary else '—' }} days.
{% if mail_summary %}Daily chart ({{ stats_days }} days)
{% if traffic_chart_svg %}{{ traffic_chart_svg|safe }}{% else %}No data
{% endif %}By day
| Day | In | Out | In bytes | Out bytes |
|---|---|---|---|---|
| {{ row.day }} | {{ row.inbound_count }} | {{ row.outbound_count }} | {{ row.inbound_bytes }} | {{ row.outbound_bytes }} |
| No daily data yet. | ||||
By mailbox ({{ stats_days }} days)
| Mailbox | In | Out | In bytes | Out bytes |
|---|---|---|---|---|
{{ row.mailbox }} |
{{ row.inbound_count }} | {{ row.outbound_count }} | {{ row.inbound_bytes }} | {{ row.outbound_bytes }} |
| No per-mailbox data yet. | ||||
Domains
Add domain| Domain | Accounts | Aliases | Redirects | Status | Open |
|---|---|---|---|---|---|
| {{ domain.name }} | {{ domain.account_count }} | {{ domain.alias_count }} | {{ domain.redirect_count }} | {{ 'active' if domain.is_active else 'inactive' }} | Manage |
Create your first domain to manage accounts, aliases, redirects and DKIM.
{% endif %}Create domain
Close{{ selected_domain.name }}
Domain settings
DKIM rotation
Active selector: {{ selected_domain.dkim_selector or 'none' }}
{% if selected_domain.dkim_rotated_at %} · last rotation {{ selected_domain.dkim_rotated_at }}{% endif %}
Previous selector kept for overlap: {{ selected_domain.dkim_previous_selector }}
{% if selected_domain.dkim_previous_expires_at %} until {{ selected_domain.dkim_previous_expires_at }}{% endif %}
Private key path: {{ selected_domain.dkim_private_path or 'not generated yet' }}
{{ selected_domain.dkim_public_key or 'Generate DKIM to populate the public record.' }}
DNS provider (Cloudflare)
Last sync: {{ selected_domain.dns_last_sync_status or 'never' }}
Accounts
Add account| Storage quota | Send limits (0=global) | Effective send | Password | Status | Suspend / restore | Delete | |
|---|---|---|---|---|---|---|---|
| {{ account.email }} | {{ account.effective_send_rate_per_hour or 0 }}/h · {{ account.effective_send_rate_per_day or 0 }}/d · {{ account.effective_send_rate_per_month or 0 }}/mo | {{ 'Active' if account.is_active else 'Suspended' }} |
Aliases
Add alias| Alias | Destination | Active | Actions |
|---|---|---|---|
| {{ alias.source }} | {{ alias.destination }} | {{ 'yes' if alias.is_active else 'no' }} |
Redirects
Add redirect| Redirect | Target | Keep copy | Active | Actions |
|---|---|---|---|---|
| {{ redirect.source }} | {{ redirect.target_email }} | {{ 'yes' if redirect.keep_copy else 'no' }} | {{ 'yes' if redirect.is_active else 'no' }} |
Autoresponders
Vacation replies are delivered via Dovecot Sieve when enabled on a mailbox.
{% for account in domain_accounts %}{{ account.email }}
{% set ar = account.autoresponder if account.autoresponder else none %}Create mailboxes first to configure autoresponders.
{% endfor %}Suggested DNS records
{{ key }}
{{ value }}
{% endfor %}
Mail Queue
{% if queue %}| Queue ID | Queue | Sender | Recipients | Reason | Actions |
|---|---|---|---|---|---|
| {{ item.queue_id }} | {{ item.display_state or '—' }} | {{ item.sender }} |
{% for rcpt in item.recipients or [] %}
{{ rcpt.address }}
{% endfor %}
|
{{ item.display_reason or '—' }} | {% for action in ['hold', 'release', 'requeue', 'delete'] %} {% endfor %} |
Queue is empty.
{% endif %}Mailbox import
Transfer every folder and message (including Sent) from a remote IMAP server into a local Limristem mailbox. Jobs run in a dedicated queue.
Source IMAP credentials
Choose the local destination account, then enter the remote mailbox credentials. Use Test connection before queuing a full import.
{% if not import_accounts %}Create at least one local account before importing mail.
{% else %} {% endif %}Bulk import from file
Download the example file, fill it with every mailbox you want to migrate (one entry per account, with the remote IMAP credentials), then upload it. A separate import job is queued for each account and jobs run one by one with live progress on the Jobs tab.
Up to 500 accounts per file (2 MiB max). If destination_email is omitted, source_username is used. Missing mailboxes on existing domains are created automatically with the source password.
Bulk import result
{{ bulk_import_result.queued_count }} job(s) queued out of {{ bulk_import_result.total }} entries {% if bulk_import_result.accounts_created %} · {{ bulk_import_result.accounts_created }} account(s) created{% endif %} {% if bulk_import_result.error_count %} · {{ bulk_import_result.error_count }} row(s) skipped{% endif %}
{% if bulk_import_result.queued %}| Row | Destination | Job | Account |
|---|---|---|---|
| {{ item.row }} | {{ item.destination_username }} | #{{ item.id }} | {% if item.account_created %}created{% else %}existing{% endif %} |
| Row | Destination | Problem |
|---|---|---|
| {{ item.row }} | {{ item.destination_email or '—' }} | {{ item.detail }} |
Import jobs
Live progress refreshes every 2 seconds while jobs are pending or running.
| ID | Status | Destination | Source | Progress | Transferred | Speed | ETA | Folder | Actions |
|---|---|---|---|---|---|---|---|---|---|
| {{ job.id }} | {{ job.status }} | {{ job.destination_username }} | {{ job.source_username }} |
|
{{ job.bytes_done_human }} | {{ job.speed_human }} | {{ job.eta_human or '—' }} | {{ job.current_folder or '—' }} {% if job.status_message %}{% endif %} {% if job.last_error %}{% endif %} | {% if job.status in ['pending', 'running'] %} {% endif %} {% if job.status not in ['running'] %} {% endif %} |
No import jobs yet. Start one from the New import tab.
{% endif %}Backups
{{ 'Edit schedule' if selected_backup_schedule.get('id') else 'Create schedule' }}
Backup schedules
Create new schedule| Name | Schedule | Storage | DB | Redis | Compression | Status | Actions |
|---|---|---|---|---|---|---|---|
| {{ item.name }} | {{ item.cron_expression }} |
{{ item.storage_id or 'Local only' }} | {{ item.include_database }} | {{ item.include_redis }} | {{ item.compression }} | {{ item.enabled }} | Edit |
{{ 'Edit storage' if selected_backup_storage.get('id') else 'Create storage' }}
Backup storages
Create new storage| Name | Type | Target | Encryption | Actions |
|---|---|---|---|---|
| {{ item.name }} | {{ item.type }} | {{ item.bucket or item.host or item.path or 'local' }} | {{ item.encrypt }} | Edit |
Available local backup runs
{% if backup_runs %}| Name | Path | Metadata |
|---|---|---|
| {{ item.name }} | {{ item.path }} |
{{ item.metadata or 'n/a' }} |
No local backups found.
{% endif %}Global backup settings
Security & Authentication
MFA protection, IP access control (Banned IPs) and Firewall rules.
TOTP (Authenticator)
{% if mfa_status and mfa_status.totp_enabled %} ● Attivo {% elif mfa_status and mfa_status.totp_pending %} ▲ In attesa {% else %} ✖ Non attivo {% endif %}Autenticazione TOTP con app authenticator per proteggere l'accesso al pannello admin ed API.
SMS OTP
{% if mfa_status and mfa_status.sms_enabled %} ● Attivo {% else %} ✖ Non attivo {% endif %}{% if mfa_status and mfa_status.sms_enabled %} Codici OTP via SMS attivi per {{ mfa_status.sms_phone_masked }}. {% else %} Autenticazione mediante codice di sicurezza SMS monouso non attiva. {% endif %}
SMS Providers
{% if sms_provider_configured %} ● Configurato{% if sms_provider_names %} ({{ sms_provider_names }}){% endif %} {% else %} ✖ Non configurato {% endif %}Integrazione con i gateway SMS (Crisaleo SMS e SMS2SMS) per l'invio dei messaggi.
Protezione Accessi
{% if firewall_config and firewall_config.get('firewall-enabled', 'yes') == 'yes' %} ● Firewall Attivo {% else %} ✖ Firewall Disattivato {% endif %}IP attualmente bannati: {{ bans|length }} | Regole firewall attive: {{ firewall_rules|length }}
Banned IPs
| Created | IP | Reason | Source | Services | Action |
|---|---|---|---|---|---|
| {{ item.created_at or '—' }} | {{ item.ip }} | {{ item.reason }} | {{ item.source or 'manual' }} | {{ item.services or item.jail or '—' }} | |
| No banned IPs found. | |||||
Firewall
TOTP and/or SMS OTP protect the web panel and the management API.
SMTP/IMAP/POP cannot do interactive OTP mid-session — for mailboxes use
app passwords (API /accounts/{id}/app-passwords) and optionally
require_app_password.
TOTP (authenticator app)
Status: {% if mfa_status and mfa_status.totp_enabled %}enabled {% elif mfa_status and mfa_status.totp_pending %}pending confirmation {% else %}disabled{% endif %}
{% if totp_enroll %}1. Scansiona il QR Code o copia la chiave Secret nella tua app Authenticator (Google Authenticator, Authy, 1Password):
{{ totp_enroll.secret }}
URI TOTP: {{ totp_enroll.provisioning_uri }}
SMS OTP
Status: {% if mfa_status and mfa_status.sms_enabled %}enabled ({{ mfa_status.sms_phone_masked }}) {% else %}disabled{% endif %}
SMS Providers Configuration
Seleziona la scheda del provider SMS da configurare (Crisaleo SMS o SMS2SMS).
Crisaleo SMS
Configurazione del gateway Crisaleo SMS per invio OTP. Headers: X-Client-Id, X-Client-Secret, X-Api-Key.
SMS2SMS
Configurazione ed instradamento del gateway SMS2SMS. Headers: X-Client-Id, X-Client-Secret, X-Api-Key.
Operations
Deliverability, outbound IP reputation self-checks, connectivity probes, inbound DNSBL helpers.
Deliverability check
End-to-end connectivity
TCP + TLS probes to SMTP/IMAP/HTTPS (no mailbox password required).
Inbound DNSBL (Rspamd)
{{ rbl_config.warning }}
Aggiornamento Pacchetti di Sistema (APT)
{% if apt_job and apt_job.running %} ⚙️ In Queue / In Esecuzione {% elif apt_job and apt_job.status == 'success' %} ● Completato con Successo {% elif apt_job and apt_job.status == 'failed' %} ✖ Errore Aggiornamento {% endif %}⚙️ Aggiornamento APT in corso in background...
L'operazione apt-get update && apt-get full-upgrade -y è in coda ed in esecuzione. Il pulsante è temporaneamente disattivato per evitare avvii multipli.
Avviato alle: {{ apt_job.started_at }}
Esegue apt-get update e apt-get full-upgrade -y in modalità 100% autonoma ed asincrona (in queue) senza bloccare la navigazione.
Ultima esecuzione: {{ apt_job.completed_at }} (Esito: {{ apt_job.status }})
{% endif %} {% endif %}Last result
{{ operations_result }}
Recent IP reputation checks
| When | IP | Source | Listed | Detail |
|---|---|---|---|---|
| {{ row.checked_at }} | {{ row.entity_value }} |
{{ row.source }} | {{ 'yes' if row.listed else 'no' }} | {{ row.detail or '' }} |
Topology wizard
How this instance is deployed: Standalone, Routed Mesh, or Storage Cluster.
{{ topology.local_server_id }}Choose deployment mode
{% if internode_token_once %}{{ internode_token_once }}
Registered servers
| ID | Name | Hostname | SMTP | Role | Local | Active |
|---|---|---|---|---|---|---|
{{ s.server_id }} |
{{ s.display_name }} | {{ s.hostname }} | {{ s.smtp_host }}:{{ s.smtp_port }} | {{ s.role }} | {{ 'yes' if s.is_local else 'no' }} | {{ 'yes' if s.is_active else 'no' }} |
| No peers registered (standalone or not yet joined). | ||||||
Logs
{{ log_content }}
Settings
General settings
{% if settings_info.get('panel_favicon_path') %} {% endif %}Version and updates
| Hostname | {{ settings_info.get('hostname', hostname) }} |
| Update channel | {{ settings_info.get('update_channel', 'stable') }} |
| Check endpoint | {{ settings_info.get('update_check_url') or (settings_info.get('update_status') or {}).get('endpoint', '—') }} |
| Current version | {{ settings_info.get('current_version', 'unknown') }} |
| Latest version | {{ (settings_info.get('update_status') or {}).get('latest_version', 'not checked yet') }} |
| Update available | {{ 'yes' if (settings_info.get('update_status') or {}).get('update_available') else 'no' }} |
Webmail (Roundcube)
Gestisci l'installazione disaccoppiata della Webmail Roundcube, aggiornamenti autonomi ed impostazioni SSL/Proxy.
| Stato Webmail | {% if webmail.get('installed') %} ● Installata e Attiva {% else %} ✖ Non Installata {% endif %} |
| Versione Roundcube | {{ webmail.get('version') or 'N/A' }} |
| Aggiornamento Automatico | |
| URL Accesso Webmail | {% if webmail.get('installed') %} 🌐 Apri /mail 🌐 Apri /webmail {% else %} Installazione richiesta per accedere a /mail e /webmail {% endif %} |
Shared TLS certificate
| Status | {{ ssl_info.get('status', 'unknown') }} |
| Mode | {{ ssl_info.get('mode', 'unknown') }} |
| Hostname | {{ ssl_info.get('hostname', hostname) }} |
| Certificate path | {{ ssl_info.get('cert_path', 'N/A') }} |
| Key path | {{ ssl_info.get('key_path', 'N/A') }} |
| Subject | {{ ssl_info['cert_info'].get('subject', 'N/A') }} |
| Issuer | {{ ssl_info['cert_info'].get('issuer', 'N/A') }} |
| Valid From | {{ ssl_info['cert_info'].get('not_valid_before', 'N/A') }} |
| Valid To | {{ ssl_info['cert_info'].get('not_valid_after', 'N/A') }} |
The same certificate is reused for Postfix, Dovecot, and the HTTPS endpoints served by Nginx.
{% else %}Notice: Postfix and/or Dovecot are using different certificates!
| Postfix Cert Path | {{ ssl_info.get('postfix_cert_path', 'N/A') }} |
| Postfix Cert Subject | {{ ssl_info['postfix_cert_info'].get('subject', 'N/A') }} |
| Dovecot Cert Path | {{ ssl_info.get('dovecot_cert_path', 'N/A') }} |
| Dovecot Cert Subject | {{ ssl_info['dovecot_cert_info'].get('subject', 'N/A') }} |
SSL actions
Service limits
Message size, recipients, send rates, Rspamd scores, and fail2ban jail thresholds (maxretry / findtime / bantime per jail).
API Credentials
| Admin user | {{ api_info.get('api_admin_user', 'N/A') }} |
| Endpoint | {{ api_info.get('api_endpoint', 'N/A') }} |
| Hostname | {{ api_info.get('hostname', 'N/A') }} |
API Usage
Authenticate using HTTP Basic Auth with your API admin credentials.
Example requests
curl -u <user>:<pass> {{ api_info.get('api_endpoint', '') }}health
curl -u <user>:<pass> {{ api_info.get('api_endpoint', '') }}domains
curl -u <user>:<pass> {{ api_info.get('api_endpoint', '') }}accounts
Service limits & anti-spam
Auth lockouts, max message size, SMTP rates, per-user send quotas (Rspamd), and fail2ban jail thresholds (maxretry / findtime / bantime).
API Credentials
| Admin user | {{ api_info.get('api_admin_user', 'N/A') }} |
| API endpoint | {{ api_info.get('api_endpoint', 'N/A') }} |
| Hostname | {{ api_info.get('hostname', 'N/A') }} |
{{ generated_api_password }}
Save this password now — it will not be shown again. Only the hash is stored.
API Usage
Authenticate using HTTP Basic Auth with your API admin credentials.
Example requests
curl -u <user>:<pass> {{ api_info.get('api_endpoint', '') }}health
curl -u <user>:<pass> {{ api_info.get('api_endpoint', '') }}domains
curl -u <user>:<pass> {{ api_info.get('api_endpoint', '') }}accounts
Available endpoints
| Method | Path | Description |
|---|---|---|
| GET | /health | Health check (public) |
| GET | /health/details | Detailed health (admin) |
| GET/POST | /domains | List / create domains |
| GET/POST | /accounts | List / create accounts |
| GET/POST | /aliases | List / create aliases |
| GET/POST | /redirects | List / create redirects |
| GET/POST | /reputation | List / create reputation records |
| GET | /admin/queue | Mail queue management |
| GET | /admin/bans | IP ban management |
| GET/PATCH | /admin/limits | Service limits |
| GET/PATCH | /admin/backups | Backup configuration |
| GET | /admin/ssl | Shared TLS certificate status |
| POST | /admin/ssl/selfsigned | Generate a self-signed certificate |
| POST | /admin/ssl/letsencrypt | Request a Let's Encrypt certificate |
| POST | /admin/ssl/manual | Upload a manual PEM certificate and key |