2010 01 Zabawa w SSHowanego [Administracja]


RozwiÄ…zania
Zabawa w SSHowanego
Zabawa
w SSHowanego
Wojciech Terlikowski
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.
SSH zetknął się chyba każdy, kto pracował z innymi przez SSH jest brak szyfrowania transmisji, szcze-
systemami linuksowymi. Bezpieczna powło- gólnie dotkliwy podczas procesu uwierzytelniania.
ka (secure shell) towarzyszy większości ad- Taka luka bezpieczeństwa pozwala na podsłuchanie se-
Zministratorów w wykonywaniu codziennych sji i zdobycie informacji nie tylko o tym jakie polecenia wy-
obowiązków, jest również niezastąpiona dla wielu użyt- konujemy na zdalnym systemie, ale również poznanie na-
kowników wszędzie tam, gdzie szybko i sprawnie trzeba szego loginu i hasła, co może w konsekwencji prowadzić do
wykonać jakieś czynności na zdalnym systemie, a jedno- przejęcia kontroli nad naszym kontem. Przeprowadzenie ta-
cześnie mieć poczucie bezpieczeństwa jakie daje szyfro- kiego ataku nie wymaga głębokiej wiedzy ani bardzo skom-
wany protokół. plikowanych narzędzi. Wystarczy prosty program podsłu-
chujący ruch w sieci (sniffer) jakich wiele bezpłatnych moż-
Szyfrowany telnet na znalezć w Internecie. Używanie telnetu było do zaakcep-
Kiedy po raz pierwszy miałem okazję korzystać z zaso- towania w sieciach, których użytkownicy mieli do siebie du-
bów Internetu, jeszcze w latach dziewięćdziesiątych ubie- żo zaufania i nie obawiali się, że ktoś będzie chciał się wła-
głego stulecia, do zalogowania się na zdalne serwery uży- mać do ich komputera. Pamiętam, że jeszcze na początku
wałem telnetu. studiów do niektórych serwerów wydziałowych mieliśmy
Jest to proste narzędzie, pozwalające na otwarcie sesji dostęp przez telnet, ale z czasem był on zastępowany przez
na innym komputerze w sieci. Połączenie do serwera tel- SSH. Wówczas była to jeszcze nowość, ale dająca więcej
netu umożliwia wykonywanie poleceń na zdalnym syste- bezpieczeństwa, bo szyfrowana.
mie. Rozwiązanie to ma jednak wadę, która zadecydowała
o jego niemal całkowitym zaniku, przynajmniej w środowi- Trochę historii
skach uniksowych i uniksopodobnych, w tym w Linuksie. Protokół SSH został opracowany w połowie lat dziewięć-
Słabością, która zadecydowała o wyparciu telnetu między dziesiątych na Politechnice w Helsinkach przez jednego z
styczeń 2010
42
linux@software.com.pl
RozwiÄ…zania
Zabawa w SSHowanego
pracowników naukowych  Tatu Ylönena jako Podczas instalacji serwera warto zwrócić uwa- OpenSSH. BÄ™dziemy modyfikować prosty,
odpowiedz na atak, polegający na podsłuchaniu gę na moment przedstawiony na Rysunku 2 tekstowy plik z konfiguracją: /etc/ssh/sshd_
i przechwyceniu haseł przesyłanych przez pro- Metody generowania kluczy i kryptografia config. Bezpieczeństwo wymaga, aby serwer
tokoły nieszyfrowane. Celem projektu było za- asymetryczna mogą być temetem osobnego arty- używał protokołu w wersji drugiej (SSH-2).
stąpienie narzędzi takich jak telent, rlogin i rsh kułu, tu skupię się na kwestiach najistotniejszych Zapewnia to wpis Protocol 2. W pierwotnej
przez rozwiązania podobne, ale zapewniające dla użytkownika. Przede wszystkim, klucz pry- specyfikacji wykryto poważne luki bezpie-
wyższy stopień bezpieczeństwa dzięki ochro- watny jest tajny i może być znany tylko właści- czeństwa, dlatego została zastąpiona przez
nie kryptograficznej. Po piętnastu latach może- cielowi, w tym wypadku serwerowi SSH. Klucz SSH-2. Wersja druga nie tylko jest bezpiecz-
my powiedzieć, że niewielu linuksowym admi- publiczny jest jawny, ale stanowi parę do prywat- niejsza od SSH-1, ale dodaje do protoko-
nistratorom zdarza się wykorzystywać rlogin, nego i dlatego oba muszą być wygenerowane ra- łu nowe możliwości. Wspierają ją wszyst-
czy rsh, są pewnie i tacy, którzy nie wiedzą, zem. W związku z tym klucze nie mogą być do- kie współczesne klienty SSH. Obie wersje
że coś takiego istniało, natomiast niemal wszy- starczane z pakietem oprogramowania, jak na nie są ze sobą kompatybilne i czasami trzeba
scy znają SSH. przykład plik z domyślną konfiguracją, ale trze- w kliencie wymusić użycie SSH-1 jeśli bę-
Kilka lat po opracowaniu pierwszej wer- ba je wygenerować każdorazowo podczas insta- dziemy chcieli połączyć się z serwerem, któ-
sji protokołu powstała, najpopularniejsza lacji programu. Ponowna instalacja OpenSSH, ry nie wspiera SSH-2. Na szczęście takich
obecnie, implementacja zarówno serwera jak związana np. ze zmianą dystrybucji, spowoduje, serwerów jest coraz mniej.
i klienta  OpenSSH. Projekt ten jest rozwi- że powstanie nowa para kluczy. Spowoduje to, Drugą opcją konfiguracyjną, którą zmieni-
jany przez zespół OpenBSD na licencji BSD. że odciski palca (fingerprints) serwera zapamię- myna serwerze jest wyłączenie możliwości lo-
Wolna licencja jak również bogactwo możli- tane przez klientów staną się niekatulane i będzie gowania na konto roota. W tym celu wystarczy
wości jakie daje OpenSSH, pozostając w peł- je trzeba zaktualizować. wpis PermitRootLogin no. W dalszym ciągu
nej zgodności ze specyfikacją protokołu, za- Po pomyślnie zakończonej instala- możemy wykonywać czynności administra-
pewniły tej implementacji dużą popularność. cji przystępujemy do konfiguracji serwera cyjne logując się przez SSH na konto zwykłe-
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
Rysunek 1. Popularność różnych implementacji ssh od czasu pojawienia się OpenSSH. Wyraznie widać,
w repozytoriach niemal każdej dystrybucji Li-
że OpenSSH z ponad 80% udziałem jest zdecydowanie najczęściej używaną implementacją. yródło: [3]
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 Rysunek 2. Instalacja serwera OpenSSH. Widoczny moment generowania kluczy kryptograficznych
www.lpmagazine.org 43
RozwiÄ…zania
Zabawa w SSHowanego
go użytkownika, a następnie uzyskując upraw- tej możliwości, przypuszczalnie musiałbym Teraz możemy połączyć się przez lolka
nienia roota poprzez skorzystanie z polecenia odłączyć komputer od Sieci i zacząć usuwać z serwerem SSH bolek. Robimy to wydając
su - lub odpowiednio skonfigurowanego pa- skutki włamania. polecenie:
kietu sudo. Takie ograniczenie wydaje się nie- Po takich zmianach ustawień należy zre-
potrzebnym utrudnieniem dla użytkowników startować usługę ssh: jan@lolek$ ssh jas@bolek
sieci lokalnych, ale jest bezwzględnie zaleca-
ne jeżeli serwer ma być dostępny z Interne- jas@bolek$ sudo /etc/init.d/ssh lub:
tu. Potwierdzają to moje własne doświadcze- restart
nia. Zdarzyło mi się, że w kilka minut po pod- jan@lolek$ ssh bolek -l jas
łączeniu nowego serwera do Internetu znala- Domyślna konfiguracja klienta jest wystarcza-
złem w dzienniku systemowym ślady dziesią- jąca, ale w razie potrzeby można ją zmienić gdzie bolek jest serwerem, na który się loguje-
tek nieudanych prób zalogowania przez SSH modyfikując plik /etc/ssh/ssh_config na kom- my, natomiast jas to identyfikator użytkowni-
na konto roota podejmowanych przez kompu- puterze lolek. Podobnie jak na serwerze jest to ka na tym serwerze. Zamiast nazwy komputera
tery z całego świata. Gdybym nie zablokował prosty plik tekstowy. (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-
Rysunek 3. Połączenie do SSH po zmianie odcisku palca. Po usunięciu wpisu z ~/.ssh/known_hosts znów
nia numer 7. Przy kolejnej próbie logowania
jesteśmy proszeni o potwierdzenie tożsamości serwera
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-
Rysunek 4. Przykład zastosowania ssh do tunelowania X11. Gra Kmahjongg uruchomiona na zdalnym soli, w której działa ssh, może jednak wykorzy-
serwerze stać do tego graficzny pulpit komputera lolek.
styczeń 2010
44
RozwiÄ…zania
Zabawa w SSHowanego
Taki efekt można osiągnąć przez odpowiednią kładanych przez protokół X, czasem użycie Polecenia scp używamy podobnie jak zwy-
konfigurację X11, tak by programy uruchamia- tej opcji może okazać się konieczne. Jeśli za- kłego cp:
ne na bolku były wyświetlane na ekranie lolka. chodzi potrzeba uruchomienia wielu progra-
Można również wykorzystać do tego SSH. Pro- mów graficznych na zdalnym komputerze, to jan@lolek$ scp jas.jpeg jas@bolek:
tokół ten, daje możliwość przekierowania X11 wartym rozważenia rozwiązaniem jest VLC. /tmp/
(X11 forwarding), z której skorzystamy. Wy- Za jego pomocą można udostępnić cały gra-
starczy rozpocząć nową sesję SSH dodając ficzny pulpit klientowi usługi. W wielu przy- Jak widać na przykładzie różnicą jest człon ja-
przy uruchamianiu przełącznik -X: padkach może to okazać się wygodniejsze s@bolek: wskazujący, że kopiowanie ma odby-
i bardziej efektywne od zastosowania prze- wać się do katalogu na serwerze bolek z upraw-
jan@lolek$ ssh -X bolek -l jas kierowania X. SSH jest wciąż bardzo popu- nieniami użytkownika jas. Należy zwrócić
larną i często jedyną tego typu usługą dostęp- uwagę na dwukropek (:) rozdzielający część
Operacja taka ustawia przekierowanie X11 ną na serwerze. sieciową od ścieżki w systemie plików. Je-
na klienta SSH i sprawia, że programy gra- śli chcemy skopiować plik w przeciwną stronę
ficzne działające na bolku będą wyświetla- Nie tylko zdalna sesja z serwera bolek na komputer lolek, robimy to
ły swe okna na lolku. Starujemy ponownie Poznaliśmy już możliwości protokołu SSH poleceniem:
kmahjongg: zwiÄ…zane z pracÄ… na zdalnym systemie, ale
co zrobić gdy chcemy przenieść pliki z jedne- jan@lolek$ scp jas@bolek:/tmp/
jas@bolek$ kmahjongg & go komputera na drugi? W przypadku plików obraz.png ./obrazek.png
tekstowych można je skopiować do schow-
Dodanie znaku &, powoduje uruchomienie ka i wkleić do edytora otwartego na zdal- Spowoduje to skopiowanie pliku /tmp/
gry w tle, tak by nie blokować dostępu do nym komputerze. Może to być nawet wy- obraz.png do bieżącego katalogu i nadanie mu
konsoli na bolku. Po chwili na ekranie kom- godne dopóki nie pojawi się konieczność nazwy obraz.png. Jedną z bardziej użytecz-
putera lolek pojawi się się okienko Kmah- kopiowania dużych plików, lub zbiorów bi- nych opcji używanych z scp jest -r. Pozwala
jongg. Inną opcją, pozwalającą na przekiero- narnych. Rodzina protokołów RSH miała w ona na rekurencyjne skopiowanie całego kata-
wanie X11 jest -Y, tak zwane zaufane prze- tym celu RCP, którego używało się podob- logu wraz z zawartością. Polecenie:
kierowanie X (trusted X forwarding). Jest nie jak zwykłego kopiowania plików polece-
ono mniej bezpieczne, ponieważ nie spełnia niem cp. Ponadto istnieje protokół FTP, słu- jan@lolek$ scp -r jas@bolek:/etc/ ./
wszystkich standardów bezpieczeństwa na- żący do transferowania plików między kom-
puterami w sieci, jednak żaden z nich nie szy- skopiuje całą zawartość katalogu /etc na ser-
Listing 1. Przykładowy skrypt zmieniający konfi- fruje transmisji. Na szczęście w rodzinie pro- werze bolek do bieżącego katalogu. Składnia
gurację wielu serwerów za pomocą SSH tokołów SSH znalazły się ich odpowiedniki: scp dopuszcza również użycie znaków spe-
for SERVER in bolek reksio uszatek SCP  bezpieczne kopiowanie (secure copy) cjalnych powłoki np.:
koralgol i SFTP  bezpieczny protokół transferu pli-
do ków (secure file transfer protocol). Tego dru- jan@lolek$ scp jas@bolek:~/zdjecia/
ssh jas@$SERVER 'echo giego nie należy mylić z FTPS  rozszerze- *.jpeg ~/
nameserver 10.12.15.254 > /etc/ niem FTP. Zarówno SCP jak i SFTP są szy-
resolv.conf' frowane i zapewniają takie samo bezpieczeń- skopiuje wszystkie pliki o rozszerzeniu jpeg
done stwo transmisji jak SSH. Oba sÄ… dostarcza- (*.jpeg) z katalogu zdjecia do katalogu domo-
ne z OpenSSH, więc żeby z nich korzystać wego lokalnego użytkownika. Symbole wystę-
Listing 2. Generowanie kluczy kryptograficz- nie musimy niczego instalować dodatkowo. pujące w ścieżkach serwera są interpretowane
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
Rysunek 5. Okno programu gftp z otwartÄ… sesjÄ… SSH
www.lpmagazine.org 45
RozwiÄ…zania
Zabawa w SSHowanego
przez jego powłokę nie przez scp. W wyniku śli uda się napisać skrypt, który wykona za nas niu powraca do powłoki klienta, z której zosta-
czego skrypt, korzystający z takich symboli bę- chociaż część żmudnej pracy to zaoszczędzo- ło wywołane.
dzie działał różnie z różnymi maszynami w za- ny czas możemy poświęcić na przyjemniejsze
leżności od tego jaki system pracuje po stronie zajęcia, na przykład czytanie ostatniego nume- jan@lolek$ ssh jas@bolek 'echo
serwera i jakiej powłoki używa. Takiego uza- ru Linux+. Przypuśćmy, że administrujemy nameserver 10.12.15.254 > /etc/
leżnienia od platformy nie ma drugi z wymie- siecią, w której właśnie zmienił się adres ser- resolv.conf'
nionych protokołów służących do kopiowania wera DNS. Nowy adres to 10.12.15.254. Mu-
plików. SFTP, bo o nim mowa, pozwala na in- simy teraz zmienić konfigurację wszystkich Takie polecenie powoduje wywołanie komendy
teraktywną pracę na zdalnym systemie plików serwerów w sieci, modyfikując zawartość pli- echo na serwerze bolek z przekierowaniem wyj-
podobnie jak FTP. Logujemy się poleceniem: ku /etc/resolv.conf. Jeśli są to trzy serwery to ścia do pliku /etc/resolv.conf na tymże serwerze,
można zalogować się na każdy z nich osobno i a następnie powrót do powłoki na lolku. W re-
jan@lolek$ sftp jas@bolek ręcznie wykonać polecenie: zultacie zawartość pliku /etc/resolv.conf zostanie
zmieniona na nameserver 10.12.15.254, czy-
a następnie za pomocą poleceń takich jak get i echo 'nameserver 10.12.15.254' > li to co chcieliśmy osiągnąć. Teraz wystarczy wy-
put możemy kopiować pliki z i na serwer. Jeśli /etc/resolv.conf wołać skrypt dla każdego z naszych serwerów i
ktoś preferuje pracę w środowisku graficznym rekonfiguracja gotowa.
to może skorzystać z jednej z wielu graficznych Kiedy będzie ich kilkadziesiąt to zadanie takie Bardzo wygodne, prawda? Jednak skrypt
nakładek na SFTP takich jak gftp czy WinSCP. staje się żmudne i czasochłonne. Ponadto nie nie działa tak sprawnie jak byśmy sobie tego
trudno tu o pomyłkę. Z pomocą w takiej sy- życzyli, ponieważ przy logowaniu do każde-
Użycie SSH w skryptach tuacji przychodzi nam SSH. Pozwala ono na go z serwerów trzeba podawać hasło. I na to
W pracy administratora (i nie tylko) bardzo li- wykonanie polecenia w trybie wsadowym, bez jest rada. Uwierzytelnienie przez podanie ha-
czy się umiejętność automatyzacji zadań. Je- otwierania interaktywnej sesji, a po zakończe- 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
Internet Zapora
Komputer
Serwer
ogniowa
domowy
ostatnie pozwala na zarzÄ…dzanie autoryzacjÄ…
wydziałowy
Sesja SSH
w SSH za pośrednictwem zewnętrznych me-
chanizmów, takich jak Kerberos. Skupmy się
na metodzie klucza publicznego, ponieważ jest
Odwrotny tunel SSH
prosta i nie wymaga od nas używania dodatko-
SSH
wego oprogramowania. Najpierw musimy mieć
Tunelowane poł czenia
HTTP parę kluczy, która będzie identyfikować nasze-
do SSH i HTTP
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
Rysunek 6. Zastosowanie odwrotnego tunelu SSH do połączenia do serwera znajdującego się za zapo- programu ssh-keygen dostarczanego razem
rÄ… ogniowÄ…
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
styczeń 2010
46
RozwiÄ…zania
Zabawa w SSHowanego
my, że uruchamiamy program i chcemy, by den z zainstalowanym tam klientów konsolo- który się logujemy, czyli w tym przypadku local-
wszystkie jego krytyczne komunikaty (zaczy- wych. Na dłuższą metę okaże się to niezbyt wy- host oznacza poczta.naszauczelnia.edu.pl.
nające się od ERROR:) były zapisywane na zdal- godne. Uciążliwa będzie na przykład obsługa za- W ten sposób zestawiliśmy szyfrowany tunel
nym serwerze. Rejestrowanie zdarzeń z kry- łączników, wymagająca przesyłania plików mię- z lokalnego portu 8025 do portu 25 na wydzia-
tycznych usług na innych komputerach jest do- dzy serwerem a komputerem domowym. Do za- łowym serwerze poczty. Skoro nauczyliśmy się
brą praktyką bezpieczeństwa. Bardziej zaawan- stosowania wygodniejszego rozwiązania, wyko- już tunelowania możemy przekierować drugi
sowane konfiguracje można osiągnąć za pomo- rzystującego przekierowanie portów SSH, po- port  ten do odbierania poczty.
cą demona syslog. W tym momencie wystarczy trzebna nam będzie podstawowa wiedza na te-
nam proste użycie SSH. mat konfiguracji protokołów pocztowych. Wy- jan@lolek$ jas@poczta.naszauczelnia.
starczy wiedzieć, na którym porcie słucha tune- edu.pl -L 8025:localhost:25 -L 8100:
jan@lolek$ ./skrypt.sh | grep lowana usługa. Najprostszym zródłem informa- localhost:110
'^ERROR:' | ssh jas@bolek 'cat >> cji na ten temat jest plik /etc/services. Można do-
/var/log/skrypt.log' wiedzieć się z niego, że protokołowi POP3 odpo- Teraz wystarczy skonfigurować ulubionego
wiada port 110, zaś SMTP  25. W przykładach klienta poczty i wskazać mu localhost:8025 ja-
Przy użyciu potoków łączymy funkcjonalności z tunelami połączenia SSH będą nawiązywane w ko serwer SMTP do wysyłania poczty, zaś lo-
programu grep, który wybiera tylko interesują- obie strony  również do naszego komputera do- calhost:8110 do jej odbierania. Dzięki temu mo-
ce nas komunikaty ssh, zapewniającego trans- mowego, więc przyda się zainstalowanie na nim żemy jednocześnie cieszyć się komfortowym
fer logów na inny serwer i cat, zapisującego je serwera OpenSSH. korzystaniem z poczty i bezpieczeństwem ja-
do pliku logów. Polecenie pozwalające na zabezpiecze- kie daje ochrona kryptograficzna kanału. War-
Kopię zapasową serwisu www można wy- nie transmisji SMTP będzie wyglądało na- to przy tym pamiętać, że tunel działa tak dłu-
konać poleceniem: stępująco: go jak długo otwarta jest sesja SSH, po zakoń-
czeniu połączenia do localhost:8025 i localhost:
jan@lolek$ tar -czf - /var/www/* | jan@lolek$ ssh jas@poczta.naszauczeln 8110 przestaną działać.
ssh jas@bolek 'cat > ~/backup/backup_ ia.edu.pl -L 8025:localhost:25 Gdy już poznaliśmy podstawy tuneli za-
www.tar.gz' łóżmy bardziej skomplikowaną sytuację. We-
Składnia komendy jest trochę skomplikowana. wnątrz sieci akademickiej znajduje się ser-
Alternatywnym rozwiązaniem jest spakowanie Pierwsza część ssh jas@poczta.naszauczel- wer, na którym wykonujemy projekt serwisu
plików lokalnie, a następnie przesłanie paczki nia.edu.pl jest już znana. Opcja -L oznacza, że WWW. Mamy dostęp do niego zarówno przez
za pomocą SCP. Wersja z użyciem potoku jest SSH będzie nasłuchiwać na lokalnym porcie o SSH na standardowym porcie 22 jak i HTTP na
jednak bardziej elegancka i oszczędza nam za- numerze 8025 i to jest jeden koniec tunelu. Dru- porcie 80, ale tylko z komputerów w sieci wy-
mieszania z tymczasowym plikiem archiwum. gi podawany jest po dwukropku w postaci host: działowej. Co zrobić gdy chcemy popracować
Istnieje również opcja OpenSSH, pozwalają- port, w naszym przypadku localhost:25. Na- nad projektem siedząc w domu? Możemy za-
ca na kompresję przesyłanego strumienia da- leży zaznaczyć, że zamiast 8025 można wy- logować się przez SSH na serwer pocztowy,
nych. Włącza się ją za pomocą przełącznika brać którykolwiek z wolnych portów, jednak do z którego mamy bezpośredni dostęp do kompu-
-C. W czasach rozpowszechnienia sieci szero- użycia numerów 1024 i mniejszych trzeba mieć tera projektowego. Nie jest to jednak zbyt wy-
kopasmowych nie jest to często używana opcja, uprawnienia roota. Kolejną ważną i powodują- godne, ponieważ na obu tych serwerach mamy
ale niekiedy może usprawnić pracę. Zwłaszcza cą prawdopodobnie najwięcej nieporozumień do dyspozycji wyłącznie przeglądarki tekstowe,
wtedy, gdy trzeba będzie przesyłać dobrze kom- rzeczą jest nazwa hosta na drugim końcu tune- które nie wspierają nowoczesnych technologii
presujące się dane, np. pliki tekstowe, przez sieć lu. Jest ona podawana względem komputera, na WWW takich jak Java Script czy CSS. Najwy-
o niedużej przepustowości.
Listing 3. Plik konfiguracyjny tsocks.conf
Wchodzimy w tunel local = 192.168.0.0/255.255.255.0
Tunele sieciowe są potężnym i bardzo wygod- local = 10.0.0.0/255.0.0.0
nym narzędziem, dzięki któremu można zabez-
pieczyć transmisję protokołów nieszyfrowanych server = 127.0.0.1
oraz ominąć niektóre ograniczenia wprowadzo-
ne przez zapory ogniowe. W SSH tunele realizo- server_type = 5
wane są za pomocą przekierowania portów (port
forwarding). Rozważmy prostą sytuację, w której server_port = 8080
dzięki tunelowaniu, uzyskamy bezpieczny dostęp
do nieszyfrowanej usługi pocztowej. Na serwe- Listing 4. Instalacja pakietu tsocks na serwerze w DMZ
rze wydziałowym mamy konto pocztowe i kon- jan@firmowy$ wget http://ftp.icm.edu.pl/pub/Linux/debian/pool/main/t/
to powłoki dostępne przez SSH. Niestety admi- tsocks/tsocks_1.8beta5-9.1_amd64.deb
nistrator udostępnił pocztę tylko przez nieszyfro- jan@firmowy$ scp tsocks_1.8beta5-9.1_amd64.deb jan@serwerfirmowy:~/
wane protokoły POP3 i SMTP. Jeśli nie chcemy, jan@firmowy$ ssh jan@serwerfirmowy
aby nasze dane były przesyłane niezabezpieczo- jan@serwerfirmowy$ su -
nym kanałem możemy posłużyć się SSH. Naj- jan@serwerfirmowy# cd ~jan
prostszym rozwiÄ…zaniem jest zalogowanie siÄ™ jan@serwerfirmowy#dpkg -i tsocks_1.8beta5-9.1_amd64.deb
do powłoki serwera i obsługa poczty przez je-
www.lpmagazine.org 47
RozwiÄ…zania
Zabawa w SSHowanego
godniej byłoby użyć lokalnego Firefoksa z Fi- oraz zestawienia drugiego tunelu po por- mocą przekierowania portów SSH warto roz-
rebugiem i innymi dodatkami, ale bezpośrednio tu HTTP. ważyć kilka przypadków jak z podobnie za-
na adres serwera projektowego się nie połączy- bezpieczonej sieci się wydostać.
my. W takiej sytuacji możemy zestawić tunel jan@lolek$ ssh localhost -l janek -p Wiele sieci firmowych blokuje dostęp do
SSH za pomocą polecenia: 9022 -L 9080:localhost:80 niektórych usług, np. wybranych serwerów
WWW, pozostawiajÄ…c tylko te uznane za nie-
jan@lolek$ ssh jas@poczta.naszaucze Znów składnia polecenia staje się nieco skom- zbędne. Niestety, może to skutecznie utrudnić
lnia.edu.pl -L 9080:projekty:80 -L plikowana. Czytelnika może zaniepokoić uży- pracę i warto poznać sposób na obejście takiego
9022:projekty:22 cie localhost. Część ssh localhost -l ja- ograniczenia. Z pomocą przyjdzie serwer SSH
nek -P 9022 jest już znana i wbrew pozo- dostępny w Internecie. Najlepiej gdyby była to
Teraz, po wpisaniu adresu http://localhost: rom powoduje zalogowanie na serwer projek- maszyna, na której mamy uprawnienia roota,
9080/janek/ przeglądarka wyświetli projekt towy mimo, iż używamy adresu localhost, aby w razie potrzeby móc skonfigurować SSH.
strony, nad którym można dalej bez przeszkód co sugerowałoby raczej lokalny komputer. Tu- Załóżmy, że administrator sieci firmowej zablo-
popracować. Dostęp do powłoki serwera pro- nel odwrotny łączy port 9022 hosta lokalnego kował nasze ulubione serwisy WWW, ale po-
jektowego uzyskujemy przez SSH: i port SSH maszyny projektowej, dlatego te- zostawił możliwość logowania się na serwery
raz połączenie do localhost:9022 otwiera se- SSH. Możemy użyć jednego z takich serwerów
jan@lolek$ ssh localhost -l janek -p sję na zdalnym komputerze. Druga część po- jako pośrednika sieciowego (proxy) i przy je-
9022 lecenia również jest nam znana: otwiera tunel go pomocy uzyskać dostęp do zablokowanych
z portu 9080 lokalnego komputera na port 80 usług. Polecenie:
gdzie janek to nazwa naszego użytkownika komputera z którym się łączymy. Tu local-
na serwerze projektowym, a opcja -p pozwala host oznacza serwer projektowy. Podobnego jan@firmowy$ jas@bolek.mojadomena.pl
otworzyć połączenie na porcie innym niż stan- polecenia użyliśmy przy zabezpieczaniu pro- -D 8080
dardowy 22, w tym wypadku na 9022. tokołów pocztowych.
Czasem zabezpieczenia sieci wydziałowej Bardzo często nasz komputer domowy otwiera sesję na komputerze domowym,
są bardziej rygorystyczne i nie pozwalają na nie ma stałego adresu IP i nie można mu wte- a opcja -D sprawia, że będzie on działał jako
logowanie się na serwer projektowy z serwe- dy przypisać nazwy DNS. W takiej sytuacji na- serwer pośredniczący (proxy) typu SOCKS
ra pocztowego. Wtedy, by móc pracować nad leży skorzystać z usługi dynamicznego DNS dynamicznie tworząc tunele do wybieranych
projektem z domu, potrzebny będzie komputer oferowanego np. przez serwis dyndns.org. Po- przez nas adresów. Jeszcze tylko musimy od-
domowy z serwerem SSH osiągalny z sieci In- lega ona na przypisaniu komputerowi o zmien- powiednio skonfigurować przeglądarkę usta-
ternet. W czasie pobytu na uczelni musimy do- nym adresie IP stałej nazwy DNS. Dzięki temu wiając proxy typu SOCKS i podając localhost
stać się do komputera projektowego i otworzyć można nawiązać z nim połączenie SSH nawet jako adres serwera i port 8080  taki sam jaki
z niego sesję SSH na serwerze domowym za jeśli nie wiemy jaki aktualnie ma adres. Sytu- został określony przy wywołaniu SSH. Takie
pomocą polecenia. acja jest bardziej skomplikowana, gdy ani ser- ustawienia pozwalają na połączenie się z ser-
wer projektowy ani nasz komputer domowy wisami, które zostały oficjalnie zablokowane
janek@projekty$ ssh -R 9022: nie są osiągalne z Internetu. Możliwe jest wte- przez administratora sieci, dzięki tunelowaniu
localhost:22 jan@lolek.mojadomena.pl dy użycie publicznie dostępnego serwera SSH, komunikacji przez komputer domowy.
np. jednego z serwisów oferujących bezpłat- W wielu sieciach ograniczenia nakładane na
Opcja -R oznacza, że zestawiony zostanie tu- ne konta na maszynach uniksowych i linukso- ruch sieciowy są większe. Administratorzy unie-
nel odwrotny z lolka na serwer projektowy. wych [7]. Warto zwrócić uwagę na to czy regu- możliwiają połączenia przez SSH blokując port
Po powrocie do domu można wykorzystać ten lamin serwera nie zabrania używania go w ce- 22 na zaporze ogniowej (firewall). Pozostaje je-
tunel by zalogować się bezpośrednio do kom- lu zestawiania tuneli i proxy. W wielu serwi- dynie możliwość używania portów 80 (HTTP),
putera projektowego wywołując komendę: sach jest to zabronione, bo powoduje wzmożo- 443 (HTTPS) i 8080 (alternatywne HTTP). Na-
ny ruch sieciowy. leży wtedy serwer SSH skonfigurować tak, aby
jan@lolek$ ssh localhost -l janek -p Skoro wiemy już wiele na temat uzyski- pracował na jednym z trzech dozwolonych por-
9022 wania dostępu do zabezpieczonej sieci za po- tów np. na 443. W tym celu dodajemy wpis
Port 443 do pliku konfiguracyjnego demona
OpenSSH /etc/ssh/sshd_config. Po zmianie trze-
W Sieci ba pamiętać o restarcie usługi i można nawiązać
połączenie z komputera firmowego wpisując:
" 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.
jan@firmowy$ jas@bolek.mojadomena.pl
" http://www.openssh.com/  strona projektu OpenSSH
-D 8080 -p 443
" http://winscp.net/  WinSCP, klient SCP i SFTP dla systemów Windows
" http://www.chiark.greenend.org.uk/~sgtatham/putty/  Putty, klient SSH dla
Nie zmieniając konfiguracji przeglądarki znów
systemów Windows
mamy dostęp do zablokowanych serwisów.
" http://gftp.seul.org/  GFTP, graficzny klient m.in. SFTP.
Nie jest to jednak rozwiązanie w pełni sa-
" http://www.red-pill.eu/freeunix.shtml  lista darmowych kont SSH
tysfakcjonujÄ…ce. Co prawda Firefox wspiera
" http://fuse.sourceforge.net/sshfs.html  SSHFS
obsługę proxy typu SOCKS, ale wiele progra-
" http://roumenpetrov.info/openssh/  Rozszerzenie X.509 dla OpenSSH.
mów tego nie potrafi. W takiej sytuacji pomoc-
styczeń 2010
48
RozwiÄ…zania
Zabawa w SSHowanego
nym może okazać się program tsocks. Pozwa- Zabezpieczenia potrafią jednak być bardzo tywa dla RCP. Zastępuje FTP przez bezpieczny
la on korzystać z proxy SOCKS programom, uciążliwe nie tylko dla włamywaczy, ale i dla protokół SFTP. Dzięki SSH możemy przekiero-
które nie wspierają konfiguracji z takim ty- użytkowników. Przyjmijmy, że na naszym ser- wać porty, tworzyć tunele i przekierowywać se-
pem pośrednika. Dla aplikacji taki sposób po- werze obok istniejącej już witryny w PHP trzeba sje X11 między różnymi komputerami w sieci.
łączenia jest przezroczysty, tak jakby łączył się uruchomić drugą stronę napisaną w Perlu. Za- Zastosowanie autoryzacji przez klucze pozwa-
z siecią bezpośrednio. Instalujemy tscocks na zwyczaj wymaga to zainstalowania wielu bi- la na proste stosowanie SSH w skryptach, nie
komputerze firmowym poprzez bliotek Perla, a ich ręczne instalacja zajęłaby pół wymagających interakcji użytkownika. Może-
dnia. Kilka godzin pracy polegającej na szuka- my również utworzyć pośrednika sieciowego,
jan@firmowy$ sudo aptitude install niu modułów w repozytoriach, lub CPAN, po- który zostanie wykorzystany przez przeglądar-
tsocks bieraniu ich, a następnie kopiowaniu na serwer kę WWW lub inne programy.
i instalowaniu jeden po drugim to perspektywa,
a następnie konfigurujemy w pliku /etc/ która może zniechęcić. Na szczęście SSH po- Rozwiązania bazujące na SSH
tsocks.conf jak na Listingu 3. zwala nam zaoszczędzić tego wysiłku. Na ser- W tym rozdziale przedstawionych zostanie kilka
Parametr local określa, jakie adresy ma- werze WWW jest już zainstalowane OpenSSH, rozszerzeń i rozwiązań bazujących na SSH.
ją być traktowane jako lokalne. Oznacza to, że ale braknie pakietu tsocks. Pobierzemy go ręcz- Bardzo wygodnym narzędziem dla wielu
proxy nie będzie stosowane do połączenia z ni- nie z jednego z serwerów lustrzanych Debiana, użytkowników może okazać się SSHFS (SSH
mi. Parametr server zawiera adres serwera po- skopiujemy i zainstalujemy. File System). Pozwala on na zamontowanie
średniczącego. W tym wypadku jest to lokalny Jak widać na powyższym przykładzie du- fragmentu systemu plików zdalnego serwera
komputer firmowy czyli localhost (127.0.0.1). żo pracy jest z instalacją ręczną nawet jedne- na lokalnej maszynie i używanie go jako do-
Parametr server-port wskazuje, na którym go pakietu. datkowy dysk. Rozwiązanie to wykorzystuje
porcie nasłuchuje pośrednik, jest to ten sam Po instalacji konfiguracja tsocks będzie połączenie SSH i FUSE, czyli system plików
port co przy opcji -D polecenia ssh. Ostatni wyglądała tak samo jak na Listingu 3. Trze- w przestrzeni użytkownika.
z parametrów server_type to typ proxy, wpi- ba jeszcze tylko zestawić tunel odwrotny i uru- Innym ciekawym rozwiązaniem wykorzy-
sujemy tu 4 lub 5. Po zapisaniu konfiguracji chomić serwer pośredniczący. Zaczniemy od stującym SSH jest protokół FISH. Został on
możemy korzystać z dobrodziejstw jakie ofe- ponownego zalogowania się na serwer WWW opracowany na potrzeby programu mc (Mid-
ruje program. Polecenie: night Commander) do kopiowania plików za
jan@firmowy$ ssh jan@serwerfirmowy -R pomocą zdalnych wywołań powłoki. Wspie-
jan@firmowy$ tsocks audacious 8022:localhost:22 ra nie tylko SSH, ale również RSH. W prak-
tyce jednak wykorzystuje ten pierwszy. Proto-
powoduje, że tscocks uruchamia odtwarzacz mu- Teraz połączenia na port 8022 serwera bę- kół, poza Midnight Commanderem, jest uży-
zyki Audacious. Wszystkie żądania sieciowe, dą przekierowywane do komputera firmowe- wany m.in. w popularnym menedżerze plików
z wyjątkiem tych do adresów zdefiniowanych go. Polecenie: KDE  Konquerorze.
w parametrze local, tak uruchomionego odtwa- W artykule została przedstawiona moż-
rzacza będą obsługiwane przez tsocks i przesyła- jan@serwerfirmowy$ ssh jan@localhost liwość autoryzacji w SSH za pomocą klucza
ne przez proxy zbudowane w oparciu o SSH. -p 8022 -D 8080 kryptograficznego, ale warto również wiedzieć,
że zostało opracowane rozwiązanie pozwalają-
Ucieczka wydane z serwera WWW połączy nas do kom- ce na logowanie za pomocą certyfikatów X509.
ze strefy zdemilitaryzowanej putera lokalnego. Dodatkowo ustawi proxy na Certyfikaty, czyli bardziej zaawansowana wer-
Mamy już wystarczająco dużo doświadcze- porcie 8080 za pośrednictwem którego będzie sja kluczy, oprócz samego materiału kryptogra-
nia z SSH, aby przystąpić do bardziej za- można łączyć się z Internetem, tunelując ruch ficznego zawierają informację o właścicielu
awansowanego zadania. Pozwoli ono wyko- przez komputer lokalny. Kolejnym krokiem certyfikatu i ścieżce certyfikacji  organizacjach
rzystać i utrwalić zdobytą do tej pory wie- jest otwarcie drugiej sesji SSH i wykonanie ja- odpowiedzialnych za jego wystawienie. Roz-
dzę. Przypuśćmy, że administrujemy firmo- ko root polecenia: szerzenie jest rozwijane niezależnie od głównej
wym serwerem WWW. Systemem operacyj- gałęzi projektu OpenSSH.
nym komputera jest Debian i mamy do niego jan@serwerfirmowy# tsocks aptitude To jednak nie wszystko.Wachlarz pomy-
dostęp przez SSH. Nikt nie będzie nam blo- słów na wykorzystanie SSH jest bardzo szeroki
kował dostępu do serwera, ale jak się często a następnie wybranie i zainstalowanie nie- i zależy od inwencji i potrzeb użytkowników.
zdarza maszyna została umieszczona w stre- zbędnych pakietów oprogramowania. Po za-
fie zdemilitaryzowanej (DMZ). DMZ to pod- kończonej pracy zamykamy wszystkie sesje
sieć, do której jest dostęp z sieci firmowej jak SSH a tym samym tunele. Ponieważ tsocks zo-
O autorze
i z Internetu, ale komputery w niej się znaj- stało już zainstalowane i skonfigurowane, na-
dujące nie mogą nawiązywać połączeń na ze- stępnym razem w podobnej sytuacji będzie
Autor jest z wykształcenia inżynierem
wnątrz strefy. Jest to powszechna praktyka można rozpocząć od zestawiania tuneli.
elektroniki, Linuksem interesuje siÄ™ od
bezpieczeństwa. Jeśli intruz przejąłby kon- Trudno jest przecenić wartość SSH. Jest
ośmiu lat. Na co dzień używa go tak w
trolę nad serwerem znajdującym się w takiej ono czymś więcej niż tylko szyfrowanym na-
pracy, jak i w domu a jego ulubione dystry-
strefie to nie może się z niego połączyć do stępcą telnetu i rlogin. Pozwala na zdalne wy-
bucje to Gentoo i Debian.
komputerów pracowników firmy ani do Inter- konywanie poleceń podobnie jak RSH, szy-
Kontakt z autorem:
netu, w celu np. rozsyłania SPAMu lub atako- frując kanał transmisji. Umożliwia kopiowa-
w.terlikowski@terlikowski.eu.org
wania innych maszyn. nie plików przez SCP jako bezpieczna alterna-
www.lpmagazine.org 49


Wyszukiwarka