bezpieczeństwo
Bezpieczeny serwer pocztowy
32
maj 2007
bezpieczeństwo
Bezpieczeny serwer pocztowy
33
www.lpmagazine.org
lin
ux
@
so
ftw
ar
e.
co
m
.p
l
Q
mail został napisany z myślą o bezproble-
mowym działaniu, posiada duże możliwo-
ści konfiguracji, jest też zadziwiająco szybki.
W poprzednim artykule pisałam o samym
qmailu, jego podstawowej instalacji, instalacji patcha
SMTP-AUTH, autorespondera oraz programu rblsmtpd
do blokowania adresów wpisanych na listach RBL.
Instalacja rozszerzenia SPF
SPF (ang. Sender Policy Framework) jest rozszerzeniem po-
zwalającym serwerowi sprawdzić, czy nagłówki maila,
który właśnie odbiera, nie zostały sfałszowane.
Przykładowo: jeśli osoba posiadająca domenę mojado-
mena.pl przy wysyłaniu poczty korzysta z serwera pocz-
towego poczta.mojadomena.pl, to za pomocą SPF-a mo-
że zdefiniować, że tylko listy wychodzące z tego serwera
pochodzą faktycznie od niej. Wówczas maile które w na-
główku w polu From mają adres @mojadomena.pl, ale zo-
stały wysłane z innego serwera pocztowego, mogą zostać
odrzucone.
Takie działanie ma na celu ograniczenie ilości spamu
oraz zmniejszenie ilości rozsyłających się wirusów.
Instalacja potrzebnego
oprogramowania
Instalację SPF-a dla qmaila rozpoczynamy od ściągnięcia
patcha ze strony http://www.saout.de/misc/spf/
Kolejnym krokiem jest nałożenie ściągniętej łatki
(w katalogu ze źródłami qmaila):
cd katalog/qmail-1.03/
patch -p0 < qmail-spf-rc5.patch
Teraz kolej na kompilację i podmianę pliku qmail-smtpd.
Najprostszy sposób to zatrzymanie qmaila, a następnie
wydanie komendy:
make setup check
Po pomyślnej kompilacji należy utworzyć plik konfigura-
cyjny dla SPF. Nazywa się on /var/qmail/control/spfbehavior
i zawiera liczbę oznaczającą sposób zachowania się roz-
szerzenia SPF.
Statusy zwracane przez SPF oznaczają, w jakim stop-
niu przesyłany mail łamie reguły ustalone przez właści-
Qmail – nowoczesny
serwer pocztowy
Qmail to program typu MTA (ang. Mail Transfer Agent) jego autorem jest Daniel J. Bernstein. Jest to
system transportu poczty elektronicznej powstały jako alternatywa dla sendmaila – programu, który
swego czasu „zasłynął” z dużej ilości błędów zagrażających bezpieczeństwu.
Agnieszka Kądziołka
bezpieczeństwo
Bezpieczeny serwer pocztowy
32
maj 2007
bezpieczeństwo
Bezpieczeny serwer pocztowy
33
www.lpmagazine.org
ciela domeny. Wartości wyższe niż 3 nie po-
winny być stosowane, ponieważ istnieje ry-
zyko odrzucania całkiem poprawnych ma-
ili (na przykład na skutek chwilowej awarii
DNS-a nie będzie możliwe sprawdzenie re-
kordu SPF)
Jak przetestować SPF?
W celach testowych w pliku spfbehavior wpisz
wartość "1", żeby SPF dodawał jedynie na-
główki w sprawdzanych mailach.
Po wysłaniu do siebie wiadomości przez
poprawny serwer pocztowy w nagłówku ma-
ila powinien pojawić się taki wpis:
Received-SPF: pass
(0: SPF record
at twojadomena.pl designates
111.222.11.12 as permitted sender)
Jeśli natomiast serwer nie jest uprawniony
do przesyłania poczty z danej domeny, wpis
w nagłówku powinien wyglądać tak:
Received-SPF: softfail
(0: transitioning SPF record
at jakasdomena.pl
does not designate
111.222.33.44
as permitted sender)
Jeśli pojawiają się takie nagłówki, oznacza to,
że SPF jest poprawnie zainstalowany.
W przeciwnym wypadku sprawdź, czy
na pewno masz plik /var/qmail/control/spfbe-
havior oraz czy ma on odpowiednie prawa
(qmail musi móc go odczytać).
Jak sprawdzić czy dana domena
obsługuje SPF?
Najprostszym sposobem jest sprawdzenie
w DNS rekordu typu TXT dla tej domeny.
Można to zrobić np. takim poleceniem:
host -t txt onet.pl
Jeśli wśród odpowiedzi będzie linijka zaczy-
nająca się od
v=spf1
, tzn. że ta domena ob-
sługuje SPF.
Przykładowo – dla domeny onet.pl linij-
ka ta wygląda następująco:
onet.pl descriptive text
"v=spf1 ip4:213.180.128.0/19 -all”
Jeśli twoja domena nie ma odpowiedniego
wpisu w DNS-ie, należy go dodać. Najprościej
jest skorzystać z kreatora na stronie http://
old.openspf.org/wizard.html
Instalacja systemu
antywirusowego ClamAV
dla qmaila
Clam AntiVirus (ClamAV) jest systemem
antywirusowym dostępnym na licencji GPL
przeznaczonym do integracji z serwerami
pocztowymi (np. z qmailem), a jego głów-
ne zadanie to skanowanie załączników ma-
ili. Pomysłodawcą programu jest Tomasz
Kojm. ClamAV, aktualnie dostępny w wer-
sji 0.90, zawiera w swojej bazie ponad 90 000
sygnatur wirusów.
Aby zainstalować system antywiruso-
wy ClamAV, należy pobrać jego najnowszą
wersję ze strony http://www.clamav.net/stable.
php#pagestart
ClamAV powinien mieć własnego użyt-
kownika i grupę, z prawami których będzie
działał. Przykładowo – aby stworzyć użyt-
kownika oraz grupę o nazwie clamav, nale-
ży wydać polecenia:
groupadd clamav
useradd -g clamav
-s /bin/false
-c "Clam Antivirus"
clamav
Następnie należy rozpakować, skompilować
i zainstalować ściągnięty pakiet:
tar -zxvf clamav-0.90.tar.gz
cd clamav-0.90
./configure
make
make install
Aby sprawdzić czy ClamAV działa popraw-
nie, można zrobić prosty test:
clamscan -r -l scan.txt clamav-0.90
Po wykonaniu tego polecenia w pliku scan.
txt powinna się pojawić informacja o kil-
kukrotnym wykryciu wirusa ClamAV-Test-
File. Oznacza to, że ClamAV działa popraw-
nie.
ClamAV jako demon
Aby ClamAV działał wydajnie, lepszym
pomysłem jest uruchomienie go jako demo-
na clamd i odwoływanie się do niego po-
przez program clamdscan. W takiej konfi-
guracji program nie musi za każdym razem
wczytywać z dysku całej bazy wirusów, ale
raz uruchomiony trzyma ją cały czas w pa-
mięci.
W celu uruchomienia demona należy go
najpierw skonfigurować. Domyślnie konfi-
guracja trzymana jest w pliku /usr/local/etc/
clamd.conf.
Pierwszym krokiem powinno być usu-
nięcie linii „Example”, żeby w ogóle urucho-
mić demona. Warto przejrzeć wszystkie opcje
konfiguracyjne, aby wiedzieć, jakie oferuje on
możliwości. Jednak demon powinien dobrze
działać przy domyślnych ustawieniach.
Wystarczy więc go uruchomić:
/usr/local/sbin/clamd
i sprawdzić, czy poprawnie skanuje pliki:
clamdscan /tmp/
W przypadku problemów warto włączyć wy-
soki poziom logowania demona (LogVerbose)
i zobaczyć w logach, jaka jest przyczyna błęd-
nego działania.
Skanowanie poczty – qmail-scanner
Aby zintegrować qmaila z systemem antywi-
rusowym ClamAV, należy skorzystać z pro-
gramu qmail-scanner.
Do poprawnego działania qmail-scanner
potrzebuje qmaila z zainstalowanym patchem
qmailqueue-patch. Patcha można pobrać z ad-
resu http://www.qmail.org/qmailqueue-patch.
Nałożenie patcha wygląda następująco:
w katalogu nadrzędnym do qmail-1.03 nale-
ży uruchomić:
patch -p0 < qmailqueue-patch
cd qmail-1.03
make
Liczba Znaczenie
0
Wyłączenie SPF
1
Dodawaj jedynie nagłówki "Received-SPF", nigdy nie blokuj
2
Zwracaj błędy typu "spróbuj później", jeśli masz problemy ze sprawdzeniem rekordu SPF
w DNS-ie
3
Odrzucaj maile, jeśli SPF zwróci status fail
4
Odrzucaj maile, jeśli SPF zwróci status softfail
5
Odrzucaj maile, jeśli SPF zwróci status neutral
6
Odrzucaj maile, jeśli SPF zwróci status inny niż „przepuszczaj”
34
bezpieczeństwo
Bezpieczeny serwer pocztowy
maj 2007
35
bezpieczeństwo
Bezpieczeny serwer pocztowy
www.lpmagazine.org
Następnie należy podmienić qmail-smtpd (za-
chowując kopię bezpieczeństwa):
cp /var/qmail/bin/qmail-smtpd
/var/qmail/bin/
qmail-smtpd.old
cp qmail-smtpd
/var/qmail/bin/
i zrestartować qmaila.
Aby zainstalować qmail-scannera, nale-
ży pobrać najnowszą wersję oprogramowa-
nia ze strony http://qmail-scanner.sourceforge.
net/.
Kolejnym krokiem jest stworzenie gru-
py i użytkownika, z poziomu którego będzie
działał qmail-scanner:
groupadd qscand
useradd -c "Qmail-Scanner
Account" -g qscand
-s /bin/false qscand
Po rozpakowaniu ściągniętego archiwum
trzeba uruchomić konfigurację pakietu:
./configure
--admin konto_mailowe
--domain twoja.domena.pl
--debug no
Powyższa konfiguracja oznacza, że wszelkie
powiadomienia administracyjne qmail-scan-
ner będzie wysyłał na adres konto_mailowe-
@twoja.domena.pl.
Zachowanie podczas wysyłania powia-
domień można skonfigurować, używając
opcji
-notify
, np.
-notify "none"
– ozna-
cza to, że powiadomienia nie będą wysyła-
ne wcale.
Po skonfigurowaniu pakietu należy
zwrócić uwagę na podsumowanie (czy nie
ma błędów), a w szczególności na linijkę:
scanners=
"clamdscan_scanner"
Oznacza ona, że qmail-scanner znalazł zain-
stalowanego ClamAV i będzie go obsługiwał
w trybie demona.
Jeśli wszystko jest OK, możesz zainstalo-
wać program (uruchom
./configure
z opcją
--install
):
./configure
--admin konto_mailowe
--domain twoja.domena.pl
--notify "none" \
--debug no --install
Po instalacji sprawdź, czy użytkownik qma-
ild będzie miał prawa do uruchamiania ska-
nera:
setuidgid qmaild
/var/qmail/bin/
qmail-scanner-queue.pl
-g
Jeśli otrzymasz komunikat Can't do setu-
id lub Permission denied, to najprawdopo-
dobniej nie masz zainstalowanego pakietu
suid-perl (w RedHacie jest to perl-suidperl,
w Debianie – perl-suid).
Ostatnią rzeczą, którą należy zrobić jest
ustawienie zmiennej
QMAILQUEUE
. Zmien-
na ta przechowuje wartość używaną przez
qmaila do odnalezienia programu do kolej-
kowania poczty. Należy w niej podać ścież-
kę do programu qmail-scanner. Najwygod-
niejszym sposobem jest dopisanie jej do pli-
ku /etc/tcp.smtp.
Jeśli przed modyfikacją plik ten wyglą-
dał np. tak:
127.:allow,RELAYCLIENT=""
:allow
to po dodaniu obsługi antywirusowej będzie
wyglądał tak:
127.:allow,
RELAYCLIENT="":allow,
QMAILQUEUE=
"/var/qmail/bin/
qmail-scanner-queue.pl"
Zasadniczo do poczty przesyłanej bezpo-
średnio z serwera nie trzeba uruchamiać
antywirusa (dlatego w pierwszej linijce
nie wpisujemy zmiennej
QMAILQUEUE
). Jeśli
jednak serwer obsługuje np. pocztę przez
WWW i mogą się pojawić listy z wirusami
przesyłane przez localhosta, to oczywiście
przy 127. też warto dopisać odpowiednie
QMAILQUEUE
.
Po zmianie czegokolwiek w tcp.smtp trze-
ba przebudować jego wersję binarną – tcp.
smtp.cdb:
qmailctl cdb
lub – jeśli nie masz qmailctl:
tcprules
/etc/tcp.smtp.cdb
/etc/tcp.smtp.tmp <
/etc/tcp.smtp chmod 644
/etc/tcp.smtp.cdb
Od tej chwili qmail powinien już skanować
przechodzące przesyłki. Możesz to przetesto-
wać przesyłając pocztę do siebie i obserwując
nagłówki. Powinny tam się pojawić wpisy in-
formujące o skanowaniu przesyłki:
Received: from 111.222.33.44
by grendel ... with
qmail-scanner-1.25
(clamdscan: 0.86.2/1290.
spamassassin: 3.1.7.
Clear:RC:0(111.222.33.44):
SA:0(0.2/5.0):.
Processed in 0.116137 secs);
Po dodaniu skanera antywirusowego zna-
cząco zwiększa się apetyt qmaila na pa-
mięć. Jeśli masz qmaila wywoływanego
z ograniczeniem pamięci do wykorzystania,
limit ten może okazać się niewystarcza-
jący.
Objawia się to najczęściej przy próbie wy-
słania poczty takim komunikatem:
451 qq temporary problem (#4.3.0)
Trzeba wtedy zwiększyć ilość pamięci do-
stępnej dla qmaila. W przypadku ClamAV
wartością wystarczającą jest 25MB.
Konta wirtualne
– vpopmail dla qmaila
Vpopmail jest pakietem na licencji GPL, któ-
ry umożliwia łatwe zarządzanie wirtualny-
mi kontami pocztowymi na serwerze pocz-
towym.
Aby zainstalować vpopmaila, należy po-
brać najnowszą wersję pakietu ze strony
http://www.inter7.com/index.php?page=vpop-
mail.
Po rozpakowaniu archiwum dodajemy
odpowiednie grupy w systemie:
tar -zxvf vpopmail-5.*
cd vpopmail-5.*
groupadd
-g 89 vchkpw
useradd
-g vchkpw
-u 89 vpopmail
Kolejnym krokiem jest kompilacja pakietu.
Można użyć opcji domyślnych, ale warto się
zapoznać z możliwościami konfiguracyjny-
mi tego pakietu. Listę dostępnych opcji zoba-
czysz wydając polecenie:
./configure
--help
34
bezpieczeństwo
Bezpieczeny serwer pocztowy
maj 2007
35
bezpieczeństwo
Bezpieczeny serwer pocztowy
www.lpmagazine.org
Na uwagę zasługuje np. blokowanie zapi-
sywania haseł w postaci niezaszyfrowanej
(
--disable-clear-passwd
), wybieranie spo-
sobu logowania zdarzeń (
--enable-log-
ging
) czy współpraca z bazą danych My-
SQL (kilka różnych opcji).
Po wybraniu opcji konfiguracji
./configure [opcje konfiguracji]
czas na kompilację oraz instalację pakietu:
make
make install-strip
Po zainstalowaniu pakietu powinniśmy do-
dać komputery, które będą uprawnione do
przesyłania poczty przez serwer (można to
również zrobić korzystając z autoryzacji
SMTP-AUTH).
echo "192.168.1.:allow,
RELAYCLIENT=\"\"" >>
~vpopmail/etc/tcp.smtp
Ostatnim krokiem jest dodanie domen, które
mają być obsługiwane przez serwer:
cd /home/vpopmail/bin
./vadddomain test.com.pl
oraz użytkowników w tych domenach:
./vadduser jakisuser@test.com.pl
Po wykonaniu powyższych komend powi-
nien zostać utworzony katalog /home/vpop-
mail/domains/test.com.pl/ i w nim katalogi
użytkowników.
Jeśli serwer jest uprawniony do odbioru
poczty dla domen, które mu zostały przypi-
sane (rekord MX w DNS-ie wskazuje na nie-
go), to w tym momencie przesłanie poczty
na adres jakisuser@test.com.pl powinno spo-
wodować pojawienie się listu w katalogu
/home/vpopmail/domains/test.com.pl/jakisuser/
Maildir/new/.
Jeśli tak się stało, można uznać, że pakiet
vpopmail działa prawidłowo.
Patch realrcptto
do qmaila
Zwykle serwer pocztowy działa tak, że po
otrzymaniu maila do dostarczenia przyj-
muje go do kolejki. Dopiero gdy nadej-
dzie jego pora, mail jest pobierany z kolej-
ki i następuje próba jego dostarczenia – wy-
szukiwany jest odbiorca listu. Gdy odbior-
ca nie zostanie odnaleziony, do nadawcy
maila zostanie przesłany mail z odpowied-
nim komunikatem informacyjnym. Spame-
rzy zauważyli, że bardzo łatwo sfałszować
nadawcę listu i zaczęli wstawiać adres ofia-
ry właśnie w polu źródłowym. Wówczas
odbity mail trafia do ofiary z zupełnie nie-
winnego serwera. List w formie zwrotu po-
zwala też w większości przypadków omi-
nąć filtry antyspamowe analizujące treści
listów.
Istnieje możliwość takiej konfiguracji
qmaila, aby już na początku transmisji
sprawdzał on, czy konto odbiorcy znajduje
się na serwerze. Jeśli nie – połączenie zosta-
nie przerwane. Do tego właśnie służy patch
realrcptto.
Instalacja patcha
Aby go zainstalować, należy pobrać jego naj-
nowszą wersję ze strony http://code.dogmap.
org./qmail/.
Następny krokiem jest przejście do ka-
talogu ze źródłami qmaila i nałożenie ścią-
gniętej łatki:
cd katalog/
qmail-1.03/
patch -p1
< qmail-1.03-realrcptto-
2006.12.10.patch
Niestety część poprawek może zostać od-
rzucona, jeśli wcześniej były zakładane in-
ne patche.
Należy wtedy wejść do plików z rozsze-
rzeniem .rej i sprawdzić, jaki fragment ko-
du nie został zaaplikowany, a następnie rę-
cznie dokonać odpowiednich poprawek
w źródłach.
Na pewno konflikt tego typu występuje
przy bardzo popularnym patchu
qmail-smt-
pauth
.
Jeśli masz już poprawnie zmodyfikowa-
ne źródła, kompilacja sprowadza się do po-
lecenia
make
Po pomyślnej kompilacji musisz zatrzymać
qmaila:
qmailctl stop
po czym podmienić dwa pliki:
cp qmail-smtpd
/var/qmail/bin/
cp qmail-qmtpd
/var/qmail/bin/
Następnie wystarczy ponownie wystartować
serwer:
qmailctl start
Po restarcie qmaila dobrze jest sprawdzić,
czy nowe oprogramowanie zachowuje się
poprawnie. Najprościej będzie wysłać ma-
ila na nieistniejący adres w twojej dome-
nie:
telnet localhost 25
ehlo test.com
mail from: test@test.com
250 ok
rcpt to:
nieistnieje@lokalna.domena
552 sorry, no mailbox here
by that name. (#5.1.1)
Jeśli otrzymasz komunikat jak powyżej, zna-
czy to, że wszystko działa zgodnie z oczeki-
waniami.
Dodatkowe uwagi
Realrcptto w trakcie trwania sesji SMTP
sprawdza, czy możliwe jest dostarczenie
maila do podanego odbiorcy. W tym celu
sprawdza konta fizyczne, konta wirtualne
oraz aliasy. Jeśli na serwerze mamy alias
.qmail-default, to używanie qmail-realrcptto
mija się z celem, gdyż alias ten pasuje do
wszystkich odbiorców, którzy nie zostali
wcześniej znalezieni przy dostarczaniu pocz-
ty.
W przypadku vpopmaila plik ten jest
automatycznie zakładany i wykorzysty-
wany do odbijania maili lub do przekie-
rowywania błędnie zaadresowanej pocz-
ty na konto jednego z użytkowników
(tzw. catch-all account). Plik .qmail-default
jest również wykorzystywany do podpi-
nania wszelkich filtrów, np. antyspamo-
wych. Dlatego też, jeśli zdecydujemy się na
jego usunięcie, musimy przenieść obsługę
filtrów w inne miejsce, np. do qmail-scan-
nera.
Podsumowanie
Dzięki wpółpracy serwera qmail z roz-
szerzeniem SPF, programem antywiruso-
wym, systemem antyspamowym, syste-
mem vpopmail oraz patch realrcptto blo-
kujący wysyłanie niepotrzebnych zwro-
tów maili otrzymujemy stabilny, bezpiecz-
ny, funkcjonalny a zarazem nowoczesny
serwer pocztowy.