this post was submitted on 12 Nov 2024
44 points (94.0% liked)

Selfhosted

40154 readers
574 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

  3. Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 1 year ago
MODERATORS
 

Hello. I’m pretty new here. I just managed to get my Raspberry Pi setup at home to selfhost a simple website that will act as my portfolio for some art I do.

I’m using WordPress to make the content of the website, meaning it runs on Apache, MariaDB and MySQL in the background. It’s connected via port 80 since I don’t want to pay for SSL certificates to setup https. There will be no accounts or transactions happening on my website. I don’t have anything to manage my dynamic IP but I’ll figure that out later. I’ve deleted the default Pi user on the RPi.

Are there security issues I should address preemptively? I’m worried for instance that I am exposing my home network, making it easier for someone to breach into whatever is connected there.

Any tips on making sure my setup is secure?

all 38 comments
sorted by: hot top controversial new old
[–] [email protected] 3 points 1 day ago (1 children)

Alright everyone, thank you so much for your thoughtful recommendations! To sum it up, here's what I have done:

  • I used let's encrypt's Certbot to get my SSL certs and setup https, auto-renew every 3 months and I setup a reminder to update Certbot every month.
  • I setup a permanent redirect from http to https in Apache
  • I installed a firewall on the Pi, only 80, 443 and [22 from my computer to the RPi] are open. I couldn't find the firewall settings on my router but I assume they exist since I had to forward 80 and 443 there.
  • installed the following plugins: WordFence and WP Fail2Ban
  • changed the user password on the pi to a better longer one

I think I should be all set, shouldn't I?

[–] [email protected] 2 points 1 day ago (1 children)

You may want to consider dockerizing your services just for maintainability and isolation from your host. I recommend something like Nginx Proxy Manager to serve as the "main entrance" for your docker network and to handle Let's Encrypt for you.

[–] [email protected] 1 points 9 hours ago

I second this. I didn't understand that until....you know, like you install the latest python or something and then your website is proof! Gone. Dockerization gives it a little bit of stability.

[–] [email protected] 23 points 2 days ago (1 children)

Go https, today there is no real reason not to and tons of good reasons to do it.

Let's encrypt is 100% free and using their certbot its also automated and easy to do.

[–] [email protected] 1 points 2 days ago (1 children)

Thanks, I’ll look into it. I didn’t know there were free SSL certs out there

[–] [email protected] 1 points 1 day ago

Yeah, afaik, you just need to install letsencrpyt and then run the command with sudo. It'll scan your apache conf and generate you an ssl version. Just make sure to include your domain name in the ServerName directive

[–] [email protected] 20 points 2 days ago* (last edited 2 days ago) (2 children)

since I don’t want to pay for SSL certificates to setup https.

You don't need to pay for SSL certs anymore, most of the time. You can get them for free from a bunch of different places now. I use Let's Encrypt. The web server/reverse proxy I use, Caddy is able to automatically get a cert for you, install it, and keep it renewed. The only time you need to pay for a cert is if you are handling financial transactions.

Are there security issues I should address preemptively?

WordPress itself has a generally good reputation for security, though depending on how the current drama goes, that may change. WordPress security problems have almost always stemmed from plugins or poor password hygiene. Remove any plugins you are not actively using, keep the ones you are using updated, and use a good password that you don't use anywhere else. A password wallet like Bit Warden can generate and store such passwords for you.

Better on the security front would be to evaluate whether you actually need something like WordPress at all. A static site would likely be far more secure. There's less moving parts that might be vulnerable.

While you could program a static site yourself, it's more common nowadays to use a static site generator like Hugo to build the site. You set it up once for how you want the site to look and then you write your posts in markdown or whatever your particular generator uses.

I don’t have anything to manage my dynamic IP

Most domain name providers have some sort of setup for dealing with dynamic IP addresses, a program called ddclient is pretty common and is available in most repos.

[–] [email protected] 2 points 2 days ago

Wow lots of info. I’ll check all of this out. You have a good point that I don’t need wordpress. Hugo looks interesting, thanks for the advice!

And yes, as said above, I’ll look into the free SSL certs to setup https.

[–] [email protected] 1 points 2 days ago

To add to this, you might check out some of the free Hugo themes here: https://themes.gohugo.io/tags/portfolio/

[–] [email protected] 25 points 2 days ago (3 children)

Take a look at certbot. You don't need to pay for ssl and ssl is actually pretty mandatory for anything served on the internet.

Make sure you don't forward too much ports. And make sure you have a working firewall that only allow those same ports. You should be good to go then.

[–] [email protected] 19 points 2 days ago (1 children)

Also be advised that wordpress will attract all the internet to try and hack in, so make sure you keep everything up to date

[–] [email protected] 6 points 2 days ago

Setting up fail2ban to block people trying to brute force the admin panel is a good start.

[–] [email protected] 6 points 2 days ago (1 children)

I would add from an end-user privacy perspective, they might want HTTPS. If I hit a website not using HTTPS, I pretty much immediately back out. Bad actors like hostile governments and hackers can use seemingly meaningless data against you.

