qmail - bezpieczny i wydajny mta - komsta.net · ogromne podziękowania za recenzję i korektę...

21
Qmail - bezpieczny i wydajny MTA Lukasz Komsta 29 kwietnia 2003 roku Spis treści 1 Qmail 3 1.1 Wstęp ........................................... 3 1.2 Aliasy użytkownika .................................... 3 1.3 Instalacja ......................................... 4 1.4 Konfiguracja ....................................... 5 1.5 Qmail a majordomo ................................... 6 1.6 Przyjmowanie polączeń ................................. 6 1.7 Relay ........................................... 7 1.8 Program „sendmail” ................................... 7 1.9 Obsluga protokolu pop3 ................................. 7 1.10 Użytkownicy „alias” i „msglog” ............................. 8 1.11 Wady qmaila ....................................... 8 2 Ezmlm 9 2.1 Instalacja ......................................... 9 2.2 Listy lokalne ....................................... 9 2.3 Listy globalne ....................................... 10 2.4 Administracja listą .................................... 10 2.5 Adresy administracyjne ................................. 10 2.6 Pozostale opcje ...................................... 11 2.7 Przeglądy ......................................... 12 3 Rozszerzenia qmaila 12 3.1 Rblsmtpd ......................................... 12 3.2 Smtp-poplock ....................................... 14 3.3 Qconfirm ......................................... 15 3.4 Qdated .......................................... 19 3.5 Pozostale dodatki ..................................... 20 1

Upload: phunganh

Post on 01-Mar-2019

217 views

Category:

Documents


0 download

TRANSCRIPT

Qmail - bezpieczny i wydajny MTA

Łukasz Komsta

29 kwietnia 2003 roku

Spis treści

1 Qmail 31.1 Wstęp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Aliasy użytkownika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3 Instalacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.4 Konfiguracja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.5 Qmail a majordomo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.6 Przyjmowanie połączeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.7 Relay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.8 Program „sendmail” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.9 Obsługa protokołu pop3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.10 Użytkownicy „alias” i „msglog” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.11 Wady qmaila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2 Ezmlm 92.1 Instalacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2 Listy lokalne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.3 Listy globalne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.4 Administracja listą . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.5 Adresy administracyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.6 Pozostałe opcje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.7 Przeglądy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3 Rozszerzenia qmaila 123.1 Rblsmtpd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.2 Smtp-poplock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.3 Qconfirm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.4 Qdated . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.5 Pozostałe dodatki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

1

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

Warunki dystrybucji

Kopiowanie w formie elektronicznej dozwolone wyłącznie w postaci niezmienionej, z zachowanieminformacji o autorze oraz warunkach dystrybucji, tylko w celach niekomercyjnych. Przedruk, sprze-daż i inne formy wykorzystania dozwolone wyłącznie za zgodą autora.

Zmiany

• 2003.04.29 - 0.12 - wprowadzono trochę poprawek zgodnych z sugestiami Jarosława Sa-kowskiego, któremu serdecznie dziękuję.

• 2002.12.31 - 0.11 - poprawiono kilka literówek, wprowadzono poprawki merytoryczne.Ogromne podziękowania za recenzję i korektę tekstu składam Dariuszowi Sznajderowi.

• 2002.12.30 - 0.10 - pierwsza wersja dokumentu.

Aktualna wersja dokumentu: 0.12Strona domowa autora: http://www.komsta.net.Opracowanie złożono w systemie TEX/LATEX.

2

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

1. Qmail

1.1. Wstęp

Choć sendmail jest podstawowym programem MTA dla systemów typu Unix, istnieje kilka innych,wartych uwagi pakietów, które możemy zastosować w tej roli. Sendmail jest sporym kawałkiemkodu w C, pracujący jako jeden proces z prawami roota. Wiąże się z tym nieustanne wykrywaniekolejnych luk bezpieczeństwa, zmuszające administratorów do szybkiej interwencji. Często w no-wych wersjach należy uaktualniać ścieżki do plików konfiguracyjnych, zmieniać ich nazwy, czyrozwiązywać atypowe niespodzianki (np. problemy z majordomo po wprowadzeniu smrsh).Daniel Berstein, z zawodu matematyk, podczas pisania qmaila [1] postawił na wydajność

i bezpieczeństwo1. Dlatego też qmail pracuje w systemie jako kilka niezależnych, małych proce-sów, pracujących z prawami zwykłego bez praw roota. Te ostatnie posiada wyłącznie programqmail-lspawn, dostarczający przesyłki lokalnie. Qmail może być bardzo prosto skonfigurowany doprzechowywania przesyłek w dowolnym miejscu, nie tylko w katalogu /var/spool/mail, pozwa-la ponadto korzystać z nowego, alternatywnego formatu skrzynki Maildir, jeśli administrator lubpojedynczy użytkownik sobie tego zażyczy.

1.2. Aliasy użytkownika

Qmail pozwala na tworzenie przez każdego użytkownika aliasów pocztowych. Każdy użytkowniksystemowy dysponuje swoją własną przestrzenią adresową user-cokolwiek@domena. Jeśli przyj-miemy do dalszych przykładów nazwę konta luke, w katalogu domowym umieszcza się plik .qma-il, gdzie zawarte są reguły składowania poczty dla konta luke@serwer. Jeśli użytkownik lukeutworzy plik .qmail-poufne, automatycznie zacznie funkcjonować (bez udziału administratora)alias luke-poufne@serwer, a poczta będzie przetwarzana zgodnie z regułami zawartymi w tympliku. Umożliwia to nawet tworzenie małych, prywatnych list dyskusyjnych. Umieszczenie pli-ku .qmail-default, powoduje przetwarzanie w zawarty tam sposób przesyłek zaadresowanychna luke-xxx@serwer, gdzie xxx to dowolny alias, inny niż pozostałe. W plikach .qmail możnadefiniować miejsce składowania poczty, forwardować ją, bądź też przekazywać potokowo do ze-wnętrznych poleceń. Przykłady:

• /home/luke/Mailbox -umieszczaj w takim pliku w standardowym formacie

• /home/luke/mail/ -umieszczaj w takim katalogu (ukośnik na końcu!) w formacie maildir

• &luke@innyserwer -przeforwarduj na podany adres

• |/home/luke/bin/sms -”zasil” treścią listu skrypt zgodnie z regułami podanymi w qmail-command(8).

Oczywiście linijek i poleceń może być kilka. Brak plików .qmail powoduje składowanie pocztyw sposób zdefiniowany globalnie przez administratora. Ważne jest, aby nie tworzyć pustych plików,lub zawierać w nich wyłącznie komentarzy2.

1W chwili pisania tego tekstu najnowsza wersja, oznaczona numerem 1.03, kończy już 20 miesięcy. Z jednej stronywidać brak błędów zmuszających do wypuszczania nowszych wersji, z drugiej strony jest mała szansa na „oficjalny”rozwój programu - patrz dalej.2Teoretycznie pusty plik powinien również powodować dostarczanie poczty w sposób zdefiniowany przez admi-

nistratora, jednak w historii qmaila opisywano błędy polegające na tym, że poczta w takim przypadku trafiała do/dev/null. Tyczyło się to również plików zawierających same komentarze.

3

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

