Postfix+SASL
wersja 1.5
 

Spis treści

ChangeLog
1. W czym tkwi problem ?
2. Czego potrzebujemy ?
3. Jeszcze kilka uwag

4. Cyrus
5. Postfix
6. Razem
7. Inne
8. Lewi nadawcy
9. Debian woody
10. Uwagi od adminów

Posłowie


ChangeLog

Zmiany od wersji 1.2:
- opis konfiguracji dla Debiana "woody"
   (podziękowania dla Dariusza R.)
- nowy punkt: Uwagi od adminów
Zmiany od wersji 1.0:
- uaktualniono dla cyrus-sasl-2.x.x
   (podziękowania dla Gabriela K.)
- "lewi nadawcy" (punkt nr 8)
- kilka poprawek (pierdoły)


1. W czym tkwi problem ?

Hmmm... Skoro czytasz ten dokument, mam nadzieję, że nie muszę
tego wyjaśniać. Jeśli jednak tak nie jest, oto krótkie wprowadzenie:
pocztę można wysyłać na różne sposoby. Ostatnio bardzo popularne stało
się wysyłanie listów przez cudze serwery poczy oraz wysyłanie listów
podszywając się pod kogoś. Nie trzeba dużej wyobraźni ani sprytu
żeby robić takie rzeczy ani żeby wymyślić jakie skutki może to
spowodować. Rozwiązaniem na tego rodzaju problemu jest
uwierzytelnienie użytkownika przed wysłaniem poczty.

Inaczej: jeśli ktoś chce wysłać list jako heniek@serwer.pl,
przed wysłaniem listu serwer wymaga podania hasła Heńka.

Proste i skuteczne. Rozwiązuje to przy okazji masę innych problemów,
ale nie o nich chce tu pisać tylko o ich rozwiązaniu. Skorzystam jeszcze z
okazji, i podziękuję SzAmO za jego cenne uwagi.


2. Czego potrzebujemy ?

Na początek pozwolę sobie zauważyć, że testowałem wszystko na moim
ulubionym Slackware 8.0. Soft, którego użyłem:

POSTFIX w wersji 1.1.6 (2002.03.26)
CYRUS-SASL w wersji 1.5.27 lub odpowiednio 2.1.10 (zalecany)

Jeszcze uwaga, którą dostałem od Orest'a (thx !): w przypadku
dystrybucji Mandrake należy najpierw odinstalować binarki cyrus-sasl oraz
libsasl* (nie zastosowanie się do tego grozi "segmentation fault"). Potem
już spokojnie można zainstalować sobie cyrusa ze źródełka.

Oki. Teraz standardowo: do jakiegoś katalogu rozpakowujemy kod źródłowy
jednego i drugiego. Najpierw weźmiemy w obroty Cyrusa.


3. Jeszcze kilka uwag

Istnieją dwa sposoby skonfigurowania SASL'a, a Ty musisz się zdecydować na
jeden z nich. Hasła użytkowników, przy uwierzytelnianiu mogą być przechowywane
albo w osobnym pliku sasl'a (/etc/sasldb) albo mogą być brane z pliku /etc/shadow

Sposób pierwszy:
- tylko admin może zmienić hasło dla użytkownika
- użytkownik ma dwa hasła: jedno do shella i pop3 (odbiór poczty) i drugie
do wysyłania poczty. Mogą być takie same, ale po zmianie tego pierwszego
użytkownik może się pogubić
+ podsłuchanie hasła poczty wychodzącej nie daje intruzowi dostpu do shella
+ łatwo zablokować userowi wysyłanie listów i pozostawić tylko odbieranie

Sposób drugi:
Jest zupełnie odwrotnie niż w przypadku pierwszego.
Zwiększone ryzyko dostępu do shella, gdy ktoś próbuje "zgadnąć hasło"

A teraz zrób sobie przerwę (np. na papierosa), pomyśl o innych plusach i
minusach, o tym, co będzie lepsze dla Twoich użytkowników, o pokoju na
świecie i zdecyduj się albo na to, albo na to. Generalnie sposób drugi
pracuje "bezobsługowo" dla admina a jeśli ktoś potrafi przechwycić hasło
poczty wychodzącej, równie dobrze może przechwycić hasło pop3 lub ftp.
Z drugiej strony, jeśli użytkownik nie ma dostępu do shella, ftp itp.
to dlaczego nie dać mu dwóch różnych haseł ?

