Oben Rechts im Proxmox-Frontend auf 'Create CT' klicken um den Container zu erstellen.
ClamAV braucht recht viel Resourcen.
1024M Ram sind Minimum, sonst startet der Dienst gar nicht erst!!
Je nach Mail-Volumen müssen die Resourcen nach oben angepasst werden.
Es ist sicher nicht falsch, regelmässig zu überprüfen, ob dieser Container am Limit läuft
und gegebenenfalls Korrekturen vorzunehmen.
Der Mail-Server ist in allen Netzen erreichbar. Also müssen wir noch die weiteren Karten installieren.
Der Web-Server muss automatisch gestartet werden. Also die entsprechende Option aktivieren.
Dieser Server ist in einer eigenen Domain!!
Die im CT, nicht die vom Host, also die "/Pool1/subvol-228-disk-1/etc/hosts"
127.0.0.1 localhost 192.168.0.228 mail.local.comasys.ch 62.2.169.228 mail.kunden.email 192.168.99.228 mail.intern.comasys.ch mail ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Und gleich mit SSH Auf den Container:
ssh root@192.168.0.228 -p55
Wir haben im CT für die Dienste bereits einen Apache installiert. Ich verzichte darauf, das hier zu wiederholen, sondern verweise auf die entprechenden Abschnitte beim CT für die Dienste.
Die Installation, der Test und die Konfiguration sind (fast) identisch:
Die ID muss beim Test und der Konfiguration von "220"
jeweils auf die des Mail-Servers "228",
und der Servername muss von "dienste" auf
"mail" angepasst werden.
Der Mailserver ist jetzt erreichbar unter http://192.168.0.228.
Mit "a2enmod ssl" wird SSL aktiviert, und mit "a2ensite default-ssl" aktivieren wir https. Der Apache muss noch mit "service apache2 restart" neu gestartet werden.
Der Mailserver ist jetzt auch erreichbar unter https://192.168.0.228.
Auch von extern müsste es funktionnieren: https://62.2.169.228.
Damit Mail-Anhänge sauber gescannt werden können, brauchen wir noch weitere Entpacker:
apt-get install sudo arj cabextract nomarch // pkarc pax // ar,bcpio,tar unrar rar zip zoo lhasa // lha,lzh lzop // gzip(schnell) rpm rpm2cpio rpm-i18n
PHP brauchen wir auch auch als CLI (für das eine oder andere Script) und zu PHP braucht es auch noch weitere Modules:
apt-get install php5 php5-imap php-mail-mime php5-intl
Auf dem SQL-Server wird eine neue Datenbank angelegt. Bei mir heisst die 'mailserver' mit 'utf8_general_ci'. Der dazugeörige Benutzer heisst auch 'mailserver', hat als host '196.168.%' und alle Rechte auf der neuen Datenbank (bis auf 'Grant').
apt-get install postfix-mysql
Auf dem SQL-Server mit folgendem Script die Tabellen anlegen:
DROP TABLE IF EXISTS `virtual_access`; CREATE TABLE IF NOT EXISTS `virtual_access` ( `id` int(2) NOT NULL AUTO_INCREMENT, `amatch` varchar(255) NOT NULL, `akey` char(1) NOT NULL, `response` varchar(255) NOT NULL, `active` tinyint(1) NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, `modiby` varchar(255) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key` (`akey`,`amatch`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1006 ; DROP TABLE IF EXISTS `virtual_admins`; CREATE TABLE IF NOT EXISTS `virtual_admins` ( `domain_id` int(11) NOT NULL, `user_id` int(11) NOT NULL, `access` int(1) NOT NULL, PRIMARY KEY (`user_id`,`domain_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `virtual_domains`; CREATE TABLE IF NOT EXISTS `virtual_domains` ( `id` int(11) NOT NULL AUTO_INCREMENT, `domain` varchar(50) NOT NULL, `description` varchar(100) DEFAULT NULL, `active` int(1) NOT NULL DEFAULT '1', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; DROP TABLE IF EXISTS `virtual_users`; CREATE TABLE IF NOT EXISTS `virtual_users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `domain_id` int(11) NOT NULL, `password` varchar(106) NOT NULL, `email` varchar(100) NOT NULL, `forward` varchar(100) NOT NULL, `fwonly` int(11) NOT NULL DEFAULT '0', `created` datetime NOT NULL, `modified` datetime NOT NULL, `modiby` varchar(100) NOT NULL, `active` int(1) NOT NULL DEFAULT '1', `isadmin` int(1) NOT NULL, `name` varchar(100) NOT NULL, `adr1` varchar(100) NOT NULL, `adr2` varchar(100) NOT NULL, `plzort` varchar(100) NOT NULL, `telefon` varchar(100) NOT NULL, `mobile` varchar(100) NOT NULL, `sosmail` varchar(100) NOT NULL, `quota` varchar(10) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), KEY `domain_id` (`domain_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ; ALTER TABLE `virtual_users` ADD CONSTRAINT `virtual_users_ibfk_1` FOREIGN KEY (`domain_id`) REFERENCES `virtual_domains` (`id`) ON DELETE CASCADE;
unter /etc/postfix die folgenden Dateien anlegen:
user = mailserver password = MailServerPW hosts = 192.168.99.247 dbname = mailserver query = SELECT response FROM virtual_access WHERE akey='C' AND amatch='%s' AND active=1
user = mailserver password = MailServerPW hosts = 192.168.99.247 dbname = mailserver query = SELECT response FROM virtual_access WHERE akey='R' AND amatch='%s' AND active=1
user = mailserver password = MailServerPW hosts = 192.168.99.247 dbname = mailserver query = SELECT response FROM virtual_access WHERE akey='S' AND amatch='%s' AND active=1
user = mailserver password = MailServerPW hosts = 192.168.99.247 dbname = mailserver query = SELECT 1 FROM virtual_domains WHERE domain='%s' AND active=1
user = mailserver password = MailServerPW hosts = 192.168.99.247 dbname = mailserver query = SELECT 1 FROM virtual_users WHERE email='%s' AND fwonly=0 AND active=1
user = mailserver password = MailServerPW hosts = 192.168.99.247 dbname = mailserver query = SELECT forward FROM virtual_users WHERE email='%s' AND fwonly=1 AND active=1
user = mailserver password = MailServerPW hosts = 192.168.99.247 dbname = mailserver query = SELECT email FROM virtual_users WHERE email='%s' AND fwonly=0 AND active=1
myhostname = mail.kunden.email
myorigin = kunden.email
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
#relayhost =
inet_interfaces = all
recipient_delimiter = +
sender_canonical_maps = hash://etc/postfix/sender_canonical
mailbox_size_limit = 0
inet_protocols = ipv4
#(mailman)alias_maps = hash:/etc/aliases
#(mailman)alias_database = hash:/etc/aliases
transport_maps = hash:/etc/postfix/transport
smtpd_tls_cert_file = /etc/letsencrypt/live/www.kunden.email/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/www.kunden.email/privkey.pem
smtpd_use_tls = yes
# alternativ: smtpd_tls_auth_only = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_helo_required = yes
smtpd_helo_restrictions =
reject_invalid_helo_hostname,
permit
smtpd_recipient_restrictions =
check_recipient_access mysql:/etc/postfix/mysql-recipient.cf,
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
check_policy_service inet:127.0.0.1:10023,
permit
smtpd_sender_restrictions =
check_sender_access mysql:/etc/postfix/mysql-sender.cf,
reject_unknown_sender_domain,
reject_non_fqdn_sender,
permit
smtpd_client_restrictions =
check_client_access mysql:/etc/postfix/mysql-client.cf,
reject_rbl_client sbl-xbl.spamhaus.org,
permit
smtpd_data_restrictions =
reject_unauth_pipelining,
permit
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_mailbox_domains = mysql:/etc/postfix/mysql-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-maps.cf
virtual_alias_maps =
mysql:/etc/postfix/mysql-forward.cf,
mysql:/etc/postfix/mysql-users.cf
#------------
# amavis
content_filter = smtp-amavis:[127.0.0.1]:10024
# dkim
milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301
# mailman
owner_request_special = no
unknown_local_recipient_reject_code = 550
mailman_destination_recipient_limit = 1
alias_maps = hash:/var/lib/mailman/data/aliases, hash:/etc/aliases
alias_database = hash:/var/lib/mailman/data/aliases, hash:/etc/aliases
relay_domains = listen.kunden.email
virtual_maps = hash:/var/lib/mailman/data/aliases
smtp inet n - - - - smtpd
submission inet n - - - - smtpd
465 inet n - - - - smtpd
-o smtpd_tls_wrappermode=Yes
-o smtpd_sasl_auth_enable=Yes
pickup fifo n - - 60 1 pickup
-o content_filter=
-o receive_override_options=no_header_body_checks
cleanup unix n - - - 0 cleanup
qmgr fifo n - n 300 1 qmgr
tlsmgr unix - - - 1000? 1 tlsmgr
rewrite unix - - - - - trivial-rewrite
bounce unix - - - - 0 bounce
defer unix - - - - 0 bounce
trace unix - - - - 0 bounce
verify unix - - - - 1 verify
flush unix n - - 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - - - - smtp
relay unix - - - - - smtp
showq unix n - - - - showq
error unix - - - - - error
retry unix - - - - - error
discard unix - - - - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - - - - lmtp
anvil unix - - - - 1 anvil
scache unix - - - - 1 scache
maildrop unix - n n - - pipe
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix - n n - 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman unix - n n - - pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}
smtp-amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
apt-get install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql dovecot-sieve dovecot-managesieved
unter /etc/dovecot die folgende Datei ersetzen:
groupadd -g 5000 vmail
useradd -g 5000 -u 5000 vmail
mkdir /var/mail/vhosts
chown 5000.5000 /var/mail/vhosts
/etc/dovecot/conf.d/10-master.conf
service auth {
...
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
...
}
../10-mail.conf
apt-get install amavisd-new spamassassin clamav-daemon clamav postgrey libnet-dns-perl libmail-spf-perl libdbd-mysql-perl pyzor razor
Spamassassin muss nicht laufen, Amavis nutzt direkt die Libs von SA. Somit muss SA auch nicht konfiguriert werden.
Aber razor und pyzor müssen aktiviert werden:
su - amavis -s /bin/bash razor-admin -create razor-admin -register pyzor discover exit
Amavis muss angepasst werden. In der Datei "/etc/amavis/conf.d/15-content_filter_mode"müssen die Zeilen mit "bypass_.." aktiviert werden und dann amavis mit "service amavis restart" neu gestartet werden.
Gruppenzugehörigkeit fehlt:
usermod -a -G clamav amavis usermod -a -G amavis clamav service amavis restart service clamav-daemon restart
postgrey
/usr/share/postgrey
-> /etc/postgrey/whitelist*
-> /etc/default/postgrey
apt-get install opendkim opendkim-tools postfix-policyd-spf-python
dns: v=spf1 mx -all https://www.linode.com/docs/email/postfix/configure-spf-and-dkim-in-postfix-on-debian-8 exept: socket!!
http://roundcube.net/download/
https://github.com/roundcube/roundcubemail/wiki/Installation
https://getcomposer.org/download/
/etc/php5/apache2/conf.d
99-short.ini
99-timezone.ini
ToDo: OpenDKIM sollte regelmässig updates im DNS machen. Deshalb ist es am einfachsten, den BIND9 auch auf diesem Server zu installieren.