Skip to main content
  1. Blog/

Veeam Hardened (Immutable) Repository

·1365 words·7 mins·
Author
Marco Escobar
Data protection, Kubernetes, cybersecurity and AI. Hands-on guides from the trenches: Veeam, Kasten, VMware, Oracle, cloud, and whatever I’m breaking in the homelab this week.
Table of Contents
Veeam Hardened (Immutable) Repository - hardened Linux repository overview

Exciting news: the release of Veeam Availability Suite version 11 brings more than 200 enhancements, including CDP snapshotless replication, Instant Recovery for NAS and databases, and the new Veeam Hardened Repository. In this post I’ll focus on installing and configuring this new repository type in detail, which lets us keep our backups immutable.

Initial Steps
#

As always, the first stop is the official Veeam documentation, in this case for the hardened Linux repository:

https://helpcenter.veeam.com/docs/backup/vsphere/hardened_repository.html?ver=110

There you’ll find all the requirements for this feature. One of the most important is that backup jobs must use forward incremental mode with full or synthetic backups for immutability to work correctly.

After reading the documentation, we move on to a base install of Ubuntu Linux 20.04 LTS. Once that’s done, we connect over SSH and update the operating system:

sudo apt-get update -y
sudo apt-get upgrade -y

```json



Veeam Hardened (Immutable) Repository - screenshot 1
Once the update finishes, we shut the Linux server down with: ```bash sudo poweroff ```bash In my case, since this is a virtual machine, I'll add a disk of the appropriate size to use as the repository. So we edit the VM settings, add a disk (for this lab I'll add a 2 TB disk), and then power the machine back on:
Veeam Hardened (Immutable) Repository - screenshot 2
## Veeam Repo Manager We connect over SSH again, and this time we'll use a great tool, Veeam Repo Manager, to make configuring the Veeam immutable repository even easier. It's available on the GitHub of Timothy Dewin, Solutions Architect at Veeam: https://github.com/tdewin/veeamhubrepo This tool lets us configure every requirement visually to get the repository set up correctly, so let's go ahead and install it. ## Installation and configuration Since we're already connected over SSH to the Ubuntu 20.04 LTS server and we've added a disk to store the backups, we run the following: ```bash sudo wget -O ./veeamhubrepo.deb https://github.com/tdewin/veeamhubrepo/releases/download/v0.3.1/veeamhubrepo_noarch.deb sudo apt-get install ./veeamhubrepo.deb sudo veeamhubrepo ```bash
Veeam Hardened (Immutable) Repository - screenshot 3
That last command, `sudo veeamhubrepo`, launches the tool's wizard:
Veeam Hardened (Immutable) Repository - screenshot 4
We select "Yes" by pressing "Enter", then enter the username that will hold the temporary privileges used for immutability. The default is "veeamrepo": change it to match your own user naming convention if you like, or just leave the default:
Veeam Hardened (Immutable) Repository - screenshot 5
Then we select "OK" when it reports that the user does not exist and confirms it will be created:
Veeam Hardened (Immutable) Repository - screenshot 6
We select "Yes" and enter the password for this user:
Veeam Hardened (Immutable) Repository - screenshot 7
It then confirms that the user was created, and we select "OK" to move on to partitioning the disk we added:
Veeam Hardened (Immutable) Repository - screenshot 8
In this lab I need to select disk number "3", the extra 2 TB disk we added, using the keyboard arrows and then pressing "Enter". In your case, select whichever disk you added:
Veeam Hardened (Immutable) Repository - screenshot 9
We confirm the selection and then click "OK":
Veeam Hardened (Immutable) Repository
Veeam Hardened (Immutable) Repository - screenshot 10
Veeam Hardened (Immutable) Repository - screenshot 11
After confirming and applying the changes, it shows the path where the disk will be mounted:
Veeam Hardened (Immutable) Repository - screenshot 12
You can edit the mount path if you want to change it. In our case we'll leave the default of /backups/repo001 and select "OK" to confirm the creation and mount:
Veeam Hardened (Immutable) Repository - screenshot 13
After configuring the disk where the immutable backups will be stored, there's a very important step: setting the time and time zone. We select "Yes":
Veeam Hardened (Immutable) Repository - screenshot 14
Veeam Hardened (Immutable) Repository - screenshot 15
In my case I'll select: ```text /usr/share/zoneinfo/Chile/Continental ```json
Veeam Hardened (Immutable) Repository - screenshot 16
Selecting it and pressing Enter on "OK" confirms the configuration:
Veeam Hardened (Immutable) Repository - screenshot 17
Then, after we select "OK", it asks about our NTP service, which can be local or over the internet:
Veeam Hardened (Immutable) Repository - screenshot 18
Veeam Hardened (Immutable) Repository - screenshot 19
Next it asks whether we want to apply the update:
Veeam Hardened (Immutable) Repository - screenshot 20
At this point you'll lose the connection to the server, so we reconnect through the vCenter web console and run: ```bash sudo veeamhubrepo