Chwila refleksji: jeszcze nie spotkałem się z tak popieprzoną dokumentacją
jak tą od cyrusa. Połowa rzeczy przeterminowana, drugiej połowy nie ma, w
doc'ach dla postfixa piszą o czym innym niż w cyrusie, w Sieci jeszcze inne
rzeczy...jednym słowem można ocipieć.


4. Cyrus

Wchodzimy do katalogu z rozpakowanym cyrusem (1.x) i wydajemy polecenie:

make clean - dla zasady - miałem przez to problemy - i sedno:
./configure --enable-login --enable-plain --with-gnu-ld --with-pwcheck
Dla cyrusa serii 2.x sprawa wygląda tak:
./configure --enable-login --enable-plain --with-gnu-ld --with-saslauthd

Krótkie omówienie powyższych opcji:
--enable-login :wymagane do prawidłowej pracy Outlook Express 5.x
Bill nie dopilnował i chłopaki coś spieprzyli...
--enable-plain :niektóry soft tylko w ten sposób potrafi się zalogować
--with-gnu-ld :bez tego możesz później dostać "generic fault".
Co za syf, ile ja się męczyłem żeby na to wpaść...
--with-pwcheck (dla 1.x) lub --with-saslauthd (dla 2.x)
:jeśli zdecydowałeś się na użycie haseł z /etc/shadow
Jeśli nie, możesz to pominąć. Jeśli się wahasz, dodaj to, łatwo przeskoczyć
potem na shadow.

Jeszcze cenna wskazówka, którą dostałem od ViNYLa (thx!):
Gdy ./configure wyrzuci błąd "brak pliku krb.h"
należy dodać parametr --disable-krb4. Błąd ten jest bowiem
spowodowany brakiem kerberosa. Oczywiśnie nie jest on niezbędny do
normalnego funkcjonowania postfixa i nikomu nie jest potrzebny ;).

Dobra jest, teraz standardowo: make i make install.

Kolejny krok:
Cyrus 1.x: utwórz link z /usr/local/lib/sasl (bo tu się domyślnie
zainstaluje) do /usr/lib/sasl (bo tutaj będzie szukany):
ln -s /usr/local/lib/sasl /usr/lib/sasl
Cyrus 2.x: utwórz link z /usr/local/lib/sasl2 (bo tu się domyślnie
zainstaluje) do /usr/lib/sasl2 (bo tutaj będzie szukany):
ln -s /usr/local/lib/sasl2 /usr/lib/sasl2

Jedziemy dalej z koksem: jeśli w pliku /etc/ld.so.conf nie masz wpisu
/usr/local/lib, to zrób go teraz. Po prostu wpisz to w nowej linijce,
zapisz zmiany, wydaj polecenie ldconfig, dysk trochę pomieli i będzie
git. Na wszelki wypadek wyloguj się i zaloguj.

Teraz w /usr/lib/sasl/ (odpowiednio /usr/lib/sasl2/)
musisz utworzyć plik smtpd.conf.
Jeśli chcesz korzystać z osobnej bazy haseł i userów umieść tam:
dla wersji 1.x: pwcheck_method: sasldb
a dla wersji 2.x: pwcheck_method: auxprop

Jeśli chcesz korzystać z /etc/shadow, umieść tam:
dla wersji 1.x: pwcheck_method: pwcheck
dla wersji 2.x: pwcheck_method: saslauthd

Zapisz zmiany. To jedyna potrzebna linijka w tym pliku.
Dobra, na razie wystarczy z cyrusem...


5. Postfix

Mam nadzieję, że posiadasz przynajmniej podstawową wiedzę nt. konfiguracji
Postfixa. Jeśli nie, odpuść sobie, zajrzyj na moją stronę, przeczytaj i
przećwicz sobie "Podstawy konfiguracji" i zacznij czytać w tym miejscu.

Na początek smutna wiadomość (choć pewnie już dawno się domyśliłeś):
Postfixa trzeba od nowa przekompilować z dodatkowymi opcjami. Na
wszelki wypadek zrób sobie backup /etc/postfix/ (o ile go używasz).
Dobra, wchodzimy do katalogu z rozpakowanym źródełkiem postfixa. Wydajemy
polecenie make tidy a następnie przechodzimy do sedna sprawy:

