Making Self-Hosted Services Safe: A Journey to Secure Immich and Jellyfin
How to protect your self-hosted services when they don’t support external verification
As someone who’s passionate about self-hosting, I recently found myself in a situation where I had to get creative to secure my services. I had set up a VPS with Pangolin, a reverse proxy, and Geoblocking, and CrowdSec for added security. But then I realized that some of my services, like Jellyfin, didn’t support having an authentication layer in front. I was stuck wondering how to make them secure without breaking their functionality.
This is a common problem many of us face when self-hosting. We want to make sure our services are safe from unauthorized access, but some apps just don’t play nice with external verification. So, what can we do? In this post, I’ll share my journey to secure Immich and Jellyfin, and the solutions I found along the way.
Understanding the Problem
When we self-host services, we’re essentially creating a direct connection between our server and the outside world. This can be a security risk if we’re not careful. Services like Immich and Jellyfin are designed to be accessed from within our local network, but what if we want to access them remotely? That’s where the problem starts.
Some services, like Immich, have built-in authentication, which makes it easy to add an extra layer of security. But others, like Jellyfin, don’t have this feature. So, how do we protect them from unauthorized access?
My Solution: Using a Reverse Proxy
One solution I found was to use a reverse proxy. A reverse proxy acts as a middleman between my server and the outside world. It can handle authentication, encryption, and even caching. By setting up a reverse proxy, I could add an extra layer of security to my services without modifying them.
I used a combination of Pangolin and CrowdSec to create a secure reverse proxy. Pangolin handled the authentication and encryption, while CrowdSec took care of Geoblocking and IP filtering. This setup allowed me to control who could access my services and from where.
Securing Jellyfin
Securing Jellyfin was a bit trickier. Since it doesn’t support external verification, I had to find another way to protect it. I ended up using a combination of Docker and a custom authentication script. By running Jellyfin in a Docker container, I could isolate it from the rest of my system and limit its exposure to the outside world.
The custom authentication script allowed me to add a basic authentication layer to Jellyfin. It wasn’t as robust as I would have liked, but it was better than nothing. I also made sure to limit the ports and IP addresses that could access Jellyfin, further reducing the risk of unauthorized access.
Lessons Learned
Throughout this journey, I learned a few valuable lessons. First, self-hosting requires a lot of experimentation and creativity. There’s no one-size-fits-all solution, and we often have to come up with our own solutions to common problems.
Second, security is an ongoing process. It’s not something we can set up once and forget about. We need to constantly monitor our services and update our security measures to stay ahead of potential threats.
Lastly, the self-hosting community is incredibly helpful and supportive. Without the help of online forums and fellow self-hosters, I wouldn’t have been able to find the solutions I needed.
Conclusion
Making self-hosted services safe requires a combination of creativity, experimentation, and community support. By using a reverse proxy, Docker, and custom authentication scripts, we can add an extra layer of security to our services, even if they don’t support external verification.
I hope my journey to secure Immich and Jellyfin has been helpful to you. If you have any tips or solutions to share, please leave them in the comments below. Let’s work together to make self-hosting safer and more accessible to everyone.
Zabezpieczanie Usług Samo-Hostowanych: Podróż po Zabezpieczeniu Immich i Jellyfin
Jak chronić usługi samo-hostowane, gdy nie obsługują one zewnętrznej weryfikacji
Jako osoba zainteresowana samo-hostowaniem, ostatnio znalazłem się w sytuacji, w której musiałem być kreatywny, aby zabezpieczyć moje usługi. Ustawiałem VPS z Pangolin, serwerem proxy odwrotnym i Geoblockingiem oraz CrowdSec, aby zapewnić dodatkowe zabezpieczenia. Ale potem zorientowałem się, że niektóre z moich usług, takie jak Jellyfin, nie obsługują warstwy uwierzytelniania przed nimi. Byłem zdezorientowany, jak je zabezpieczyć, nie psując ich funkcjonalności.
To jest powszechny problem, z którym wielu z nas się spotyka podczas samo-hostowania. Chcemy mieć pewność, że nasze usługi są bezpieczne przed nieautoryzowanym dostępem, ale niektóre aplikacje po prostu nie współpracują z zewnętrzną weryfikacją. Co więc możemy zrobić? W tym poście podzielę się swoją podróżą, aby zabezpieczyć Immich i Jellyfin, oraz rozwiązaniami, które znalazłem po drodze.
Zrozumienie Problemu
Gdy samo-hostujemy usługi, tworzymy bezpośrednie połączenie między naszym serwerem a światem zewnętrznym. Może to stanowić ryzyko bezpieczeństwa, jeśli nie będziemy ostrożni. Usługi takie jak Immich i Jellyfin są zaprojektowane do dostępu z naszej sieci lokalnej, ale co jeśli chcemy uzyskać do nich dostęp zdalnie? To jest miejsce, w którym problem zaczyna się.
Niektóre usługi, takie jak Immich, mają wbudowane uwierzytelnianie, co ułatwia dodanie dodatkowej warstwy zabezpieczeń. Ale inne, takie jak Jellyfin, nie mają tej funkcji. Jak więc je chronimy przed nieautoryzowanym dostępem?
Moje Rozwiązanie: Użycie Serwera Proxy Odwrotnego
Jednym z rozwiązań, które znalazłem, było użycie serwera proxy odwrotnego. Serwer proxy odwrotny działa jako pośrednik między moim serwerem a światem zewnętrznym. Może on obsługiwać uwierzytelnianie, szyfrowanie, a nawet buforowanie. Ustawiając serwer proxy odwrotny, mógłbym dodać dodatkową warstwę zabezpieczeń do moich usług bez modyfikowania ich.
Użyłem połączenia Pangolin i CrowdSec, aby utworzyć bezpieczny serwer proxy odwrotny. Pangolin obsługiwał uwierzytelnianie i szyfrowanie, podczas gdy CrowdSec zajmował się Geoblockingiem i filtrowaniem IP. To ustawienie pozwoliło mi kontrolować, kto może uzyskać dostęp do moich usług i z jakiego miejsca.
Zabezpieczanie Jellyfin
Zabezpieczanie Jellyfin było nieco trudniejsze. Ponieważ nie obsługuje ono zewnętrznej weryfikacji, musiałem znaleźć inny sposób, aby je zabezpieczyć. W końcu użyłem połączenia Docker i niestandardowego skryptu uwierzytelniania. Uruchamiając Jellyfin w kontenerze Docker, mógłbym odizolować go od reszty mojego systemu i ograniczyć jego narażenie na świat zewnętrzny.
Niestandardowy skrypt uwierzytelniania pozwolił mi dodać podstawową warstwę uwierzytelniania do Jellyfin. Nie było to tak mocne, jak bym chciał, ale było lepsze niż nic. Zrobiłem również wszystko, aby ograniczyć porty i adresy IP, które mogą uzyskać dostęp do Jellyfin, co dalej zmniejszyło ryzyko nieautoryzowanego dostępu.
Lekcje Naukowe
Na przestrzeni tej podróży nauczyłem się kilku cennych lekcji. Po pierwsze, samo-hostowanie wymaga wielu eksperymentów i kreatywności. Nie ma jednego, uniwersalnego rozwiązania, i często musimy sami tworzyć rozwiązania dla typowych problemów.
Po drugie, zabezpieczenia są procesem ciągłym. Nie jest to coś, co możemy ustawić raz i zapomnieć o tym. Musimy stale monitorować nasze usługi i aktualizować nasze zabezpieczenia, aby pozostać przed potencjalnymi zagrożeniami.
Wreszcie, społeczność samo-hostowania jest niesamowicie pomocna i wspierająca. Bez pomocy forów internetowych i innych samo-hosterów nie byłbym w stanie znaleźć rozwiązań, których potrzebowałem.
Wnioski
Zabezpieczanie usług samo-hostowanych wymaga połączenia kreatywności, eksperymentowania i wsparcia społeczności. Używając serwera proxy odwrotnego, Docker i niestandardowych skryptów uwierzytelniania, możemy dodać dodatkową warstwę zabezpieczeń do naszych usług, nawet jeśli nie obsługują one zewnętrznej weryfikacji.
Mam nadzieję, że moja podróż, aby zabezpieczyć Immich i Jellyfin, była pomocna dla was. Jeśli macie jakieś wskazówki lub rozwiązania do podzielenia się, proszę zostawcie je w komentarzach poniżej. Dzielmy się wiedzą i pracujmy razem, aby samo-hostowanie było bezpieczniejsze i bardziej dostępne dla wszystkich.