Cygwin + SSH + DenyHosts na Windowsie

SSH (ang. secure shell) – protokół sieciowy zapewniający szyfrowaną transmisję danych, następca starego Telneta. Służy do terminalowego łączenia się ze zdalnymi komputerami, przesyłania plików, tunelowania oraz innych zastosowań. W środowiskach Uniksowych czy Linuksowych jest to w zasadzie standardowa usługa. W przypadku Windowsa musimy skorzystać z dodatkowych narzędzi. Najbardziej kompletnym wydaje się być Cygwin.

Instalacja daemona SSH

Jeśli mamy już Cygwina zainstalowanego, musimy się upewnić że zainstalowane zostały 2 pakiety:

  • Admin -> cygrunsrv
  • Net -> openssh

Następnie uruchamiamy Cygwina z prawami administratora (roota) [ważne] i wpisujemy:

Właściwie cały proces instalacji przebiega automatycznie. Jedyne co użytkownik musi podczas instalacji zrobić to podać hasło dla nowo tworzonego użytkownika Privileged Server (cyg_server), na prawach którego zostanie uruchomiona usługa SSHD. Jeśli pojawiły się błędy radzę sprawdzić, czy polecenie faktycznie zostało wykonane z prawami administratora (roota).

SSHD wystartuje automatycznie po restarcie systemu, ale możemy go uruchomić także bez restartu poleceniem:

lub

Teraz należy zakończyć pracę w konsoli z prawami administratora (roota) i przetestować nasz serwer. Ponownie więc uruchamiamy Cygwina i wpisujemy:

SSHD under Windows thanks to Cygwin

SSHD under Windows thanks to Cygwin

A więc serwer działa lokalnie, teraz musimy jeszcze otworzyć port 22 na firewallu, co zrobimy poleceniem wydanym z uprawnieniami administratora:

Prawie jak konfiguracja iptables w Linuksie 🙂

Na koniec proponuję jeszcze ukryć użytkowania Privileged Server (cyg_server) na ekranie logowania Windows, ale o tym w następnym wpisie.

Zabezpieczymy daemona SSH – instalacja DenyHosts

Mamy zainstalowany serwer SSH teraz należy zadbać o jego bezpieczeństwo. W tym celu zainstalujemy skrypt Pythona – DenyHosts. Program ten na bieżąco analizuje logi, pod kątem nieudanych prób logowania do serwera SSH i blokuje te adresy IP z których taki próby miały miejsce. Co więcej, DenyHosts pozwala na wymianę list trafnych adresów IP z innymi użytkownikami programu. To wszystko sprawia, że będziemy mogli spać spokojnie.

Instalacja DenyHosts nie jest tak prosta pod Cygwinem jak pod Linuksem, dlatego przedstawię tutaj całą instytucję krok po kroku.

Pierwszą rzeczą jaką musimy zrobić to damona logów systemowych. Upewniamy się, że zainstalowany został pakiet:

  • Admin -> syslog-ng

Następnie uruchamiamy Cygwina z prawami administratora (roota) [ważne] i wpisujemy:

syslog-ng wystartuje automatycznie po restarcie systemu, ale możemy go uruchomić także bez restartu poleceniem:

lub

Teraz jeśli nie jesteś do końca przekonany o sensowności instalacji DenyHosts proponuję, zostawić komputer na jakąś godzinkę, po czym wydaj polecenie: cat /var/log/messages | grep invalid

Wystarczy? Wystarczy!

Tak więc dodajemy niezbędny w dalszej części pakiet:

  • Python -> python

oraz pobieramy DenyHosts. Możemy to zrobić w konsoli:

Sprawdzamy teraz zawartość pliku /var/log/denyhosts.log, jeśli mamy szczęście zobaczymy:

Oznacza to, że DenyHosts działa. Niech Cię nie zwiedzie, że w aplecie Usługi (Panel sterowania -> Narzędzie administracyjne -> Usługi) stan usługi CYGWIN denyhosts to Zatrzymano. Wynika to z faktu, że polecenie /usr/share/denyhosts/daemon-control z którego korzysta usługa Windows, jak sama nazwa wskazuje, jest skryptem kontrolującym daemona DenyHosts, a nie samym DenyHosts (/bin/denyhosts.py). Tak więc jego wykonanie z poziomu terminala / konsoli nie spowoduje jego zablokowania – daemon zostanie uruchomiony w tle.

Cygwin daemons

Cygwin daemons

Ja nie miałem tyle szczęścia, w /var/log/denyhosts.log wyczytałem:

Na szczęście rozwiązane tego problemu było dość proste:

O poprawnym działaniu usługi przekonasz się monitorując zawartość następujących plików i katalogów:

  • /etc/hosts.deny
  • /usr/share/denyhosts/data/*
  • /var/log/denyhosts

W takim razie co może nie pójść po naszej myśli? W przypadku Windows Vista / 7 z zainstalowanym jakimś programem antywirusowym, w pliku /var/log/denyhosts.log może się pojawić coś w stylu:

W tej sytuacji musimy przeprowadzić operację zwaną po angielsku rebase. Upewniamy się, że zainstalowany został pakiet:

  • Base -> rebase

Uruchomienie rebaseall jest dość niestandardowe. Otóż jedynym programem, korzystającym z biblioteki cygwin1.dll, który może być uruchomiony w trakcie wykonywania komendy rebaseall jest dash. W związku z tym, musimy zamknąć wszystkie procesy Cygwina i zatrzymać wszystkie usługi Cygwina. Uruchamiamy standardowy wiersz poleceń Windows cmd (nie Cygwin) po czym wykonujemy:

Jeśli zobaczyliśmy coś takiego:

Oznacza to, że został nam jeszcze jakiś działający proces Cygwina. W ostateczności możemy zrestartować komputer jeśli nie jesteśmy w stanie sprawdzić, który to i powtórzyć od zatrzymywania usług Cygwina.

W przypadku Windows 64-bit możemy natomiast spotkać się z takim błędem: FixImage (/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libgcc_s_sjlj-1.dll) failed with last error = 13
Z kolei i tym błędem poradzimy sobie edytując plik: /bin/rebaseall, a dokładnie 110 wiersz, który pierwotnie wygląda tak:

zmieniamy na:

po czym ponownie uruchamiamy procedurę rebaseall.

Jest jeszcze jeden problem który musimy obejść – mianowicie zatrzymanie usługi nie skutkuje skasowaniem pliku /var/run/denyhosts.pid, a to z kolei powoduje, że nie można powtórnie wystartować usługi. Taka sytuacja ma miejsce po restarcie systemu, co jest szczególnie uciążliwe. Ten problem objedziemy uruchamiając Edytor lokalnych zasad grupy komendą gpedit. W edytorze przechodzimy do Zasad Komputer lokalny -> Konfiguracja komputera -> Ustawienia systemu Windows -> Skrypty (uruchamianie/zamykanie) -> Zamknięcie i tam dodamy prosty skrypt kasujący ów nieszczęsny plik:

Tak, ja mam cygwina na dysku D:\.

Edytor lokalnych zasad grupy

Edytor lokalnych zasad grupy

Wszelkich wskazówek dotyczących rozwiązywania innych błędów, które mogą wystąpić przy instalacji DenyHosts nalęzy szukać w /var/log/denyhosts.log.

Brak możliwości komentowania.