#!/bin/sh set -e [ "$1" = "configure" ] || exit 0 [ "$DEBIAN_SCRIPT_DEBUG" ] && set -vx # Load CARNET Tools . /usr/share/carnet-tools/functions.sh # Load Debconf . /usr/share/debconf/confmodule check_for_utf() { utf=$(perl -lne 'print if /[^[:ascii:]]/' /etc/passwd) if [ ! -z "$utf" ]; then poruka="Detektirani su znakovi šđčćž u datoteci /etc/passwd. To bi moglo omesti generiranje mail aliasa u obliku Ime.Prezime@ustanova.hr. Molimo uklonite naše znakove s naredbom usermod -c \"Ime Prezime\" korisnik Korisnici koji imaju znakove u imenu ili prezimenu su: " LC_MESSAGES=hr_HR dialog --backtitle "Postfix: problem s datotekom /etc/passwd" --msgbox "$poruka$utf" 18 75 fi } db_get postfix-cn/rbl || true rbl="$RET" # Tue, 19 Dec 2006 10:31:01 +0100 # relays.ordb.org se gasi 2006-12-31 if echo $rbl | grep -q relays.ordb.org; then rbl="`echo $rbl | sed 's/relays.ordb.org, //g'`" # za svaki slucaj, ako je na kraju rbl="`echo $rbl | sed 's/relays.ordb.org//g'`" db_set postfix-cn/rbl "$rbl" || true fi # Thu, 21 Dec 2006 09:03:50 +0100 # opm.blitzed.org je ugasen 2006-05 if echo $rbl | grep -q opm.blitzed.org; then rbl="`echo $rbl | sed 's/opm.blitzed.org, //g'`" # za svaki slucaj, ako je na kraju rbl="`echo $rbl | sed 's/opm.blitzed.org//g'`" db_set postfix-cn/rbl "$rbl" || true fi # Wed, 12 Jun 2013 15:15:28 +0200 # dnsbl.njabl.org je ugasen 2013-03 if echo $rbl | grep -q dnsbl.njabl.org; then rbl="`echo $rbl | sed 's/dnsbl.njabl.org, //g'`" # za svaki slucaj, ako je na kraju rbl="`echo $rbl | sed 's/dnsbl.njabl.org//g'`" db_set postfix-cn/rbl "$rbl" || true fi # zelja, 2021-04-29 # ako je spamhaus.org ovdje, postavi eta.cert.hr, a sam # spamhaus je nepotreban, jer imamo zen.dnsbl-sh.carnet.hr if echo $rbl | grep -q zen.spamhaus.org; then rbl="`echo $rbl | sed 's/zen.spamhaus.org, /eta.cert.hr, /g'`" # za svaki slucaj, ako je na kraju rbl="`echo $rbl | sed 's/zen.spamhaus.org/eta.cert.hr/g'`" db_set postfix-cn/rbl "$rbl" || true fi db_get postfix-cn/matchgecos || true matchgecos="$RET" hostname="`hostname`" fqdn="`hostname --fqdn`" domain="`dnsdomainname`" mailname="`cat /etc/mailname 2> /dev/null || hostname --fqdn`" cp_get_netaddr || true netaddr="$RET" # ako ne postoje konfiguracijske datoteke, napravi ih [ -f /etc/postfix/master.cf ] || touch /etc/postfix/master.cf [ -f /etc/postfix/main.cf ] || touch /etc/postfix/main.cf # spremi pocetnu verziju cp -pf /etc/postfix/master.cf /etc/postfix/master.cf.dpkg-tmp.$$ cp -pf /etc/postfix/main.cf /etc/postfix/main.cf.dpkg-tmp.$$ # srediti master.cf za TLS & submission & retry if [ -f /etc/postfix/master.cf ]; then cp_check_and_sed '^#tlsmgr' \ 's/^#tlsmgr/tlsmgr/g' \ /etc/postfix/master.cf || true cp_check_and_sed '^#submission' \ 's/^#submission/submission/g' \ /etc/postfix/master.cf || true cp_check_and_sed '^#retry' \ 's/^#retry/retry/g' \ /etc/postfix/master.cf || true cp_check_and_sed '^#smtps' \ 's/^#smtps/smtps/g' \ /etc/postfix/master.cf || true cp_check_and_sed '^# -o' \ 's/^# -o/ -o/g' \ /etc/postfix/master.cf || true for option in "-o milter_macro_daemon_name=ORIGINATING" \ "-o smtpd_recipient_restrictions=" \ "-o smtpd_reject_unlisted_recipient=no" \ "-o smtpd_relay_restrictions=permit_sasl_authenticated,reject" \ "-o smtpd_sasl_auth_enable=yes" \ "-o smtpd_tls_security_level=encrypt" \ "-o smtpd_tls_wrappermode=yes" \ "-o syslog_name=postfix/smtps" \ "-o syslog_name=postfix/submission"; do cp_check_and_sed "^# $option" \ "s/# $option/$option/g" \ /etc/postfix/master.cf || true done for option in "o smtpd_client_restrictions=" \ "o smtpd_helo_restrictions=" \ "o smtpd_sender_restrictions="; do cp_check_and_sed "$option" \ "s/.*$option/# -$option/g" \ /etc/postfix/master.cf || true done fi # ovo manje/vise uzima kao default, ali u slucaju da je multihomed stroj, # i eventualno je sprckan, mozda nesto nece raditi kako spada pa cemo konfigurirati postconf -e myhostname="$fqdn" postconf -e mydomain="$domain" postconf -e myorigin="$mailname" # zbog problema sa squirrelmailom postconf -e append_dot_mydomain="yes" postconf -e append_at_myorigin="yes" # dodaj 127.0.0.0/8, netaddr i ipv6-localhost # dodaje izlazne servere za webmail --zelja mynetworks="`postconf -h mynetworks`" for i in "127.0.0.0/8" "\[::1\]/128" "$netaddr" "193.198.233.95" "193.198.233.96"; do if ! echo $mynetworks | grep -q $i; then mynetworks="$mynetworks, $i" fi done postconf -e mynetworks="$mynetworks" # obrisati $mydomain, ako je upgrade sa starije verzije # te srediti mydestination if dpkg --compare-versions "$2" lt 2.3.8-2; then mydestination="`postconf -h mydestination`" if echo $mydestination | grep -q ", \$mydomain"; then mydestination="`echo $mydestination | sed 's/, \$mydomain//g'`" fi if ! echo $mydestination | grep -q "localhost.\$mydomain"; then mydestination="$mydestination, localhost.\$mydomain" fi if ! echo $mydestination | grep -q "\$myhostname"; then mydestination="\$myhostname, $mydestination" fi postconf -e mydestination="$mydestination" fi # default je: $myhostname, localhost.$mydomain, localhost # treba dodati jos ", $mydomain", ako je host mx cp_get_mx_domain || true mx_domain="$RET" if [ "$mx_domain" != "$fqdn" ]; then mydestination="`postconf -h mydestination`" if ! echo $mydestination | grep -q ", \$mydomain"; then postconf -e mydestination="$mydestination, \$mydomain" fi postconf -e relay_domains="\$mydestination" if [ "$mx_domain" != "$domain" ]; then if dpkg --compare-versions "$2" lt 2.1.5-8; then cp_echo "CN: Ovaj poslužitelj je podešen kao MX za više od jedne domene! Paket postfix-cn će" cp_echo "CN: podesiti samo domenu $mx_domain, ostale domene MORATE DODATI RUČNO" cp_echo "CN: u varijablu 'mydestination' u /etc/postfix/main.cf. Ukoliko to ne" cp_echo "CN: učinite, mogli biste (iz)gubiti mail za te domene." fi fi fi # sredi $alias_maps if [ "$matchgecos" = "true" ]; then aliasmaps="hash:/etc/aliases hash:/var/lib/postfix-cn/aliases_gecos" elif [ "$matchgecos" = "false" ]; then aliasmaps="hash:/etc/aliases" alias_maps="`postconf -h alias_maps | \ sed -e 's#hash:/var/lib/postfix-cn/aliases_gecos,*##g' -e 's/,*[[:space:]]*$//g'`" postconf -e alias_maps="$alias_maps" fi for i in $aliasmaps; do alias_maps="`postconf -h alias_maps`" if ! echo $alias_maps | grep -q "$i"; then postconf -e alias_maps="$alias_maps, $i" fi done postconf -e alias_database="hash:/etc/aliases" postconf -e local_recipient_maps="proxy:unix:passwd.byname \$alias_maps" # jos malo postconf -e recipient_delimiter="+" postconf -e smtpd_helo_required="yes" postconf -e smtpd_helo_restrictions="permit_mynetworks" postconf -e in_flow_delay="2s" postconf -e initial_destination_concurrency="10" postconf -e default_destination_concurrency_limit="30" postconf -e smtpd_recipient_limit="400" postconf -e hash_queue_depth="3" if dpkg --compare-versions "$2" lt 2.1.5-6; then postconf -e bounce_queue_lifetime="5d" postconf -e maximal_queue_lifetime="5d" fi # ako netko zeli maknuti maskiranje, da mu ga nova verzija ne doda if dpkg --compare-versions "$2" lt 2.1.5-2; then postconf -e masquerade_domains="\$mydomain" fi # sredi smtpd_recipient_restrictions smtpd_recipient_restrictions="reject_invalid_hostname, \ reject_unknown_sender_domain, \ reject_unknown_recipient_domain, \ reject_unauth_pipelining, \ permit_sasl_authenticated, \ permit_mynetworks, \ reject_unauth_destination, \ check_client_access hash:/etc/postfix/cn-client-access, \ check_helo_access hash:/etc/postfix/cn-helo-access, \ check_sender_access hash:/etc/postfix/cn-sender-access, \ check_recipient_access hash:/etc/postfix/cn-recipient-access" # dodaj samo rbl-ove iz debconfa if [ "$rbl" ]; then for i in `echo $rbl | tr -d ,`; do smtpd_recipient_restrictions="$smtpd_recipient_restrictions, reject_rbl_client $i" done fi # dodaj permit na kraj smtpd_recipient_restrictions="$smtpd_recipient_restrictions, permit" postconf -e smtpd_recipient_restrictions="$smtpd_recipient_restrictions" # Header & body checks postconf -e header_checks="pcre:/etc/postfix/cn-header-checks" postconf -e mime_header_checks="pcre:/etc/postfix/cn-mime-header-checks" postconf -e nested_header_checks="pcre:/etc/postfix/cn-nested-header-checks" postconf -e body_checks="pcre:/etc/postfix/cn-body-checks" # SASL stuff postconf -e smtpd_sasl_auth_enable="yes" postconf -e smtpd_sasl_security_options="noanonymous" postconf -e smtpd_sasl_local_domain="\$myhostname" postconf -e broken_sasl_auth_clients="yes" [ -d /etc/postfix/sasl/ ] || mkdir -p /etc/postfix/sasl/ if [ ! -f /etc/postfix/sasl/smtpd.conf ]; then cat - > /etc/postfix/sasl/smtpd.conf <> /etc/default/saslauthd restart_saslauthd="yes" fi if ! grep -q "^OPTIONS.*/var/spool/postfix/var/run/saslauthd" /etc/default/saslauthd; then echo "OPTIONS=\"-c -m /var/spool/postfix/var/run/saslauthd\"" >> /etc/default/saslauthd restart_saslauthd="yes" fi if ! grep -q "&& ln -s" /etc/default/saslauthd; then echo "[ ! -L /var/run/saslauthd -a -d /var/spool/postfix/var/run/saslauthd -a ! -d /var/run/saslauthd ] && ln -s /var/spool/postfix/var/run/saslauthd /var/run/saslauthd || true" >> /etc/default/saslauthd restart_saslauthd="yes" fi if [ ! -L /var/run/saslauthd ]; then mkdir -p /var/spool/postfix/var/run/ if [ -d /var/run/saslauthd -a ! -d /var/spool/postfix/var/run/saslauthd ]; then mv /var/run/saslauthd /var/spool/postfix/var/run/ elif [ -d /var/run/saslauthd -a -d /var/spool/postfix/var/run/saslauthd ]; then rm -rf /var/run/saslauthd/ fi # XXX jos kad bi ln -s u /var/run/ radio (bootclean.sh) if [ -d /var/spool/postfix/var/run/saslauthd -a ! -d /var/run/saslauthd ]; then ln -s /var/spool/postfix/var/run/saslauthd /var/run/saslauthd fi restart_saslauthd="yes" fi if [ ! -d /var/spool/postfix/var/run/saslauthd ]; then mkdir -p /var/spool/postfix/var/run/saslauthd restart_saslauthd="yes" fi if ! dpkg-statoverride --list /var/spool/postfix/var/run/saslauthd > /dev/null; then dpkg-statoverride --update --add root sasl 710 /var/spool/postfix/var/run/saslauthd fi fi # restart saslauthd if [ "$restart_saslauthd" = "yes" ]; then service saslauthd restart fi # TLS stuff postconf -e smtp_tls_security_level="may" postconf -e smtp_tls_session_cache_database="btree:/var/lib/postfix/smtp_scache" postconf -e smtp_tls_session_cache_timeout="3600s" postconf -e smtpd_tls_security_level="may" postconf -e smtpd_tls_session_cache_database="btree:/var/lib/postfix/smtpd_scache" postconf -e smtpd_tls_session_cache_timeout="3600s" postconf -e tls_random_source="dev:/dev/urandom" postconf -e smtpd_tls_exclude_ciphers="aNULL" postconf -e smtpd_tls_mandatory_exclude_ciphers="aNULL" # nije potrebno generiranje certifikata jer postfix koristi paket ssl-cert # ako je postavljen snakeoil certifikat za smtpd_tls_* postavi isti za smtp_tls_* smtpd_tls_cert_file="`postconf -h smtpd_tls_cert_file`" if [ "$smtpd_tls_cert_file" = "/etc/ssl/certs/ssl-cert-snakeoil.pem" ]; then postconf -e smtp_tls_cert_file="/etc/ssl/certs/ssl-cert-snakeoil.pem" postconf -e smtp_tls_key_file="/etc/ssl/private/ssl-cert-snakeoil.key" fi # ako je prazan, postavi na defaultni iz paketa ssl-cert smtpd_tls_cert_file="`postconf -h smtpd_tls_cert_file`" if [ -z "$smtpd_tls_cert_file" ]; then postconf -e smtpd_tls_cert_file="/etc/ssl/certs/ssl-cert-snakeoil.pem" postconf -e smtpd_tls_key_file="/etc/ssl/private/ssl-cert-snakeoil.key" fi smtp_tls_cert_file="`postconf -h smtp_tls_cert_file`" if [ -z "$smtp_tls_cert_file" ]; then postconf -e smtp_tls_cert_file="/etc/ssl/certs/ssl-cert-snakeoil.pem" postconf -e smtp_tls_key_file="/etc/ssl/private/ssl-cert-snakeoil.key" fi # prije bilo u /etc/postfix/, od verzije 2.1.5-2 je u /var/spool/postfix [ -f /etc/postfix/smtp_scache.dir ] && rm -f /etc/postfix/smtp_scache.dir [ -f /etc/postfix/smtp_scache.pag ] && rm -f /etc/postfix/smtp_scache.pag [ -f /etc/postfix/smtpd_scache.dir ] && rm -f /etc/postfix/smtpd_scache.dir [ -f /etc/postfix/smtpd_scache.pag ] && rm -f /etc/postfix/smtpd_scache.pag # prije bilo u /var/spool/postfix/, od verzije 2.5.5 je u /var/lib/postfix [ -f /var/spool/postfix/smtp_scache.dir ] && rm -f /var/spool/postfix/smtp_scache.dir [ -f /var/spool/postfix/smtp_scache.pag ] && rm -f /var/spool/postfix/smtp_scache.pag [ -f /var/spool/postfix/smtpd_scache.dir ] && rm -f /var/spool/postfix/smtpd_scache.dir [ -f /var/spool/postfix/smtpd_scache.pag ] && rm -f /var/spool/postfix/smtpd_scache.pag # debconf stop db_go || true db_stop || true # ako postoji amavis, sredi if [ -x /usr/share/amavisd-cn/postfixize.sh ]; then /usr/share/amavisd-cn/postfixize.sh fi # provjeri da li postoji sendmail-base if ! dpkg -l sendmail-base | grep -q '^.n'; then cp_echo "" cp_echo "CN: Pronađen je paket sendmail-base." cp_echo "CN: Molimo, obrišite paket s naredbom:" cp_echo "CN: # dpkg --purge sendmail-base" cp_echo "" fi # sendmailov /etc/mail/access if [ -f /etc/mail/access -a /etc/mail/access.db ]; then cp_echo "" cp_echo "CN: Pronađena je sendmailova datoteka /etc/mail/access." cp_echo "CN: Ukoliko je potrebno, nadogradite /etc/mail/access po uputama sa:" cp_echo "CN: http://www.postfix.org/SMTPD_ACCESS_README.html" cp_echo "" fi if ! id postfix | grep -q sasl; then adduser postfix sasl > /dev/null restart_postfix="yes" fi # ako ima razlika, backupiraj stari, ako ne, obrisi privremeni backup if ! cmp -s /etc/postfix/master.cf /etc/postfix/master.cf.dpkg-tmp.$$; then cp_echo "CN: Backupiram staru inačicu /etc/postfix/master.cf u /var/backups/..." cp_backup_conffile /etc/postfix/master.cf.dpkg-tmp.$$ master.cf restart_postfix="yes" fi rm -f /etc/postfix/master.cf.dpkg-tmp.$$ if ! cmp -s /etc/postfix/main.cf /etc/postfix/main.cf.dpkg-tmp.$$; then cp_echo "CN: Backupiram staru inačicu /etc/postfix/main.cf u /var/backups/..." cp_backup_conffile /etc/postfix/main.cf.dpkg-tmp.$$ main.cf restart_postfix="yes" fi rm -f /etc/postfix/main.cf.dpkg-tmp.$$ #if ! grep -q "retry unix - - y - - error" /etc/postfix/master.cf; then # echo "CN: Please, add this line in /etc/postfix/master.cf and restart Postfix." # echo "retry unix - - y - - error" # echo #fi # Provjera postoje li naša slova šđčćž u /etc/passwd check_for_utf # kreiraj aliases_gecos if [ -x /usr/sbin/newaliases-gecos ]; then if [ "$matchgecos" = "true" ]; then echo "CN: Pravim GECOS alias mapu..." /usr/sbin/newaliases-gecos fi fi # rješava grešku "using backwards-compatible default setting chroot=y" for service in smtps/inet smtp/inet smtp/unix submission/inet pickup/fifo cleanup/unix qmgr/fifo rewrite/unix bounce/unix defer/unix trace/unix verify/unix flush/unix relay/unix showq/unix error/unix scache/unix discard/unix retry/unix do postconf -F $service/chroot=y done restart_postfix="yes" # obavijest za webmail cp-update -t postfix-cn /etc/postfix/main.cf <