2010 01 Zabawa w SSHowanego [Administracja]

background image

Rozwiązania

Zabawa w SSHowanego

42

styczeń 2010

Rozwiązania

Zabawa w SSHowanego

43

www.lpmagazine.org

lin

ux

@

so

ftw

ar

e.

co

m

.p

l

Zabawa

w SSHowanego

W czasach gdy niemal każdy komputer podłączony jest do sieci, czy to niewielkiej domowej
lub osiedlowej, czy też do Internetu niesłychanie ważnym zagadnieniem staje się zapewnienie
bezpieczeństwa komunikacji między stacjami roboczymi. Protokół SSH, dzięki silnej ochronie
kryptograficznej, znakomicie się do tego nadaje. Artykuł ma na celu przybliżenie czytelnikowi
szerokich możliwości oferowanych przez SSH również w mniej znanych zastosowaniach takich jak
przekierowanie portów i tworzenie tuneli.

Wojciech Terlikowski

Z

SSH zetknął się chyba każdy, kto pracował z
systemami linuksowymi. Bezpieczna powło-
ka (secure shell) towarzyszy większości ad-
ministratorów w wykonywaniu codziennych

obowiązków, jest również niezastąpiona dla wielu użyt-
kowników wszędzie tam, gdzie szybko i sprawnie trzeba
wykonać jakieś czynności na zdalnym systemie, a jedno-
cześnie mieć poczucie bezpieczeństwa jakie daje szyfro-
wany protokół.

Szyfrowany telnet

Kiedy po raz pierwszy miałem okazję korzystać z zaso-
bów Internetu, jeszcze w latach dziewięćdziesiątych ubie-
głego stulecia, do zalogowania się na zdalne serwery uży-
wałem telnetu.

Jest to proste narzędzie, pozwalające na otwarcie sesji

na innym komputerze w sieci. Połączenie do serwera tel-
netu umożliwia wykonywanie poleceń na zdalnym syste-
mie. Rozwiązanie to ma jednak wadę, która zadecydowała
o jego niemal całkowitym zaniku, przynajmniej w środowi-
skach uniksowych i uniksopodobnych, w tym w Linuksie.
Słabością, która zadecydowała o wyparciu telnetu między

innymi przez SSH jest brak szyfrowania transmisji, szcze-
gólnie dotkliwy podczas procesu uwierzytelniania.

Taka luka bezpieczeństwa pozwala na podsłuchanie se-

sji i zdobycie informacji nie tylko o tym jakie polecenia wy-
konujemy na zdalnym systemie, ale również poznanie na-
szego loginu i hasła, co może w konsekwencji prowadzić do
przejęcia kontroli nad naszym kontem. Przeprowadzenie ta-
kiego ataku nie wymaga głębokiej wiedzy ani bardzo skom-
plikowanych narzędzi. Wystarczy prosty program podsłu-
chujący ruch w sieci (sniffer) jakich wiele bezpłatnych moż-
na znaleźć w Internecie. Używanie telnetu było do zaakcep-
towania w sieciach, których użytkownicy mieli do siebie du-
żo zaufania i nie obawiali się, że ktoś będzie chciał się wła-
mać do ich komputera. Pamiętam, że jeszcze na początku
studiów do niektórych serwerów wydziałowych mieliśmy
dostęp przez telnet, ale z czasem był on zastępowany przez
SSH. Wówczas była to jeszcze nowość, ale dająca więcej
bezpieczeństwa, bo szyfrowana.

Trochę historii

Protokół SSH został opracowany w połowie lat dziewięć-
dziesiątych na Politechnice w Helsinkach przez jednego z

background image

Rozwiązania

Zabawa w SSHowanego

42

styczeń 2010

Rozwiązania

Zabawa w SSHowanego

43

www.lpmagazine.org

pracowników naukowych – Tatu Ylönena jako
odpowiedź na atak, polegający na podsłuchaniu
i przechwyceniu haseł przesyłanych przez pro-
tokoły nieszyfrowane. Celem projektu było za-
stąpienie narzędzi takich jak telent, rlogin i rsh
przez rozwiązania podobne, ale zapewniające
wyższy stopień bezpieczeństwa dzięki ochro-
nie kryptograficznej. Po piętnastu latach może-
my powiedzieć, że niewielu linuksowym admi-
nistratorom zdarza się wykorzystywać rlogin,
czy rsh

,

są pewnie i tacy, którzy nie wiedzą,

że coś takiego istniało, natomiast niemal wszy-
scy znają SSH.

Kilka lat po opracowaniu pierwszej wer-

sji protokołu powstała, najpopularniejsza
obecnie, implementacja zarówno serwera jak
i klienta – OpenSSH. Projekt ten jest rozwi-
jany przez zespół OpenBSD na licencji BSD.
Wolna licencja jak również bogactwo możli-
wości jakie daje OpenSSH

,

pozostając w peł-

nej zgodności ze specyfikacją protokołu, za-
pewniły tej implementacji dużą popularność.
Obecnie OpenSSH jest wykorzystywane przez
wiele systemów operacyjnych jak Sun Solaris,
Mac OS X, BSD, Novell Netware, IBM AIX,
HP UX, urządzenia sieciowe Cisco, Juniper,
HP, Dell, Alcatel oraz niemal wszystkie dys-
trybucje Linuksa.

Niedawno ukazała się nowa wersja

OpenSSH 5.3. Chociaż nie wnosi ona znacz-
nych zmian do programu, to ma znaczenie hi-
storyczne, ponieważ została wydana dziesięć
lat po powstaniu projektu i publikacji pierw-
szej wersji produktu.

Zabawa się rozpoczyna

Jak wspomniałem, OpenSSH jest dostępne
w repozytoriach niemal każdej dystrybucji Li-
nuksa, więc zainstalowanie go nie stanowi żad-
nego problemu. SSH to program sieciowy dlate-
go do przetestowania go potrzebować będziemy
sieci komputerowej, a w najprostszym przypad-
ku dwóch komputerów. Jeden z nich posłuży za
serwer SSH, nazwijmy go bolek, drugi to kom-
puter biurkowy – lolek, na którym zainstalujemy
klienta SSH. Z tej maszyny będziemy się logo-
wać do bolka. Oba komputery pracują pod kon-
trolą dystrybucji Debian GNU/Linux dlatego by
zainstalować serwer OpenSSH należy wykonać
na

bolku

:

jas@bolek$ sudo aptitude install
openssh-server

