# VPS

&lt;! InternalHost VPS support doc. Unmanaged. Jij bent root, jij bent verantwoordelijk.

# VPS

<!-- InternalHost VPS support doc. Unmanaged. Jij bent root, jij bent verantwoordelijk. -->

# VPS (KVM-virtualisatie) — handleiding

```
$ ssh root@<jouw-ip>
```

Een InternalHost VPS is een echte KVM-virtuele machine op onze virtualisatie-hosts in Amsterdam. **Dedicated resources, geen overbooking.** Je krijgt volledige root-toegang en een publiek IPv4-adres uit onze eigen AS204729-ruimte. Wat erop draait, beheer je zelf — dit is unmanaged.

**OS-keuze bij bestellen** (cloud-init images): Ubuntu 22.04 LTS, Ubuntu 24.04 LTS, Debian 12, Debian 13, AlmaLinux 9. De OS-keuze maak je in de checkout; herinstallen kan later via het paneel.

> Wil je dat iemand dit voor je beheert (updates, monitoring, hardening)? Dat is precies wat **[EASEO](https://easeo.nl)** doet — op dezelfde VPS.

---

## Aan de slag

### 1. Gegevens ophalen

Na provisioning vind je in je [klantenpaneel](https://internalhost.eu) onder je dienst:

- **IPv4-adres** (uit onze eigen AS204729-ruimte)
- **Root-wachtwoord** (initieel, gegenereerd)
- **OS** dat je koos

### 2. Eerste login via SSH

Vanaf Linux/macOS of Windows (PowerShell/WSL):

```bash
ssh root@<jouw-ip>
# bij Ubuntu/Debian images die geen root-login toestaan:
ssh ubuntu@<jouw-ip>   # Ubuntu cloud-init default user
ssh debian@<jouw-ip>   # Debian cloud-init default user
ssh almalinux@<jouw-ip> # AlmaLinux cloud-init default user
```

Krijg je een host-key-waarschuwing bij een herinstall? Dat hoort — het is een nieuwe machine. Verwijder de oude key:

```bash
ssh-keygen -R <jouw-ip>
```

### 3. Console (als SSH niet werkt)

Netwerk verkloot? Firewall dichtgezet? Gebruik de **noVNC-console** in het klantenpaneel onder je dienst → *Console*. Die werkt los van SSH en netwerk — handig als je jezelf hebt buitengesloten.

### 4. Direct het minimale hardenen

```bash
# Maak een non-root user met sudo (Ubuntu/Debian)
adduser nick
usermod -aG sudo nick        # Debian/Ubuntu
# AlmaLinux: usermod -aG wheel nick

# SSH-key plaatsen i.p.v. wachtwoord
ssh-copy-id nick@<jouw-ip>   # vanaf je eigen machine

# Updates draaien (zie onder)
```

---

## Veelvoorkomende taken

### Root-wachtwoord wijzigen

```bash
passwd            # voor de ingelogde user
sudo passwd root  # voor root
```

> InternalHost reset **geen** wachtwoorden voor je. Raak je root kwijt en heb je geen sudo-user of SSH-key? Dan herinstall je het OS (data weg). Zet dus een SSH-key.

### SSH-keys gebruiken (aanrader, schakel wachtwoord-login uit)

```bash
# Op je eigen machine: genereer een key als je er nog geen hebt
ssh-keygen -t ed25519 -C "jouw@email"

# Plaats hem op de VPS
ssh-copy-id nick@<jouw-ip>

# Op de VPS: zet wachtwoord-login uit
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart ssh    # Debian/Ubuntu
# AlmaLinux: sudo systemctl restart sshd
```

cloud-init zet je `ssh_authorized_keys` automatisch op de default user als je bij bestellen een public key opgaf. Officiële referentie: [cloud-init — Configure SSH and SSH keys](https://docs.cloud-init.io/en/latest/reference/yaml_examples/ssh.html).

### OS herinstallen

In het klantenpaneel onder je dienst → *Herinstalleren* → kies een OS-image. De VPS wordt opnieuw uitgerold met cloud-init.

> **Herinstall wist de hele schijf.** Maak eerst een backup of snapshot (zie onder). Het IP blijft hetzelfde; de SSH host-key verandert (`ssh-keygen -R <ip>`).

### Networking & DNS

Je VPS heeft een statisch publiek IPv4. Het wordt door cloud-init geconfigureerd — niks aan netplan/`/etc/network/interfaces` aanpassen tenzij je weet wat je doet.

**Domein naar je VPS wijzen** doe je bij je domein-registrar, niet bij ons:

```
A     @      <jouw-ip>
A     www    <jouw-ip>
AAAA  @      <jouw-ipv6>   # als je IPv6 hebt aangevraagd
```

DNS-propagatie checken:

```bash
dig +short A jouwdomein.nl
dig +short AAAA jouwdomein.nl
```

### Firewall (ufw / nftables)

**Ubuntu/Debian — ufw** (eenvoudig):

```bash
sudo apt install -y ufw
sudo ufw allow OpenSSH        # of: sudo ufw allow 22/tcp
sudo ufw allow 80,443/tcp
sudo ufw enable
sudo ufw status verbose
```

> **Zet SSH (22) open vóór je `ufw enable` draait**, anders sluit je jezelf buiten. Gebeurt het toch: gebruik de noVNC-console.

**AlmaLinux — firewalld:**

```bash
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service={http,https}
sudo firewall-cmd --reload
```

**nftables** (rechtstreeks, gevorderd): config in `/etc/nftables.conf`, herladen met `sudo systemctl reload nftables`.

Officiële referenties: [Ubuntu Server — Firewalls (ufw)](https://ubuntu.com/server/docs/how-to/security/firewalls/), [UFW Community Help](https://help.ubuntu.com/community/UFW).

### Updates

```bash
# Ubuntu / Debian
sudo apt update && sudo apt full-upgrade -y
sudo apt install -y unattended-upgrades   # automatische security-updates

# AlmaLinux
sudo dnf upgrade --refresh -y
sudo dnf install -y dnf-automatic && sudo systemctl enable --now dnf-automatic.timer
```

Een reboot na kernel-updates:

```bash
sudo reboot
```

### Snapshots & backups

- **Snapshots** maak je in het klantenpaneel onder je dienst. Een snapshot is een point-in-time-kopie op dezelfde host — prima voor "ik ga iets riskants doen", **geen** disaster-recovery (host kapot = snapshot kapot).
- **Echte backups** zet je off-site. Bijvoorbeeld naar onze [S3 Storage](https://internalhost.eu/products/s3-storage) of je eigen locatie:

```bash
# Voorbeeld: dump + sync naar S3-compatible bucket met restic
sudo apt install -y restic
restic -r s3:https://s3.internalhost.eu/jouw-bucket init
restic -r s3:https://s3.internalhost.eu/jouw-bucket backup /etc /home /var/www
```

> Eén kopie op dezelfde host is geen backup. Wij draaien de infra; jouw data backuppen is jouw verantwoordelijkheid. (Of laat **[EASEO](https://easeo.nl)** het regelen.)

### IPv6

IPv6 leveren we uit onze eigen IPv6-ruimte op aanvraag. Is het toegewezen, dan zet cloud-init het adres op. Controleer:

```bash
ip -6 addr show
ping6 -c3 google.com
```

Geen IPv6 zichtbaar maar wel aangevraagd? Open een ticket.

---

## Problemen oplossen

| Symptoom | Oorzaak / oplossing |
|---|---|
| `Connection refused` op SSH | sshd draait niet of firewall blokkeert 22. Check via noVNC-console: `systemctl status ssh`. |
| `Connection timed out` op SSH | Firewall (ufw/nftables) of verkeerd IP. Console openen, `sudo ufw status`. |
| `Permission denied (publickey)` | Wachtwoord-login uit en geen key geplaatst. Console → `/etc/ssh/sshd_config` → `PasswordAuthentication yes`. |
| Host-key-waarschuwing na herinstall | Normaal. `ssh-keygen -R <ip>`. |
| Schijf vol | `df -h`, ruim `/var/log` en oude pakketten: `sudo apt autoremove --purge`. |
| Geen netwerk na config-edit | Je hebt cloud-init's netconfig overschreven. Console → herstel of herinstall. |
| Hoge load / OOM-kills | `htop`, `dmesg | grep -i oom`. Te kleine tier? Upgrade de dienst in het paneel. |

Boot-/console-output bekijken zonder SSH: noVNC-console in het paneel.

---

## FAQ

**Is een InternalHost VPS managed?**
Nee. Unmanaged-by-default. Wij houden de host, het netwerk, stroom en koeling overeind. Alles *binnen* je VPS (OS-updates, software, security, backups) doe je zelf. Managed nodig? → [EASEO](https://easeo.nl).

**Welke OS'en kan ik kiezen?**
Ubuntu 22.04, Ubuntu 24.04, Debian 12, Debian 13, AlmaLinux 9 — allemaal cloud-init images. Andere distro's zijn niet officieel ondersteund maar je mag op eigen risico installeren via de console/ISO (op aanvraag).

**Krijg ik een eigen, vast IP-adres?**
Ja, een publiek IPv4 uit onze eigen AS204729-ruimte. Het is van jou zolang de dienst loopt. IPv6 uit onze eigen IPv6-ruimte op aanvraag.

**Hebben jullie root-toegang tot mijn VPS?**
We hebben hypervisor-toegang (we kunnen de VM stoppen/starten/herinstallen en de console zien), maar we loggen niet routinematig in je OS in. Voor support kunnen we vragen om toegang; jij bepaalt.

**Ik ben mezelf buitengesloten. Wat nu?**
Gebruik de noVNC-console in het klantenpaneel — die werkt los van SSH en je firewall. Lukt het echt niet meer, dan is herinstallen de laatste optie (data weg).

**Resetten jullie mijn root-wachtwoord?**
Nee. Zet een SSH-key en een sudo-user, dan heb je dat nooit nodig. Een reset zou een herinstall betekenen.

**Hoeveel verkeer is inbegrepen?**
Per tier (zie [catalogus](https://internalhost.eu/products/vps)): 1–8 TB afhankelijk van je plan. Fair-use, geen verrassingsfacturen voor "egress" zoals bij hyperscalers.

**Mag ik een mailserver / VPN / Tor-node / game draaien?**
Ja, zolang je geen klootzak bent — lees de [AUP](https://internalhost.eu/aup). Mail vereist mogelijk PTR/rDNS; open een ticket voor reverse DNS op je IP.

**Doen jullie DDoS-mitigatie?**
Basis volumetrische bescherming op netwerkniveau via AS204729. Geen application-layer scrubbing. Voor zware bescherming: overleg via een ticket of bekijk [transit](./colocatie-transit.md).

**Backuppen jullie mijn VPS automatisch?**
Nee, niet by-default. Snapshots maak je zelf in het paneel; echte off-site backups regel je zelf (zie boven) of via EASEO.

---

## Bronnen

- [cloud-init — Configure SSH and SSH keys](https://docs.cloud-init.io/en/latest/reference/yaml_examples/ssh.html)
- [cloud-init — User passwords](https://docs.cloud-init.io/en/latest/reference/yaml_examples/set_passwords.html)
- [Ubuntu Server — Firewalls (ufw)](https://ubuntu.com/server/docs/how-to/security/firewalls/)
- [UFW — Ubuntu Community Help](https://help.ubuntu.com/community/UFW)
- [Debian Wiki — SSH](https://wiki.debian.org/SSH)
- [AlmaLinux documentatie](https://wiki.almalinux.org/)