Skip to content

Commit

Permalink
#1066 - Security Tips for Linux Distros (#1082)
Browse files Browse the repository at this point in the history
* Create vserver-linux-security-tips.md

* Textual improvements

* Few more guideline tweaks

* Update vserver-linux-security-tips.md

Adjustment of headings and other small things.

* Create linux-security-tips.md

German translation for the "linux-security-tips" guide.

---------

Co-authored-by: Jacob <[email protected]>
Co-authored-by: Florian Galz <[email protected]>
  • Loading branch information
3 people authored Aug 2, 2023
1 parent 72f93ad commit d62490a
Show file tree
Hide file tree
Showing 2 changed files with 168 additions and 0 deletions.
80 changes: 80 additions & 0 deletions docs/vserver-linux-security-tips.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
---
id: linux-security-tips
title: Linux Security Tips
description: Tips and advice on how to secure your Linux server - ZAP-Hosting.com documentation
sidebar_label: Security Tips
---

## Introduction

SSH (Secure Shell) is a powerful service that allows you to remotely access and execute commands on your server. See how to setup here: [How to setup SSH in your server?](https://zap-hosting.com/guides/docs/vserver-linux-ssh)

However, this is insecure by default, because it uses a password for login, and your identity can be spoofed using a brute-force tool. Regardless, we always suggest that you use a strong password to make this task harder.

## SSH Keys

There is a solution to this. To ensure that no one can brute force and get access to your server, you can set up an SSH service on your server to restrict login with the use of SSH-Keys. To do so, take a look at [our SSH guide](https://zap-hosting.com/guides/docs/vserver-linux-sshkey) which explains how to generate and add an SSH key to gameservers, and how to do so for rootservers.

## Limiting Connections

In order for your server to be accessed from an external IP, the port where it's running must be open (this is 22/TCP usually).

There is a small problem with this though, not only can you access the port and try to log in, everyone can. This is a security flaw because bad actors could potentially flood your server with login attempts to either find the correct password (unless you use an SSH key to log in, as explained in the previous section) or attempt to saturate the server network through flooding which is a common attack.

To reduce the impact, you can apply firewall rules that limit access to the port. Using the firewall methods below, you can limit the number of connections that your server can receive, making it more difficult to flood your server with login attempts.

There are two ways of doing this, the more complicated but detailed method through IPTables which we recommend or through UFW which is more basic but easier to set up.

### IPTables

In this section, you will be setting up the IPTables using a few commands. You will be able to see the explanation for each command below the code block.

:::note
The following commands may not work for every single Linux distro, but they will work on the vast majority of the most popular distros.
:::

Firstly, log in to your Linux server. If you need help doing this, please follow our [SSH access](https://zap-hosting.com/guides/docs/vserver-linux-ssh) guide which explains how to do this. Next, run the following commands in the order they are listed. Below the commands, you can see what the command is doing to help you understand.

```
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 --connlimit-mask 32 -j DROP
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 1 --hitcount 2 -j DROP
```

1. The first rule drops packets if there are more than 2 connections in the `TIME_WAIT` state to port 22 from a single IP.
2. The second rule adds the IP address of a new connection to the `recent` list.
3. The third rule drops new connections from IP addresses that have attempted to make more than 2 connections in the last second.



### UFW

Through the use of a simple UFW command, in this section, you will set up a basic firewall.

Firstly, log in to your Linux server. If you need help doing this, please follow our [SSH access](https://zap-hosting.com/guides/docs/vserver-linux-ssh) guide which explains how to do this. Now run the following command which will limit the connection to 6 per minute.

```
ufw limit 22/tcp
```

:::note
UFW only allows you to limit connections to 6 per minute. UFW's limiter is quite basic and may not be suitable for all situations. For a more detailed and flexible configuration, we recommend using IPTables directly.
:::


## Securing webservers using Cloudflare

Many people use Cloudflare as their domain DNS manager, Cloudflare not only has one of the largest networks in the world, which offer lower page load times, lower latency and better overall experience, but they also protect your websites from DoS/DDoS attacks, including flooding and new types of attacks that come to light every day.
In this guide, you will learn how to protect your web server from attacks.

We will start by assuming that your domain is already managed by Cloudflare, if not you can follow [their guide](https://developers.cloudflare.com/fundamentals/get-started/setup/add-site/) to move your domain. Go to the DNS Records tab from Cloudflare's dashboard, and make sure that your record to your webserver has the orange cloud and says "Proxied".

![](https://i.imgur.com/wNEoWQP.png)

Then, all traffic passing through your domain will go through Cloudflare and from there to your server, being legitimate traffic.
However, your server is still accessible from outside Cloudflare, for this you must limit access to ports 80 and 443 of the TCP protocol of your Linux server, and only allow access if it comes from legitimate Cloudflare traffic.

To do that, you can manually limit access using firewall rules from the [Cloudflare public IPv4 list](https://cloudflare.com/ips-v4) and [Cloudflare public IPv6 list](https://cloudflare.com/ips-v6).

Alternatively, you can save some time and use tools like [Cloudflare-ufw](https://github.com/Paul-Reed/cloudflare-ufw) to quickly mass import these firewall rules.
Make sure you do not have any separate rules that allow unrestricted access to your webserver, other than the ones you recently added, otherwise they won't work.
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
---
id: linux-security-tips
title: Tipps zur Linux-Sicherheit
description: Tipps und Hinweise für die Sicherung deines Linux-Servers - ZAP-Hosting.com Dokumentation
sidebar_label: Sicherheitstipps

---

## Einführung

SSH (Secure Shell) ist ein leistungsfähiger Dienst, mit dem du aus der Ferne auf deinen Server zugreifen und Befehle darauf ausführen kannst. Siehe hier, wie man diesen Dienst einrichtet: [Wie richte ich SSH auf meinem Server ein?](https://zap-hosting.com/guides/de/docs/vserver-linux-ssh/)

Standardmäßig ist dies jedoch unsicher, da für die Anmeldung ein Passwort verwendet wird und deine Identität mit einem Brute-Force-Tool gefälscht werden kann. Unabhängig davon empfehlen wir dir immer, ein starkes Passwort zu verwenden, um diese Aufgabe zu erschweren.

## SSH Keys

Dafür gibt es allerdings eine Lösung. Um sicherzustellen, dass sich niemand mit roher Gewalt Zugang zu deinem Server verschaffen kann, kannst du mit Hilfe von SSH-Schlüsseln einen SSH-Dienst auf deinem Server einrichten, um den Login zu beschränken. Siehe dazu [unsere SSH-Anleitung](https://zap-hosting.com/guides/docs/vserver-linux-sshkey) an, in der erklärt wird, wie man einen SSH-Schlüssel generiert und hinzufügt.



## Einschränkung der Verbindungen

Um von einer externen IP-Adresse auf Ihren Server zugreifen zu können, muss der Port, auf dem er läuft, offen sein (normalerweise ist das 22/TCP).

Dabei gibt es allerdings ein kleines Problem: Nicht nur Sie können auf den Port zugreifen und versuchen, sich anzumelden, sondern jeder kann das. Dies ist eine Sicherheitslücke, da böswillige Akteure den Server mit Anmeldeversuchen überschwemmen könnten, um entweder das richtige Kennwort herauszufinden (es sei denn, du verwendest einen SSH-Schlüssel für die Anmeldung, wie im vorigen Abschnitt erläutert) oder zu versuchen, das Servernetzwerk durch Flooding zu überlasten, was häufig der Fall ist.

Um diese Auswirkungen zu verringern, kannst du Firewall-Regeln anwenden, die den Zugriff auf den Port beschränken. Mit den unten beschriebenen Firewall-Methoden kannst du die Anzahl der Verbindungen, die dein Server empfangen kann, begrenzen und so die Überflutung deines Servers mit Anmeldeversuchen erschweren.

Es gibt zwei Möglichkeiten, dies zu erreichen. Die kompliziertere, aber detailliertere Methode über IPTables, die wir empfehlen oder über UFW, die grundlegender, aber leichter einzurichten ist.



### IPTables

In diesem Abschnitt wirst du die IPTables mit einigen Befehlen einrichten. Die Erklärungen zu den einzelnen Befehlen findest du unterhalb des Codeblocks.

:::note
Die folgenden Befehle funktionieren möglicherweise nicht mit jedem beliebigen Linux-Betriebssystem, aber sie funktionieren mit der überwiegenden Mehrheit der beliebtesten Betriebssysteme.
:::

Melde dich zunächst bei deinem Linux-Server an. Wenn du dabei Hilfe brauchst, folge bitte unserer Anleitung [SSH-Zugang](https://zap-hosting.com/guides/docs/vserver-linux-ssh), die erklärt, wie dies funktioniert. Führe dann die folgenden Befehle in der Reihenfolge aus, in der sie aufgelistet sind. Unterhalb der Befehle sehen Sie zum besseren Verständnis, was der jeweilige Befehl bewirkt.

```
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 --connlimit-mask 32 -j DROP
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 1 --hitcount 2 -j DROP
```

1. Die erste Regel verwirft Pakete, wenn sich mehr als 2 Verbindungen im Zustand `TIME_WAIT` zu Port 22 von einer einzigen IP befinden.
2. Die zweite Regel fügt die IP-Adresse einer neuen Verbindung zur `recent`-Liste hinzu.
3. Die dritte Regel verwirft neue Verbindungen von IP-Adressen, die in der letzten Sekunde versucht haben, mehr als zwei Verbindungen herzustellen.



### UFW

In diesem Abschnitt wirst du mithilfe eines einfachen UFW-Befehls eine einfache Firewall einrichten.

Melde dich zunächst bei deinem Linux-Server an. Wenn du dabei Hilfe brauchst, folge bitte unserer Anleitung [SSH-Zugang](https://zap-hosting.com/guides/docs/vserver-linux-ssh), in der erklärt wird, wie dies funktioniert. Führe nun den folgenden Befehl aus, der die Verbindung auf 6 pro Minute begrenzt.

```
ufw limit 22/tcp
```

:::note

UFW erlaubt es dir lediglich, die Anzahl der Verbindungen auf 6 pro Minute zu begrenzen. Der Begrenzer von UFW ist recht einfach und eignet sich möglicherweise nicht für alle Situationen. Für eine detailliertere und flexiblere Konfiguration empfehlen wir die direkte Verwendung von IPTables.

:::



## Absicherung von Webservern mit Cloudflare

Viele Menschen nutzen Cloudflare als ihren Domain-DNS-Manager. Cloudflare verfügt nicht nur über eines der größten Netzwerke der Welt, das niedrigere Seitenladezeiten, geringere Latenzzeiten und ein besseres Gesamterlebnis bietet, sondern schützt auch deine Webseiten vor DoS/DDoS-Angriffen, einschließlich Flooding und neuen Arten von Angriffen, die jeden Tag ans Licht kommen.
In dieser Anleitung erfährst du, wie du deinen Webserver vor Angriffen schützen kannst.

Wir gehen von der Annahme aus, dass deine Domain bereits von Cloudflare verwaltet wird. Falls nicht, kannst du der [Anleitung](https://developers.cloudflare.com/fundamentals/get-started/setup/add-site/) folgen, um deine Domain zu verschieben. Öffne die Registerkarte DNS-Einträge im Dashboard von Cloudflare und vergewissere dich, dass dein Eintrag zu deinem Webserver die orangefarbene Wolke hat und "Proxied" heißt.

![](https://i.imgur.com/wNEoWQP.png)

Danach wird der gesamte Datenverkehr, der über deine Domäne läuft, durch Cloudflare und von dort zu deinem Server geleitet, und zwar als legitimer Datenverkehr.
Dennoch ist dein Server immer noch von außerhalb von Cloudflare erreichbar. Dazu musst du den Zugriff auf die Ports 80 und 443 des TCP-Protokolls deines Linux-Servers beschränken und den Zugriff nur zulassen, wenn dieser von legitimem Cloudflare-Datenverkehr stammt.

Zu diesem Zweck kannst du den Zugang manuell mit Firewall-Regeln aus der [Cloudflare public IPv4 list](https://cloudflare.com/ips-v4) und [Cloudflare public IPv6 list](https://cloudflare.com/ips-v6) beschränken.

Alternativ kannst du auch etwas Zeit sparen und Tools wie [Cloudflare-ufw](https://github.com/Paul-Reed/cloudflare-ufw) verwenden, um diese Firewall-Regeln schnell zu importieren.
Achte darauf, dass du keine separaten Regeln hast, die den uneingeschränkten Zugriff auf deinen Webserver erlauben, außer denen, die du gerade hinzugefügt hast, sonst werden diese nicht funktionieren.

0 comments on commit d62490a

Please sign in to comment.