2022-08-18 14:01:52 +02:00
|
|
|
## OpenSMTPD Admin
|
|
|
|
|
2023-10-14 16:44:58 +02:00
|
|
|
OpenSMTPD Admin started as a fork of Postfix Admin 2.1.0 (released
|
|
|
|
in 2007), and grew quickly in a complete rewrite for OpenSMTPD.
|
2022-08-18 14:01:52 +02:00
|
|
|
|
2023-10-14 16:44:58 +02:00
|
|
|
## Installation of packages
|
|
|
|
|
|
|
|
To get going on OpenBSD you will need to install the following packages:
|
|
|
|
|
|
|
|
mariadb-server
|
|
|
|
php
|
|
|
|
php-pdo_mysql
|
|
|
|
|
|
|
|
For OpenSMTPD you need the packages:
|
|
|
|
|
|
|
|
opensmtpd-extras
|
|
|
|
opensmtpd-extras-mysql
|
|
|
|
|
|
|
|
Once the packages are installed follow the steps outlined in /usr/local/share/doc/pkg-readmes
|
|
|
|
|
|
|
|
You need to create the database with:
|
2022-08-21 12:29:42 +02:00
|
|
|
|
|
|
|
CREATE DATABASE IF NOT EXISTS `opensmtpd` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
|
|
|
|
USE `opensmtpd`;
|
|
|
|
|
|
|
|
CREATE TABLE `admin` (
|
|
|
|
`username` varchar(255) NOT NULL DEFAULT '',
|
|
|
|
`password` varchar(255) NOT NULL DEFAULT '',
|
2022-09-05 22:24:35 +02:00
|
|
|
`role` varchar(32) DEFAULT NULL,
|
2022-08-21 12:29:42 +02:00
|
|
|
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
|
|
`modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
2022-09-04 11:38:47 +02:00
|
|
|
PRIMARY KEY (`username`),
|
|
|
|
KEY `username` (`username`)
|
2023-10-14 16:44:58 +02:00
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='OpenSMTPD Admin - Virtual Admins';
|
2022-08-21 12:29:42 +02:00
|
|
|
|
|
|
|
CREATE TABLE `alias` (
|
|
|
|
`address` varchar(255) NOT NULL DEFAULT '',
|
|
|
|
`goto` text NOT NULL,
|
|
|
|
`domain` varchar(255) NOT NULL DEFAULT '',
|
|
|
|
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
|
|
`modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
2022-09-04 11:38:47 +02:00
|
|
|
PRIMARY KEY (`address`),
|
|
|
|
KEY `address` (`address`)
|
2023-10-14 16:44:58 +02:00
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='OpenSMTPD Admin - Virtual Aliases';
|
2022-08-21 12:29:42 +02:00
|
|
|
|
|
|
|
CREATE TABLE `domain` (
|
|
|
|
`domain` varchar(255) NOT NULL DEFAULT '',
|
|
|
|
`description` varchar(255) NOT NULL DEFAULT '',
|
|
|
|
`aliases` int(10) NOT NULL DEFAULT 0,
|
|
|
|
`mailboxes` int(10) NOT NULL DEFAULT 0,
|
|
|
|
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
|
|
`modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
2022-09-04 11:38:47 +02:00
|
|
|
PRIMARY KEY (`domain`),
|
|
|
|
KEY `domain` (`domain`)
|
2023-10-14 16:44:58 +02:00
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='OpenSMTPD Admin - Virtual Domains';
|
2022-08-21 12:29:42 +02:00
|
|
|
|
|
|
|
CREATE TABLE `domain_admins` (
|
|
|
|
`username` varchar(255) NOT NULL DEFAULT '',
|
|
|
|
`domain` varchar(255) NOT NULL DEFAULT '',
|
|
|
|
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
2022-09-04 11:38:47 +02:00
|
|
|
KEY `username` (`username`)
|
2023-10-14 16:44:58 +02:00
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='OpenSMTPD Admin - Domain Admins';
|
2022-08-21 12:29:42 +02:00
|
|
|
|
|
|
|
CREATE TABLE `log` (
|
|
|
|
`timestamp` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
|
|
`username` varchar(255) NOT NULL DEFAULT '',
|
|
|
|
`domain` varchar(255) NOT NULL DEFAULT '',
|
|
|
|
`action` varchar(255) NOT NULL DEFAULT '',
|
2022-09-04 11:38:47 +02:00
|
|
|
`data` varchar(255) NOT NULL DEFAULT '',
|
|
|
|
KEY `timestamp` (`timestamp`)
|
2023-10-14 16:44:58 +02:00
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='OpenSMTPD Admin - Log';
|
2022-08-21 12:29:42 +02:00
|
|
|
|
2022-09-04 11:38:47 +02:00
|
|
|
CREATE TABLE `mailbox` (
|
|
|
|
`username` varchar(255) NOT NULL DEFAULT '',
|
|
|
|
`password` varchar(255) NOT NULL DEFAULT '',
|
|
|
|
`name` varchar(255) NOT NULL DEFAULT '',
|
|
|
|
`maildir` varchar(255) NOT NULL DEFAULT '',
|
|
|
|
`domain` varchar(255) NOT NULL DEFAULT '',
|
|
|
|
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
|
|
`modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
|
|
PRIMARY KEY (`username`),
|
|
|
|
KEY `username` (`username`)
|
2023-10-14 16:44:58 +02:00
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='OpenSMTPD Admin - Virtual Mailboxes';
|
2022-09-04 11:38:47 +02:00
|
|
|
|
|
|
|
CREATE TABLE `vacation` (
|
|
|
|
`email` varchar(255) NOT NULL DEFAULT '',
|
|
|
|
`subject` varchar(255) NOT NULL DEFAULT '',
|
|
|
|
`body` text NOT NULL,
|
|
|
|
`cache` text NOT NULL,
|
|
|
|
`domain` varchar(255) NOT NULL DEFAULT '',
|
|
|
|
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
|
|
|
PRIMARY KEY (`email`),
|
|
|
|
KEY `email` (`email`)
|
2023-10-14 16:44:58 +02:00
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='OpenSMTPD Admin - Virtual Vacation';
|
|
|
|
|
|
|
|
|
|
|
|
You can create the database user with something like:
|
|
|
|
|
|
|
|
CREATE USER IF NOT EXISTS 'opensmtpd'@'localhost' IDENTIFIED BY 'RandomString';
|
|
|
|
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER ON opensmtpd.* TO 'opensmtpd'@'localhost';
|
2022-08-21 12:29:42 +02:00
|
|
|
|
|
|
|
|
2023-10-14 16:44:58 +02:00
|
|
|
As an example configuration for httpd you can use:
|
|
|
|
|
|
|
|
server "opensmtpadmin" {
|
|
|
|
listen on * tls port 443
|
|
|
|
tls {
|
|
|
|
certificate "/etc/ssl/opensmtpdadmin.fullchain.pem"
|
|
|
|
key "/etc/ssl/private/opensmtpadmin.key"
|
|
|
|
}
|
|
|
|
tcp { nodelay, sack }
|
|
|
|
log style forwarded
|
|
|
|
location "/admin/*" {
|
|
|
|
authenticate with "/opensmtpdadmin/admin/.htpasswd"
|
|
|
|
root "/opensmtpdadmin"
|
|
|
|
fastcgi socket "/run/php-fpm.sock"
|
|
|
|
}
|
|
|
|
location "*.php*" {
|
|
|
|
root "/opensmtpdadmin"
|
|
|
|
directory index index.php
|
|
|
|
fastcgi socket "/run/php-fpm.sock"
|
|
|
|
}
|
|
|
|
location "/*" {
|
|
|
|
root "/opensmtpdadmin"
|
|
|
|
directory index index.php
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
As soon as that is done you can go to https://<yourhost>/<br>
|
|
|
|
You will be greeted by setup.php to check if everything is present to run OpenSMTPDAdmin.
|
|
|
|
|
|
|
|
Copy or move the conf.php-sample to conf.php and make the needed changes for your setup.<br>
|
|
|
|
You can remove setup.php if you want.
|
|
|
|
|
|
|
|
After that you can go to https://<yourhost>/admin/admin.php where you create the SUPER ADMIN.<br>
|
|
|
|
NOTE: Once this is done either remove or protect this directory / file.
|
|
|
|
|
|
|
|
You are now ready to use OpenSMTPDAdmin.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
To use the accounts OpenSMTPDAdmin create in OpenSMTPD you can use the below config:
|
2022-08-21 12:29:42 +02:00
|
|
|
|
|
|
|
# /etc/mail/smtpd.conf
|
|
|
|
table credentials mysql:/etc/mail/sql.conf
|
|
|
|
table domains mysql:/etc/mail/sql.conf
|
|
|
|
table userinfo mysql:/etc/mail/sql.conf
|
|
|
|
table virtuals mysql:/etc/mail/sql.conf
|
|
|
|
|
2023-10-14 16:44:58 +02:00
|
|
|
|
2022-08-21 12:29:42 +02:00
|
|
|
Connecting the database to smtpd:
|
|
|
|
|
|
|
|
# /etc/mail/sql.conf
|
|
|
|
host localhost
|
|
|
|
username opensmtpd
|
|
|
|
password RandomString
|
|
|
|
database opensmtpd
|
|
|
|
|
|
|
|
query_alias SELECT goto FROM alias WHERE address=?;
|
2022-09-02 23:21:22 +02:00
|
|
|
query_credentials SELECT username, password FROM mailbox WHERE username=?;
|
|
|
|
query_domain SELECT domain FROM domain WHERE domain=?;
|
|
|
|
query_userinfo SELECT 501, 501, maildir FROM mailbox WHERE username=?;
|