diff --git a/Dockerfile b/Dockerfile index 7b898940..4a02cb61 100644 --- a/Dockerfile +++ b/Dockerfile @@ -65,6 +65,12 @@ RUN < disabled +- 1 => enabled + ##### ENABLE_AMAVIS Amavis content filter (used for ClamAV & SpamAssassin) diff --git a/mailserver.env b/mailserver.env index 64729fb5..18b20027 100644 --- a/mailserver.env +++ b/mailserver.env @@ -103,6 +103,11 @@ ENABLE_SRS=0 ENABLE_POP3= ENABLE_CLAMAV=0 +# Enables Rspamd +# **0** => disabled +# 1 => enabled +ENABLE_RSPAMD=0 + # Amavis content filter (used for ClamAV & SpamAssassin) # 0 => Disabled # 1 => Enabled diff --git a/target/rspamd/local.d/disabled/antivirus.conf b/target/rspamd/local.d/disabled/antivirus.conf new file mode 100644 index 00000000..fc4acc7b --- /dev/null +++ b/target/rspamd/local.d/disabled/antivirus.conf @@ -0,0 +1,10 @@ +# documentation: https://rspamd.com/doc/modules/antivirus.html + +ClamAV { + action = "reject"; + scan_mime_parts = true; + message = '${SCANNER}: virus found: "${VIRUS}"'; + type = "clamav"; + log_clean = false; + servers = "127.0.0.1:3310"; +} diff --git a/target/rspamd/local.d/logging.inc b/target/rspamd/local.d/logging.inc new file mode 100644 index 00000000..8c029142 --- /dev/null +++ b/target/rspamd/local.d/logging.inc @@ -0,0 +1,6 @@ +# documentation: https://rspamd.com/doc/configuration/logging.html + +type = "console"; +level = "notice"; +color = true; +systemd = false; diff --git a/target/rspamd/local.d/options.inc b/target/rspamd/local.d/options.inc new file mode 100644 index 00000000..6561c2ec --- /dev/null +++ b/target/rspamd/local.d/options.inc @@ -0,0 +1 @@ +pidfile = false; diff --git a/target/rspamd/local.d/redis.conf b/target/rspamd/local.d/redis.conf new file mode 100644 index 00000000..81658d5e --- /dev/null +++ b/target/rspamd/local.d/redis.conf @@ -0,0 +1,4 @@ +# documentation: https://rspamd.com/doc/configuration/redis.html + +servers = "127.0.0.1:6379"; +expand_keys = true; diff --git a/target/scripts/build/packages.sh b/target/scripts/build/packages.sh index 75de48df..46b3dc05 100644 --- a/target/scripts/build/packages.sh +++ b/target/scripts/build/packages.sh @@ -129,6 +129,21 @@ function _install_dovecot apt-get "${QUIET}" --no-install-recommends install "${DOVECOT_PACKAGES[@]}" } +function _install_rspamd +{ + _log 'trace' 'Adding Rspamd package signatures' + curl -sSfL https://rspamd.com/apt-stable/gpg.key | gpg --dearmor >/etc/apt/trusted.gpg.d/rspamd.gpg + + echo "deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/rspamd.gpg] http://rspamd.com/apt-stable/ bullseye main" \ + >/etc/apt/sources.list.d/rspamd.list + echo "deb-src [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/rspamd.gpg] http://rspamd.com/apt-stable/ bullseye main" \ + >>/etc/apt/sources.list.d/rspamd.list + + _log 'debug' 'Installing Rspamd' + apt-get "${QUIET}" update + apt-get "${QUIET}" --no-install-recommends install rspamd redis-server +} + function _install_fail2ban { local FAIL2BAN_DEB_URL='https://github.com/fail2ban/fail2ban/releases/download/1.0.2/fail2ban_1.0.2-1.upstream1_all.deb' @@ -180,5 +195,6 @@ _pre_installation_steps _install_postfix _install_packages _install_dovecot +_install_rspamd _install_fail2ban _post_installation_steps diff --git a/target/scripts/helpers/variables.sh b/target/scripts/helpers/variables.sh index 8753ff08..e7cf7a61 100644 --- a/target/scripts/helpers/variables.sh +++ b/target/scripts/helpers/variables.sh @@ -91,6 +91,7 @@ function _environment_variables_general_setup VARS[ENABLE_POP3]="${ENABLE_POP3:=0}" VARS[ENABLE_POSTGREY]="${ENABLE_POSTGREY:=0}" VARS[ENABLE_QUOTAS]="${ENABLE_QUOTAS:=1}" + VARS[ENABLE_RSPAMD]="${ENABLE_RSPAMD:=0}" VARS[ENABLE_SASLAUTHD]="${ENABLE_SASLAUTHD:=0}" VARS[ENABLE_SPAMASSASSIN]="${ENABLE_SPAMASSASSIN:=0}" VARS[ENABLE_SPAMASSASSIN_KAM]="${ENABLE_SPAMASSASSIN_KAM:=0}" diff --git a/target/scripts/start-mailserver.sh b/target/scripts/start-mailserver.sh index 8c71aaae..c8430c0e 100755 --- a/target/scripts/start-mailserver.sh +++ b/target/scripts/start-mailserver.sh @@ -101,6 +101,7 @@ function _register_functions [[ ${ENABLE_FAIL2BAN} -eq 1 ]] && _register_setup_function '_setup_fail2ban' [[ ${ENABLE_DNSBL} -eq 0 ]] && _register_setup_function '_setup_dnsbl_disable' [[ ${CLAMAV_MESSAGE_SIZE_LIMIT} != '25M' ]] && _register_setup_function '_setup_clamav_sizelimit' + [[ ${ENABLE_RSPAMD} -eq 1 ]] && _register_setup_function '_setup_rspamd' _register_setup_function '_setup_dkim' _register_setup_function '_setup_ssl' @@ -165,6 +166,12 @@ function _register_functions [[ ${SMTP_ONLY} -ne 1 ]] && _register_start_daemon '_start_daemon_dovecot' [[ ${ENABLE_UPDATE_CHECK} -eq 1 ]] && _register_start_daemon '_start_daemon_update_check' + if [[ ${ENABLE_RSPAMD} -eq 1 ]] + then + _register_start_daemon '_start_daemon_rspamd' + _register_start_daemon '_start_daemon_redis' + fi + # needs to be started before SASLauthd _register_start_daemon '_start_daemon_opendkim' _register_start_daemon '_start_daemon_opendmarc' diff --git a/target/scripts/startup/daemons-stack.sh b/target/scripts/startup/daemons-stack.sh index 8fe0d967..9782e36c 100644 --- a/target/scripts/startup/daemons-stack.sh +++ b/target/scripts/startup/daemons-stack.sh @@ -35,6 +35,8 @@ function _start_daemon_postsrsd { _default_start_daemon 'postsrsd' ; function _start_daemon_postfix { _default_start_daemon 'postfix' ; } function _start_daemon_rsyslog { _default_start_daemon 'rsyslog' ; } function _start_daemon_update_check { _default_start_daemon 'update-check' ; } +function _start_daemon_rspamd { _default_start_daemon 'rspamd' ; } +function _start_daemon_redis { _default_start_daemon 'redis' ; } function _start_daemon_saslauthd { diff --git a/target/scripts/startup/misc-stack.sh b/target/scripts/startup/misc-stack.sh index 97cc428b..0c78fa76 100644 --- a/target/scripts/startup/misc-stack.sh +++ b/target/scripts/startup/misc-stack.sh @@ -33,6 +33,8 @@ function _misc_save_states [[ ${ENABLE_FAIL2BAN} -eq 1 ]] && FILES+=('lib/fail2ban') [[ ${ENABLE_FETCHMAIL} -eq 1 ]] && FILES+=('lib/fetchmail') [[ ${ENABLE_POSTGREY} -eq 1 ]] && FILES+=('lib/postgrey') + [[ ${ENABLE_RSPAMD} -ne 1 ]] && FILES+=('lib/rspamd') + # [[ ${ENABLE_RSPAMD} -ne 1 ]] && FILES+=('lib/redis') [[ ${ENABLE_SPAMASSASSIN} -eq 1 ]] && FILES+=('lib/spamassassin') [[ ${SMTP_ONLY} -ne 1 ]] && FILES+=('lib/dovecot') diff --git a/target/scripts/startup/setup-stack.sh b/target/scripts/startup/setup-stack.sh index 9e11fb59..b59529a7 100644 --- a/target/scripts/startup/setup-stack.sh +++ b/target/scripts/startup/setup-stack.sh @@ -89,6 +89,27 @@ function _setup_amavis fi } +function _setup_rspamd +{ + _log 'warn' 'Rspamd support is under active development, expect breaking changes at any time' + + if [[ ${ENABLE_AMAVIS} -eq 1 ]] || [[ ${ENABLE_SPAMASSASSIN} -eq 1 ]] + then + _shutdown 'You cannot run Amavis/SpamAssassin and Rspamd at the same time' + fi + + if [[ ${ENABLE_CLAMAV} -eq 1 ]] + then + _log 'debug' 'Rspamd will use ClamAV' + mv /etc/rspamd/local.d/disabled/antivirus.conf /etc/rspamd/local.d/antivirus.conf + else + _log 'debug' 'Rspamd will not use ClamAV (which has not been enabled)' + fi + + _log 'warn' 'Only running with default configuration' + _log 'warn' 'You will need to adjust the Postfix configuration yourself to use Rspamd as of now' +} + function _setup_dmarc_hostname { _log 'debug' 'Setting up DMARC' diff --git a/target/supervisor/conf.d/supervisor-app.conf b/target/supervisor/conf.d/supervisor-app.conf index 994b1b8c..c0f9c700 100644 --- a/target/supervisor/conf.d/supervisor-app.conf +++ b/target/supervisor/conf.d/supervisor-app.conf @@ -96,6 +96,24 @@ stdout_logfile=/var/log/supervisor/%(program_name)s.log stderr_logfile=/var/log/supervisor/%(program_name)s.log command=/usr/sbin/amavisd-new foreground +[program:rspamd] +startsecs=0 +stopwaitsecs=55 +autostart=false +autorestart=true +stdout_logfile=/var/log/supervisor/%(program_name)s.log +stderr_logfile=/var/log/supervisor/%(program_name)s.log +command=/usr/bin/rspamd --no-fork --user=rspamd --group=rspamd + +[program:redis] +startsecs=0 +stopwaitsecs=55 +autostart=false +autorestart=true +stdout_logfile=/var/log/supervisor/%(program_name)s.log +stderr_logfile=/var/log/supervisor/%(program_name)s.log +command=redis-server --daemonize no --bind 127.0.0.1 --port 6379 --loglevel warning + [program:fetchmail] startsecs=0 stopwaitsecs=55