Access without SSH
#

Veeam Hardened (Immutable) Repository - screenshot 21

We go ahead and register our new repository by selecting option “3”, and confirm that the SSH service should start:

Veeam Hardened (Immutable) Repository - screenshot 22

It then tells us to connect from Veeam Backup & Replication using the credentials we created earlier and add it as a repository:

Veeam Hardened (Immutable) Repository - screenshot 23

Creating the repository in Veeam Backup & Replication
#

In Veeam Backup & Replication, we add the repository:

Veeam Hardened (Immutable) Repository - screenshot 24

As shown in the previous image, we select “Single-use credentials for hardened repository…” and enter the credentials:

Veeam Hardened (Immutable) Repository - screenshot 25

Then we click “Next” and confirm:

Veeam Hardened (Immutable) Repository - screenshot 26

Finally, we review the configuration summary:

Veeam Hardened (Immutable) Repository - screenshot 27

While the configuration runs from Veeam Backup & Replication, the Repo Manager utility detects the Veeam process:

Veeam Hardened (Immutable) Repository - screenshot 28

We then continue configuring the repository by selecting the partition that will host the backups:

Veeam Hardened (Immutable) Repository - screenshot 29

And here’s the most important part for this type of repository: the tool formats the partition with XFS and enables reflink, so we can take advantage of its features when running a synthetic full, for example, and it also enables the option to make backups immutable for as many days as needed (the default is 7 days):

Veeam Hardened (Immutable) Repository - screenshot 30

This is where the magic happens, as you can see in the previous image:

Veeam Hardened (Immutable) Repository - screenshot 31

Then we kick off a new backup job to the new hardened Linux repository:

Veeam Hardened (Immutable) Repository - screenshot 32

Backup deletion test
#

Now that we have a backup in the repository and immutability is enabled, let’s check whether backups can be deleted. In the Veeam Backup server, we go to the backup and try to delete the file:

Veeam Hardened (Immutable) Repository - screenshot 33

After confirming the deletion, the operation status window shows that the backup file cannot be deleted. It even reports the date (03/03/2021 20:02) when immutability expires, since we enabled it for 7 days:

Veeam Hardened (Immutable) Repository - screenshot 34

Even if you log in to the server directly, you won’t be able to delete the file, because it carries the advanced +i attribute that not even root can remove.

I know what you’re thinking right now: what if root clears the +i attribute and then deletes the file? Yes, that is possible. The key point is that this server’s credentials and access methods must be tightly restricted so that the backup files can’t be reached over the network and deleted by a malicious actor.

Veeam Hardened (Immutable) Repository - screenshot 35

In addition, this solution keeps a daemon running on the Linux server to enforce the immutability logic and apply changes according to the number of immutability days you’ve configured.

Veeam Hardened (Immutable) Repository - screenshot 36

That wraps up this detailed walkthrough for configuring immutability with the new repository type for Veeam Backup & Replication, the hardened Linux repository.

Frequently asked questions
#

Which backup mode do I need for immutability to work?

Backup jobs must use forward incremental mode with full or synthetic backups. This is a requirement in the official Veeam documentation for the hardened repository’s immutability to operate correctly.

Why is the disk formatted with XFS and reflink?

XFS with reflink enabled lets you take advantage of Veeam Fast Clone, so operations like a synthetic full happen by block reference instead of copying the data. This saves space and time, and the Repo Manager tool configures this partition for you.

Can root delete an immutable backup on this repository?

While immutability is in effect, the file carries the advanced +i attribute and not even root can remove it. Technically root could clear the +i attribute and then delete the file, which is why it’s critical to tightly restrict the server’s credentials and access methods so no malicious actor can reach the backups over the network.

What are single-use credentials?

When you add the repository in Veeam Backup & Replication, you select “Single-use credentials for hardened repository”. Veeam uses those credentials only during registration and does not store them persistently, which reduces the attack surface if the backup server is ever compromised.

How many immutability days are set by default?

The default is 7 days, but you can adjust it to as many days as you need. During that window the backups cannot be deleted, and Veeam even shows you the exact date when immutability expires when you try to remove the file.

Why are the time zone and NTP service so important?

The immutability logic relies on the server’s date and time to know when each backup’s protection expires. That’s why the wizard asks you to configure the time zone and an NTP service (local or over the internet), so the clock stays in sync and the immutability windows are honored.

Related posts#