Wysłanie "prawie" nowego laptopa do serwisu zmusiło mnie do powrotu do mojego starego już wysłużonego laptopa. Szybka instalacja Debiana i pierwsze rozczarowania związane z prędkością działania grafiki w "staruszku" laptopie. Co prawda Fluxbox uruchamia się dość szybko ale aplikacje graficzne działają denerwująco wolno. Musze wrócić do programów konsolowych, przede wszystkim poczta musi działać szybko i sprawnie.
W x-ach do poczty wykorzystywałem Thunderbirda, a na konsoli będzie to kilka programów, które zgodnie z zasadą unix-ów będą robiły jedną rzecz ale szybko, sprawnie i dobrze:
- Pobranie poczty z serwerów - fetchmail
- Manipulacja (zarządzanie i rodział) pobranej poczty - procmail
- Przefiltrowanie spamu - bogofilter
- Klient poczty (cztyanie i tworzenie poczty) - mutt
- Przekazywanie wychodzącej poczty do serwerów SMTP - esmtp
A jak to wszystko szybko skonfigurować? Opis poniżej, przetestowany na Debianie 4.0.
Nie opisuję instalcji programów bo w Debianie ograniczamy się tylko do wydania komend apt-get install.
Pobranie poczty fetchmailem
W kartotece domowej tworzę zbiór .fetchmailrc z następującymi wpisami:
poll pop.twoj.host.z.poczta protocol pop3 user "uzytkownik" password "twoje tajne hasło"
poll pop.gmail.com protocol auto port 995 user "nazwa.uzytownika.na.gmailu" password "tajne haslo" ssl
i zmieniam atrybuty tego pliku na zapis i odczyt tylko dla właściciela ze względu na jawnie podawane w nim hasła.
chmod 600 .fetchmailrc
Teraz aby pobrać pocztę z serwerów należy wydać komendę:
fetchmail -kv -m "/usr/bin/procmail -d %T" -d 120
która, pobierze pocztę i przekaże ją do dalszego przetwarzania programowi procmail.
Parametr -k spowoduje, że poczta nie zostanie skasowana na zdalnym serwerze, co podczas testów z programem zabezpieczy nas przed utratą poczty podczas jakiejś naszej wpadki.
Parametr -d 120 odpowiada za uruchomienie fetchmaila w trybie daemona i ściągania poczty co 2 minuty.
Manipulowanie pocztą za pomocą procmaila
Zaczynamy znowu od stworzenia zbioru konfiguracyjnego w kartotece domowej .procmailrc.
Poniżej przykład prostego zbioru konfiguracyjnego, komentarze powinny wyjaśnić jasno jak poczta jest przetwarzana.
SHELL=/bin/bash
PATH=/usr/bin:/usr/local/bin
# -----------------------------------------------------------------------------
# informacja gdzie znajduje się katalog z plikami poczty
# -----------------------------------------------------------------------------
MAILDIR=$HOME/Mail
# -----------------------------------------------------------------------------
# TUTAJ WKLEJĘ PÓŹNIEJ REGUŁY DLA PROGRAMU BOGOFILTER
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# poczta pochodząca z raportów programu antywirusowego kierowana do
# zbioru avk_raporty i nie przetwarzana dalej.
# -----------------------------------------------------------------------------
:0
* ^From:.<"Kaspersky Administration Server"@moja\.domena\.pl>
$MAILDIR/avk_raporty
# -----------------------------------------------------------------------------
# dostaję też pocztę o wykonaniu backapów, kierują ją też od razu do zbioru
# a nie przetwarzam dalej.
# -----------------------------------------------------------------------------
:0
* ^From:.*root@serwer\.moja\.domena\.pl
* ^Subject:.*SERWER - BACKUP
$MAILDIR/raporty_z_backapu
# -----------------------------------------------------------------------------
# archiwizujemy pocztę która nie zakwalifikowała się powyżej i puszczamy
# ją na konto użytkownika za co odpowiada linia :0c.
# -----------------------------------------------------------------------------
:0c:
KOPIA_POCZTY
Bogofilter i odfiltrowanie spamu
Do odfiltrowania spamu użyję programu bogofilter, regułki filtrów dodaje do zbioru .procmailrc w miejscu wcześniej oznaczonym.
# -----------------------------------------------------------------------------
# BOGOFILTER
# -----------------------------------------------------------------------------
BOGOFILTER=bogofilter
# backup poczty zanim zacznie działać bogofilter, na razie nie ufam programowi, który
# może usunąć moją pocztę więc przed jego działaniem ją archiwizuję. Jak przekonam się
# do programu poniższe linie zostaną usunięte.
:0c:
mail.backup
# Reguły wycinające egzotyczne kodowanie. Aby nie przekarmić bogofiltra.
:0:
* 1^0 ^\/Subject:.*=\?(.*big5|iso-2022-jp|ISO-2022-KR|euc-kr|gb2312|ks_c_5601-1987|windows-1251|windows-1256)\?
* 1^0 ^\/Content-Type:.*charset="(.*big5|iso-2022-jp|ISO-2022-KR|euc-kr|gb2312|ks_c_5601-1987|windows-1251|windows-1256)
spam-unreadable
# sprawdzam czy spam, rejestruje w słownikach, dodaje nagłówek X-Bogosity
:0fw
| bogofilter -p -u -l -e -v
# -p)assthrough -u)pdate, -l)og -e)xitcode 0 for spam and ham
# -v)erbose
# jeżeli był jakiś błąd to wiadomość do kolejki
:0e
{
EXITCODE=75
HOST
}
# Jeżeli w nagłówku X-Bogosity to zapisuje do spamu
:0:
* ^X-Bogosity: (Spam|Yes)
spam-bogofilter
# Niewiadomo czy spam to zapis do unsure-bogofilter
:0c:
* ^X-Bogosity: Unsure
unsure-bogofilter
# -----------------------------------------------------------------------------
# END BOGOFILTER
# -----------------------------------------------------------------------------
Zanim zaczniemy filtrować wiadomości można nauczyć program bogofilter co jest spamem, a co nie.
Ja wcześniej korzystałem z Thunderbirda i gromadziłem wszystkie wiadomości, włącznie ze spamem. Dzięki odpowiedniej wtyczce wyeksportowałem pocztę do formatu mbox. Pocztę przychodzącą zapisałem do zbioru inbox_tunderbird, natomiast spam do spam_thunderbird.
Mając te pliki zbuduję reguły dzięki którym bogofilter będzie już dobrze wiedział co jest spamem a co nie. Jeżeli nie masz zmagazynowanej poczty to będziesz musiał nasz antyspam uczyć na bieżąco, ale o tym później w rozdziale z mutt-em.
Najpierw mówie co jest spamem:
bogofilter -s < spam_thunderbird
następnie co jest pożądaną wiadomością:
bogofilter -n < inbox_thunderbird
Klient poczty Mutt
I przyszedł czas aby opisać klienta poczty, uruchamiamy go poleceniem mutt, od razu zobaczymy pocztę którą mamy na lokalnym koncie. Mutt korzysta z globanych ustawień, aby zdefiniować własne, indywidualne, najlepiej skopiować ustawienia ze zbioru /usr/share/doc/mutt/examples/sample.muttrc.gz i zapisać je lokalnie w pliku .muttrc.
A oto kilka moich ustawień:
set realname="Krzysztof Glaz" # Prawdziwy podpis w wysylce
my_hdr From: kglaz@domena.pl # Adres wysylajacego maile
set signature="~/.signature" # w tym zbiorze zapisaną mam sygnaturkę
# która będzie dołączana do moich listów
set charset="utf8" # strona kodowa mojego terminala
set folder=~/Mail # Miejsce na pliki poczty
set alias_file=~/.mail_aliases # zbiór z aliasami adresów
source "~/.mail_aliases" # czyli książka adresowa
set editor="vim '+set tw=72' %s" # edytor w którym pisany jest list
# ja lubie vi więc listy będę pisać w vi
set mail_check=10 # normalnie mutt nie odświeża ekranu,
# a tutaj wymuszam sprawdzenie co 10 sekund
# czy jest nowa poczta
set print=ask-yes # pytaj się czy na pewno wydrukować list
set print_command="muttprint" # aby poczta wyglądała ładnie na wdruku
# wykorzystuje do tego celu program
# muttprint, domyślnie tutaj znajduje
# się lpr
# set edit_headers # za to tę opcję "haszuję" aby podczas tworzenia
# wiadomości nie móc edytować informacji nagłówkowych
Jeżeli masz kilka skrzynek pocztowych i chciałbyś mieć możliwość wysyłania poczty z każdej z nich to należy napisać odpowiednie makra w zbiorze konfiguracyjnym .muttrc.
macro index ':set signature="~/.signature_konto_1" \
realname="Krzysztof Glaz"; my_hdr From: konto_1@domena.pl'
macro pager ':set signature="~/.signature_konto_1" \
realname="Krzysztof Glaz"; my_hdr From: konto_1@domena.pl'
macro index ':set signature="~/.signature" \
realname="Krzysztof Glaz"; my_hdr From: kglaz@domena.pl'
macro pager ':set signature="~/.signature" \
realname="Krzysztof Glaz"; my_hdr From: kglaz@domena.pl'
Teraz wciskając klawisz F2 będę tworzyć listy korzystając z konta które tutaj nazwałem konto_1. Wciskając klawisz F3 wrócę do domyślnego konta.
Aby z poziomu -a dodawać listy do spamu lub kwalifikować je jako poprawne wiadomości i "uczyć" w ten sposób program bogofilter, tworzę makra zgodnie z dokumentacją dostarczoną z tym programem:
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# BOGOFILTER
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
macro index S "|bogofilter -s\ns=spam-bogofilter" "Learn as spam and save to junk"
macro pager S "|bogofilter -s\ns=spam-bogofilter" "Learn as spam and save to junk"
macro index H "|bogofilter -n\ns=" "Learn as ham and save"
macro pager H "|bogofilter -n\ns=" "Learn as ham and save"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# END BOGOFILTER
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Od teraz po wydaniu komendy mutt odczytam zawartość pliku poczty /var/spool/mail/nazwa_uzytkownika, jeżeli będę chciał wysłać list wciskam klawisz m i tworzę nową wiadomość korzystając ulubionego edytora vim. Jeżeli jakiś spam przedostanie się do mojej skrzynki to po naciśnięciu klawisza S zostanie zakwalifikowany do spamu.
Dzięki wpisie w .procmailrc:
:0c:
KOPIA_POCZTY
poczta jest archiwizowana.
Gdy jakiś list według filtru spamu jest niepewny trafia do pliku unsure-bogofilter, gdy trafiła tam dobra przesyłka powiemy o tym antyspamowi wciskając klawisz H.
Po opanowaniu skrótów klawiaturowych, po programie mutt można poruszać się szybko i sprawnie, a po pewnym czasie docenia się jego elstyczność.
Ponieważ mutt tworzy listy, ale musi mieć zewnętrzy program do ich wysyłki pozostaje nam jeszcze jeden program do skonfigurowania.
Wysyłka poczty
Do wysłania poczty wykorzystam program esmtp. Na początku utworze link symboliczny esmtp wskazujący na sendmail:
ln -s /usr/bin/esmtp /usr/sbin/sendmail
jeżeli na plik sendmail wskazywał wcześniej inny program (a w debianie domyślnie pewnie wskazywał ten zbiór exim) najpierw usuń link sendmail a następnie utwórz go ponownie zgodnie z tym co wyżej napisałem.
Te operacje musisz wykonywać jako root.
Teraz pozostaje tylko stworzyć na lokalnym użytkowniku zbiór .esmtp i podać w nim parametry zewnętrzych serwerów SMTP do wysyłki poczty:
hostname = mail.domena.pl:25
username = "kglaz"
password = "haslo_dla_kglaz"
identity = konto_1@domena.pl
hostname = mail.domena.pl:25
username = "konto_1@domena.pl"
password = "haslo_dla_konto_1"
Domyślnym kontem do wysyłki jesto konto kglaz na serwerze domena.pl, jeżeli jednak wysyłałbym pocztę z konta konto_1 to skorzystam z ustawień dla tego konta.
Podsumowanie
Jak widać z powyższego artykułu, trzeba się napracować aby skonfigurować naszego klienta poczty na konsoli. Konfiguracja Thunderbirda jest prosta i mało skoplikowana. Za to konfiguracja tego co powyżej opisałem pozwala nam obsłużyc pocztę nawet na bardzo słabych komputerach, lub pozwoli nam zarządzać pocztą na jakimś zdalnym koncie unixowym/linuxowym do którego będziemy mieć dostęp przez ssh (lub Putty).





Odpowiedzi
ndz., 31/08/2008 - 15:27
Witam serdecznie,
Super artykuł!
Nie jestem zbyt zaawansowanym userem, ale dzięki temu artykułowi udało mi się wszystko ładnie skonfigurować. Na innych stronach znajdowałem szczątkowe informacje, które nie wyjaśniały wszystkiego....
Postępują wg podanych powyżej procedur, urchomiłem fetchmail, sendmail oraz Mutt na Mandrivy.
Dzięki za pomoc.
Pozdrawiam - kjali
ndz., 31/08/2008 - 17:46
Cieszę się, że moje - w sumie w wielu przypadkach - luźne zapiski są pomocne.
wt., 27/01/2009 - 08:45
Coraz rzadziej czytam pocztę na konsoli, ale artykuł na pewno przydatny.
Dodaj nową odpowiedź