Jeśli poczta będzie nadchodzić w czasie edycji plików, mogą wystąpić problemy z jej dostarcze-niem. W takiej sytuacji na czas edycji należy ustawić atrybut +t (sticky bit) dla katalogu domowegopoleceniem chmod +t $HOME, a po zakończonej edycji go zdjąć.

1.3. Instalacja

Podstawowym warunkiem pomyślnego zainstalowania Qmaila jest kompilacja pakietów przezna-czonych dla konkretnej dystrybucji. Próba kompilacji standardowego uniwersalnego pakietu tar.gzmoże kończyć się błędem i zniechęcać potencjalnych użytkowników do dalszych prób3. Dla RedHata istnieją źródłowe pakiety rpm, które bez problemu się kompilują. Dla osób nie mających doczynienia z plikami src.rpm krótkie przypomnienie, co należy czynić:

rpm -i qmail-1.03-6.src.rpm

cd /usr/src/redhat/SPECS/

rpm -bb qmail.spec

Po poprawnej kompilacji w /usr/src/redhat/RPMS/i386/ powninniśmy otrzymać pakiety:qmail-1.03-6.i386.rpm qmail-client-1.03-6.i386.rpm qmail-msglog-1.03-6.i386.rpm.Pakiet qmail zawiera instalację qmaila przeznaczeniem na serwery, qmail-msglog rozszerzenie

msglog i nie wymaga zwykle instalacji. Pakiet qmail-client zawiera wyłącznie część kliencką dlasieci wewnętrznych. Na typowych maszynach się go nie instaluje. Komunikacja ta jest oparta o spe-cjalny protokół QMQP, którego wyczerpujący opis znajduje się w dokumentacji. Można równieżotworzyć port QMQP na świat zewnętrzny. Nie jest to jednak polecane, ani też nie ma zbytniegosensu.W przypadku systemu RedHat skrypt w /etc/rc.d/init.d zawiera dyrektywę:

qmail-start "‘cat /etc/qmail/dot-qmail‘" splogger qmail

Oznacza to, iż globalny sposób dostarczania przesyłek odczytywany jest z /etc/qmail/dot-qmail (o zawartości dalej). Zmiana tego pliku wymaga zrestartowania qmaila:

/etc/rc.d/init.d/qmail stop /etc/rc.d/init.d/qmail start

W innych dystrybucjach standardowym miejscem na określenie globalnej wysyłki jest plik/var/qmail/rc, który w czasie startu systemu jest po prostu wykonywany. Wielu użytkownikówbroni się przed globalnie narzuconym systemem maildir. Niektórzy również nie chcą umieszczaćpoczty w katalogach domowych (np. gdy na /var/spool/mail założona jest oddzielna quota).W takiej sytuacji najlepiej jest, by ostatnim ogniwem łańcucha był procmail, dostarczający prze-syłki na starych zasadach. Dodatkowym atutem jest utrzymanie działania plików .procmailrcw katalogach domowych. W tym celu należy do dot-qmail wstawić:

| dot-forward .forward | preline procmail

W większości przypadków jest to najlepsze rozwiązanie -poczta dostarcza się na starych za-sadach. W pierwszej kolejności działają w katalogach domowych pliki .qmail, następnie .for-ward (zapewnia to dodatkowy program dot-forward, bez którego nie jest to możliwe), a na końcu3Sygnały od czytelników opracowania wskazują, iż na NetBSD 1.6 oraz OpenBSD 3.1 i 3.2 oryginalne archiwum

kompiluje się bez żadnych dodatkowych zabiegów.

4

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

.procmailrc. Rozwiązanie to jest też, jak widać, bezbolesne dla użytkowników. Przy ustawieniuglobalnego dostarczania poczty do ~/Mailbox należy przystosować do tego programy pocztowe.Na przykład w globalnym pine.conf ustawiamy

inbox-path=Mailbox

Problem stanowi wtedy pobieranie poczty przez pop3. FAQ opisuje poprawkę dla qpoppera,jednak bezpieczeństwo tego demona jest dalekie od oczekiwań Przy przejściu na format maildirnależy używać klienta obsługującego ten format (np. mutt) lub konwertować pocztę na formatmailbox na czas uruchamiania MUA (skryptem maildir2mbox, rozwiązanie ostateczne). Zwykleużywa się programu mutt. Do pobierania poczty przez pop3 służy wtedy qmail-pop3d, a opisinstalacji zawarty jest w FAQ.

1.4. Konfiguracja

Przed uruchomieniem Qmaila należy oczywiście poddać edycji podstawowe pliki konfiguracyjne,zawarte w katalogu /var/qmail/control. Są to:

• me -zawiera pełną nazwę maszyny, tzn. serwer.domena.pl.

• defaultdomain -zawiera podstawową domenę maszyny.

• locals - zawiera aliasy pocztowe dla maszyny, analogicznie do sendmail.cw.

• rcpthosts - zawiera wszystkie domeny, dla których sendmail przyjmuje pocztę, tzn. lokalne,wirtualne, oraz inne, dla których jest relay’em.

• badmailfrom - czarna lista domen lub adresów, od których poczta jest odrzucana (np. spam).

• smtproutes - zawiera nazwę serwera, dla którego qmail przekazuje całą wychodzącą pocz-tę, poprzedzoną dwukropkiem (np. :mx1.domena.pl), analogicznie do ”smart relay host”w sendmailu4.

• concurrencyremote - zawiera maksymalną liczbę otwieranych jednocześnie połączeń do ser-werów docelowych (standardowo przy braku pliku 20). Przy obsłudze sporych list dyskusyj-nych dobrze ustawić tę wartość na większą (stosownie do zasobów sprzetowych).

• virtualdomains - zawiera definicję domen wirtualnych, jeśli serwer ma takowe obsługiwać.

Domeny wirtualne są bardzo proste w konfiguracji. Jeśli na serwerze serwer.pl w pliku virtu-aldomains umieścimy linijkę

mojadomena.org:luke

a potem dodamy mojadomena.org do rcpthosts, qmail będzie przeadresowywał [email protected] na [email protected], [email protected] na [email protected] itd. Użyt-kownik luke ma wtedy pełnię władzy nad pocztą tej domeny poprzez tworzenie odpowiednichplików w katalogu domowym (w tym przypadku .qmail-abc i .qmail-xyz). Trzeba zauważyć, żedo działania adresu [email protected], trzeba utworzyć plik .qmail-luke, gdyż przepisana

4W większości konfiguracji plik ten nie istnieje, gdyż zwykle MTA powinien dostarczać pocztę bezpośrednio dodocelowych maszyn.

5

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

ona będzie na [email protected]. Poprzez utworzenie pliku .qmail-default można obsługi-wać jakąkolwiek pocztę na [email protected]. Pliki .qmail mogą być zagnieżdżone, np..qmail-luke-default, dokładne zasady postępowania są obszernie wyjaśnione w dokumentacji.Qmail umożliwia automatyczną podmianę pola From: w wysyłanych przesyłkach, bez żmudnego

konfigurowania wszystkich programów MUA (pine, elm, mutt itd.). Wystarczy ustawić zmienne:

MAILUSER=user

MAILHOST=serwer.pl

QMAILINJECT=f

co spowoduje przykładową podmianę tego pola na [email protected] niektórych sytuacjach zachodzi potrzeba, aby poczta dla nieznanych użytkowników była

