Programy wspierające - procmail, vacation, fetchmail i plik ~/.forward) :: mailman

Poczta

Przy konfiguracji poczty warto zwrócić uwagę na możliwość zapewnienia jej filtrowania, przechowywanie jej w katalogach użytkowników oraz umieszczanie nagłówka informującego o adresie koperty - w przypadku exima jest to dość proste do uzyskania, zwłaszcza to ostatnie, które jest robione automnatycznie. Do filtrowania można wykorzystywać np. "procmail". Może on wraz z skanerami clamscan, spamassassin posłuzyć do stworzenia systemu antywirusowego i antyspamowego (przykładowy plik konfiguracyjny filtra antywirusowego). Rozważyć należy również dodanie w głównym pliku ustawień poziomu logowania: VERBOSE=no i pliku logów LOGFILE=/var/log/procmail.log. Należy jednak zwrócić uwagę na to iż filtry uczące się zaczynają działać dopiero po przeanalizowaniu 200 pozytywnych i 200 negatywnych przykładów ... (prezentowany skrypt uczy tylko negatywów), ustawienia te można zmienić w pliku konfiguracyjnym (więcej na jego temat w SpamAssassin - konfiguracja). Niekiedy (gdy filtr uczący się jest bardzo sprawny warto zwiększyć jego punktację (więcej o ustawianiu punktacji w SpamAssassin - testy).

Zamieszczam też dość bogato komentowany przykładowy plik konfiguracyjny exim'a, implementujący virusertable (przykład pliku z zdefiniowanymi standardowymi aliasami), obsługę procmaila (poprzez skrypt zapewniający poprawne logowanie do sysloga oraz obsługę globalnego pliku rc), dovecot'owych plików sieve, plików .forward, systemu vacation oraz tworzenie kopii odbieranej poczty po stronie serwera (dla poprawnego działania tego systemu należy zapewnić automatyczne kasowanie starych kopii - poprzez dodanie do cron'a odpowiedniego skryptu), a także ssl i autoryzację oraz graylisty (w oparciu o greylistd) i skanowanie antywirusowe i antyspamowe na etapie kopertowym. Dodatkowo polecam zmienić w /etc/greylistd/config czasy retryMin i retryMax na odpowiednio: 60 i 86400 (minuta i 24 godziny) oraz ustawić odpowiednią whitelistę (/etc/greylistd/whitelist-hosts) systemów mających problem z przejściem przez greylist lub po prostu godnych zaufania (przykład). Aby nasz system lepiej pokonywał greylisty na innych serwerach warto w /etc/default/exim4 ustawić QUEUEINTERVAL='3m'.

Zamieszcam także zmodyfikowaną wersję tego pliku - służy ona do wysyłania kopii wychodzącej poczty na zadany adres i korzysta z zewnętrznego serwera SMTP wymagającego autoryzacji. Konfiguracja exima pozwala na odrzucanie wiadomości z informacją o nowym adresie (błąd SMTP 551 User not local), poprzez umieszczenie w pliku aliasów wpisu ::fail: 551 User not local; please try <inny@example.org> niestety w przeciwieństwie do tego czego można by się spodziewać serwery pocztowe (w tym exim) nie rozróżniają tego od zwykłego błędu 550 i nie próbują przekazać poczty na wskazany adres, za to zwracają do adresata.

Przyjęte przeze mnie rozwiązanie z obsługą sieve ustawianego "zdalnie" (z wykorzystaniem jakiegoś klienta obsługującego ten mechanizm - np. squirrelmail z wtyczką avelsieve) polega na realizacji obsługi przez dovecot'a który w przypadku wykrycia takiego pliku (i braku plików o wyższym priorytecie) pełni funkcję LDA. Możliwe jest też korzystanie z filtrów sieve w samym eximie poprzez umieszczenie plików forward z odpowiednią pierwszą linią i zawartością będącą filtrem sieve.

Ważne jest zapewnienie dostępu do poczty przechowywanej na serwerze - służą do tego protokoły POP i IMAP. Polecam serwer dovecot, przy jego konfiguracji warto zwrócić uwagę na uruchomienie SSL (nieszyfrowany dostęp z zewnątrz można zabronić poprzez zamknięcie portów nieszyfrowanych, a zostawienie szyfrowanych na firewallu i ustawieniu protocols = imap imaps pop3 pop3s w konfiguracji dovecot) a także na ustawienie nasłuchiwania na ipv6 listen = [::] (oczywiście nasłuchuje wtedy także po IPv4). Zmaieszczam także przykładowy plik konfiguracyjny dla tego serwera - dovecot-locla.conf.

Dla poprawnego działania powyższych rozwiązań użytkownik Debian-exim powinien należeć do grup greylist i (w zależności od ustawień systemu) shadow, użytkownik dovecot do grup: mail i (w zależności od ustawień systemu) shadow, natomiast użytkownik clamav do grupy Debian-exim.

Popularnym i istotnym elementem systemów pocztowych jest bramka umożliwiająca dostęp do poczty poprzez WWW - np. Squirrel Mail. W systemie tym dla poprawnego kodowania wiadomości istotne jest posiadanie zainstalowanych odpowiednich locale. Większość takich systemów posiada dość rozbudowane opcje (konfiguracja tożsamości, książki adresowej, wersje robocze, ...), które mogą być powiększone przy pomocy dodatkowych modułów/patch'y. W przypadku wspomnianego już Squirrel Mail takie dodatki znaleźć możemy na http://www.squirrelmail.org/plugins.php, na szczególną uwagę zasługują: View As HTML (jest nawet w paczce deb), Avelsieve - Sieve Mail Filters (jest nawet w paczce deb), Advanced Settings (np. wyświetlanie folderów specjalnych na początku, domyślne używanie priorytetów wiadomości), S/MIME verification, Show Headers; a także: File Manager, Calendar File Backend, Notes, To-Do Reminder, NNTP webinterface, Bookmarks, Quick Save, Autocomplete, Custom From, Message Flags & Icons.

Aby konsolowy klient cone mógł łączyć się po SSL z serwerami mającymi błędny (np. samopodpisany) certyfikat w polu określającym adres serwera po jego nazwie lub numerze ip należy dodać: /novalidate-cert

Programy wspierające - procmail, vacation, fetchmail i plik ~/.forward)

Plik .forward (jest to standardowa ścieżka do tego pliku) umieszczany w katalogu domowym pozwala na przekazywanie poczty na inny adres (adres w pełnej postaci (z @), nazwa lokalnego użytkownika, aby dostarczyć bezpośrednio do skrzynki (z pominięciem forward'ów) należy adres poprzedzić znakiem \), na kilka adresów (oddzielamy je przecinkiem) oraz do innych programów ("|polecenie").

Program procmail pozwala na sortowanie, filtrowanie, przesyłanie, automatyczne odpowiadanie na pocztę, pocztę do niego można przekazać przez plik .forward może też być automatycznie dostarczana przez systemowy MTA. Plikiem konfiguracyjnym tego programu zazwyczaj jest .procmailrc. Każda reguła zapisana w tym pliku składa się z kilku linii, zaczyna się od linii postaci: :0 [flagi] [:[plik-blokujący]], do ważniejszych flag należy zaliczyć A - wykonanie reguły zależne od warunku z poprzedniej reguły i c - wykonanie kopii wiadomości, po linii tej następują linie warunków (jeden warunek w linii zaczynającej się od *, opcjonalnie można pominąć linię z warunkiem) a po nich następuje linia zawierająca akcję (linia taka w jednej regule może być tylko jedna !); reguły możemy zagnieżdżać przy pomocy nawiasów klamrowych { i } (po nawiasie otwierającym musi wystąpić spacja tabulator lub nowa linia). Zobacz także: man 1 procmail, man 5 procmailrc, man 5 procmailex

# przykładowy plik .procmailrc
# test zaczynający się od znaku # to komentarz i jest on ignorowany przez procmail

# gdy nie ma w naglowku pola "X-Envelope-To:" to dodaje pole i przekazuje do ponownie  procmaila
# jako wartość pola (zmienna $dla) ustawiany jest pierwszy ($1) argument przekazany do procmaila'
# przy wywolaniu go z pliku jako lokalnego agenta dostarczania z pliku sendmail.cf - makro $h
#
# będzie on ustawiony na user1@domena gdy przy przekazywaniu poczty z tego adresu
# do rzeczywistego użytkownika - user (pliki aliases, virtusertable i .forward)
# podane będzie przekazanie do user+"user1@domena"
# (znaki "" służą do zabezpieczneia symbolu @ i będą w zmiennej wynikowej)
# zamiast adresu user1@domena można podawac dowolny inny tekst
dla=$1
:0
*!X-Envelope-To:
| formail -i "X-Envelope-To: "$dla |procmail

# pocztę adresowaną (opisywane wyżej pole X-Envelope-To:)
# do user1@domena1 umieszczam w skrzynce (pliku) mail/skrzynka1
:0
*X-Envelope-To: "user1@domena1"
mail/skrzynka1

# poczte mającą w temacie "wazne" przesyłam na swoje drugie konto (login@domena.drugiego.konta)
# i do programu vacation aby odpowiedzial na list
# jest to jedno z możliwych rozwiązań - najbardziej logiczne
:0
* ^Subject:.*wazne
{
	:0 c
	! login@domena.drugiego.konta

	:0
	|vacation
}

# powiadomienia o wiadomosciach IM
:0 :
*From:.*xmpp-system@n17.waw.pl
mail/jabber

# wysylanie powiadomien poprzez IM o mailach które dotarły do teego miejsca
INCLUDERC=/path-to/notify_to_xmpp

# na poczte od konto@jakas.domena odrazu odpowiadam
# (wysylajac zawartosc pliku odpowiedz.txt) i jej nie zapisuje
:0
* ^From:.*konto@jakas.domena
| (formail -r ; cat odpowiedz.txt) | $SENDMAIL -oi -t

Innymi przykładami wykorzystania procmaila mogą być:

Program vacation pozwala na proste automatyczne generowanie odpowiedzi, pocztę do programu tego przekazujemy z pliku .forward (warto pamiętać o bezpośrednim przekazaniu listu do swojej skrzynki). Wiadomość zwracana przez ten program przechowywana jest w pliku .vacation.msg, plik ten rozpoczynać się może od pól nagłówków (takich jak Subject: (zawierającego tytuł), From: (zawierającego adres nadawcy, przy braku tego pola zostanie ono wygenerowane automatycznie), Reply-To: (informującego o tym gdzie należy wysłać odpowiedź), w treści tego pliku można także skorzystać ze zmiennej $SUBJECT wstawiającej tytuł wiadomości, na którą generowana jest odpowiedź. Przydatnymi opcjami programu są -j nakazująca odpowiadać m.in. na przeforwardowane wiadomości (nie sprawdza pola To: ani Cc:) oraz opcja -t[N] nakazująca wysyłanie tylko jednego powiadomienia na dany adres w ciągu N dni (aby wyczyścić bazę tych adresów należy wywołać vacation -I). Uwaga na wywołanie samego vacation otwiera ono edycję pliku .vacation.msg i zmienia plik .forward, zapisując starą wersję jako .forward.old. Zobacz także: man 1 vacation

Program fetchmail pozwala na pobieranie (zarówno automatyczne jak i ręczne) poczty z zdalnych serwerów i umieszcza je w skrzynce systemowej (działa tak jak forward z komputera z którego pobiera pocztę). Plikiem konfiguracyjnym tego programu zazwyczaj jest .fetchmailrc, plik ten zawiera konfiguracje kont pocztowych wraz z nazwami użytkowników i hasłami (one są opcjonalne przy uruchamianiu manualnym, ale ze względu na to prawa do pliku muszą przysługiwać tylko właścicielowi) podstawowy wpis składa się z pozycji: poll "nazwa serwera" username "użytkownik" password "hasło", dodanie opcji keep powoduje pozostawienie wiadomości na serwerze. Opcja -d 600 -N pozwala na uruchomienie programu w trybie pracy ciągłej gdzie sprawdzanie poczty odbywa się co 600 sekund, opcja -f pozwala określić alternatywny plik konfiguracyjny i przydaje się, gdy trzeba wykonać jakieś jednorazowe sprawdzenie, a fetchmail działa w trybie pracy ciągłej. Jeżeli jest to możliwe, zawsze należy używać forward'u zamiast fetchmail'a. Jeżeli zachodzi potrzeba rzadszego uruchamiania fetchmail'a (np. kilka razy na dobę), to warto rozważyć skorzystanie z systemowego mechanizmu corn, pozwalającego na uruchamianie programów o zadanej porze, w tym celu należy uruchomić crontab nazwa-pliku aby utworzyć wpis z podanego pliku, każda linia pliku powinna wyglądać następująco: minuta godzina dzień miesiąc dzień tygodnia komenda (przy czym dzień tygodnia - liczba od 0 (niedziela) do 6 (sobota) a także każdy z parametrów można zastąpić gwiazdką co oznacza że dla każdej wartości tego parametru będzie następowało uruchomienie. Zobacz także: man 1 fetchmail

mailman

Mailman jest jednym z najpopularniejszych serwerów obsługujących pocztowe listy dyskusyjne. Do zarządzania nim oprócz interfejsu WWW możemy kożystać także z narzędzi shellowych takich jak: newlist, list_lists, config_list (wyświetlenie konfiguracji listy w postaci tekstowej: config_list -o - NAZWALISTY, zmiana jednego parametru: echo "archive_private = 1" > /tmp/aa; config_list -i /tmp/aa NAZWALISTY). Warto także pamiętać że ustawienia domyślne z brane są z pliku /usr/lib/mailman/Mailman/Defaults.py,a nadpisywane są przez ustawienia w /etc/mailman/mm_cfg.py.



Copyright (c) 1999-2015, Robert Paciorek (http://www.opcode.eu.org/), BSD/MIT-type license


Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.

This text/program is free document/software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.

Valid XHTML 1.1 Dokument ten (URL: http://www.opcode.eu.org/usage_and_config/network_services/email) należy do serwisu OpCode. Autorem tej strony jest Robert Paciorek, wszelkie uwagi proszę kierować na adres e-mail serwisu: webmaster@opcode.eu.org.
Data ostatniej modyfikacji artykulu: '2015-10-10 11:34:11 (UTC)' (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).