Udostępnianie plików zdalnie za pomocą SSH

Jak udostępnić cały swój katalog domowy na cały internetowy świat, aby był widoczny tylko dla nas i nikogo więcej? Każdy chyba zna „Udostępnianie plików” lub „Zdalne logowanie” w systemie OS X, które pozwalają za pomocą jednego kliknięcia uruchomić serwer, z którym mogą się połączyć inne urządzenia. Po podaniu loginu i hasła użytkownika można cieszyć się dostępem do swoich plików lub udostępniać je innym w sieci domowej. Ta opcja większości osobom wystarcza. Co jednak, gdy potrzebujemy dostępu do swoich plików nie tylko w sieci domowej ale też gdziekolwiek, gdy tylko znajdziemy się w zasięgu internetu?

Po co to?

Rozwiązanie to może okazać się idealne dla osób które posiadają stacjonarny komputer z systemem Mac OS X (Mac mini, iMac, Mac Pro), który jest podpięty na stałe do internetu, oraz drugie urządzenie przenośne (iPad, iPhone, MacBook Pro), za pośrednictwem którego chcieliby mieć dostęp do swoich zasobów znajdujących się na komputerze stacjonarnym. Oczywiście nic nie stoi na przeszkodzie by poniższe rozwiązanie zastosować w jakimkolwiek innym urządzeniu. Aby przeglądać udostępnione pliki w środowisku iOS (iPhone, iPad) polecam aplikację Documents by Readdle.

Czy udostępnianie plików jest bezpieczne?

Nikt jeszcze nie stworzył super-hiper-bezpiecznego systemu.

Pierwsze pytanie jakie mi przyszło do głowy było związane z bezpieczeństwem tego rozwiązania. W internecie można znaleźć wiele historii związanych z rządowymi serwerami, na które włamali się hakerzy. Jeśli 15-latek potrafił wykraść dane z komputerów NASA, o ile bardziej taki „domowy serwer” będzie podatny na ataki? Jedno jest pewne. Nikt jeszcze nie stworzył super-hiper-bezpiecznego systemu i nigdy taki zapewne nie powstanie, ponieważ głównym backdoor’em był, jest i zawsze będzie człowiek. Tak więc bezpieczeństwo danych zależy w większej mierze od inteligencji użytkownika, niż od błędów w systemie.

Aby nasze pliki pozostały bezpieczne, oraz by dostępu do nich nie miał nikt inny poza nami, zastosowałem kilka środków bezpieczeństwa:

  • niestandardowy port usługi,
  • szyfrowanie danych,
  • autoryzacja tylko za pomocą par kluczy RSA,
  • silne hasło dla klucza,
  • wyłączenie zdalnego logowania za pomocą hasła i loginu,
  • ograniczenie ilości jednoczesnych sesji i błędnych prób uwierzytelniania;

Idea bezpieczeństwa jest następująca…

Aby ktoś mógł uzyskać nieuprawniony dostęp do naszych plików, musiałby znać adres IP, który wykorzystuje serwer, co jest dosyć proste do zdobycia. Jednak do połączenia konieczny jest także numer portu, który dla protokołu SSH jest ustawiony domyślnie na 22, czasem 2222 i to najczęściej te porty są skanowane podczas ataku. Atakujący wolą sprawdzić kolejne adresy IP, które by udostępniały SSH na znanych portach, zamiast skanować wszystkie 65535 portów dla każdego adresu. To jest zbyt czasochłonne. Należy dlatego zmienić port na którym ma nasłuchiwać Deamon systemowy na inny z zakresu 49152 – 65535.

Jeśli się jednak okaże, że atakujący będzie na tyle wytrwały, że przebrnie przez ten pierwszy etap i jego celem będzie konkretna ofiara, wtedy należy zabezpieczyć się przed możliwością „zgadywania” hasła przez atakującego, ponieważ w przeciwnym wypadku mając do dyspozycji długi (zależny proporcjonalnie od trudności hasła) przedział czasowy, byłoby bardzo możliwe odgadnięcie hasła do konta. W tym wypadku należy zablokować możliwość autoryzacji za pomocą loginu i hasła, w zamian za to wygenerować parę kluczy RSA (publiczny i prywatny). Publiczny klucz umieszczamy na naszym serwerze a klucz prywatny na urządzeniu, z którego chcemy mieć dostęp do serwera. Na tym etapie atakujący musiałby najpierw uzyskać fizyczny dostęp do jakiegoś urządzenia, z którego zdalnie łączymy się z serwerem, skopiować plik z kluczem prywatnym, a następnie jeszcze złamać hasło, którym jest zabezpieczony klucz prywatny. W tym wypadku zawsze można usunąć klucz publiczny z serwera, aby osoba atakująca nie mogła uzyskać dostępu do niego za pomocą zdobytego klucza.

Powyższe zalecenia nie dadzą stu procentowej pewności bezpieczeństwa, jednak w znaczący sposób je zwiększą, a przy zachowaniu rozsądku, metoda ta powinna być wystarczająco bezpieczna. Jeśli znasz jakieś inne ciekawe opcje zabezpieczenia udostępnianego serwera, napisz o tym w komentarzu.

Od teorii do praktyki

W kolejnym artykule postaram się opisać krok po kroku, jak stworzyć taki serwer na swoim komputerze.

Artykuł opisujący jak skonfigurować serwer SSH dostępny tutaj