przekierowywana na inny serwer. Np. jeśli mamyMX dla domena.pl ustawiony na alfa.domena.pl,a posiadamy jeszcze serwer beta.domena.pl, można ustawić, że jeśli na alfa.domena.pl niema konta janek, przeforwarduje się to na [email protected]. W tym celu do /var/qmail-/alias/.qmail-default wpisujemy:

| forward "$LOCAL"@beta.domena.pl

1.5. Qmail a majordomo

W przypadku list dyskusyjnych obsługiwanych przez program majordomo, dochodzi do poważ-nego (na pierwszy rzut oka) problemu. Wpisy :include: w /etc/aliases są traktowane przezfastforward (o uruchamianiu /etc/aliases patrz dalej) na innych zasadach. Mianowicie szuka onpodanego pliku z końcówką .cdb (nie trzeba jej wpisywać w /etc/aliases). Każda zmiana listyadresów musi być zakończona poleceniem

newinclude <nazwa>

co powoduje kompilację do formy binarnej, analogicznie do newaliases. Zapisanie się nowegoużytkownika na listę dyskusyjną musi pociągać za sobą przekompilowanie pliku z adresami. Roz-wiązanie problemu jest stosunkowo proste. W kodzie majordomo (jest to skrypt w perlu) neleżydwukrotnie (w funkcjach do subscribe i do unsubscribe) wpisać przed linijką lclose(LIST):

system("newinclude","$listdir/$clean_list");

Tak poprawiony majordomo spisuje się znakomicie [7]. Autor Qmaila zaleca jednak organizo-wanie list dyskusyjnych na własnym programie ezmlm, w pełni integrującym się z qmailem.

1.6. Przyjmowanie połączeń

Bernstein zaleca uruchamianie qmail-smtpd z własnego pakietu ucspi-tcp w połączeniu z daemon-tools5. Uruchomienie usługi odbywa się wg FAQ następująco:

tcpserver -v -u 1111 -g 2222 0 smtp /var/qmail/bin/qmail-smtpd \

2>&1 | /var/qmail/bin/splogger smtpd 3 &

5Pakiety te napisał Bernstein jako zamiennik demona inetd. Mają wielu zwolenników.

6

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

W zależności od konkretnego systemu 1111 należy zamienić na uid użytkownika qmaild, zaś2222 na gid grupy nofiles.W takiej sytuacji qmail-smtpd może obsłużyć naraz maksymalnie 40 połączeń. Aby zwiększyć

tę ilość, należy dodać opcję -c <wartość>.W tak uruchomionym qmailu zachodzi szansa na spowodowanie ataku DOS przez wyczerpanie

zasobów pamięci procesu qmail-smtpd [13]. Aby temu zapobiec, sugeruje się następującą modyfi-kację tej komendy6:

/usr/local/bin/softlimit -m 2000000 \

/usr/local/bin/tcpserver -v-R -l 0 -x /etc/tcp.smtp.cdb \

-u 1234 -g 4321 0 smtp /var/qmail/bin/qmail-smtpd

Jeśli decydujemy się na klasyczny nasłuch na porcie 25 z inetd, w /etc/inetd.conf należydodać linijkę:

smtp stream tcp nowait qmaild /usr/sbin/tcpd

/var/qmail/bin/tcp-env /var/qmail/bin/qmail-smtpd

i zrestartować inetd poleceniem killall -1 inetd.

1.7. Relay

Qmail przyjmuje pocztę wyłącznie dla domen wpisanych w pliku rcpthosts. Jeśli ma funkcjonowaćdla określonych hostów (np. z sieci wewnętrznej) jako relay,w /etc/hosts.allow wpisujemy np.

tcp-env: 10.1.1.70, 10.1.1.71 : setenv = RELAYCLIENT

Połączenia z tych adresów będą miały umożliwiony relaying, gdyż ustawienie zmiennej RELAYC-LIENT powoduje ignorowanie rcpthosts i przyjmowanie każdej poczty.

1.8. Program „sendmail”

Qmail posiada program sendmail, który pozwala na pracę programów wywołujących tak nazwanyprogram do wysyłania poczty. Większość programów powinna pracować poprawnie. FAQ podajepewne ”niuanse”, jednak nie są one istotne w większości przypadków.

1.9. Obsługa protokołu pop3

Qmail może być stosowany z dowolnym demonem pop3. Jeśli poczta przechowywana jest przezużytkowników w różnych miejscach i formatach, należy wdrożyć uniwersalnego demona, np. solid-pop3d. Jeśli użytkownicy przechowują pocztę w formacie maildir w katalogu ~/Maildir, możnazastosować standardowy qmail-pop3d. Wywołuje on celem sprawdzenia hasła program checkpas-sword. Jego standardowa wersja sprawdza hasła systemowe, jednak w sieci można znaleźć wieleodmian służących do weryfikacji haseł umieszczonych w bazach MySQL, czy LDAP.

6Użyty w tej modyfikacji program softlimit znajduje się w pakiecie daemontools.

7

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

1.10. Użytkownicy „alias” i „msglog”

System z zainstalowanym Qmailem posiada sporo użytkowników (i 2 grupy) działających na po-trzeby tego pakietu. Jednym z nich jest alias, otrzymujący pocztę dla nazw, dla których nie istniejeużytkownik. Jego katalogiem domowym jest /var/qmail/alias i tam definiuje się aliasy globalne.Zwykle znajduje się tam plik .qmail-root, zawierający dyrektywy dla poczty roota (nie odbieraon poczty bezpośrednio!), oraz .qmail-msglog. Użytkownik msglog otrzymuje kopie wszystkich(!!!) przyjmowanych listów, zatem można tam wstawiać skrypty zliczające, zapisujące nagłówkiprzetwarzanych wiadomości, czy nawet archiwizujące wszystko.Należy tutaj podkreślić, iż Qmail nie korzysta standardowo z bazy /etc/aliases, w przeci-

wieństwie do sendmaila. Jeśli serwer posiada dużo aliasów zdefiniowanych w /etc/aliases, możnaw /var/qmail/alias utworzyć plik .qmail-default, co zadeklaruje definicję dla wszystkich po-zostałych przesyłek. Tam umieszczamy dyrektywę

| fastforward -d /etc/aliases.cdb

Wymaga to przebudowania /etc/aliases qmailowym newaliases7.

1.11. Wady qmaila

Choć pakiet qmail jest systemem bezpiecznym i wydajnym, nie jest pozbawiony wad [13]. Poniżejzostaną one pokrótce przedstawione, aby niniejszy tekst był obiektywny.

1. W 1997 roku wykryto możliwość ataku DOS na qmail-smtpd. Opisał toWietse Venema8.Atak polega na wyczerpaniu dostępnej pamięci dla procesu demona. Można go uniknąć po-przez przyjmowanie połączeń wyłącznie przez tcpserver z limitami softlimit. Jest to opisanew niniejszym opracowaniu przy okazji omawiania konfiguracji.

2. Wszystkie wiadomości są akceptowane przez demona SMTP, a dopiero potem jest podejmo-wana decyzja o ich dalszym losie. Dlatego istnieje potencjalna możliwość ataku DOS poprzezwysłanie wielu dużych wiadomości z fałszywych adresów. Adresy te mogą wyczerpać zasobykolejki pocztowej. Problem ten można rozwiązać poprzez stosowanie alternatywnych demo-nów SMTP.