Dla cyrusa wersji 1.x:
make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/local/include" AUXLIBS="-L/usr/local/lib -lsasl"
Dla cyrusa wersji 2.x:
make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/local/include/sasl" AUXLIBS="-L/usr/local/lib -lsasl2"
Dla utrudnienia to wszystko w jednej linii, następnie make i make install.

Teraz jest dobry czas na to, żeby przywrócić swoje stare konfigi i zobaczyć,
czy wszystko działa. Teraz postfix powinien normalnie wysyłać pocztę, reagować
na zmiany w konfigach itp. Jeśli jest to twój pierwszy kontakt z Postfixem,
czytasz nie to, co trzeba

Czas zamieszać w main.cf. W sumie nie będzie tego dużo...
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = permit_sasl_authenticated
, reject, check_relay_domains

Pierwszej linijki nie muszę komentować, druga pozwala sasl'ować się starszym
klientom poczty, (m.in. Outlook Express 4.x) które mają niedociągnięcia,
trzecia nie pozwoli robić nam koło pióra a czwarta zostanie jeszcze
omówiona niżej.
No i to by było tyle...


6. Razem

Okej, czas to wszystko sprawdzić. Jeśli masz jakieś problemy, miej logi
i patrzaj w logi
. Najpierw sprawdzamy Postfixa - postfix start.
Jeśli się wystartował, nie jest źle. Jeśli nie poszedł, zobacz do logów i
skoryguj błąd. Może to tylko literówka przy parametrze...
Aby sprawdzić, czy jest git, wystarczy telnetować się na port postfixa:

telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
220. serwer.pl ESMTP Postfix

ehlo localhost
250 - serwer.pl
250 - PIPELINING
.................
250 - AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 - AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
.................

Jeśli widzisz te linijki z AUTH, jest w porządeczku :).
Jeśli ich nie widzisz, może w parametrach kazałeś nie wywalać EHLO
Jest coś takiego, już nie pamiętam...

Teraz chwila dla Cyrusa.
a) ---------- użytkownicy i hasła w osobnym pliku

Sasl 1.x:
Ten plik to /etc/sasldb. Sprawdź, czy istnieje, jak nie, utwórz go.
Użytkowników dla poczty tworzy się tak:
saslpasswd -c heniek
gdzie heniek, to nazwa użytkownika, jego login. Zmiana hasła wygląda tak:
saslpasswd heniek.
Domyślnie konto tworzone jest dla użytkowników dla
domeny $myhostname, z main.cf. Jeśli obsługujesz kilka domen:
saslpasswd -c -u serwer.pl heniek

To utworzy konto dla heniek@serwer.pl. Analogicznie zmienia się jego hasło.
Aby przyblokować konto, tzn. hasło, robisz:
saslpasswd -d heniek

Sasl 2.x:
Ten plik to /etc/sasldb2. Zostanie on utworzony automatycznie.
Będziesz musiał zmienić jego prawa tak, żeby był read/write dla użytkownika
postfix (tego, z którego prawami działa Postfix). To po pierwsze.

Po drugie: wykorzystując polecenie saslpasswd2 do edycji użytkowników
prawdopodobnie będziesz musiał za każdym razem podać ręcznie jego domenę.
Dzieje się tak dlatego, że Sasl 1.x wykorzystywał domyślną domenę $myhostname
z pliku main.cf, natomiast wersja 2.x wykorzystuje polecenie systemowe
'hostname' - a to prawdopodobnie będzie niepełną (np. polska zamiast polska.pl).
nazwą domenową.

Do rzeczy: użytkowników dla poczty tworzy się tak:
saslpasswd2 -c -u polska.pl heniek
gdzie heniek, to nazwa użytkownika, jego login a domena to polska.pl
Zmiana hasła wygląda tak:
saslpasswd2 -u polska.pl heniek
Aby przyblokować konto, tzn. hasło, robisz:
saslpasswd2 -d -u polska.pl heniek

b) ---------- użytkownicy i hasła z /etc/shadow

