Postfix - instalacja i konfiguracja

Konfiguracja serwerów, usług, itp.
Awatar użytkownika
ruun
Member
Posty: 1366
Rejestracja: 29 marca 2007, 21:07
Lokalizacja: Kruszwica

Postfix - instalacja i konfiguracja

Post autor: ruun »

Witam w zbiorczym temacie dotyczącym instalacji i konfiguracji postfiksa oraz niezbędnych dodatków.

:icon_arrow: Wstęp :icon_arrow: Dokumentacja :icon_arrow: Gotowe poradniki Masz coś do dodania, napisz PW do moderatora.
vikus
Beginner
Posty: 103
Rejestracja: 15 października 2007, 20:00

Post autor: vikus »

Blokowanie wybranych załączników

Do pliku /etc/postfix/main.cf należy dodać

Kod: Zaznacz cały

mime_header_checks = regexp:/etc/postfix/mime_header_checks.regexp
plik mime_header_checks.regexp

Kod: Zaznacz cały

/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+\.(lnk|asd|hlp|ocx|reg|bat|c[ho]m|cmd|exe|dll|vxd|pif|scr|hta|jse?|sh[mbs]|vb[esx]|ws[fh]|wav|mov|wmf|xl))"?\s*$/
   REJECT Attachment type not allowed. File "$2" has the unacceptable extension "$3"
lub wersja krótka:

Kod: Zaznacz cały

/name=[^>]*\.(pdf|zip)/ REJECT Attachment type not allowed!

Blokowanie wybranych słów w mailu (body)
Do pliku /etc/postfix/main.cf dodać

Kod: Zaznacz cały

body_checks = regexp:/etc/postfix/body_checks

/etc/postfix/body_checks

Kod: Zaznacz cały

/lol/ REJECT Body Spam Rule - Spadaj Dziadu!
/dupa/ REJECT Body Spam Rule - Spadaj Dziadu!

Blokowanie wybranych słów w mailu (head Subject)
Do pliku /etc/postfix/main.cf dodać

Kod: Zaznacz cały

header_checks = regexp:/etc/postfix/header_checks

/etc/postfix/header_checks

Kod: Zaznacz cały

/^Subject: .*ass*./ REJECT Head Spam Rule - Spadaj dziadu!
/^Subject: .*dick*./ REJECT Head Spam Rule - Spadaj dziadu!

Czarna lista dla postfiksa

do pliku /etc/postfix/main.cf dodaj

Kod: Zaznacz cały

# Restrykcje - Sprawdzanie poczty na podstawie adresu odbiorcy listu (MAIL FROM):
smtpd_sender_restrictions =
    hash:/etc/postfix/sender_checks,
    permit_sasl_authenticated,
    reject_unknown_sender_domain,
    reject_non_fqdn_sender,
    reject_unknown_address
Najważniejsza jest ta linia hash:/etc/postfix/sender_checks,
w tym pliku trzymasz adresy których nie lubisz.

Przykładowa zawartość pliku:

Kod: Zaznacz cały

[email]test@op.pl[/email] REJECT a idz w...
gmail.com REJECT a idz w...
potem generujesz plik .db, poleceniem:

Kod: Zaznacz cały

postmap /etc/postfix/sender_checks
I teraz po restarcie postfiksa każdy mail z pliku sender_checks będzie odrzucany.
vikus
Beginner
Posty: 103
Rejestracja: 15 października 2007, 20:00

Post autor: vikus »

Blokowanie spamu w obrazkach i plikach pdf używając sygnatur SaneSecurity do programu antywirusowego Clamav

Pobieramy odpowiedni skrypt ze strony autora

Kod: Zaznacz cały

cd /etc/clamav/
wget [url]http://www.sanesecurity.com/clamav/ss-msrbl.txt[/url]
mv ss-msrbl.txt ss-msrbl.sh
chmod +x ss-msrbl.sh
Teraz musimy poprawić kilka zmiennych w skrypcie
ścieżka do pliku pid, możesz to sprawdzić poleceniem:

Kod: Zaznacz cały

grep ^PidFile /etc/clamav/clamd.conf
Następnie zapis:

Kod: Zaznacz cały

