I’m not great with Docker or networking, so when I picked up an n100 mini pc for self hosting I installed Ubuntu and Tipi to get started.
I used Tipi to install Immich and forwarded my ports, then setup cloudflare tunneling to expose it to the internet. Currently I’m migrating from Google Photos.
But since I’m new to this I’m worried about exposing Immich to the internet without really knowing what I’m doing. Any suggestions on ways to monitor my setup to make sure nothing goes wrong or gets hacked? Ideally any application suggestions would come from the Tipi app store but I’m willing to learn if there’s no other option. Thanks!
First, I would caution against exposing services to the internet. It would be far better to leave everything behind a VPN that only you or trusted peers can access.
Past that you can use tools like OSSEC, Snort, and fail2ban.
Yes, a VPN with strong authentication is what you want.
Thank you. Is leaving everything behind a vpn what Tailscale does?
Tailscale is a mesh network. It’s all encrypted, like a VPN, but not exactly the same thing.
It’s kind of like each member of the network having a VPN connection to every other member of the network.
Tailscale has a neat feature called Funnel, which funnels specified inbound traffic from the internet to a specific resource/service/device.
That traffic is encrypted too, starting from the entry point (which is hosted by Tailscale).
This can be useful for example, for something like Nextcloud, so clients don’t have to run the Tailscale app to get access.
Yes
That’s what I do, everything local only and then remote access through Tailscale
It’s not a simple task, so I won’t list many specifics, but more general principles.
First, some specifics:
- disable remote root login via ssh.
- disable password login, and only permit ssh keys.
- run fail2ban to lock people out automatically.
Generally:
- only expose things you must expose. It’s better to do things right and secure than easy. Exposing a webservice requires you to expose port 443 (https). Basically everything else is optional.
- enable every security system that you don’t have reason to disable. Selinux giving you problems? Don’t turn it off, learn how to write rules to let your application do the specific things it needs. Only make firewall exceptions where needed, rather than disabling the firewall.
- give system users the minimum access they require to function.
- set folder permissions as restrictively as possible. FACLs will help, because it lets you be much more nuanced.
- automatic updates. If you have to remember to do it, it won’t happen. Failure to automate updates means your software is out of date.
- consider setting up a dedicated authentication setup like authellia or keycloak. Applications tend to, frankly, suck at security. It’s not what they’re making so it’s not as good as a dedicated security service. There are other follow on benefits.
- if it supports two factor, enable it.
You mentioned using cloud flare, which is good. You might also consider configuring your firewall to disallow outbound connections to your local network. That way if your server gets owned, they can’t poke other things on your network.
only expose things you must expose. It’s better to do things right and secure than easy. Exposing a webservice requires you to expose port 443 (https). Basically everything else is optional.
Not sure if it’s always possible but I setup an auth portal via port 443 where I’m using authelia and fail2ban, and using traefik to route authenticated users to other ports from there. So for example Plex 32400 is not exposed, only 443. But you get there via 443 and authentication.
Yup, that’s a really good pattern to follow. Not only does it minimize your exposure behind a secured entry, it also makes sure that all of your access is uniformly authenticated.
You have to do some shenanigans to do something similar with other, non-http based services, but it’s possible with most of them.
Have a look at Tailscale for your devices, this will prevent you from having to expose anything to the Internet, but rather having it behind your own VPN solution. Tailscale is the kinda service that is stupid easy to get going with too. HIGHLY recommend it!
Thanks! I set it up last night after getting advice here!
Hey don’t mean to hijack, I know tailscale isnt necessarily a tunnel (correct me if I’m wrong) but does it provide the typical issues with apps like android auto not working while connected to a VPN?
Neber tried it with Android Auto before, but I doubt it would, it’s a mesh vpn - not a typical vpn(proxy). So Tailscale is mostly for connecting your own devices together, however it’s possible that configure it to use Mullvad for exit nodes, if needed.
Thanks to everyone who took the time to answer. How do I check if my server has been accessed?
trough ssh when you connect to your machine run :
lastb -10
This will show you the last 10 login failed attemps you can change to 20 or whatever
you can also run: last -10 to see the last successful logged in
use :
more history
to see all the commands that someone have typed
on the dir /var/logs you have a lot of another logs too
for more paranoid level use
netstat -a
This will show you all incoming and outgoing communications
and like the others said considere using firewall and fail2ban
Note: don’t relly to much on firewalls since they are easy to bypass
keep all softwares updated
read frequently about new vulnerabilities if there is some vulnerability that affects your software until gets patched turn of that service.
Thank you!
You just don’t and pray for the best /j
- create empty debit account
- place credentials to account in server’s home directory
- if you get a call from your new account’s bank, they’ve got your server
This is honeypot security and is a best practice
/s