natomiast na

lolku

instalujemy klienta pole-

ceniem:

jan@lolek$ sudo aptitude install
openssh-client

Podczas instalacji serwera warto zwrócić uwa-
gę na moment przedstawiony na Rysunku 2

Metody generowania kluczy i kryptografia

asymetryczna mogą być temetem osobnego arty-
kułu, tu skupię się na kwestiach najistotniejszych
dla użytkownika. Przede wszystkim, klucz pry-
watny jest tajny i może być znany tylko właści-
cielowi, w tym wypadku serwerowi SSH. Klucz
publiczny jest jawny, ale stanowi parę do prywat-
nego i dlatego oba muszą być wygenerowane ra-
zem. W związku z tym klucze nie mogą być do-
starczane z pakietem oprogramowania, jak na
przykład plik z domyślną konfiguracją, ale trze-
ba je wygenerować każdorazowo podczas insta-
lacji programu. Ponowna instalacja OpenSSH,
związana np. ze zmianą dystrybucji, spowoduje,
że powstanie nowa para kluczy. Spowoduje to,
że odciski palca (fingerprints) serwera zapamię-
tane przez klientów staną się niekatulane i będzie
je trzeba zaktualizować.

Po pomyślnie zakończonej instala-

cji przystępujemy do konfiguracji serwera

OpenSSH. Będziemy modyfikować prosty,
tekstowy plik z konfiguracją: /etc/ssh/sshd_
config
. Bezpieczeństwo wymaga, aby serwer
używał protokołu w wersji drugiej (SSH-2).
Zapewnia to wpis Protocol 2. W pierwotnej
specyfikacji wykryto poważne luki bezpie-
czeństwa, dlatego została zastąpiona przez
SSH-2. Wersja druga nie tylko jest bezpiecz-
niejsza od SSH-1, ale dodaje do protoko-
łu nowe możliwości. Wspierają ją wszyst-
kie współczesne klienty SSH. Obie wersje
nie są ze sobą kompatybilne i czasami trzeba
w kliencie wymusić użycie SSH-1 jeśli bę-
dziemy chcieli połączyć się z serwerem, któ-
ry nie wspiera SSH-2. Na szczęście takich
serwerów jest coraz mniej.

Drugą opcją konfiguracyjną, którą zmieni-

myna serwerze jest wyłączenie możliwości lo-
gowania na konto roota. W tym celu wystarczy
wpis

PermitRootLogin no

. W dalszym ciągu

możemy wykonywać czynności administra-
cyjne logując się przez SSH na konto zwykłe-

Rysunek 1.

Popularność różnych implementacji ssh od czasu pojawienia się OpenSSH. Wyraźnie widać,

że OpenSSH z ponad 80% udziałem jest zdecydowanie najczęściej używaną implementacją. Źródło: [3]

Rysunek 2.

Instalacja serwera OpenSSH. Widoczny moment generowania kluczy kryptograficznych

background image

44

styczeń 2010

Rozwiązania

Zabawa w SSHowanego

45

www.lpmagazine.org

Rozwiązania

Zabawa w SSHowanego

go użytkownika, a następnie uzyskując upraw-
nienia roota poprzez skorzystanie z polecenia

su -

lub odpowiednio skonfigurowanego pa-

kietu sudo. Takie ograniczenie wydaje się nie-
potrzebnym utrudnieniem dla użytkowników
sieci lokalnych, ale jest bezwzględnie zaleca-
ne jeżeli serwer ma być dostępny z Interne-
tu. Potwierdzają to moje własne doświadcze-
nia. Zdarzyło mi się, że w kilka minut po pod-
łączeniu nowego serwera do Internetu znala-
złem w dzienniku systemowym ślady dziesią-
tek nieudanych prób zalogowania przez SSH
na konto roota podejmowanych przez kompu-
tery z całego świata. Gdybym nie zablokował

tej możliwości, przypuszczalnie musiałbym
odłączyć komputer od Sieci i zacząć usuwać
skutki włamania.

Po takich zmianach ustawień należy zre-

startować usługę ssh:

jas@bolek$ sudo /etc/init.d/ssh
restart

Domyślna konfiguracja klienta jest wystarcza-
jąca, ale w razie potrzeby można ją zmienić
modyfikując plik /etc/ssh/ssh_config na kom-
puterze lolek. Podobnie jak na serwerze jest to
prosty plik tekstowy.

Teraz możemy połączyć się przez lolka

z serwerem SSH bolek. Robimy to wydając
polecenie:

jan@lolek$ ssh jas@bolek

lub:

jan@lolek$ ssh bolek -l jas

gdzie

bolek

jest serwerem, na który się loguje-

my, natomiast

jas

to identyfikator użytkowni-

ka na tym serwerze. Zamiast nazwy komputera
(hostname) można podać jego adres IP lub peł-
ną nazwę domenową np. bolek.example.com,
co jest konieczne gdy komputer znajduje się
w Internecie w zupełnie innej domenie niż na-
sza. Jeśli na obu systemach używamy tego sa-
mego loginu można go nie podawać przy na-
wiązaniu połączenia, wtedy SSH zaloguje nas
na konto o takiej samej nazwie jak lokalne.

Jeśli pierwszy raz łączymy się do serwe-

ra, SSH wyświetli odcisk palca (patrz rys. 3)
i zapyta czy na pewno na tej maszynie chce-
my otworzyć sesję. Po potwierdzeniu tożsa-
mości serwera zostaniemy zapytani o hasło na
komputerze

bolek

, a jego odcisk palca zosta-

nie zapisany w pliku ~/.ssh/known_hosts. Od
tej pory, jeśli serwer zmieni odcisk zostanie-
my o tym poinformowani przy próbie logo-
wania (patrz Rysunek 3). Sytuacja taka nastę-
puje gdy serwer został zastąpiony nową ma-
szyną, lub gdy nastąpiła reinstalacja systemu,
w tym pakietu OpenSSH. Zazwyczaj admi-
nistratorzy powiadomią nas wcześniej o ta-
kim zdarzeniu. Jeśli mamy pewność, że odcisk
faktycznie się zmienił i łączymy się z właści-
wym komputerem należy usunąć linijkę z pli-
ku ~/.ssh/known_hosts o numerze podanym w
komunikacie. W naszym przypadku jest to li-
nia numer 7. Przy kolejnej próbie logowania
zostaniemy poproszeni o akceptację odcisku
palca nowego klucza.