clamd_pid=/var/run/clamd/clamd.pid
zmieniamy na:

Kod: Zaznacz cały

clamd_pid=/var/run/clamav/clamd.pid
Nazwę użytkownika na koncie, którego pracuje clamav możesz sprawdzić poleceniem

Kod: Zaznacz cały

grep ^User /etc/clamav/clamd.conf

Następnie zapis:

Kod: Zaznacz cały

# Set ClamD user and group accounts.
clam_user="clamav"
clam_group="clamav"
zmieniamy na:

Kod: Zaznacz cały

# Set ClamD user and group accounts.
clam_user="amavis"
clam_group="clamav"

Do uruchomienia skryptu będą nam potrzebne dodatkowe pakiety, instalujmy je:

Kod: Zaznacz cały

aptitude install rsync curl

Sprawdzamy czy działa (jako root):

Kod: Zaznacz cały

/etc/clamav/ss-msrbl.sh
Wynik wykonania powyższego skryptu:

Kod: Zaznacz cały

============================================
SaneSecurity phish.ndb Signature File Update
============================================

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0

============================================
SaneSecurity scam.ndb Signature File Update
============================================

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0

============================================
MSRBL MSRBL-Images.hdb Signature File Update
============================================

Number of files: 1
Number of files transferred: 0
Total file size: 34648 bytes
Total transferred file size: 0 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 35
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 34
Total bytes received: 77

sent 34 bytes  received 77 bytes  44.40 bytes/sec
total size is 34648  speedup is 312.14

============================================
MSRBL MSRBL-SPAM.ndb Signature File Update
============================================

Number of files: 1
Number of files transferred: 0
Total file size: 235520 bytes
Total transferred file size: 0 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 33
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 34
Total bytes received: 75

sent 34 bytes  received 75 bytes  43.60 bytes/sec
total size is 235520  speedup is 2160.73

Teraz sprawdzamy czy nowe sygnatury są na miejscu:

Kod: Zaznacz cały

ls -l /var/lib/clamav
wynik:

Kod: Zaznacz cały

razem 17935
drwxr-xr-x 2 amavis clamav      504 2008-04-04 19:40 daily.inc
-rw-r--r-- 1 amavis clamav 11347852 2008-01-27 21:28 main.cvd
-rw------- 1 amavis clamav      364 2008-04-04 19:34 mirrors.dat
-rw-r--r-- 1 amavis clamav    34648 2008-04-04 19:25 MSRBL-Images.hdb
-rw-r--r-- 1 amavis clamav    31765 2008-04-04 19:40 MSRBL-Images.hdb-bak
-rw-r--r-- 1 amavis clamav   235520 2008-03-28 15:42 MSRBL-SPAM.ndb
-rw-r--r-- 1 amavis clamav   235359 2008-03-29 02:30 MSRBL-SPAM.ndb-bak
-rw-r--r-- 1 amavis clamav  1453797 2008-04-04 19:40 phish.ndb
-rw-r--r-- 1 amavis clamav  1453604 2008-04-04 19:40 phish.ndb-bak
-rw-r--r-- 1 amavis clamav   241303 2008-04-04 18:33 phish.ndb.gz
-rw-r--r-- 1 amavis clamav  1505443 2008-04-04 19:40 scam.ndb
-rw-r--r-- 1 amavis clamav  1504524 2008-04-04 19:40 scam.ndb-bak
-rw-r--r-- 1 amavis clamav   286650 2008-04-04 18:33 scam.ndb.gz

Dodajmy jeszcze skrypt do crona żeby bazy danych aktualizowały się automatycznie np. o godzinie 4 w nocy.

Do pliku /etc/crontab dodaj poniższy wpisz:

Kod: Zaznacz cały

0 4    * * *   root    /etc/clamav/ss-msrbl.sh &>/dev/null
vikus
Beginner
Posty: 103
Rejestracja: 15 października 2007, 20:00

Post autor: vikus »

Automatyczne dodawanie stopki do wysłanej wiadomości

Krótki opis jak wykorzystać narzędzie alterMIME aby dodawać stopkę do wszystkich wysłanych wiadomości z naszego serwera.

Instalujemy pakiet alterMIME

Kod: Zaznacz cały