Sasl 1.x:
Działa to tak: jest sobie cały czas demon pwcheck, dostaje hasło,
robi z nim co trzeba i zatwierdza autoryzacje lub nie.
1. Tworzysz katalog /var/pwcheck (mkdir /var/pwcheck).
2. Przy starcie systemu uruchamiasz (budzisz :) demona:
pwcheck &
Ważny jest ampersand ( & ) na końcu, bez niego wał przestaje zaraz działać.
Można go odpalić też w każdej chwili z linii poleceń...
3. Startujesz postfixa: postfix start

Sasl 2.x:
Działa to tak: jest sobie cały czas demon saslauthd, dostaje hasło,
robi z nim co trzeba i zatwierdza autoryzacje lub nie.
1. Tworzysz katalog /var/state/saslauthd (mkdir /var/state/saslauthd).
2. Przy starcie systemu uruchamiasz (budzisz :) demona:
saslauthd -a shadow
3. Startujesz postfixa: postfix start
Jeśli masz od groma użytkowników równolegle sprawdzających pocztę,
możesz zwiększyć liczbę demonów sasl'a: służy temu parametr -n [liczba].
Domyślnie działa w tle pięć sztuk.

I jeszcze uwaga ku przestrodze (THX dla Michała W. i Piotra B.):
to odnośnie pwcheck i niektórych dystrybucji (np. Debian), w których
pakiet postfix-tls jest chroot'owany (występuje wtedy error socketa dla pwcheck).
Rozwiązanie: należy zamiast utworzenia katalogu /var/pwcheck utworzyć
/var/spool/postfix/var/pwcheck a następnie link do niego:
ln -s /var/spool/postfix/var/pwcheck /var/pwcheck.
Teraz powinno być git (/var/pwcheck jest tak naprawdę /var/spool/postfix....).
Analogicznie dla saslauthd, tyle że zmiany dotyczą katalogu /var/state/saslauthd.


Czas na Outlook Express.
Menu --> Narzędzia --> Konta --> Właściwości -->Serwery
Zaznacz "Serwer wymaga uwierzytelnienia" i kliknij "Ustawienia"
i zaznacz "Użyj tych samych..." lub "Zaloguj używając".
Oczywiście twój e-mail wychodzący ma mieć adres i
użytkownika domeny $myhostname lub tego, co dałeś przy -u.
Dobra, Outlook to żadna filozofia. Najważniejsze to sprawdzić, czy działa.
A powinno działać... Przeładuj jeszcze postfixa.


7. Inne

Poruszę jeszcze opcję smtpd_security_options. Tak więc mamy:
noanonymous - nie pozwala na anonimowe wysłanie poczty. Prawdę
mówiąc nie orientuję się na czym dokładnie to polega ale bez tego można
chyba przesłać list podając się za anonymousa. Chyba.
noplaintext - nie pozwoli przesłać niezaszyfrowanego hasła.
nodictionary - nie pozwoli na atak słownikowy. Nie wiem w jaki
sposób "will not use methods that are vulnerable to dictionary attack"
noactive - nie pozwoli na atak nie-słownikowy, aktywny. Tu już
zupełnie nie czaję.

Teraz uwaga, która dostałem od SzAmO (thx!): przy ustawieniu nodictionary
i noactive SASL może nie działać a w logach pojawi się "no SASL
authentication mechanisms". Jesli ktos wie o co tu biega, prosze o info.
Tak wogólę to z tymi ograniczeniami radzę nie przesadzać...
Jeśli wyłączasz plaintexty, wyłącz też anonimousa. Szczegóły w dokumentacji.

Kolejna uwaga od SzAmO: jesli uzywasz Amavisa z Postfixem, ustaw
permit_mynetworks przed permit_sasl_authenticated w
smtpd_recipient_restrictions ponieważ Amavis nie używa autoryzacji.

Obiecałem, że wrócę do smtpd_recipient_restrictions... No to wracam.
Ważna jest tutaj kolejność, i tak: smtpd_recipient_restrictions =
permit_sasl_authenticated, check_relay_domains

- każe każdemu się zalogować, uwierzytelnić
permit_mynetworks, permit_sasl_authenticated, check_relay_domains
- lokalni nie muszą się logować, tylko ci z zewnątrz
Jesli cos nie gra i dalej idzie wysylac poczte bez zalogowanie, na koncu
(lub w odpowiednim miejscu) mozesz dorzucic reject.