Po poprawnym zalogowaniu możemy

pracować na serwerze bolek, wydając pole-
cenia jakbyśmy mieli otwartą lokalną konso-
lę. Sesję kończymy komendą

exit

lub skró-

tem klawiszowym [Ctrl+D] tak samo jak
w przypadku pracy lokalnej.

Czy używanie ssh jest równie wygodne

jak praca lokalna? A co z aplikacjami graficz-
nymi? Spróbujmy uruchomić grę Kmahjongg.

Niestety, próba zakończy się wyświetle-

niem komunikatu błędu cannot connect to X se-
rver
, co oznacza , że serwer X nie znalazł odpo-
wiedniego miejsca do wyświetlenia graficznego
okienka gry. Nie wyświetli go w tekstowej kon-
soli, w której działa ssh, może jednak wykorzy-
stać do tego graficzny pulpit komputera

lolek

.

Rysunek 3.

Połączenie do SSH po zmianie odcisku palca. Po usunięciu wpisu z ~/.ssh/known_hosts znów

jesteśmy proszeni o potwierdzenie tożsamości serwera

Rysunek 4.

Przykład zastosowania ssh do tunelowania X11. Gra Kmahjongg uruchomiona na zdalnym

serwerze

background image

44

styczeń 2010

Rozwiązania

Zabawa w SSHowanego

45

www.lpmagazine.org

Rozwiązania

Zabawa w SSHowanego

Taki efekt można osiągnąć przez odpowiednią
konfigurację X11, tak by programy uruchamia-
ne na bolku były wyświetlane na ekranie lolka.
Można również wykorzystać do tego SSH. Pro-
tokół ten, daje możliwość przekierowania X11
(X11 forwarding), z której skorzystamy. Wy-
starczy rozpocząć nową sesję SSH dodając
przy uruchamianiu przełącznik

-X

:

jan@lolek$ ssh -X bolek -l jas

Operacja taka ustawia przekierowanie X11
na klienta SSH i sprawia, że programy gra-
ficzne działające na bolku będą wyświetla-
ły swe okna na lolku. Starujemy ponownie

kmahjongg

:

jas@bolek$ kmahjongg &

Dodanie znaku

&

, powoduje uruchomienie

gry w tle, tak by nie blokować dostępu do
konsoli na

bolku

. Po chwili na ekranie kom-

putera

lolek

pojawi się się okienko Kmah-

jongg. Inną opcją, pozwalającą na przekiero-
wanie X11 jest

-Y

, tak zwane zaufane prze-

kierowanie X (trusted X forwarding). Jest
ono mniej bezpieczne, ponieważ nie spełnia
wszystkich standardów bezpieczeństwa na-

kładanych przez protokół X, czasem użycie
tej opcji może okazać się konieczne. Jeśli za-
chodzi potrzeba uruchomienia wielu progra-
mów graficznych na zdalnym komputerze, to
wartym rozważenia rozwiązaniem jest VLC.
Za jego pomocą można udostępnić cały gra-
ficzny pulpit klientowi usługi. W wielu przy-
padkach może to okazać się wygodniejsze
i bardziej efektywne od zastosowania prze-
kierowania X. SSH jest wciąż bardzo popu-
larną i często jedyną tego typu usługą dostęp-
ną na serwerze.

Nie tylko zdalna sesja

Poznaliśmy już możliwości protokołu SSH
związane z pracą na zdalnym systemie, ale
co zrobić gdy chcemy przenieść pliki z jedne-
go komputera na drugi? W przypadku plików
tekstowych można je skopiować do schow-
ka i wkleić do edytora otwartego na zdal-
nym komputerze. Może to być nawet wy-
godne dopóki nie pojawi się konieczność
kopiowania dużych plików, lub zbiorów bi-
narnych. Rodzina protokołów RSH miała w
tym celu RCP, którego używało się podob-
nie jak zwykłego kopiowania plików polece-
niem

cp.

Ponadto istnieje protokół FTP, słu-

żący do transferowania plików między kom-
puterami w sieci, jednak żaden z nich nie szy-
fruje transmisji. Na szczęście w rodzinie pro-
tokołów SSH znalazły się ich odpowiedniki:
SCP – bezpieczne kopiowanie (secure copy)
i SFTP – bezpieczny protokół transferu pli-
ków (secure file transfer protocol). Tego dru-
giego nie należy mylić z FTPS – rozszerze-
niem FTP. Zarówno SCP jak i SFTP są szy-
frowane i zapewniają takie samo bezpieczeń-
stwo transmisji jak SSH. Oba są dostarcza-
ne z OpenSSH, więc żeby z nich korzystać
nie musimy niczego instalować dodatkowo.

Polecenia

scp

używamy podobnie jak zwy-

kłego

cp

:

jan@lolek$ scp jas.jpeg jas@bolek:
/tmp/

Jak widać na przykładzie różnicą jest człon

ja-

s@bolek:

wskazujący, że kopiowanie ma odby-

wać się do katalogu na serwerze bolek z upraw-
nieniami użytkownika

jas

. Należy zwrócić

uwagę na dwukropek (

:

) rozdzielający część

sieciową od ścieżki w systemie plików. Je-
śli chcemy skopiować plik w przeciwną stronę
z serwera bolek na komputer

lolek

, robimy to

poleceniem:

jan@lolek$ scp jas@bolek:/tmp/
obraz.png ./obrazek.png

Spowoduje to skopiowanie pliku /tmp/
obraz.png
do bieżącego katalogu i nadanie mu
nazwy obraz.png. Jedną z bardziej użytecz-
nych opcji używanych z

scp

jest

-r

. Pozwala

ona na rekurencyjne skopiowanie całego kata-
logu wraz z zawartością. Polecenie:

jan@lolek$ scp -r jas@bolek:/etc/ ./

skopiuje całą zawartość katalogu /etc na ser-
werze bolek do bieżącego katalogu. Składnia

scp

dopuszcza również użycie znaków spe-

cjalnych powłoki np.:

jan@lolek$ scp jas@bolek:~/zdjecia/
*.jpeg ~/

skopiuje wszystkie pliki o rozszerzeniu jpeg
(*.jpeg) z katalogu zdjecia do katalogu domo-
wego lokalnego użytkownika. Symbole wystę-
pujące w ścieżkach serwera są interpretowane

Rysunek 5.

Okno programu gftp z otwartą sesją SSH

Listing 1.