I can’t remember exactly what happened but I remember back when WebMD was fighting against rolling out TLS hackers were able to find medical weaknesses against people.

[–] [email protected] 2 points 2 days ago

Not too mention the scary browser warnings. It's not a good look tbh if this is your portfolio. Lots of great considerations and tips here already though.

[–] [email protected] 1 points 2 days ago (2 children)

Noted ! I’ll make sure to set https up.

Tbh, I haven’t heard the word firewall since probably 2005… would my router have a firewall built in or is that something I need to add on, let’s say, the RPi ?

[–] [email protected] 3 points 2 days ago* (last edited 2 days ago) (1 children)

Add it to the Pi. Easier maintenance.

[–] [email protected] 2 points 1 day ago

Was going to say exactly the same thing.

Even if your router have one, better safe than sorry!

[–] [email protected] 2 points 2 days ago

Your router probably does have one, but your end devices should too. If your router is some piece of trash ISP-supplied one, it might not even have a firewall for IPv6 (if it even supports IPv6 at all).

[–] [email protected] 22 points 2 days ago* (last edited 2 days ago) (1 children)

Unless you require the dynamic features of Wordpress, you could have a look at some of the static site generators out there (such as Hugo). Having a static site would reduce the attack surface considerably. Also due to the shenanigans happening with Wordpress at the moment, I would be weary of using it.

About SSL, what others have already mentioned, SSL certs are available for free these days, thanks to letsencrypt.

[–] [email protected] 1 points 2 days ago* (last edited 2 days ago) (1 children)

There are also static export plugins for wordpress. One needs to get rid of comment boxes and such as they don't work then of course. But if all content is already in WordPress, serving just the static export is a low friction solution.

[–] [email protected] 2 points 2 days ago

I’d almost go through the trouble of getting the content out of Wordpress. The nice thing about static site generators is you can completely switch out the framework, runtime, base Docker image and/or OS at any time.

[–] [email protected] 7 points 2 days ago (1 children)

Let's Encrypt is good practice, but IMO if you're just serving the same static webpage to all users, it doesn't really matter.

Given that it's a tiny raspi, I'd recommend reducing the overhead that WordPress brings and just statically serve a directory with your site. Whether that means using wp static site options, or moving away from wp entirely is up to you.

The worst case scenario would be someone finding a vulnerability in the services that are publicly exposed (Apache), getting persistence on the device, and using that to pivot to other devices on your network. If possible, you may consider putting it in a routing DMZ. Make sure that the pi can only see the internet and whatever device you plan to maintain it with. That way even if someone somehow owns it completely, they won't be able to find any other devices to hack.

[–] [email protected] 8 points 2 days ago (1 children)

It may or may not be a concern to you, but if you are hosting it from your home then people will be able to determine your IP and rough physical location.

If you're on American cable internet and expecting a lot of traffic, your upload speed may become a problem.

[–] [email protected] 1 points 2 days ago (1 children)

Your first point is a good point. I guess it’s ok for now if my rough location is accessible. It’s not like my art is worth anything.

Regarding upload speed, yeah I know it could become an issue but since it’s just a portfolio website, I don’t expect more than a dozen visits a month.

[–] [email protected] 1 points 2 days ago* (last edited 2 days ago)

scraping bots are expected to visit it, nowadays more than in previous years. a few of them are search engines, but there's a lot of scraping for AI training, both on text and image data.

[–] [email protected] 1 points 1 day ago (2 children)

Definitely use cloudflare in front of your website

[–] [email protected] 3 points 1 day ago (1 children)

Yes and no. It's great for hiding your IP and preventing DDOS attacks, but it does require you to use their certs, which means they technically have access to your data. Cloudflare is pretty trustworthy, but the risk is still there.

[–] [email protected] 2 points 1 day ago

If the option is no certs...

[–] [email protected] 0 points 1 day ago

In my experience cloudflare has an issue with being slow

[–] [email protected] 1 points 1 day ago

If you care enough to set up, you can use cloudflare. They do some basic caching, certs, ddos protection for free.

[–] [email protected] 7 points 2 days ago

Keep wordpress up-to-date, and keep the number of plugins you use to a minimum.

[–] [email protected] 6 points 2 days ago (2 children)

The WordFence plugin is a must-have for security.

If you use Caddy instead of Apache then you get SSL automatically. You'll need php-fpm as well, tho.

[–] [email protected] 1 points 2 days ago (1 children)

What does WordFence provide that makes it a must have?

[–] [email protected] 2 points 2 days ago (1 children)

After X attempts to log in, it bans the IP address.

It will scan your wordpress files and alert you if any of them have changed in suspicious ways (hacked).

It can disable the xml-rpc endpoint which is rarely used and is a big vector for hacking.

... and a lot more but those are the main ones for me.

[–] [email protected] 1 points 1 day ago

Sweet thanks! Will add that ASAP

[–] [email protected] 0 points 2 days ago

Agreed on word fence.