Chcę tylko powiedzieć, że mieszając tym paramatrem możemy ustawić to, co
trzeba. Opcje parametru znajdują się w "Podstawach konfiguracji" na mojej
stronie - te bardziej sensowne - oraz w dokumentacji postfixa - wszystkie.
Jeśli masz sprawdzanie poczty przez www (i jej wysyłanie) zamieszaj tak,
żeby localhost łączył się bez hasła przy wysyłaniu a inne musiały się
logować. Jak widzisz - jest sporo możliwości i wszysko zależy od Twojej
wyobraźni. Dobra, kończę, bo zaczynam pisać od rzeczy...


8. Lewi nadawcy

A już myślałem, że będzie spokój... Uwagę na problem zwrócił Kocurek
Nawet gdy działa SASL, pojawia się pewien problem: załóżmy, że wśród userów
mamy użytkownika czesiek. Ale kawał z niego wała i wyczaił on, że
po autoryzacji (dla użytkowika czesiek) może on w polu "nadawca" wpisać
cokolwiek, podając także dowolny adres zwrotny maila. Czyli autoryzuje się,
ale wysyła list jako admin@serwer.pl (a nie czesiek@serwer.pl) i pisze, że
"w tym miesiącu opłatę za stałe łącze kierujemy do Cześka". Czaisz o co chodzi,
a ja opiszę tu rozwiązanie tego problemu:

Bierzemy w obroty main.cf i wpisujemy (dopisujemy) następujące
linijki:

smtpd_sender_login_maps = hash:/etc/postfix/login_maps
smtpd_sender_restrictions = reject_sender_login_mismatch


Ten pierwszy plik nazwij sobie jak chcesz. W tej drugiej linijce nie zrób
literówki przy "m-i-s-m-a-t-c-h". Oczywiście parametr ten możesz dopisać do
innych. Generalna składnia pliku login_maps wygląda tak:

adres_emailowy      login_sasl

w naszym przypadku:

czesiek@serwer.pl      czesiek

lub, gdy nie mamy kilku domen (obsługujemy pojedyńczą):

czesiek      czesiek

Teraz po autoryzacji jako czesiek będzie można wysłać e-maila z
adresem zwrotnym tylko jako czesiek@serwer.pl. I jest fajnie, już
nikt nie będzie nam robił "koło pióra". Co więcej, komunikat o błędzie
zajebiście wygląda :)

Pozostaje wydać polecenie postmap /etc/postfix/login_maps a następnie
uruchomić/przeładować Postfixa (postfix reload).


9. Debian woody

Duże podziękowania należą się Dariuszowi R.
który jest autorem niniejszego punktu. Przedstawia on opis
instalacji Postfixa z SASLem na "gołym woodym" wyłącznie na paczkach:

================================================
Witam.
Poniewaz na grupie dosc znaczna ilosc postow ma podobny temat, garsc
informacji w jaki sposob ja zmusilem do dzialania sasla z postfixem
z paczek Debiana 3.0

W zasadzie to References: <1690.00000315.3e8c67d6@newsgate.onet.pl>
bylo bardzo pomocne ale w trakcie wykorzystywania informacji
zauwazylem pewna rzecz, o ktorej ponizej. Zanim jednak przejde dla
tych co moga miec trudnosci z odnalezieniem wspomnianego postu:

