Install
Install Roundcube on OpenBSD Below is the link i found for setting this up! have any questions please email support@nastycode.com https://www.bsdhowto.ch/roundcube.html
RoundcubeMail is webmail written in PHP. It uses HTML 4.0 with no JavaScript required, making it compatible across many browsers. It does not require any databases and is very easy to install and configure. It is GPL-licensed.
Installation of packages With the following command you get all the packages installed which are required for Roundcube:
$ doas pkg_add -i roundcubemail mariadb-server php-pdo_mysql php-intl php-curl php-gd
The last package will present you probably with list of available versions to choose from. Make sure you choose the same version of PHP as the one that got installed by the roundcubemail package. At the time of writing this is 8.2 on OpenBSD 7.5.
Configuration of PHP You must make sure that the required PHP extensions are enabled. The easiest way to this is the following:
$ cd /etc/php-8.2.sample/ $ for i in * ; do > doas ln -sf ../php-8.2.sample/$i ../php-8.2/ > done
And you need to prepare the chroot(2) for the usage of TLS with PHP:
$ doas mkdir -p /var/www/etc/ssl $ doas install -m 444 -o root -g bin /etc/ssl/cert.pem /etc/ssl/openssl.cnf \ /var/www/etc/ssl/
Make sure you add the above install(1) command to /etc/rc.local in order to update the files whenever the originals change.
Roundcube itself requires some settings in /etc/php-fpm.conf in order to work properly:
; Settings for Roundcube php_flag[display_errors] = off php_admin_flag[log_errors] = on php_admin_value[upload_max_filesize] = 5M php_admin_value[post_max_size] = 6M php_admin_value[memory_limit] = 64M php_flag[zlib.output_compression] = off php_flag[suhosin.session.encrypt] = off php_flag[session.auto_start] = off php_admin_value[session.gc_maxlifetime] = 21600 php_admin_value[gc_divisor] = 500 php_admin_value[session.gc_probability] = 1
Configuration of MariaDB I recommend that you create a dedicated login group for mysqld - although the package read-me tells you that you only need it on busy servers. Append the following to /etc/login.conf:
mysqld:\ :openfiles-cur=1024:\ :openfiles-max=2048:\ :tc=daemon:
Create the initial database for MariaDB:
$ doas mysql_install_db
Now you can start mysqld and secure the installation:
$ doas rcctl enable mysqld $ doas rcctl start mysqld $ doas mysql_secure_installation
With httpd(8) chrooted to /var/www you must make sure that the connection to the socket of the MariaDB server is available within the chroot. First create a folder in which the socket will be placed:
$ doas install -d -m 0711 -o _mysql -g _mysql /var/www/var/run/mysql
Second you must change the socket path in /etc/my.cnf:
[client-server] socket = /var/www/var/run/mysql/mysql.sock
I recommend commenting out the existing entries and place the new ones below the existing ones. You must restart mysqld in order to activate the new socket:
$ doas rcctl restart mysqld
Now you are ready to create the actual database for Roundcube:
$ doas -s $ mysql > CREATE DATABASE roundcube /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; > GRANT ALL PRIVILEGES ON roundcube.* TO roundcube@localhost -> IDENTIFIED BY 'password'; > QUIT # mysql roundcube < /var/www/roundcubemail/SQL/mysql.initial.sql # ^D
Configuration of httpd(8) For security reasons you should offer access to Roundcube only over HTTPS. I presume that you have a proper certificate and its private key stored already on the server. The configuration of httpd(8) is done in httpd.conf(5):
server "rcube.example.org" { listen on egress tls port https log style combined tls certificate "/etc/ssl/rcube.example.org" tls key "/etc/ssl/private/rcube.example.org" root "/roundcubemail" directory index index.php location "*.php" { fastcgi socket "/run/php-fpm.sock" } } types { include "/usr/share/misc/mime.types" }
You may want to change the log style from combined to forwarded if you run httpd(8) behind a proxy that sets the headers X-Forwarded-For and X-Forwarded-Port (see below).
In order to make name resolving work within the chroot(2) you should copy your hosts(5) file and your resolv.conf(5) file into it:
$ cd /var/www $ for f in hosts resolv.conf ; do doas cp /etc/$f etc/ ; done
Recommended: Configuration of relayd(8) Consider running relayd(8) in front of httpd(8). It gives you the ability to add some headers for security. And it allows you to efficiently block access to certain URLs that you don’t want to be accessible by the public.
Add something like this to relayd.conf(5):
log connection ipv4=192.0.2.66 ipv6=2001:db8::c000:0242 table <rcube4> { 127.0.0.1 } table <rcube6> { ::1 } http protocol "www" { tls keypair rcube.example.org match request header set "X-Forwarded-For" value "$REMOTE_ADDR" match request header set "X-Forwarded-Port" value "$REMOTE_PORT" match response header set "Strict-Transport-Security" value "max-age=31536000; includeSubdomains" match response header set "X-Content-Type-Options" value "nosniff" match response header set "X-Frame-Options" value "SAMEORIGIN" match response header set "X-Robots-Tag" value "noindex,nofollow" match response header set "X-XSS-Protection" value "1; mode=block" pass block request url file "/etc/roundcube.blocklist" } relay "rcube4" { listen on ipv4 port https tls protocol "rcube" forward to <rcube4> port http } relay "rcube6" { listen on ipv6 port https tls protocol "rcube" forward to <rcube6> port http }
The configuration above assumes that relayd(8) and httpd(8) run on the same system. In this case there is no need to encrypt the traffic between the two daemons. Remove all the tls statements from httpd.conf(5) and change the log style to forwarded:
server "webmail.example.org" { listen on lo0 port http log style forwarded
The file /etc/roundcube.blacklist should contain the URLs you don’t want to be accessible by the public:
rcube.example.org/CHANGELOG.md rcube.example.org/INSTALL rcube.example.org/LICENSE rcube.example.org/README.md rcube.example.org/SECURITY.md rcube.example.org/SQL/ rcube.example.org/UPGRADING rcube.example.org/bin/ rcube.example.org/composer.json rcube.example.org/composer.json-dist rcube.example.org/composer.lock rcube.example.org/config/ rcube.example.org/db/ rcube.example.org/installer/ rcube.example.org/logs/ rcube.example.org/roundcubemail.conf-dist rcube.example.org/temp/
Any client trying to access any of these will cause relayd(8) to immediately drop the connection without any answer. Alternatively you could add a line return error to the protocol "rcube" block. That will deliver an error message to the client. In both cases relayd(8) will log the message 403 Forbidden together with the IP of the offending client to syslog(3). You can easily use these log entries to block offending IPs.
Configuration of Roundcube The basic configuration of Roundcube is done in its config file /var/www/roundcubemail/config/config.inc.php. You should at least set proper values for the following variables:
$config['db_dsnw'] = 'mysql://roundcube:password@localhost/roundcube'; $config['default_host'] = 'imap.example.org'; $config['smtp_server'] = 'smtp.example.org'; $config['des_key'] = 'Exactly24BytesRandomStr!'
To generate a quality random string of 24 bytes for the parameter des_key use the following commands:
$ cat /dev/urandom | tr -dc [:print:] | fold -w 24 | head -n 1
Roundcube likes to know about the MIME types to file extensions mapping of your webserver. Due to the chroot(2) of httpd(8) you need to copy the file /usr/share/misc/mime.types into the chroot:
$ doas mkdir -p /var/www/usr/share/misc $ doas cp /usr/share/misc/mime.types /var/www/usr/share/misc/
After that you need to add the following option to the config.inc.php file of Roundcube:
$config['mime_types'] = '/usr/share/misc/mime.types'; If you want to make sure that you always get the latest version of the file in the chroot after a sysupgrade(8) add the following lines to rc.local(8):
mkdir -p /var/www/usr/share/misc install -m 444 -o root -g bin /usr/share/misc/mime.types /var/www/usr/share/misc/mime.types
Optional: ImageMagick While not really necessary for Roundcube to function properly, the installer will complain if ImageMagick is missing. Some users might even complain about something not working, but frankly I’m not sure what that would be. Anyway, if want to you can easily complete the requirements by running the following commands:
$ doas pkg_add -i pecl82-imagick $ cd /etc/php-8.2 $ doas ln -s ../php-8.2.sample/imagick.ini imagick.ini
Optional: Redis Roundcube supports Redis as session storage since version 1.2 and as cache since version 1.4. Using Redis for both might give you a performance boost - or not, that depends on your setup. In case you want to try it here are the instructions:
First install the required components:
$ doas pkg_add -i pecl82-redis redis
Make sure the PHP module for Redis is enabled and php-fpm knows about it. Then you can start redis:
$ cd /etc/php-8.2 $ doas ln -s ../php-8.2.sample/redis.ini redis.ini $ doas rcctl enable redis $ doas rcctl start redis
Adding the following settings to /var/www/roundcube/config/config.inc.php to make Roundcube use Redis for both session storage and caching:
$config['redis_hosts'] = array('localhost:6379'); $config['session_storage'] = 'redis';
Optional: Logging The default settings of Roundcube will write dedicated log file in the directory /var/www/roundcube/logs. If you are happy with this solution I suggest you let newsyslog(8) rotate the files in order to prevent your /var from filling up.
Roundcube is also capable of using syslog(3). You can even configure Roundcube to send its log entries to a specific syslog facility. And you can enable/disable logging for certain parts of Roundcube. For Roundcube on a mail server I usually use the following settings in /var/www/roundcubemail/config/config.inc.php:
$config['log_driver'] = 'syslog'; $config['syslog_id'] = 'roundcube'; $config['syslog_facility'] = LOG_MAIL; $config['log_logins'] = true;
Optional: Plugins Roundcube comes with a bunch of plugins, and some more are available as packages under OpenBSD. You can enable a plugin by adding its name to the array $config['plugins'] in config.inc.php.
If you want to add plugins to Roundcube that are not part of the base package, first check if there is an OpenBSD package for it:
$ pkg_info -Q rcube
Should the package you want be missing in the list you can still obtain it by installing and using composer:
$ doas pkg_add composer $ cd /var/www/roundcube $ doas ...
Once you found a plugin on Packagist, click on it and replace the ... in the last command with the string found beneath the plugin name on the website. Something similar to composer require author/plugin
Start services and finish setup The time has come to actually start the required services:
$ doas rcctl enable httpd php82_fpm $ doas rcctl start httpd php82_fpm
Have Any Questions about this please email support@nastycode.com Created By SplinTer@NaStYcOdE.COM