Postfix jest MTU czyli w wielkim skrócie demonem poczty elektronicznej.
No tak, w sumie powiecie ściągamy poldkiem instalujemy i działa... działa ale chcemy coś więcej...
chcemy by nasz smtpd był ładnie skonfigurowany.
Zaczynamy
Ściągamy to co nam będzie potrzebne. Wiadomo... postfix i dodatki, które mu są potrzebne:
poldek -i postfix cyrus-sasl cyrus-sasl-plain cyrus-sasl-saslauthd \
cyrus-sasl-login |
A tutaj coś co będzie nam potrzebne do tworzenia certyfikatów.
A tutaj coś żebyśmy mogli pobrać pocztę z serwera.
poldek -i tpop3d inetd rc-inetd |
Konfiguracja
Przyszedł czas na konfigurację postfix-a.
# echo 'pwcheck_method:saslauthd' > /etc/sasl/smtpd.conf |
Należy jeszcze sprawdzić czy w /etc/pam.d/ znajduje się plik smtp,
jeżeli nie to należy przegrać na to miejsce przykładowy konfig z
/usr/share/doc/cyrus-sasl-saslauthd-*/cyrus.pam.gz , rozpakować i nazwać plik smtp.
Uruchom saslauthd:
# /etc/rc.d/init.d/saslauthd start |
Uruchom postfix-a:
# /etc/rc.d/init.d/postfix start |
Teraz chcemy, żeby postfix wymagał autentykacji:
# postconf -e smtpd_sasl_auth_enable=yes
# postconf -e smtpd_recipient_restrictions=permit_mynetworks, \
reject_sender_login_mismatch,permit_sasl_authenticated, \
reject_unauth_destination |
Teraz linijka dla popsutych Outlook-ów.
# postconf -e broken_sasl_auth_clients=yes
# postconf -e mynetworks=127.0.0.0/8,192.168.1.1/32 |
Restart postfix-a:
# /etc/rc.d/init.d/postfix restart |
No i to wszystko razem powinno wyglądać tak:
# postconf -n
alias_database = hash:/etc/mail/aliases
alias_maps = hash:/etc/mail/aliases
biff = no
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/mail
daemon_directory = /usr/lib/postfix
debug_peer_level = 2
default_privs = nobody
mail_owner = postfix
mail_spool_directory = /var/mail
myhostname = networking.ee
mynetworks = 127.0.0.0/8, 192.168.1.1/32, 192.168.1.1/32
myorigin = $myhostname
queue_directory = /var/spool/postfix
setgid_group = maildrop
smtpd_recipient_restrictions = permit_mynetworks, \
reject_sender_login_mismatch,permit_sasl_authenticated, \
reject_unauth_destination
smtpd_sasl_auth_enable = yes |
Szyfrowanie
Włączamy teraz szyfrowanie wysyłania poczty oraz transmisji między MX-ami dla różnych domen
Następnie generujemy certyfikat SSL.
Podczas generowania certyfikatu będziesz musiał odpowiedzieć na kilka prostych pytań.
Robimy to w sposób następujący:
# openssl genrsa -out key.pem 1024
# openssl req -new -x509 -key key.pem -out cert.pem
# cat cert.pem >> key.pem; mv -f key.pem cert.pem
# cp cert.pem /var/lib/openssl/certs/nasza.domena.pl.pem |
Do pliku /etc/mail/main.cf należy dodać 4 linijki, takie jak poniżej:
smtpd_tls_cert_file = /var/lib/openssl/certs/nasza.domena.pl.pem
smtpd_tls_key_file = $smtpd_tls_cert_file
smtpd_use_tls = yes
smtp_use_tls = yes |
W pliku /etc/mail/master.cf należy zastąpić aktualną linijkę czyli tą z domyślnej instalacji:
#smtps inet n - n - - smtpd
na naszą aktualną:
smtps inet n - y - - smtpd -o smtpd_tls_wrappermode=yes \
-o smtpd_sasl_auth_enable=yes |
Domeny
Jeżeli posiadamy więcej niż jedną domenę na serwerze to w /etc/mail/main.cf dopisujemy:
mydestination = $myhostname, jakas.domena.pl, \
costam.gdziestam.pl, PLD.biz.pl |
Jeżeli chcemy aby nasz postfix obsługiwał wirtualne domeny (przyznawał się do nich) dopisujemy w /etc/mail/main.cf takie trzy linijki:
relay_domains = hash:/etc/mail/domains
virtual_maps = hash:/etc/mail/virtual
smtpd_sender_login_maps = hash:/etc/mail/virtual |
Tworzymy /etc/mail/domains i robimy nastepujące wpisy:
# plik domains, w nim wpisane domeny dla których nasz serwer
#pocztę będzie przyjmował.
pld-linux.org relay
81.0.225.27 relay |
Do /etc/mail/virtual dopisujemy na przykład coś takiego:
Teraz musimy wklepać
# postmap /etc/mail/domains
# postmap /etc/mail/virtual |
No i restart postfixa
# /etc/rc.d/init.d/postfix restart |
Usprawnienia
Dodatkowe wpisy które poprawią pracę naszego postfix-a
Edytujemy /etc/mail/main.cf i dodajemy następujące wpisy:
disable_vrfy_command = yes
# liczba odbiorców max 100 dla jednego maila
smtpd_recipient_limit = 100
smtpd_error_sleep_time = 5
smtpd_hard_error_limit = 10
smtpd_helo_required = yes
# ogranicz do 2 mega [2000000] wielkość przesyłki, właściwie mając \
# dobre łącze można
# wpisać 10 mega [10000000]
message_size_limit = 2000000
# spam fight! :>
header_checks = regexp:/etc/mail/header_checks
mail_name = PLD - $myhostname
smtpd_banner = $myhostname ESMTP $mail_name. We block/report all spam.
smtpd_soft_error_limit = 60
default_process_limit = 3
maps_rbl_domains = relays.ordb.org
smtpd_client_restrictions = reject_maps_rbl |
Tworzymy /etc/mail/header_checks i dopisujemy:
/^To: .*friend@public/ REJECT Header-To address revoked \
due to too much spam.
/^Subject: ADV\W/ REJECT Header-Subject beginning with \
"spam" ADV tag rejected. |
Końcowa konfiguracja
# postconf -n
alias_database = hash:/etc/mail/aliases
alias_maps = hash:/etc/mail/aliases
biff = no
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/mail
daemon_directory = /usr/lib/postfix
debug_peer_level = 2
default_privs = nobody
default_process_limit = 3
disable_vrfy_command = yes
header_checks = regexp:/etc/mail/header_checks
mail_name = PLD - $myhostname
mail_owner = postfix
mail_spool_directory = /var/mail
maps_rbl_domains = relays.ordb.org
message_size_limit = 2000000
myhostname = networking.ee
mynetworks = 127.0.0.0/8,192.168.1.1/32
myorigin = $myhostname
queue_directory = /var/spool/postfix
relay_domains = hash:/etc/mail/domains
setgid_group = maildrop
smtp_use_tls = yes
smtpd_banner = $myhostname ESMTP $mail_name. We block/report all spam.
smtpd_client_restrictions = reject_maps_rbl
smtpd_error_sleep_time = 5
smtpd_hard_error_limit = 10
smtpd_helo_required = yes
smtpd_recipient_limit = 100
smtpd_recipient_restrictions = permit_mynetworks, \
reject_sender_login_mismatch,permit_sasl_authenticated, \
reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_soft_error_limit = 60
smtpd_tls_cert_file = /var/lib/openssl/certs/nasza.domena.pl.pem
smtpd_tls_key_file = $smtpd_tls_cert_file
smtpd_use_tls = yes
virtual_maps = hash:/etc/mail/virtual
smtpd_sender_login_maps = hash:/etc/mail/virtual |
Zawartość master.cf
# grep -v ^# /etc/mail/master.cf
smtp inet n - n - - smtpd
smtps inet n - y - - smtpd -o smtpd_tls_wrappermode=yes \
-o smtpd_sasl_auth_enable=yes
pickup fifo n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr fifo n - n 300 1 qmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
flush unix n - n 1000? 0 flush
smtp unix - - n - - smtp
showq unix n - n - - showq
error unix - - n - - error
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
cyrus unix - n n - - pipe flags=R user=cyrus \
argv=/usr/lib/cyrus/deliver -e -m ${extension} ${user}
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=foo \
argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient |
tpop3d
tpop3d, czyli coś dzięki czemu będziemy mogli pobrać pocztę z serwera.
No i włączamy tpop3d-a
# /etc/rc.d/init.d/tpop3d start |
amavis + mks
Przystępujemy do instalacji i konfiguracji amavisa + mks :)
Instalujemy poldkiem mks, serwer mksd, bazy, oraz skrypt aktualizujący bazy
poldek -i mks mksd mks-bases mks-updater mksd-clients |
Teraz ściągamy jakiegoś wirusa i sprawdzamy czy mks32 działa...
# wget http://www.eicar.org/download/eicar.com
# mks32 eicar.com
mks_vir: init... 1.9.0 for Linux i386, 2003.07.02
mks_vir: database version 2003 7 11 13 23
mks_vir: init OK, scan mode
mks_vir: check file(s)
mks_vir: file: eicar.com
mks_vir: --heuristic for virus Eicar.Test
mks_vir: --heuristic for virus Eicar.Test
mks_vir: status: virus found: eicar.com
mks_vir: exit code: 0x01 |
Jeśli dostaliście coś takiego, tzn. że wszystko jest ok ;)
Teraz przetestujemy czy mksd działa poprawnie.
# /etc/rc.d/init.d/mksd start
# mkschk /root/skaner/eicar.com
VIR Eicar.Test /root/skaner/eicar.com |
Jeśli dostałeś coś takiego, tzn. że wszystko jest okej.
mksd przyśpiesza znacznie pracę na słabych maszynach... wtedy znacznie odczujesz.
Instalujemy teraz amavisa
No i teraz najgorsze ;)
Edytujemy /etc/amavisd.conf
Odkomentuj linię:
@bypass_spam_checks_maps = (1); # uncomment to DISABLE anti-spam code |
Pozmieniaj odpowiednie linie
$mydomain = 'twoja.domena.pl'; # (no useful default)
$daemon_user = 'amavis'; # (no default; customary: vscan or amavis)
$daemon_group = 'amavis'; # (no default; customary: vscan or amavis) |
Możemy tutaj ustawić użytkownika amavis. Dodatkowo należy dopisać mksd
do grupy amavis, dzięki czemu będzie on mógł korzystać z katalogów z częściami maili
amavisa.
# grep amavis /etc/group
amavis:x:116:mksd |
Zakomentuj linię:
#$unix_socketname = "$MYHOME/amavisd.sock"; # amavis helper protocol socket |
Jeśli nie chcesz żeby amavis używał pewnych pakerów to zakomentuj odpowiednie linie, np.
Usuń wszystkie wpisy na temat antywirusów (@av_scanners = ) i zastąp to wpisem z pliku README z archiwum mksd:
['MkS_Vir daemon',
'mksscan', '-s -Q {}',
[0], [1..7],
qr/^... (\S+)/
], |
Usuń wpisy z @av_scanners_backup =
W swoim systemie pocztowym (postfix) utwórz użytkownika (lub alias) "virusalert" lub pozmieniaj wpisy:
$mailfrom_notify_admin
$mailfrom_notify_recip
$virus_admin |
My zrobiliśmy wcześniej aliasa dla virusalert ;)
Ja sobie jeszcze dopisałem:
$hdrfrom_notify_sender = $mailfrom_notify_admin; |
Jeśli nie chcesz aby nadawcy listów oraz admini dostawali informacje o wirusach w domyślnym języku (English) to odkomentuj linie i zrób własne wpisy w /var/amavis/*.txt
# $notify_sender_templ = read_text('/var/amavis/notify_sender.txt');
# $notify_virus_sender_templ=read_text('/var/amavis/notify_virus_sender.txt');
# $notify_virus_admin_templ = read_text('/var/amavis/notify_virus_admin.txt');
# $notify_virus_recips_templ=read_text('/var/amavis/notify_virus_recips.txt');
i zmień
#$bdy_encoding = 'iso-8859-1'; # (default: 'iso-8859-1')
na
$bdy_encoding = 'iso-8859-2'; # (default: 'iso-8859-1') |
Według licencji powinieneś umieścić w notify_sender.txt reklamę http://www.mks.com.pl
gdyż jest do warunek licencji na używanie mks. Na końcu pliku /usr/sbin/amavisd
znajdują się przykładowe szablony.
W pliku /etc/mail/master.cf dopisujemy nową linię:
localhost:10025 inet n - n - - smtpd |
No i restart postfix-a, amavisd-a i mks
# /etc/rc.d/init.d/postfix restart
# /etc/rc.d/init.d/mksd restart
# /etc/rc.d/init.d/amavisd restart |
Teraz testujemy amavis-a:
# telnet 127.0.0.1 10024
Trying 127.0.0.1.10024...
Connected to localhost.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
MAIL FROM: <root>
250 2.1.0 Sender root OK
RCPT TO: <root>
250 2.1.5 Recipient root OK
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: test bez wirusa
test
.
250 2.6.0 Ok, id=29569-01, from MTA: 250 Ok: queued as A1017FD1E |
Dostałeś 250? To znaczy, ze amavisd sprawdził przesyłkę :) nie wierzysz?
tail -n 100 -f /var/log/maillog
A teraz sprawdzimy jak reaguje na przesyłkę z wirusem:
# telnet 127.0.0.1 10024
Trying 127.0.0.1.10024...
Connected to localhost.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
MAIL FROM: <root>
250 2.1.0 Sender root OK
RCPT TO: <root>
250 2.1.5 Recipient root OK
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: test z wirusem
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
.
250 2.5.0 Ok, but 1 BOUNCE |
No i znalazł wirusa :) w logach mamy:
Jul 14 04:17:43 networking amavis[29569]: (29569-02) INFECTED (Eicar.Test),
<root> -> <root>, quarantine virus-20030714-041716-29569-02, \
Message-ID: , Hits: - |
Teraz jeszcze mała obróbka plików cf od postfix-a ;)
Edytujemy /etc/mail/master.cf
Linijkę:
smtp inet n - n - - smtpd
zamieniamy na:
smtp inet n - n - - smtpd -o \
content_filter=smtp-amavis:[127.0.0.1]:10024
|
oraz dodajemy jeszcze:
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes |
Restart postfix-a:
# /etc/rc.d/init.d/postfix restart |
i powinno wszystko nam pięknie latać:)
Wyślij sobie eicar.com w załączniku a zobaczysz, że smtp odrzuci i dostaniesz maila z alertem :]
postifx.admin
TODO (http://high5.net/postfixadmin/)
|