[cytata]-----------------------------------------------------------
Pewnego dnia, a było to 3 Apr 2003 18:56:55 +0200, przyszła do mnie
wiadomość z adresu i powiedziała:
> Czy ktos mogl by podac jak zrobic uwiezytelnianie (sasl) dla postfixa
> pod debianem za pomoca pakietow (apt-get install)-chyba bedzie latwiej
> i dalsza konfiguracje bo mecze sie z tym juz dlugo i nic mi nie wychodzi,
> przejzalem juz duzo stron jak to zrobic ale mi nie idzie (min.
> http://linio.terramail.pl/ps.html), a w dodatku na kazdej innej stronie jest
> inaczej napisane jak to zrobic:(


apt-get install postfix-tls cyrus-common libsasl-modules-plain
update-alternatives --config pwcheck
(wybrać pwcheck_pam).
echo "pwcheck_method: pwcheck\nmech_list: plain login\n" > /etc/postfix/smtpd.conf
ln -sf /var/state/pwcheck /var/run


Potem konfiguracja /etc/postfix/main.cf i bangla.
To wszystko oczywiście przy założeniu, że chcesz autoryzować używając
haseł systemowych.
eloy
[/cytata]
-----------------------------------------------------------------------
Tyle Eloy, teraz moje obserwacje ;)
Podczas instalacji pakietu cyrus-common skrypt tworzy w
/usr/sbin/pwcheck symlinka do /etc/alternatives/pwcheck. Dzieki temu
za pomoca update-alternatives mozemy wybrac albo pwcheck_standard albo
pwcheck_pam. Wszystko pieknie pod warunkiem, ze nie mamy w systemie
pakietu sasl-bin. Pakiet ten zawiera pwcheck, ktorego umieszcza wlasnie
w /usr/sbin/pwcheck, a co za tym idzie skrypty z cyrus-common nie beda
mogly utworzyc symlinka do /etc/alternatives/pwcheck, a zarazem
/etc/init.d/pwcheck bedzie uruchamial nam pwchecka z pakietu sasl-bin.

Tak wiec nalezy pozbyc sie albo pakietu sasl-bin albo zmienic sobie
nazwe /usr/sbin/pwcheck na jakas inna, utworzyc symlinka do
/etc/alternatives/pwcheck itp itd. Wiadomo chyba o co chodzi.

Na co jeszcze zwrocic uwage. pwcheck_pam z cyrus-common korzysta z
pliku /etc/pam.d/cyrus a nie /etc/pam.d/smtp.

To chyba wszystko. Reszta tak jak w http://linio.terramail.pl/ps.html

!!!UWAGA!!! Pamietajcie ze w Debianie postfix jest chrootowany. Jesli
cos nie dziala, sprobujcie w master.conf ustawic unpriv i chroot na "no"
(czyli literka "n", samo "-" nie zalatwia sprawy).

smtp inet n n n - - smtpd
================================================


10. Uwagi od adminów

Dziękuję wszystkim niżej wymienionym osobom ("sponsorom")
za przekazane mi uwagi dotyczące instalacji Postfixa z SASLem.
Proszę o kolejne!

---------- mandrake & red hat ----------
        sponsor: Arkadiusz P.

jeśli wyświetla komunikat o braku db.h należy doinstalować pakiet:
libdb4.0-devel-4.0.14-6mdk.i586.rpm
dla RH jest to pakiet db4-devel

---------- smtpd_sasl_local_domain ----------
        sponsor: Arkadiusz W.

Zmorą, z którą walczyłem to zostawienie linijki
smtpd_sasl_local_domain =
pustą. Jeśli wpisałem tam faktyczną domeme to za
każdym razem dostawałem komunikat
SASL LOGIN authentication failed.

---------- debian ----------
        sponsor: |ufo| & Warden

Należy zmienić jeszcze zapis w master.cf:
#smtp inet n - - - - smtpd
  smtp inet n - n - - smtpd

Defaultowo w linijce z smtp jest w kolumnie chroot literka "n".
Nalezy to zmienic i dac "-". Bez tego przy odpaleniu
saslauthd -a shadow -m /var/spool/postfix/var/run/saslauthd/mux
i probie autoryzacji dostajemy error
postfix/smtpd[9118]: warning: SASL authentication failure:
cannot connect to saslauthd server



Posłowie

Jest to pierwsza wersja tego dokumentu i zawiera pewnie
jakieś błędy/niedoróbki/potknięcia itp. Będę bardzo wdzięczny
za wszelkie uwagi, komentarze, poprawki, wyrazy wdzięczności.
Z góry przepraszam za powyższe i mam nadzieję, że będziecie mnie
informować w których miejscach coś nie gra.
Jako (częściowe) wytłumaczenie przedstawiam fakt, że większość tej
pracy powstawała w późnych godzinach nocnych.

Ostatnia wersja tego dokumentu znajduje się pod niżej wymienionym adresem.
Kontakt ze mną: linio@terramail.pl
Wesprzyj finansowo autora - kliknij tutaj


 
===============================
Henryk Liniowski, Poznań 2003
http://linio.terramail.pl
===============================