Przykładowy skrypt zmieniający konfi-

gurację wielu serwerów za pomocą SSH

for

SERVER in bolek reksio uszatek

koralgol

do

ssh jas@

$SERVER

'echo

nameserver 10.12.15.254 > /etc/
resolv.conf'

done

Listing 2.

Generowanie kluczy kryptograficz-

nych wykorzystywanych do autoryzacji w SSH

jan@lolek

$

ssh-keygen

Generating public/private rsa key
pair.
Enter file in which to save the key
(/home/jan/.ssh/id_rsa):
Created directory

'/home/jan/

.ssh'

.

Enter passphrase (empty

for

no

passphrase):
Enter same passphrase again:
Your identification has been saved
in /home/jan/.ssh/id_rsa.
Your public key has been saved in
/home/jan/.ssh/id_rsa.pub.
The key fingerprint is:
2d:4f:15:7b:60:51:66:ac:5b:90:32:
58:83:a1:b4:28 jas@lolek

background image

46

styczeń 2010

Rozwiązania

Zabawa w SSHowanego

47

www.lpmagazine.org

Rozwiązania

Zabawa w SSHowanego

przez jego powłokę nie przez

scp

. W wyniku

czego skrypt, korzystający z takich symboli bę-
dzie działał różnie z różnymi maszynami w za-
leżności od tego jaki system pracuje po stronie
serwera i jakiej powłoki używa. Takiego uza-
leżnienia od platformy nie ma drugi z wymie-
nionych protokołów służących do kopiowania
plików. SFTP, bo o nim mowa, pozwala na in-
teraktywną pracę na zdalnym systemie plików
podobnie jak FTP. Logujemy się poleceniem:

jan@lolek$ sftp jas@bolek

a następnie za pomocą poleceń takich jak

get

i

put

możemy kopiować pliki z i na serwer. Jeśli

ktoś preferuje pracę w środowisku graficznym
to może skorzystać z jednej z wielu graficznych
nakładek na SFTP takich jak

gftp

czy

WinSCP

.

Użycie SSH w skryptach

W pracy administratora (i nie tylko) bardzo li-
czy się umiejętność automatyzacji zadań. Je-

śli uda się napisać skrypt, który wykona za nas
chociaż część żmudnej pracy to zaoszczędzo-
ny czas możemy poświęcić na przyjemniejsze
zajęcia, na przykład czytanie ostatniego nume-
ru Linux+. Przypuśćmy, że administrujemy
siecią, w której właśnie zmienił się adres ser-
wera DNS. Nowy adres to 10.12.15.254. Mu-
simy teraz zmienić konfigurację wszystkich
serwerów w sieci, modyfikując zawartość pli-
ku /etc/resolv.conf. Jeśli są to trzy serwery to
można zalogować się na każdy z nich osobno i
ręcznie wykonać polecenie:

echo 'nameserver 10.12.15.254' >
/etc/resolv.conf

Kiedy będzie ich kilkadziesiąt to zadanie takie
staje się żmudne i czasochłonne. Ponadto nie
trudno tu o pomyłkę. Z pomocą w takiej sy-
tuacji przychodzi nam SSH. Pozwala ono na
wykonanie polecenia w trybie wsadowym, bez
otwierania interaktywnej sesji, a po zakończe-

niu powraca do powłoki klienta, z której zosta-
ło wywołane.

jan@lolek$ ssh jas@bolek 'echo
nameserver 10.12.15.254 > /etc/
resolv.conf'

Takie polecenie powoduje wywołanie komendy

echo

na serwerze

bolek

z przekierowaniem wyj-

ścia do pliku /etc/resolv.conf na tymże serwerze,
a następnie powrót do powłoki na

lolku

. W re-

zultacie zawartość pliku /etc/resolv.conf zostanie
zmieniona na

nameserver 10.12.15.254

, czy-

li to co chcieliśmy osiągnąć. Teraz wystarczy wy-
wołać skrypt dla każdego z naszych serwerów i
rekonfiguracja gotowa.

Bardzo wygodne, prawda? Jednak skrypt

nie działa tak sprawnie jak byśmy sobie tego
życzyli, ponieważ przy logowaniu do każde-
go z serwerów trzeba podawać hasło. I na to
jest rada. Uwierzytelnienie przez podanie ha-
sła nie jest jedyną możliwością w SSH. Ist-
nieje wariant logowania przez klucz publicz-
ny (public key) oraz za pomocą GSSAPI. To
ostatnie pozwala na zarządzanie autoryzacją
w SSH za pośrednictwem zewnętrznych me-
chanizmów, takich jak Kerberos. Skupmy się
na metodzie klucza publicznego, ponieważ jest
prosta i nie wymaga od nas używania dodatko-
wego oprogramowania. Najpierw musimy mieć
parę kluczy, która będzie identyfikować nasze-
go klienta, czyli użytkownika

jan

na kompute-

rze

lolek

, logującego się na konto jaś na kom-

puter

bolek

. Do generowania kluczy użyjemy

programu

ssh-keygen

dostarczanego razem

z OpenSSH. Hasło (paraphrase) do klucza po-
zostawiamy puste.

Następnie kopiujemy wygenerowany

klucz publiczny do pliku .ssh/authorized_keys
w katalogu domowym użytkownika, na które-
go będziemy się logować na serwerze

bolek

.

jan@lolek$ ssh jas@bolek 'mkdir ~/
.ssh/'
jan@lolek$ scp ~/.ssh/id_rsa.pub
jas@bolek:~/.ssh/authorized_keys

Przy wykonywaniu polecenia

scp

po raz ostat-

ni podajemy hasło. Następne logowanie do

bolka

będzie możliwe już bez hasła. Dzię-

ki temu możemy wykonać skrypt sprawniej,
gdyż nie będzie wymagał od nas ingerencji
i podawania haseł.

Bardzo pomocne przy administrowaniu

komputerem, są potoki (pipes). Dzięki nim
możemy łączyć możliwości wielu niedużych
programów jak na przykład cat, grep czy wc
w skomplikowane narzędzia. W SSH również
nie mogło zabraknąć obsługi potoków. Załóż-

Rysunek 7.

Konfiguracja Firefoksa do użycia serwera pośredniczącego

Rysunek 6.

Zastosowanie odwrotnego tunelu SSH do połączenia do serwera znajdującego się za zapo-

rą ogniową

��������

������

��������

������

�������

������

����������

���������

������������������

���������������������

�������������

���

����

background image

46

styczeń 2010

Rozwiązania

Zabawa w SSHowanego

47

www.lpmagazine.org

Rozwiązania

Zabawa w SSHowanego

my, że uruchamiamy program i chcemy, by
wszystkie jego krytyczne komunikaty (zaczy-
nające się od

ERROR:

) były zapisywane na zdal-

nym serwerze. Rejestrowanie zdarzeń z kry-
tycznych usług na innych komputerach jest do-
brą praktyką bezpieczeństwa. Bardziej zaawan-
sowane konfiguracje można osiągnąć za pomo-
cą demona syslog. W tym momencie wystarczy
nam proste użycie SSH.

jan@lolek$ ./skrypt.sh | grep
'^ERROR:' | ssh jas@bolek 'cat >>
/var/log/skrypt.log'

Przy użyciu potoków łączymy funkcjonalności
programu grep

,

który wybiera tylko interesują-

ce nas komunikaty ssh, zapewniającego trans-
fer logów na inny serwer i cat

,

zapisującego je

do pliku logów.

Kopię zapasową serwisu www można wy-

konać poleceniem:

jan@lolek$ tar -czf - /var/www/* |
ssh jas@bolek 'cat > ~/backup/backup_
www.tar.gz'

Alternatywnym rozwiązaniem jest spakowanie
plików lokalnie, a następnie przesłanie paczki
za pomocą SCP. Wersja z użyciem potoku jest
jednak bardziej elegancka i oszczędza nam za-
mieszania z tymczasowym plikiem archiwum.
Istnieje również opcja OpenSSH, pozwalają-
ca na kompresję przesyłanego strumienia da-
nych. Włącza się ją za pomocą przełącznika

-C

. W czasach rozpowszechnienia sieci szero-

kopasmowych nie jest to często używana opcja,
ale niekiedy może usprawnić pracę. Zwłaszcza
wtedy, gdy trzeba będzie przesyłać dobrze kom-
presujące się dane, np. pliki tekstowe, przez sieć
o niedużej przepustowości.

Wchodzimy w tunel

Tunele sieciowe są potężnym i bardzo wygod-
nym narzędziem, dzięki któremu można zabez-
pieczyć transmisję protokołów nieszyfrowanych
oraz ominąć niektóre ograniczenia wprowadzo-
ne przez zapory ogniowe. W SSH tunele realizo-
wane są za pomocą przekierowania portów (port
forwarding
). Rozważmy prostą sytuację, w której
dzięki tunelowaniu, uzyskamy bezpieczny dostęp
do nieszyfrowanej usługi pocztowej. Na serwe-
rze wydziałowym mamy konto pocztowe i kon-
to powłoki dostępne przez SSH. Niestety admi-
nistrator udostępnił pocztę tylko przez nieszyfro-
wane protokoły POP3 i SMTP. Jeśli nie chcemy,
aby nasze dane były przesyłane niezabezpieczo-
nym kanałem możemy posłużyć się SSH. Naj-
prostszym rozwiązaniem jest zalogowanie się
do powłoki serwera i obsługa poczty przez je-

den z zainstalowanym tam klientów konsolo-
wych. Na dłuższą metę okaże się to niezbyt wy-
godne. Uciążliwa będzie na przykład obsługa za-
łączników, wymagająca przesyłania plików mię-
dzy serwerem a komputerem domowym. Do za-
stosowania wygodniejszego rozwiązania, wyko-
rzystującego przekierowanie portów SSH, po-
trzebna nam będzie podstawowa wiedza na te-
mat konfiguracji protokołów pocztowych. Wy-
starczy wiedzieć, na którym porcie słucha tune-
lowana usługa. Najprostszym źródłem informa-
cji na ten temat jest plik /etc/services. Można do-
wiedzieć się z niego, że protokołowi POP3 odpo-
wiada port 110, zaś SMTP – 25. W przykładach
z tunelami połączenia SSH będą nawiązywane w
obie strony – również do naszego komputera do-
mowego, więc przyda się zainstalowanie na nim
serwera OpenSSH.

Polecenie pozwalające na zabezpiecze-

nie transmisji SMTP będzie wyglądało na-
stępująco:

jan@lolek$ ssh jas@poczta.naszauczeln
ia.edu.pl -L 8025:localhost:25

Składnia komendy jest trochę skomplikowana.
Pierwsza część

ssh

jas@poczta.naszauczel-

nia.edu.pl jest już znana. Opcja

-L

oznacza, że

SSH będzie nasłuchiwać na lokalnym porcie o
numerze 8025 i to jest jeden koniec tunelu. Dru-
gi podawany jest po dwukropku w postaci host:
port, w naszym przypadku

localhost:25

. Na-

leży zaznaczyć, że zamiast 8025 można wy-
brać którykolwiek z wolnych portów, jednak do
użycia numerów 1024 i mniejszych trzeba mieć
uprawnienia roota. Kolejną ważną i powodują-
cą prawdopodobnie najwięcej nieporozumień
rzeczą jest nazwa hosta na drugim końcu tune-
lu. Jest ona podawana względem komputera, na

który się logujemy, czyli w tym przypadku local-
host oznacza

poczta.naszauczelnia.edu.pl

.

W ten sposób zestawiliśmy szyfrowany tunel
z lokalnego portu 8025 do portu 25 na wydzia-
łowym serwerze poczty. Skoro nauczyliśmy się
już tunelowania możemy przekierować drugi
port – ten do odbierania poczty.

jan@lolek$ jas@poczta.naszauczelnia.
edu.pl -L 8025:localhost:25 -L 8100:
localhost:110

Teraz wystarczy skonfigurować ulubionego
klienta poczty i wskazać mu localhost:8025 ja-
ko serwer SMTP do wysyłania poczty, zaś lo-
calhost:8110 do jej odbierania. Dzięki temu mo-
żemy jednocześnie cieszyć się komfortowym
korzystaniem z poczty i bezpieczeństwem ja-
kie daje ochrona kryptograficzna kanału. War-
to przy tym pamiętać, że tunel działa tak dłu-
go jak długo otwarta jest sesja SSH, po zakoń-
czeniu połączenia do localhost:8025 i localhost:
8110 przestaną działać.

Gdy już poznaliśmy podstawy tuneli za-

łóżmy bardziej skomplikowaną sytuację. We-
wnątrz sieci akademickiej znajduje się ser-
wer, na którym wykonujemy projekt serwisu
WWW. Mamy dostęp do niego zarówno przez
SSH na standardowym porcie 22 jak i HTTP na
porcie 80, ale tylko z komputerów w sieci wy-
działowej. Co zrobić gdy chcemy popracować
nad projektem siedząc w domu? Możemy za-
logować się przez SSH na serwer pocztowy,
z którego mamy bezpośredni dostęp do kompu-
tera projektowego. Nie jest to jednak zbyt wy-
godne, ponieważ na obu tych serwerach mamy
do dyspozycji wyłącznie przeglądarki tekstowe,
które nie wspierają nowoczesnych technologii
WWW takich jak Java Script czy CSS. Najwy-

Listing 3.

Plik konfiguracyjny tsocks.conf

local

= 192.168.0.0/255.255.255.0

local

= 10.0.0.0/255.0.0.0

server

= 127.0.0.1

server_type

= 5

server_port

= 8080

Listing 4.

Instalacja pakietu tsocks na serwerze w DMZ

jan@firmowy

$

wget http://ftp.icm.edu.pl/pub/Linux/debian/pool/main/t/

tsocks/tsocks_1.8beta5-9.1_amd64.deb
jan@firmowy

$

scp tsocks_1.8beta5-9.1_amd64.deb jan@serwerfirmowy:~/

jan@firmowy

$

ssh jan@serwerfirmowy

jan@serwerfirmowy

$

su -

jan@serwerfirmowy#

cd

~jan

jan@serwerfirmowy#dpkg -i tsocks_1.8beta5-9.1_amd64.deb

background image

48

styczeń 2010

Rozwiązania

Zabawa w SSHowanego

49

www.lpmagazine.org

Rozwiązania

Zabawa w SSHowanego

godniej byłoby użyć lokalnego Firefoksa z Fi-
rebugiem i innymi dodatkami, ale bezpośrednio
na adres serwera projektowego się nie połączy-
my. W takiej sytuacji możemy zestawić tunel
SSH za pomocą polecenia:

jan@lolek$ ssh jas@poczta.naszaucze
lnia.edu.pl -L 9080:projekty:80 -L
9022:projekty:22

Teraz, po wpisaniu adresu

http://localhost:

9080/janek/

przeglądarka wyświetli projekt

strony, nad którym można dalej bez przeszkód
popracować. Dostęp do powłoki serwera pro-
jektowego uzyskujemy przez SSH:

jan@lolek$ ssh localhost -l janek -p
9022

gdzie janek to nazwa naszego użytkownika
na serwerze projektowym, a opcja -p pozwala
otworzyć połączenie na porcie innym niż stan-
dardowy 22, w tym wypadku na 9022.

Czasem zabezpieczenia sieci wydziałowej

są bardziej rygorystyczne i nie pozwalają na
logowanie się na serwer projektowy z serwe-
ra pocztowego. Wtedy, by móc pracować nad
projektem z domu, potrzebny będzie komputer
domowy z serwerem SSH osiągalny z sieci In-
ternet. W czasie pobytu na uczelni musimy do-
stać się do komputera projektowego i otworzyć
z niego sesję SSH na serwerze domowym za
pomocą polecenia.

janek@projekty$ ssh -R 9022:
localhost:22 jan@lolek.mojadomena.pl

Opcja -R oznacza, że zestawiony zostanie tu-
nel odwrotny z

lolka

na serwer projektowy.

Po powrocie do domu można wykorzystać ten
tunel by zalogować się bezpośrednio do kom-
putera projektowego wywołując komendę:

jan@lolek$ ssh localhost -l janek -p
9022

oraz zestawienia drugiego tunelu po por-
tu HTTP.

jan@lolek$ ssh localhost -l janek -p
9022 -L 9080:localhost:80

Znów składnia polecenia staje się nieco skom-
plikowana. Czytelnika może zaniepokoić uży-
cie localhost. Część

ssh localhost -l ja-

nek -P 9022

jest już znana i wbrew pozo-

rom powoduje zalogowanie na serwer projek-
towy mimo, iż używamy adresu

localhost

,

co sugerowałoby raczej lokalny komputer. Tu-
nel odwrotny łączy port 9022 hosta lokalnego
i port SSH maszyny projektowej, dlatego te-
raz połączenie do localhost:9022 otwiera se-
sję na zdalnym komputerze. Druga część po-
lecenia również jest nam znana: otwiera tunel
z portu 9080 lokalnego komputera na port 80
komputera z którym się łączymy. Tu

local-

host

oznacza serwer projektowy. Podobnego

polecenia użyliśmy przy zabezpieczaniu pro-
tokołów pocztowych.

Bardzo często nasz komputer domowy

nie ma stałego adresu IP i nie można mu wte-
dy przypisać nazwy DNS. W takiej sytuacji na-
leży skorzystać z usługi dynamicznego DNS
oferowanego np. przez serwis dyndns.org. Po-
lega ona na przypisaniu komputerowi o zmien-
nym adresie IP stałej nazwy DNS. Dzięki temu
można nawiązać z nim połączenie SSH nawet
jeśli nie wiemy jaki aktualnie ma adres. Sytu-
acja jest bardziej skomplikowana, gdy ani ser-
wer projektowy ani nasz komputer domowy
nie są osiągalne z Internetu. Możliwe jest wte-
dy użycie publicznie dostępnego serwera SSH,
np. jednego z serwisów oferujących bezpłat-
ne konta na maszynach uniksowych i linukso-
wych [7]. Warto zwrócić uwagę na to czy regu-
lamin serwera nie zabrania używania go w ce-
lu zestawiania tuneli i proxy. W wielu serwi-
sach jest to zabronione, bo powoduje wzmożo-
ny ruch sieciowy.

Skoro wiemy już wiele na temat uzyski-

wania dostępu do zabezpieczonej sieci za po-

mocą przekierowania portów SSH warto roz-
ważyć kilka przypadków jak z podobnie za-
bezpieczonej sieci się wydostać.

Wiele sieci firmowych blokuje dostęp do

niektórych usług, np. wybranych serwerów
WWW, pozostawiając tylko te uznane za nie-
zbędne. Niestety, może to skutecznie utrudnić
pracę i warto poznać sposób na obejście takiego
ograniczenia. Z pomocą przyjdzie serwer SSH
dostępny w Internecie. Najlepiej gdyby była to
maszyna, na której mamy uprawnienia roota,
aby w razie potrzeby móc skonfigurować SSH.
Załóżmy, że administrator sieci firmowej zablo-
kował nasze ulubione serwisy WWW, ale po-
zostawił możliwość logowania się na serwery
SSH. Możemy użyć jednego z takich serwerów
jako pośrednika sieciowego (proxy) i przy je-
go pomocy uzyskać dostęp do zablokowanych
usług. Polecenie:

jan@firmowy$ jas@bolek.mojadomena.pl
-D 8080

otwiera sesję na komputerze domowym,
a opcja -D sprawia, że będzie on działał jako
serwer pośredniczący (proxy) typu SOCKS
dynamicznie tworząc tunele do wybieranych
przez nas adresów. Jeszcze tylko musimy od-
powiednio skonfigurować przeglądarkę usta-
wiając proxy typu SOCKS i podając localhost
jako adres serwera i port 8080 – taki sam jaki
został określony przy wywołaniu SSH. Takie
ustawienia pozwalają na połączenie się z ser-
wisami, które zostały oficjalnie zablokowane
przez administratora sieci, dzięki tunelowaniu
komunikacji przez komputer domowy.

W wielu sieciach ograniczenia nakładane na

ruch sieciowy są większe. Administratorzy unie-
możliwiają połączenia przez SSH blokując port
22 na zaporze ogniowej (firewall). Pozostaje je-
dynie możliwość używania portów 80 (HTTP),
443 (HTTPS) i 8080 (alternatywne HTTP). Na-
leży wtedy serwer SSH skonfigurować tak, aby
pracował na jednym z trzech dozwolonych por-
tów np. na 443. W tym celu dodajemy wpis

Port 443

do pliku konfiguracyjnego demona

OpenSSH /etc/ssh/sshd_config. Po zmianie trze-
ba pamiętać o restarcie usługi

i

można nawiązać

połączenie z komputera firmowego wpisując:

jan@firmowy$ jas@bolek.mojadomena.pl
-D 8080 -p 443

Nie zmieniając konfiguracji przeglądarki znów
mamy dostęp do zablokowanych serwisów.

Nie jest to jednak rozwiązanie w pełni sa-

tysfakcjonujące. Co prawda Firefox wspiera
obsługę proxy typu SOCKS, ale wiele progra-
mów tego nie potrafi. W takiej sytuacji pomoc-

http://jakilinux.org/aplikacje/sztuczki-z-ssh/ – Artykuł o sztuczkach z SSH cz.1
http://jakilinux.org/aplikacje/sztuczki-z-ssh-2-tunele/ – Część druga artykułu.
http://www.openssh.com/ – strona projektu OpenSSH
http://winscp.net/ – WinSCP, klient SCP i SFTP dla systemów Windows
http://www.chiark.greenend.org.uk/~sgtatham/putty/ – Putty, klient SSH dla

systemów Windows

http://gftp.seul.org/ – GFTP, graficzny klient m.in. SFTP.
http://www.red-pill.eu/freeunix.shtml – lista darmowych kont SSH
http://fuse.sourceforge.net/sshfs.html – SSHFS
http://roumenpetrov.info/openssh/ – Rozszerzenie X.509 dla OpenSSH.

W Sieci

background image

48

styczeń 2010

Rozwiązania

Zabawa w SSHowanego

49

www.lpmagazine.org

Rozwiązania

Zabawa w SSHowanego

nym może okazać się program tsocks. Pozwa-
la on korzystać z proxy SOCKS programom,
które nie wspierają konfiguracji z takim ty-
pem pośrednika. Dla aplikacji taki sposób po-
łączenia jest przezroczysty, tak jakby łączył się
z siecią bezpośrednio. Instalujemy tscocks na
komputerze firmowym poprzez

jan@firmowy$ sudo aptitude install
tsocks

a następnie konfigurujemy w pliku /etc/
tsocks.conf
jak na Listingu 3.

Parametr

local

określa, jakie adresy ma-

ją być traktowane jako lokalne. Oznacza to, że
proxy nie będzie stosowane do połączenia z ni-
mi. Parametr

server

zawiera adres serwera po-

średniczącego. W tym wypadku jest to lokalny
komputer firmowy czyli localhost (127.0.0.1).
Parametr

server-port

wskazuje, na którym

porcie nasłuchuje pośrednik, jest to ten sam
port co przy opcji

-D

polecenia

ssh

. Ostatni

z parametrów

server_type

to typ proxy, wpi-

sujemy tu 4 lub 5. Po zapisaniu konfiguracji
możemy korzystać z dobrodziejstw jakie ofe-
ruje program. Polecenie:

jan@firmowy$ tsocks audacious

powoduje, że tscocks uruchamia odtwarzacz mu-
zyki Audacious. Wszystkie żądania sieciowe,
z wyjątkiem tych do adresów zdefiniowanych
w parametrze local, tak uruchomionego odtwa-
rzacza będą obsługiwane przez tsocks i przesyła-
ne przez proxy zbudowane w oparciu o SSH.

Ucieczka

ze strefy zdemilitaryzowanej

Mamy już wystarczająco dużo doświadcze-
nia z SSH, aby przystąpić do bardziej za-
awansowanego zadania. Pozwoli ono wyko-
rzystać i utrwalić zdobytą do tej pory wie-
dzę. Przypuśćmy, że administrujemy firmo-
wym serwerem WWW. Systemem operacyj-
nym komputera jest Debian i mamy do niego
dostęp przez SSH. Nikt nie będzie nam blo-
kował dostępu do serwera, ale jak się często
zdarza maszyna została umieszczona w stre-
fie zdemilitaryzowanej (DMZ). DMZ to pod-
sieć, do której jest dostęp z sieci firmowej jak
i z Internetu, ale komputery w niej się znaj-
dujące nie mogą nawiązywać połączeń na ze-
wnątrz strefy. Jest to powszechna praktyka
bezpieczeństwa. Jeśli intruz przejąłby kon-
trolę nad serwerem znajdującym się w takiej
strefie to nie może się z niego połączyć do
komputerów pracowników firmy ani do Inter-
netu, w celu np. rozsyłania SPAMu lub atako-
wania innych maszyn.

Zabezpieczenia potrafią jednak być bardzo

uciążliwe nie tylko dla włamywaczy, ale i dla
użytkowników. Przyjmijmy, że na naszym ser-
werze obok istniejącej już witryny w PHP trzeba
uruchomić drugą stronę napisaną w Perlu. Za-
zwyczaj wymaga to zainstalowania wielu bi-
bliotek Perla, a ich ręczne instalacja zajęłaby pół
dnia. Kilka godzin pracy polegającej na szuka-
niu modułów w repozytoriach, lub CPAN, po-
bieraniu ich, a następnie kopiowaniu na serwer
i instalowaniu jeden po drugim to perspektywa,
która może zniechęcić. Na szczęście SSH po-
zwala nam zaoszczędzić tego wysiłku. Na ser-
werze WWW jest już zainstalowane OpenSSH,
ale braknie pakietu tsocks. Pobierzemy go ręcz-
nie z jednego z serwerów lustrzanych Debiana,
skopiujemy i zainstalujemy.

Jak widać na powyższym przykładzie du-

żo pracy jest z instalacją ręczną nawet jedne-
go pakietu.

Po instalacji konfiguracja tsocks będzie

wyglądała tak samo jak na Listingu 3. Trze-
ba jeszcze tylko zestawić tunel odwrotny i uru-
chomić serwer pośredniczący. Zaczniemy od
ponownego zalogowania się na serwer WWW

jan@firmowy$ ssh jan@serwerfirmowy -R
8022:localhost:22

Teraz połączenia na port 8022 serwera bę-
dą przekierowywane do komputera firmowe-
go. Polecenie:

jan@serwerfirmowy$ ssh jan@localhost
-p 8022 -D 8080

wydane z serwera WWW połączy nas do kom-
putera lokalnego. Dodatkowo ustawi proxy na
porcie 8080 za pośrednictwem którego będzie
można łączyć się z Internetem, tunelując ruch
przez komputer lokalny. Kolejnym krokiem
jest otwarcie drugiej sesji SSH i wykonanie ja-
ko root polecenia:

jan@serwerfirmowy# tsocks aptitude

a następnie wybranie i zainstalowanie nie-
zbędnych pakietów oprogramowania. Po za-
kończonej pracy zamykamy wszystkie sesje
SSH a tym samym tunele. Ponieważ tsocks zo-
stało już zainstalowane i skonfigurowane, na-
stępnym razem w podobnej sytuacji będzie
można rozpocząć od zestawiania tuneli.

Trudno jest przecenić wartość SSH. Jest

ono czymś więcej niż tylko szyfrowanym na-
stępcą telnetu i rlogin. Pozwala na zdalne wy-
konywanie poleceń podobnie jak RSH, szy-
frując kanał transmisji. Umożliwia kopiowa-
nie plików przez SCP jako bezpieczna alterna-

tywa dla RCP. Zastępuje FTP przez bezpieczny
protokół SFTP. Dzięki SSH możemy przekiero-
wać porty, tworzyć tunele i przekierowywać se-
sje X11 między różnymi komputerami w sieci.
Zastosowanie autoryzacji przez klucze pozwa-
la na proste stosowanie SSH w skryptach, nie
wymagających interakcji użytkownika. Może-
my również utworzyć pośrednika sieciowego,
który zostanie wykorzystany przez przeglądar-
kę WWW lub inne programy.

Rozwiązania bazujące na SSH

W tym rozdziale przedstawionych zostanie kilka
rozszerzeń i rozwiązań bazujących na SSH.

Bardzo wygodnym narzędziem dla wielu

użytkowników może okazać się SSHFS (SSH
File System
). Pozwala on na zamontowanie
fragmentu systemu plików zdalnego serwera
na lokalnej maszynie i używanie go jako do-
datkowy dysk. Rozwiązanie to wykorzystuje
połączenie SSH i FUSE, czyli system plików
w przestrzeni użytkownika.

Innym ciekawym rozwiązaniem wykorzy-

stującym SSH jest protokół FISH. Został on
opracowany na potrzeby programu mc (Mid-
night Commander) do kopiowania plików za
pomocą zdalnych wywołań powłoki. Wspie-
ra nie tylko SSH, ale również RSH. W prak-
tyce jednak wykorzystuje ten pierwszy. Proto-
kół, poza Midnight Commanderem, jest uży-
wany m.in. w popularnym menedżerze plików
KDE – Konquerorze.

W artykule została przedstawiona moż-

liwość autoryzacji w SSH za pomocą klucza
kryptograficznego, ale warto również wiedzieć,
że zostało opracowane rozwiązanie pozwalają-
ce na logowanie za pomocą certyfikatów X509.
Certyfikaty, czyli bardziej zaawansowana wer-
sja kluczy, oprócz samego materiału kryptogra-
ficznego zawierają informację o właścicielu
certyfikatu i ścieżce certyfikacji – organizacjach
odpowiedzialnych za jego wystawienie. Roz-
szerzenie jest rozwijane niezależnie od głównej
gałęzi projektu OpenSSH.

To jednak nie wszystko.Wachlarz pomy-

słów na wykorzystanie SSH jest bardzo szeroki
i zależy od inwencji i potrzeb użytkowników.

Autor jest z wykształcenia inżynierem
elektroniki, Linuksem interesuje się od
ośmiu lat. Na co dzień używa go tak w
pracy, jak i w domu a jego ulubione dystry-
bucje to Gentoo i Debian.
Kontakt z autorem:
w.terlikowski@terlikowski.eu.org

O autorze


Wyszukiwarka

Podobne podstrony:
2010 01 Synchronizacja danych na wielu nośnikach [Administracja]
Odwodnienie (dehydratatio) (17 12 2010 i 7 01 2011)
laboratorium artykul 2010 01 28 Nieznany
2010 01 22 21;50;57
2004 01 Praca z OpenSSH [Administracja]
2010 01 Wykład 6 Obwód LC drgania swobodne (2)
2010 01 02, str 106 110
2010 01 28 KWP Gorzów Regulamin
2010 01 02, str 100 105
2010 01 02, str 083 086
2010 01 Mechanik Pojazdow Samochodowych Teoretyczny
2010 01 02, str 053
2010.01.10. Parazytologia, WSPiA, 1 ROK, Semestr 1, Biologia i Mikrobiologia
2010.01.08. Bakteriologia, WSPiA, 1 ROK, Semestr 1, Biologia i Mikrobiologia
02 01 Kodeks postępowania administracyjnego
2010 01 02, str 154 157
2010 01 02, str 077 080
2010 01 Sauna na podczerwien nowoczesna metoda stosowana w m
2010 01 02, str 122 126

więcej podobnych podstron