3. Jeśli wysyłana jest wiadomość do kilku użytkowników tego samego serwera, dla każdegoz nich tworzony jest nowy proces qmail-remote, przesyłający tą samą wiadomość. Jest to brakoszczędności pasma transmisyjnego. Nie ma żadnej możliwości poprawienia tego zachowania.Pocieszyć się można tym, że tego typu sytuacje są statystycznie marginalne.

4. Proces qmail-inject (odpowiednik polecenia sendmail sprawdza wyłącznie zmienne QMAIL-USER,MAILUSER, USER oraz LOGNAME, ustalając na ich podstawie tożsamość nadawcy.Zmienne te ustawia wyłącznie program login. Nie podlega sprawdzeniu uid wywołującego pro-cesu, dlatego też wszystkie wiadomości wysyłane przez demony (np. formularze www) mająnadawcę anonymous@domena. Rozwiązaniem jest wyraźna deklaracja nadawcy przy formuło-waniu wiadomości (opcja sendmail -f).

7Programy fastforward i newaliases są dodatkiem do qmaila, w dystrybucjach bazujących na RPM mieszczą sięw podstawowym pakiecie, w innych dystrybucjach, w tym FreeBSD, w qmail-contrib.8Venema nie odebrał obiecywanej przez Bernsteina nagrody za wykrycie jakiejkolwiek luki bezpieczeństwa.

Ten ostatni odparł zarzuty twierdząc, iż jest to kwestia odpowiedniego ustawiania limitów w systemie, a nie błęduw samym qmailu.

8

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

5. Duża ilość rozsyłanych wiadomości powoduje spadek wydajności procesów qmail-remote.Rozwiązaniem jest silly qmail syndrome patch [10].

6. Nie istnieje mechanizm pozwalający na dostarczenie lokalnych zwrotów do postmastera.

7. Qmail-smtpd nie pozwala na obecność linii zawierającej wyłącznie znak LF (bare LF), od-rzucając takie przesyłki ze stosowną adnotacją. Jest to o tyle interesujące, że wymaga on odinnych, choć sam nie honoruje wielu norm RFC. Rozwiązaniem jest qmail-0.95-liberal-lf.patch [11].

8. Standardowa instalacja reaguje niepoprawnie na obecność niektórych znaków w adresie doce-lowym, co niektóre skanery interpretują jako open relay. W związku z tym należy instalowaćstosowny patch [9], aby nie być wpisanym na czarne listy takich serwerów.

9. Brak jakichkolwiek perspektyw na oficjalny rozwój. Aktualnie nie ma szans na nową wersję,opracowaną oryginalnie przez Bernsteina.

2. Ezmlm

Ezmlm [3] jest managerem list dyskusyjnych o dużych możliwościach, przeznaczonym wyłącznie dowspółpracy z Qmailem. W pełni się z nim integruje i wykorzystuje wszelkie oferowane mechanizmy,ponadto obsługuje archiwa list i przeglądy (digests). W całości napisano go w C, z tego względujest znacznie wydajniejszy od Majordoma9. Wszelkie operacje wykonuje się przy pomocy prostychi przejrzystych komend.

2.1. Instalacja

Instalacja na dowolnej dystrybucji jest bardzo prosta, istnieją pakiety rpm i deb, we FreeBSD in-staluje się go z portów10. Alternatywą jest oczywiście kompilacja oryginalnych źródeł po nałożeniustosownych patchy. Po instalacji nie jest konieczna żadna modyfikacja istniejącego systemu.

2.2. Listy lokalne

Ze względu na mechanizm działania oparty o pliki .qmail każdy użytkownik może tworzyć wła-sne, prywatne listy dyskusyjne, stanowiące aliasy w jego przestrzeni adresowej. Wystarczy, iż np.użytkownik luke napisze:

ezmlm-make -rdugm ~/linux ~/.qmail-linux luke-linux domena.pl

i już staje się właścicielem prywatnej listy o adresie [email protected]. Kolejne parametryto katalog z listą, nazwa pliku .qmail zarządzającego listą, nazwa listy i nazwa domeny. Parametryoznaczają:

• -d -generowany będzie przegląd listy o adresie [email protected]

• -r -możliwość zdalnej administracji9Przesyłka wysłana do 350-osobowej grupy „rozsyła się” na wolniejszych maszynach z Majordomo kilkanaście

minut, a ezmlm radzi sobie z tym w ciągu dwóch minut.10Istnieją 2 linie ezmlm’a. Oryginalny ezmlm, napisany przez samego Bernsteina jest programem o stosunko-wo niedużych możliwościach. Na jego podstawie powstał drugi projekt ezmlm-idx, który jest omówiony w tymopracowaniu.

9

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

• -u -tylko osoby zapisane mogą pisać na listę

• -m -lista jest moderowana

• -um -kombinacja powyższych (osoby zapisane piszą na listę bezpośrednio, wiadomości z ze-wnątrz są moderowane)

• -g -tworzenie archiwum.

Dodatkowo można stosować:

• -l - utworzenie czarnej listy deny

• -P -utworzenie listy prywatnej (zapisywanie tylko przez administratora, z shella lub zdalnie)

2.3. Listy globalne

Aby utworzyć listę globalną (np. [email protected]), należy zrobić to dla użytkownika alias. W tymcelu jako root wykonujemy:

ezmlm-make -rdugm ~alias/linux ~alias/.qmail-linux linux domena.pl

chown -R alias ~alias/linux

2.4. Administracja listą

Jeśli kiedykolwiek zachodzi potrzeba zmiany parametrów listy, istnieje możliwość wywołania ezmlm-make na istniejącej liście. Należy wtedy korzystać z dwóch opcji:

• -e - edycja. Opcja ta konieczna jest zawsze, gdy lista już istnieje. Jeśli polecenie wywołamybez tej opcji, stara lista zostanie nadpisana11.

• -+ - plus w opcjach oznacza, iż zmianie mają ulec tylko zaznaczone opcje. Np. zmiana na mo-derowaną dokonywana jest opcjami -+em. Brak plusa spowoduje ustawienie nie wyspecyfiko-wanych opcji na wartości domyślne12.

W katalogu listy znajduje się sporo plików, których obecność lub zawartość decyduje o określo-nym zachowaniu listy. Aby zapisać kogoś ręcznie, używa się polecenia ezmlm-sub, wypisanie nastę-puje poleceniem ezmlm-unsub. Zapisując członków podaje się jako parametr katalog listy. Podającargument katalog/mod dodajemy moderatorów. Aktualną listę zapisanych adresów otrzymujemypoleceniem ezmlm-list.

2.5. Adresy administracyjne

Cechą odróżniającą ezmlm’a od majordomo jest decentralizacja poleceń administracyjnych. Nieistnieje centralny adres do zapisywania i wypisywania. Można taki wprawdzie stworzyć, jednakwymaga to dodatkowych zabiegów konfiguracyjnych i jest tylko przekierowaniem przez specjalnyskrypt. W powyższym przypadku zapisania na listę dokonuje się wysyłając pusty list na [email protected], czy [email protected] (dla przeglądu listy).Analogicznie końcówka „-unsubscribe” służy do wypisywania. Za każdym razem ezmlm wysyłakomunikat, który należy potwierdzić (poprzez reply).Oto pełna lista pozostałych końcówek wraz ze znaczeniem:

11Dzieje się to bez ostrzeżenia, zatem należy bezwzględnie pamiętać o użyciu tej opcji12Dzieje się to również bez ostrzeżenia

10

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

• -query -sprawdza, czy jesteśmy zapisani na listę

• -subscribe-user=domena.pl -zapisuje adres [email protected] (po potwierdzeniu)

• -index -odsyła tematy 200 ostatnich wiadomości z numerami

• -index.123 132 -odsyła tematy wiadomości o numerach 123-132

• -get.123 -odsyła wiadomość nr 123

• -get.123 132 -odsyła wiadomości 123-132

• -get -odsyła 30 ostatnich wiadomości

• -thread.45 -odsyła wątek, w którym jest wiadomość nr 45.

• -info -odsyła informację o liście

• -faq -odsyła FAQ listy.

Część z powyższych opcji może nie działać w zależności od konfiguracji (np. przy braku archi-wum czy pliku z FAQ). Jeśli lista jest skonfigurowana tak, iż listy mogą wysyłać tylko subskrybenci,zachodzi czasem potrzeba napisania na listę z innego (niezapisanego) adresu. Można go dodać samo-dzielnie wysyłając list na adres [email protected]ęcie polega na analogicznej czynności ze słowem „deny” zamiast „allow”. Jeśli zapisywaniei wypisywanie jest moderowane, żądanie potwierdzenia trafia najpierw do modenatora.

2.6. Pozostałe opcje

W niektórych listach zachodzi potrzeba dodawania do nagłówka rozsyłanych wiadomości wpisu„Reply-To” wskazującego na listę. W tym celu w należy zmodyfikować dwa pliki z katalogu listy.Do jednego z nich, headerremove, należy dodać:

reply-to

celem usunięcia istniejących wpisów, zaś do headeradd:

Reply-To: [email protected]

W ten sposób można dodawać i usuwać inne wpisy z nagłówków w zależności od potrzeby.Jeśli lista jest moderowana, moderatorzy otrzymują wszystkie wiadomości z tytułem „Moderate

for”. Jeśli moderator odpowie na tą wiadomość przez reply, zostanie ona przepuszczona. Jeśli życzysobie odrzucenia, musi w adresie zwrotnym zamienić słowo accept na reject. Jeśli moderatorów jestkilku, o losie wiadomości decyduje pierwsza odpowiedź od dowolnego moderatora.Każda lista posiada podkatalogi, do których zapisuje się adresy jak na samą listę. Są to:

• allow - lista adresów mogących pisać na listę, a nie zapisanych

• mod - lista moderatorów

• deny - baza adresów, od których wiadomości są odrzucane (przy opcji -k ezmlm-make)

• digest -przegląd wiadomości.

11

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

2.7. Przeglądy

Przeglądy (digests) są generowane z chwilą nadejścia wiadomości tylko wtedy, gdy liczba wiadomo-ści, ich objętość lub okres od ostatniej wiadomości przekracza ustalone wartości (standardowo 30wiadomości, 64 KB, 2 dni). Można ustawić regularne generowanie przeglądów w cronie, a sposóbna to jest przejrzyście wyjaśniony w dokumentacji.

3. Rozszerzenia qmaila

3.1. Rblsmtpd

RBL (Realtime Blackhole Listing) to ogólne określenie bazy zakazanych serwerów, prowadzonejw formie DNS. Istnieje kilka typów takich baz, w zależności od zawartości:

• bazy serwerów znanych z wysyłki spamu

• bazy serwerów open relay

• bazy adresów oraz adresów dialup

• bazy serwerów niezgodnych z normami RFC

• bazy serwerów znanych ze spamu, mailbombingu, włamań etc. (np. SPEWS).

Jeśli serwer pocztowy obsługuje RBL, sprawdza w czasie połączenia, czy łączący się IP znaj-duje się w bazie. Jeśli tak, poczta jest odrzucana. DNS jest doskonałym narzędziem do szybkiegoodpytywania takiej bazy. Np. jeśli chcemy sprawdzić adres 1.2.3.4, wystarczy zadać zapytanieDNS o wpis 4.3.2.1.domena.bazy.com. Jeśli odpowiedzią będzie adres 127.0.0.2, znaczy to, iż adresznajduje się w bazie, a więc połączenie powinno zostać zakończone komunikatem błędu.Niektóre rozwiązania dla qmaila zakładają sprawdzanie poczty już po zakolejkowaniu przez

qmail-smtpd, np. poprzez zastosowanie filtru z patchem QMAILQUEUE. Ma to jednak dwie wa-dy. Spam jest kolejkowany przed wygenerowaniem zwrotu (obciążenie serwera), ponadto zwrotygeneruje nasz serwer, często pod fikcyjne adresy.Najlepszym wyjściem jest odrzucanie listów z hostów wymienionych w bazach już na etapie

sesji SMTP, tak jak to robi rblsmtpd13. Do wersji 0.70 włącznie rozwijał się jako samodzielnyprojekt, potem został włączony do pakietu ucspi-tcp [2]. Aby korzystać z wszelkich dobrodziejstwprogramu, należy skompilować ten ostatni pakiet, lub też pozyskać wersję 0.70 i stosowne patche.Rblsmtpd jest pod względem konstrukcji przeźroczystym proxy, pośredniczącym pomiędzy de-

monem TCP/IP (np. inetd) a właściwym, dotychczas stosowanym demonem smtp. W momencienawiązywania połączenia sprawdza w bazie (lub bazach) adres, z którego owo połączenie przy-chodzi. Jeśli znajduje się ono na liście, zwraca komunikat błędu, po czym oczekuje na następnepolecenia protokołu SMTP, każde również kwitując błędem. Jeśli wszystko jest w porządku, wy-wołuje docelowego demona SMTP, który niezależnie prowadzi dalszą konwersację.Typowa instalacja qmaila zakłada istnienie w /etc/inetd.conf linijki o treści np.

smtp stream tcp nowait qmaild /usr/sbin/tcpd \

/var/qmail/bin/tcp-env /var/qmail/bin/qmail-smtpd

13Opisane tutaj rozwiązanie powoduje globalne odrzucanie poczty, zatem może być stosowane tylko na tam, gdziewszyscy użytkownicy wyrazili zgodę na takie jej filtrowanie.

12

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

Należy zamienić ją np. na:

smtp stream tcp nowait qmaild /usr/sbin/tcpd \

/var/qmail/bin/tcp-env /var/qmail/bin/rblsmtpd \

-r inputs.orbz.org /var/qmail/bin/qmail-smtpd

po czym zrestartować inetd. Ta prosta operacja powinna wystarczyć, aby wszystko pracowałosprawnie.Nowe wersje rblsmtpd pozwalają na specyfikację więcej niż jednej bazy RBL (do 8 włącz-

nie, jednak można tę liczbę zwiększyć poprzez zmianę stałej w rblsmtpd.c). Tymczasem linijka/etc/inetd.conf nie może mieć więcej, niż 255 znaków. Aby sobie poradzić z tym problemem,należy utworzyć skrypt shella, np. /var/qmail/bin/rbl, o przykładowej treści:

#!/bin/sh

exec \

/var/qmail/bin/rblsmtpd \

-r relays.ordb.org \

-r relays.osirusoft.com \

-r spews.relays.osirusoft.com \

-r xbl.selwerd.cx \

-r orbs.dorkslayers.com \

-r bl.spamcop.net \

-r blackholes.five-ten-sg.com \

-r inputs.orbz.org \

-r block.blars.org \

-r blacklist.spambag.org \

-r relays.visi.com \

-r dev.null.dk \

-r spammers.v6net.org \

-r dnsbl.njabl.org \

-r spamstop.atcom.net.pl \

$@

Skrypt zawiera wywołanie rblsmtpd z wszystkimi interesującymi nas bazami. Podany powyżejprzykład zawiera więcej niż 8 serwerów, a więc należy wybrać interesujące, lub zwiększyć górnągranicę w źródłach.Polecenie exec jest konieczne, aby proces shella został zastąpiony przez proces rblsmtpd. Inaczej

utworzy się proces potomy i całość nie będzie działać. Natomiast ciąg $@ (mało znana konstrukcjashella), to wszystkie parametry skryptu wejściowego, w tym przypadku dołączane do wywołaniarblsmtpd.Przeprowadzone próby wykazały, iż mimo uruchamiania rblsmtpd z wszystkimi podanymi w po-

wyższym skrypcie bazami, opóźnienie spowodowane ich odpytywaniem nie przekracza 20 sekund.Można sobie jeszcze na to pozwolić bez żadnych negatywnych konsekwencji dla transferu poczty.Jeśli domena ma kilka MX-ów, wszystkie powinny mieć zainstalowany rblsmtpd, inaczej w razie

awarii MX-a głównego filtrowanie przestanie działać.Skuteczność rblsmtpd zależy od zastosowanej bazy. W razie zastosowania kilku dobrych baz,

filtrowanie spamu jest bardzo sprawne. Przykład - po zainstalowaniu na serwerze, na który przy-chodziło dziennie ponad 10 spamów na większość kont, przez 5 dni działania nie pojawił się anijeden spam. Nie odnotowano również utraty jakiejkolwiek „chcianej” przesyłki.

13

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

3.2. Smtp-poplock

W przypadku, gdy z naszego serwera korzystają osoby wdzwaniające się przez modem, trzebaim umożliwić wysyłkę swoich listów. Standardowo qmail-smtpd pozwala na relaying wyłącznie zesztywno zadeklarowanych adresów. Konieczne jest rozwiązanie dodające do tej listy tymczasowoinne adresy, z których chwilowo pracują zainteresowane osoby.Smtp-poplock [4] otwiera relay’a tylko dla tych adresów, z których odbyła się zakończona powo-

dzeniem sesja POP3. Jeśli użytkownik chce wysyłać przez serwer listy, powinien sprawdzić pocztętym protokołem i od tego momentu ma możliwość wysyłania listów przez 10 minut.Pakiet składa się z kilku programów. Pierwszym z nich jest readlog, czytający ze standardowego

wyjścia plik logu demona POP3. Zawartością tego pliku można go „karmić” na kilka możliwychsposobów. Najczęściej ustawia się wszystko tak, że demon POP3 przekazuje dane do syslogd, któryzrzuca te dane do logu, a dodatkowo do potoku nazwanego (named pipe). Z tego potoku czytareadlog. Taką konfigurację zapewnia następujący wpis w pliku /etc/smtp-poplock.conf:

$readfile = "/var/smtp-poplock/fifo";

$readfile_isfifo = 1;

$logpopauth_where = "| /var/qmail/bin/splogger qmail-pop3d";

Aby syslog zapisywał do tego potoku, dodajemy następującą linijkę w /etc/syslogd.conf.

mail.* |/var/smtp-poplock/fifo

Po restarcie przez kill -1 syslogd przekazuje wszystkie komunikaty nie tylko do logu, ale i donazwanego potoku, który jest czytany przez program readlog. Wywołanie tego ostatniego trzebadodać do skryptów startowych systemu. Należy jeszcze dopisać do cron’a wywoływanie co minutępolecenia fifo-safety poprzez dopisanie do /etc/crontab:

* * * * * root fifo-safety

Bardziej skomplikowanym wariantem jest odczyt kolejnych wpisów z logu przez tail -f:

$readfile = "tail -f /var/log/maillog |";

$readfile_isfifo = 0;

$logpopauth_where = "| /var/qmail/bin/splogger qmail-pop3d";

Wariant ten jest wykorzystywany rzadko, gdyż jest mało wydajny i narzuca konieczność restartuprogramów w momencie rotacji logu (konfiguracja opisana w dokumentacji).Analiza logu polega na wyławianiu skutecznych połączeń POP3 i zapisywaniu adresów w /var/smtp-

poplock/dbfile.Za obsługę połączeń odpowiada program relaylock, który ma pod względem składni działanie

analogiczne do rblsmtpd. Jeżeli mamy w /etc/inetd.conf linijkę:

smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env \

/var/qmail/bin/qmail-smtpd

...wystarczy zamienić ją na:

14

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env \

/usr/sbin/relaylock /var/qmail/bin/qmail-smtpd

W zależności od wersji systemu składnia linijki może być nieco inna (np. dodatkowe wywołanietcpd). W tej sytuacji należy pozostawić wszystko bez zmian, dodając tylko wywołanie relaylockprzed qmail-smtpd.Program relaylock sprawdza adres IP, porównując go z listą tworzoną na podstawie analizy

logów. Jeśli adres znajduje się na liście, ustawia zmienną RELAYCLIENT, co umożliwia przyjęciepoczty.Jeśli qmail-smtpd uruchamiany jest przez tcpserver (wariant zalecany), należy zastosować na-

stępujące polecenie do uruchomienia:

supervise /var/run/qmail-smtpd \

tcpserver \

-u ‘ perl -e ’print scalar getpwnam qmaild’ ‘ \

-g ‘ perl -e ’print scalar getgrnam nofiles’ ‘ \

-c 40 -v 0 smtp \

/var/qmail/bin/tcp-env \

relaylock \

/var/qmail/bin/qmail-smtpd \

2>&1 | /var/qmail/bin/splogger smtpd 3 &

W trakcie pracy pakietu można zobaczyć poleceniem showallowed wszystkie umieszczone w ba-zie adresy, wraz z terminem ważności. Można również dodać pewne adresy na stałe, poprzez dopi-sanie ich do pliku /etc/smtp-poplock.satic allowed.

3.3. Qconfirm

Qconfirm jest programem służącym do specyficznej filtracji poczty [5]. Przepuszcza pocztę wyłącz-nie od określonej grupy nadawców, którzy już wcześniej do danej osoby pisali. Jeśli ktoś napiszelist po raz pierwszy, otrzymuje informację zwrotną, na którą musi odpowiedzieć. Dopiero wtedyjest dopisywany na listę uprawnionych nadawców, a list dostarczany do adresata. Rozwiązanie toma na celu eliminację niechcianych przesyłek.Instalacja programu polega na rozpakowaniu źródłowego tar.gz i jego kompilacji, która przebie-

ga bezproblemowo na większości systemów. Po instalacji o jego ewentualnym włączeniu decydujekażdy użytkownik.Pierwszym krokiem jest utworzenie w katalogu domowym podkatalogu .qconfirm z odpowied-

nią strukturą. Będą tam przechowywane adresy i wszystkie ustawienia. Czynimy to poleceniem:

qconfirm-conf ~/.qconfirm

Aby włączyć mechanizm weryfikacji, należy w pliku .qmail dodać linię:

|envdir .qconfirm/conf qconfirm-check

W zależności od konfiguracji naszej poczty linię tę trzeba dodać do jednego lub wielu plików.Można również dla pierwszych testów utworzyć plik np. .qmail-test i tylko tam umieścić wy-wołanie programu. Po pomyślnej konfiguracji i testowaniu tego tymczasowego adresu wywołaniewstawiamy w pozostałych plikach.

15

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

Nadejście listu spowoduje odesłanie prośby o potwierdzenie, której nagłówek i treść znajdujesię w .qconfirm/msg/request. Prośba ta wysyłana jest z rozszerzonego, niepowtarzalnego adresu,dla którego tymczasowo tworzony jest odpowiedni plik .qmail-.... List jest przechowywany doczasu potwierdzenia w kolejce qmaila (proces qmail-local otrzymuje kod tymczasowej niemożnościdostarczenia poczty). Nadejście odpowiedzi powoduje dodanie nadawcy do „dozwolonych” adre-sów, skasowanie tego pliku, oraz dostarczenie wiadomości do adresata. Nadawca otrzymuje wtedypotwierdzenie dostarczenia, o nagłówku i treści zawartej w .qconfirm/msg/acknowledge.Polecenie qconfirm list pending powoduje wyświetlenie adresów oczekujących w kolejce,

qconfirm list ok listuje adresy już dopuszczone, zaś qconfirm list bad wyświetla czarną listę.Obok adresów podana jest data i godzina wprowadzenia adresu na tę listę (czyli wysłania prośbydla pending i otrzymania potwierdzenia dla ok).Istnieje możliwość ręcznego zarządzania programem14. Oto przykłady:

• qconfirm accept [email protected] - wpisuje [email protected] na listę adresów dopusz-czonych. Jeśli jakieś listy z tego adresu oczekiwały w pending, zostają one dostarczone,a nadawca dostaje maila z adnotacją ręcznej akceptacji. Poleceniem tym można też dodawaćadresy, od których nigdy nie przyszły żadne wiadomości.

• qconfirm accept [email protected] - akceptuje wszystkie maile od [email protected].

• qconfirm accept ’.domena.pl’ - akceptuje maile z domeny domena.pl i wszystkich pod-domen.

• qconfirm accept ’[email protected]’ - akceptuje maile z listy [email protected], zarządzanej programem ezmlm.

• qconfirm bounce [email protected] - powoduje zwrot wiadomości od [email protected] to polecenie jednorazowe i nie powoduje dopisania na jakąkolwiek listę (następny mailznowu zaowocuje prośbą o potwierdzenie).

• qconfirm drop [email protected] - powoduje skasowanie wiadomości z tego adresu bez wy-generowania zwrotu; również nie dodaje do żadnej listy.

W katalogu .qconfirm/pending/ znajdują się pliki odpowiadające e-mailom nadawców. Qcon-firm sprawdza ich prawa dostępu i na tej podstawie decyduje o dalszym losie przesyłek. Dzięki temuistnieje prosty sposób na dostarczenie, odrzucenie, czy skasowanie wielu przesyłek naraz, poprzezwykonanie polecenia chmod na tych plikach. Odpowiednia operacja zależy od atrybutów:

• 0700 - dostarczenie (accept)

• 0200 - zwrot (bounce)

• 0000 - skasowanie (drop)

Zatem aby np. skasować wszystkie czekające wiadomości wystarczy napisać chmod 0000 /.qcon-firm/pending/*.Obsługa domen wirtualnych niesie za sobą konieczność niewielkiej modyfikacji konfiguracji.

Jeśli np. plik virtualdomains zawiera wpis:

domenka.org:user-domenka

14Operacje ręcznego potwierdzania, odbijania i kasowania wiadomości nie dzieją się w chwili ich wpisania, leczpóźniej, wraz z nadchodzeniem kolejnych przesyłek.

16

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

wówczas należy wpisać linijkę:

user-domenka-

do pliku user/.qconfirm/conf/QCONFIRM PREPEND.Qconfirm może również być wstępnym ogniwem weryfikacji nadawców piszących na listę dysku-

syjną opartą o ezmlm. Pierwszym krokiem jest polecenie qconfirm-conf katalog listy/.qconfirm,tworzące katalog konfiguracyjny listy. Jeśli lista jest otwarta i chcemy tylko potwierdzeń od osobypiszącej na nią pierwszy raz, wpisujemy na początek pliku .qmail-lista obsługującego listę:

|envdir lista/.qconfirm/conf qconfirm-check -mn

Jeśli tylko osoby zapisane mogą pisać na listę, linijka powinna ulec pewnej modyfikacji:

|envdir lista/.qconfirm/conf qconfirm-check -mn ezmlm-issubn ~/list-test

Niektóre prośby o potwierdzenie, generowane przez qconfirm, ze zrozumiałych względów niemogą trafić do nadawcy (spam, nieistniejące adresy). Odbijają się więc ponownie i trafiają dopostmastera. Lepiej jednak skorzystać z programu qconfirm-return, służącego do obsługi zwrotów.Na samym początku wybieramy adres do ich obsługi. Załóżmy, że konto [email protected] ma

obsługiwać zwroty na adresie [email protected]. Tworzymy na początku plik .qmail-bounces, w którym wpisujemy:

|qconfirm-return .qconfirm

...po czym tworzymy pusty katalog /.qconfirm/return. Do powyższego pliku należy dopisaćjeszcze drugą linijkę, opisującą postępowanie z pocztą, która nie będzie rozpoznana jako zwrot (np.kierujemy ją do jakiegoś pliku celem okresowego przejrzenia).Aby zwroty trafiały na ten adres, należy odnaleźć wpis Return-Path: <> w /.qconfirm-

/msg/request i zamienić go na:

Return-Path: <[email protected]>

W takiej konfiguracji kilkakrotne otrzymanie zwrotu zaowocuje automatycznym skasowaniem(dropping) wiadomości bez przetrzymywania jej w kolejce.Istnieje również możliwość zarządzania programem przy pomocy odpowiednio spreparowanych

e-maili. Służy do tego program qconfirm-control. Na początku należy utworzyć katalog /.qcon-firm/control/15. Następnie wybieramy adres, który będzie służył do obsługi, np. dla konta [email protected] może to być [email protected]. Aby adres uaktywnić, do .qmail-control-default wpisujemy:

|envdir .qconfirm/conf qconfirm-control

15Katalog ten musi mieć koniecznie zabrane prawa dla pozostałych użytkowników (np. drwxr-x---), inaczej będągenerowane zwroty z adnotacją „not authorized”. Szczegół ten nie jest nigdzie zaznaczony w dokumentacji, koniecznabyła analiza źródeł.

17

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

Ostatnim krokiem jest wskazanie adresu uprawnionego do wydawania poleceń administracyj-nych. Umieszcza się go w pliku /.qconfirm/conf/QCONTROL OWNER, np. poprzez polecenie:

echo ’[email protected]’ > ~/.qconfirm/conf/QCONTROL_OWNER

Zarządzanie kolejką rozpoczyna się wysyłając pusty list na adres [email protected](uwaga na kreskę przed @ !). Odpowiedź jest wysyłana do QCONTROL OWNER i ma następującąpostać:

2002-12-28_09:39:29 [email protected]

2002-12-28_09:03:30 [email protected]

2002-12-28_08:49:06 [email protected]

2002-12-28_07:34:58 [email protected]

2002-12-28_06:46:52 [email protected]

2002-12-28_06:18:07 [email protected]

2002-12-28_04:13:46 [email protected]

2002-12-28_04:05:55 [email protected]

Odpowiadamy na to np. tak:

> 2002-12-28_09:39:29 [email protected]

> 2002-12-28_09:03:30 [email protected]

> 2002-12-28_08:49:06 [email protected]

bounce

> 2002-12-28_07:34:58 [email protected]

accept

> 2002-12-28_06:46:52 [email protected]

> 2002-12-28_06:18:07 [email protected]

> 2002-12-28_04:13:46 [email protected]

> 2002-12-28_04:05:55 [email protected]

drop

thanks.

Nasze żądania są przetwarzane przez qconfirm-control, co owocuje następującym mailem:

18

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

>> 2002-12-28_09:39:29 [email protected]

>> 2002-12-28_09:03:30 [email protected]

>> 2002-12-28_08:49:06 [email protected]

> bounce

[email protected]: bounce.

[email protected]: bounce.

[email protected]: bounce.

>> 2002-12-28_07:34:58 [email protected]

> accept

[email protected]: accept.

>> 2002-12-28_06:46:52 [email protected]

>> 2002-12-28_06:18:07 [email protected]

>> 2002-12-28_04:13:46 [email protected]

>> 2002-12-28_04:05:55 [email protected]

> drop

[email protected]: drop.

[email protected]: drop.

[email protected]: drop.

[email protected]: drop.

>

> thanks.

Removing temporary authorization.

Stopping processing here.

W treści maila z komendami można umieszczać komendy typu accept [email protected], copozwala na dodawanie adresów innych, niż na liście oczekujących.

3.4. Qdated

Pakiet ten pozwala na generowanie adresów o określonym terminie ważności [6]. Adresy takiesą bezużyteczne dla spamera. Każdy adres zawiera precyzyjnie określoną chwilę wygenerowania,tzw. stempel czasowy (timestamp), oraz kryptograficzną sumę kontrolną, uniemożliwiającą prostestworzenie aktualnie ważnego adresu.Instalacja polega na wykonaniu następujących poleceń:

tar xfvz qdated-0.51.tar.gz

cd mail/qdated-0.51

package/install

Po instalacji konieczne jest wygenerowanie klucza kryptograficznego, który będzie użyty dogenerowania adresów. Każdy użytkownik ma własny klucz, zatem każdy musi zrobić to we własnymzakresie. W tym celu wykonujemy polecenie qdated-makekey, bez żadnych parametrów. Zapisujeono losowy klucz kryptograficzny w pliku ~/.qdated-key. Zaleca się wykonanie kopii zapasowejtego pliku16.Kolejnym krokiem jest ustalenie prefiksu dla używanych adresów. Załóżmy, że użytkownik

[email protected] chce, aby jego adresy miały format [email protected]. Wystarczywięc stworzyć plik .qmail-qdated-default z regułami dotyczącymi takiej poczty. Jako pierwsząlinię wstawiamy po prostu:16Brak tego pliku lub niemożność odczytu zaowocuje domyślnym dostarczaniem wszystkich przesyłek, jednak powygenerowaniu nowego klucza stare adresy przestaną działać.

19

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

|qdated-check

Polecenie to ma opcjonalny argument, określający czas (w sekundach) ważności adresu odmomentu jego wygenerowania. Standardowo jest to 604800 sekund, czyli tydzień.Aby wygenerować adres, wpisujemy po prostu polecenie qdated-now. Jego wynik wygląda

np. tak:

$ qdated-now

1028027846.jsidheon

$

W tym przypadku pełny adres ma postać [email protected]ąg cyfrowy zawiera moment utworzenia, wyrażony w sekundach (epoch time). Uzupełnia gociąg liter, będący rezultatem zaszyfrowania tego ciągu kluczem z ~/.qdated-key. Bez znajomościtego klucza (a zwykle nie ma doń dostępu nikt poza właścicielem) nie da się uzyskać aktualnego,ważnego w danym momencie adresu.Aby pisać z dynamicznie generowanych adresów przy użyciu mutta, należy do wywoływać

następująco:

mutt -e "my_hdr From: User <user-dated-‘qdated-now‘@domena.pl>"

Podaną powyżej linijkę można wstawić do pliku .muttrc, jednak przez cały czas pracy programubędzie używany jeden adres, stworzony w momencie uruchamiania.Istnieje możliwość zamieszczenia aktualnego adresu na stronie www. W katalogu domowym

użytkownika powinien znaleźć się skrypt, wpisujący aktualny adres i datę do dwóch plików w ka-talogu strony. Skrypt ten wywołujemy z cron’a (regularne uruchamianie), lub też dopisujemy napoczątek plików .qmail (uruchamianie w momencie nadejścia poczty, wtedy skrypt musi zwra-cać 0). Oto przykładowy kod skryptu:

#!/bin/sh

echo "<a href=\"mailto:user-qdated-‘qdated-now‘@domena.pl\">" \

> ~/www/email.inc

echo "user-qdated-‘qdated-now‘@domena.pl</a>" >> ~/www/email.inc

date > ~/www/date.inc

Pliki tworzące się w katalogu strony (zawierające adres i datę jego utworzenia) można wtedywłączać do treści poprzez instrukcję include języka PHP lub analogiczną dyrektywę SSI.

3.5. Pozostałe dodatki

Opisane powyżej rozszerzenia to oczywiście nie wszystko. Pełny wykaz wszystkich dodatków, pat-chy i innych drobiazgów znajduje się zawsze na stronie domowej qmaila [1]. Zasoby te czynią tenMTA szybkim, stosunkowo bezpiecznym17 i bardzo uniwersalnym narzędziem.

17Każdy patch założony na kod źródłowy może to bezpieczeństwo obniżać, więc można tak powiedzieć tylkoo kompilacji kodu bez żadnych poprawek.

20

Łukasz Komsta Qmail - bezpieczny i wydajny MTA

Literatura

[1] Qmail - http://www.qmail.org.

[2] Rblsmtpd - http://cr.yp.to/ucspi-tcp/rblsmtpd.html

[3] Ezmlm-idx - http://www.ezmlm-idx.org/.

[4] Smtp-poplock - http://www.davideous.com/smtp-poplock/.

[5] Qconfirm - http://smarden.org/qconfirm/

[6] Qdated - http://www.palomine.net/qdated/

[7] Bernstein, D. J. Moving large sites to qmail, http://cr.yp.to/qmail/sendmail.html.

[8] Gregg, Paul. Single-UID based POP3 box. http://www.tibus.net/pgregg/projects/qmail/single-uid-howto.html.

[9] http://www.qmail.org/qmail-smtpd-relay-reject

[10] http://www.nrg4u.com/

[11] http://www.arctic.org/ dean/patches/qmail-0.95-liberal-lf.patch

[12] Włodarz, Joachim. J. Qmail: bezpieczny MTA nie tylko dla Linuksa. LinuxPlus 4/97, str: 6-8.

[13] Andree, M. Qmail bugs and wishlist. http://www-dt.e-technik.uni-dortmund.de/˜ ma/qmail-bugs.html.

[14] Komsta Ł. Zamiast sendmaila. Część 1 - Qmail. LinuxPlus 2000;44(12):36-8.

[15] Komsta Ł. Ezmlm - menedżer list dyskusyjnych. LinuxPlus 2001;47(3):25-6.

21