Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
email:install-admin [2025/03/03 09:14] – willy | email:install-admin [2025/03/13 13:30] (current) – [D) Installation: postfixadmin web gui] willy | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== E) Installation: | ||
- | USE flags: | + | PostfixAdmin is a neat web GUI that let's you monitor, create domains, accounts and much more on your web server. |
+ | |||
+ | |||
+ | ===== USE flags ===== | ||
+ | |||
+ | PostfixAdmin is a PHP application which you will be running with NGINX + PHP-FPM. | ||
+ | |||
+ | Ensure your PHP has the **imap** USE flag enabled: | ||
<code bash> | <code bash> | ||
- | echo "*/* maildir dovecot sasl" >> / | ||
- | echo " | ||
- | echo " | ||
echo " | echo " | ||
</ | </ | ||
- | ===== Installation: postfixadmin web gui ===== | + | ===== Manual |
- | postfixadmin and roundcube will be installed manually | + | PostfixAdmin is available in portage, but installing via emerge would be not really inline with how i manage the webapps on my external server. I will show you how i have installed |
Download latest release of **postfixadmin** from [[https:// | Download latest release of **postfixadmin** from [[https:// | ||
Line 27: | Line 32: | ||
</ | </ | ||
- | Now, configure it by creating a file called **postfixadmin/ | ||
- | <file - config.local.php> | ||
- | <?php | ||
- | $CONF[' | ||
- | $CONF[' | ||
- | $CONF[' | ||
- | $CONF[' | ||
- | $CONF[' | ||
- | $CONF[' | ||
- | ' | ||
- | ' | ||
- | ' | ||
- | ' | ||
- | ); | ||
- | $CONF[' | ||
- | $CONF[' | ||
- | /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: | ||
- | </ | ||
- | Now setup NGINX to point to it. You need of course to setup a certbot certificate, | + | |
+ | ===== Reverse Proxy ===== | ||
+ | |||
+ | Of course PostfixAdmin will need to be behind the reverse proxy, both for security and to wrap it with HTTPS. | ||
+ | See [[selfhost: | ||
+ | |||
+ | For reference, here is my specific configuration: | ||
<file postfixadmin.conf> | <file postfixadmin.conf> | ||
server { | server { | ||
Line 75: | Line 68: | ||
</ | </ | ||
- | restart | + | |
+ | ===== Finalization ===== | ||
+ | |||
+ | Restart | ||
Also don't forget to create a superadmin-account. I suggest you call it **user@mydomain.com** and set a password you will not forget. | Also don't forget to create a superadmin-account. I suggest you call it **user@mydomain.com** and set a password you will not forget. | ||
Line 81: | Line 77: | ||
Go back, uncomment the lines in the NGINX config file to disable the setup.php, and restart NGINX. | Go back, uncomment the lines in the NGINX config file to disable the setup.php, and restart NGINX. | ||
- | __note:__ when adding new domains, choose " | + | Installation is now complete. |
- | At this point, you can already create all the mail domains and user accounts you want. | ||
- | |||
- | ===== Configuration: | ||
- | |||
- | Link to SQL. | ||
- | |||
- | File: **/ | ||
- | <file - virtual_mailbox_domains.cf> | ||
- | dbpath = / | ||
- | query = SELECT domain FROM domain WHERE domain = ' | ||
- | </ | ||
- | |||
- | File: **/ | ||
- | <file - virtual_mailbox_maps.cf> | ||
- | dbpath = / | ||
- | query = SELECT maildir FROM mailbox WHERE local_part=' | ||
- | </ | ||
- | |||
- | File: **/ | ||
- | <file - virtual_alias_maps.cf> | ||
- | dbpath = / | ||
- | query = SELECT goto FROM alias WHERE address=' | ||
- | </ | ||
- | |||
- | Now, link it all in **/ | ||
- | < | ||
- | # A list of all virtual domains serviced by this instance of postfix. | ||
- | virtual_mailbox_domains = sqlite:/ | ||
- | # Look up the mailbox location based on the email address received. | ||
- | virtual_mailbox_maps = sqlite:/ | ||
- | # Any aliases that are supported by this system | ||
- | virtual_alias_maps = sqlite:/ | ||
- | </ | ||
- | |||
- | |||
- | |||
- | < | ||
- | compatibility_level = 3.6 | ||
- | |||
- | # Prevent hard-bounces | ||
- | soft_bounce = yes | ||
- | |||
- | queue_directory = / | ||
- | command_directory = /usr/sbin | ||
- | daemon_directory = / | ||
- | data_directory = / | ||
- | |||
- | mail_owner = postfix | ||
- | |||
- | # Usa gethostname() per default | ||
- | #myhostname = gardiol.org | ||
- | |||
- | mydomain = gardiol.org | ||
- | |||
- | #myorigin = $mydomain | ||
- | # | ||
- | |||
- | mydestination = localhost.localdomain | ||
- | unknown_local_recipient_reject_code = 550 | ||
- | |||
- | mynetworks_style = host | ||
- | |||
- | in_flow_delay = 1s | ||
- | |||
- | home_mailbox = .maildir/ | ||
- | |||
- | header_checks = regexp:/ | ||
- | |||
- | smtpd_banner = $myhostname ESMTP NO UCE | ||
- | |||
- | debug_peer_level = 2 | ||
- | # | ||
- | |||
- | sendmail_path = / | ||
- | newaliases_path = / | ||
- | mailq_path = / | ||
- | |||
- | setgid_group = postdrop | ||
- | html_directory = no | ||
- | manpage_directory = / | ||
- | sample_directory = / | ||
- | readme_directory = no | ||
- | inet_protocols = ipv4 | ||
- | meta_directory = / | ||
- | shlib_directory = / | ||
- | |||
- | |||
- | ############################################ | ||
- | ########################################### | ||
- | ########################################### | ||
- | disable_vrfy_command = yes | ||
- | message_size_limit = 0 | ||
- | #20971520 | ||
- | biff = no | ||
- | |||
- | local_transport = virtual | ||
- | local_recipient_maps = $alias_maps $virtual_mailbox_maps | ||
- | |||
- | virtual_transport = lmtp: | ||
- | |||
- | virtual_uid_maps = static:999 | ||
- | virtual_gid_maps = static:999 | ||
- | |||
- | virtual_mailbox_domains = proxy: | ||
- | virtual_alias_maps = proxy: | ||
- | | ||
- | | ||
- | virtual_mailbox_maps = proxy: | ||
- | | ||
- | |||
- | # if you let postfix store your mails directly (without using maildrop, dovecot deliver etc.) | ||
- | virtual_mailbox_base = /home/vmail | ||
- | |||
- | # SASL | ||
- | smtpd_sasl_type = dovecot | ||
- | smtpd_sasl_path = private/ | ||
- | smtpd_sasl_auth_enable = yes | ||
- | smtpd_sasl_security_options = noanonymous | ||
- | smtpd_sasl_local_domain = | ||
- | broken_sasl_auth_clients = no | ||
- | smtpd_sasl_authenticated_header = yes | ||
- | # Setup TLS | ||
- | smtpd_tls_cert_file = / | ||
- | smtpd_tls_key_file = / | ||
- | # abilita il debug... | ||
- | smtpd_tls_loglevel = 0 | ||
- | # metti a " | ||
- | smtpd_tls_security_level = may | ||
- | # Metti a yes per impedire AUTH non cifrata | ||
- | smtpd_tls_auth_only = no | ||
- | # Fai la cache delle sessioni | ||
- | smtpd_tls_session_cache_database = btree:/ | ||
- | |||
- | # Some ANTISPAM | ||
- | smtpd_delay_reject = yes | ||
- | smtpd_helo_required = yes | ||
- | smtpd_helo_restrictions = permit_mynetworks, | ||
- | smtpd_sender_restrictions = permit_sasl_authenticated, | ||
- | smtpd_recipient_restrictions = reject_unauth_pipelining, | ||
- | smtpd_client_restrictions = permit_mynetworks, | ||
- | #, reject_rbl_client zen.spamhaus.org, | ||
- | |||
- | policy-spf_time_limit = 3600s | ||
- | |||
- | smtpd_timeout = 60s | ||
- | default_process_limit = 200 | ||
- | |||
- | smtputf8_enable = no | ||
- | smtp_data_done_timeout = 1800 | ||
- | |||
- | smtpd_milters = unix:/ | ||
- | non_smtpd_milters = unix:/ | ||
- | |||
- | syslog_facility = mail | ||
- | syslog_name = postfix | ||
- | |||
- | body_checks = regexp:/ | ||
- | |||
- | maximal_queue_lifetime = 60m | ||
- | bounce_queue_lifetime = 60m | ||
- | smtp_connect_timeout | ||
- | smtp_helo_timeout = 60s | ||
- | |||
- | smtpd_relay_before_recipient_restrictions = no | ||
- | </ | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ===== Installation: | ||
- | |||
- | This step is **mandatory** and critical for proper email delivery. | ||
- | |||
- | |||
- | ===== Installation: | ||
- | |||
- | Install spamassassin & amavisd-new | ||
- | |||
- | |||
- | FILE / | ||
- | < | ||
- | # Link the mailbox uid and gid to postfix. | ||
- | virtual_uid_maps = static:5000 | ||
- | virtual_gid_maps = static:5000 | ||
- | |||
- | # Set the base address for all virtual mailboxes | ||
- | virtual_mailbox_base = /var/vmail | ||
- | </ | ||