Endlessh: SSH Port absichern für Proxmox und V-Server

Endlessh: SSH Port absichern für Proxmox und V-Server

Betreibt man einen Server, welcher im Internet steht, so bemerkt man schnell, wenn man in die Log-Dateien anschaut, dass sehr viele Angriffe auf den SSH Port 22 stattfinden. In diesem fall kann als erste Maßnahme der SSH Port auf einen anderen Port gelegt werden. In diesem Szenario beziehe ich mich auf einen Proxmox VE Server, der im Internet steht. Daher sind alle Befehle für Debian.

SSH Port ändern

Der SSH Port wird von dem Standardport 22 auf den Port 2294 umgelegt. Dies erlaubt einem selber den Zugriff auf den Server mit SSH, nur über einen anderen Port, der nicht SSH zuordnungsbar ist.

Dafür bearbeitet man die sshd_config Datei und ändert hier den Port.

nano /etc/ssh/sshd_config

In dieser Datei sucht man nach dieser Zeile #Port 22 und ändert diese wie folgt ab:

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Include /etc/ssh/sshd_config.d/*.conf

Port 2294
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

Nun wird die Datei noch gesichert und der SSH Service neu gestartet.

systemctl restart sshd

IPTables anlegen mit NAT Regeln.

In diesem Beispiel liegen auf dem Proxmox VE Server die virtuellen Maschinen, in einem virtuellen Netz, welches über eine Netzwerkbrücke betrieben wird. Durch diese Lösung können die virtuellen Maschinen in einem eigenen IP Kreis liegen und durch NAT-Regeln nach außen über die eine IPv4 Adresse verfügbar gemacht werden.

Damit die NAT-Regeln statisch bleiben und nach einem Neustart immer noch gelten wird ein bestimmtes Paket benötigt.

apt install iptables-persistent -y

Nun werden die die NAT-regeln angelegt. Hierfür wird das Interface des virtuellen Netzes angegeben, dann der Port der freigegeben werden soll, sowie die IPv4 Adresse der virtuellen Maschine mit dem Port von der virtuellen Maschine der durchgereicht werden soll.

iptables -t nat -A PREROUTING -i <INTERFACE> -p tcp --dport <PORT> -j DNAT --to <IP>:<PORT>

Nun wird der Eintrag für die Weitergabe des SSH Ports erstellt. Ziel ist es auf einer virtuellen Maschine Endlessh zu installieren und alle Anfragen in Teergrube zu fangen.

iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 22 -j DNAT --to 10.44.0.2:22

Mit diesem Befehl wird von Port 22 des Proxmox VE Server auf den Port 22 auf der virtuellen Maschine mit der IPv4 10.44.0.2 verwiesen. Damit werden alle Anfragen zu dieser Maschine geleitet.

IPTables anzeigen und Löschen

Mit diesem Befehl kann man sich die angelegten NAT-Regeln anzeigen lassen:

iptables -t nat -v -L PREROUTING -n --line-number

Um eine Regel wieder zu löschen, benutzt man diesen Befehl:

iptables -t nat -D PREROUTING <Nummer aus der Liste>

Installation von Endlessh

Zunächst werden die benötigten Pakete bezogen:

sudo apt install build-essential libc6-dev git

Nachdem diese Bezogen wurden bezieht man mit Git die Repo von Endlessh.

git clone https://github.com/do-community/endlessh

Mit dem Make Befehl wird Endlessh erstellt und ausführbar gemacht.

cd endlessh
make

Endlessh testen

Nun testet man, ob Endlessh auch funktioniert.

sudo ./endlessh -v -p 22

Der Parameter -v besagt das der Verbose Modus gestartet werden soll und der Parameter -p bestimmt den Port auf dem gelauscht werden soll.

Ebenso kann man nun auf Port 22 mit einem SSH Client zugreifen und zusehen wie man in der Ausgabe auftaucht.

Endlessh als Systemd Service einpflegen

Damit später Endlessh auch als Service zur Verfügung steht und bei einem neu Start mit startet wird ein Systemd Service angelegt. Dafür wird die Datei in den bin Ordner kopiert, wodurch sie ohne Pfadangabe direkt ausführbar ist. Danach wird die mitgelieferte Service Datei in das Verzeichnis für die Services kopiert. Diese Datei muss noch für die späteren Zwecke angepasst werden.

sudo mv ./endlessh /usr/local/bin/

sudo cp util/endlessh.service /etc/systemd/system/

sudo nano /etc/systemd/system/endlessh.service

In der Service Datei wird AmbientCapabilities unkommentiert und die Zeile PrivateUsers wird aus kommentiert.

...
## If you want Endlessh to bind on ports < 1024
## 1) run: 
##     setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh
## 2) uncomment following line
AmbientCapabilities=CAP_NET_BIND_SERVICE
## 3) comment following line
#PrivateUsers=true
...

Danach wird noch Endlessh zu einem priviligierten Interface.

sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh

Konfigurationsdatei anlegen und bearbeiten

Nun erstellt man die Verzeichnisse /etc/endlessh und die Datei /etc/endlessh/config.

sudo mkdir /etc/endlessh
sudo nano /etc/endlessh/config

Hier wird der Port definiert und der Delay für das SSH Banner. Der Delay ist in Milisekunden.

Port 22
Delay 10000

Danach kann der Service schon gestartet werden.

sudo systemctl --now enable endlessh