aptitude install altermime

Następnie tworzymy użytkownika ,,filter’' z katalogiem domowym w /var/spool/filter (narzędzie alterMIME będzie uruchamiane z poziomu wspomnianego użytkownika)

Kod: Zaznacz cały

useradd -r -c "Postfix Filters" -d /var/spool/filter filter
Tworzymy katalog domowy

Kod: Zaznacz cały

mkdir -p /var/spool/filter
I nadajemy mu odpowiednie prawa:

Kod: Zaznacz cały

chmod 750 /var/spool/filter && chown filter:filter /var/spool/filter
Teraz możemy skopiować przykładowy plik, który będzie filtrował nasze wiadomości:

Kod: Zaznacz cały

cp /usr/share/doc/altermime/examples/postfix_filter.sh /etc/postfix/disclaimer
i nadajemy mu odpowiednie prawa:

Kod: Zaznacz cały

chmod 750 /etc/postfix/disclaimer && chgrp filter /etc/postfix/disclaimer

Problem z tym skryptem polega jednak na tym, że dodaje on stopkę do wszystkich wiadomości przychodzących i wychodzących, co nie jest pożądanym przez nas efektem.
Więc zrobiłem małą aktualizację skryptu aby dodawał stopkę tylko do wysyłanych wiadomości:

Kod: Zaznacz cały

#!/bin/sh
# Localize these.
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail
DOMAIN="test.com"

# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69

# Clean up when done or when aborting.
trap "rm -f in.$$" 0 1 2 3 15

# Start processing.
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit
$EX_TEMPFAIL; }

cat >in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }

grep "From:" in.$$ | grep -i $DOMAIN > /dev/null
let R=$?

if [ $R -eq 0 ]; then
  /usr/bin/altermime --input=in.$$ \
                   --disclaimer=/etc/postfix/disclaimer.txt \
                   --disclaimer-html=/etc/postfix/disclaimer.txt \
                   --xheader="X-Copyrighted-Material: Please visit http://www.company.com/privacy.htm" || \
                   { echo Message content rejected; exit $EX_UNAVAILABLE; }
fi

$SENDMAIL "$@" <in.$$

exit $?
Zmień w powyższym skrypcie zmienną DOMAIN na własną domenę, do której ma być dodawana stopka.

Kopiujemy przykładową stopkę:

Kod: Zaznacz cały

cp /usr/share/doc/altermime/examples/disclaimer.txt /etc/postfix/disclaimer.txt
Plik możemy edytować według własnych potrzeb. Tekst z tego pliku będzie doklejany do każdej wychodzącej wiadomości.

Teraz musimy poinformować postfiksa aby skrypt /etc/postfix/disclaimer wykonywał się podczas wysyłania wiadomości.

Otwórz /etc/postfix/master.cf i dodaj ,,-o content_filter=dfilt:'' (to pod linią smtp):

Kod: Zaznacz cały

nano /etc/postfix/master.cf

Kod: Zaznacz cały

#
# Postnik master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
#========================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
#========================================================
smtp      inet  n       -       -       -       -       smtpd
    -o content_filter=dfilt:
[...]

I na koniec tego samego pliku dodaj poniższy wpis:

Kod: Zaznacz cały

[...]
dfilt     unix    -       n       n       -       -       pipe
    flags=Rq user=filter argv=/etc/postfix/disclaimer -f ${sender} -- ${recipient}

Całość skryptu ma wyglądać tak:

Kod: Zaznacz cały

#
# Postnik master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
#========================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
#========================================================
smtp      inet  n       -       -       -       -       smtpd
    -o content_filter=dfilt:
dfilt     unix    -       n       n       -       -       pipe
    flags=Rq user=filter argv=/etc/postfix/disclaimer -f ${sender} -- ${recipient}

I teraz pozostało nam tylko zresetować postfiksa

Kod: Zaznacz cały

/etc/init.d/postfix restart
Po resecie każda wychodząca wiadomość z domeny podanej w pliku:

Kod: Zaznacz cały

/etc/postfix/disclaimer
będzie posiadała stopkę jaką określiliśmy w pliku

Kod: Zaznacz cały

/etc/postfix/disclaimer.txt
Zablokowany