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 Standard Port 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 privilegierten 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 Millisekunden.
Port 22
Delay 10000
Danach kann der Service schon gestartet werden.
sudo systemctl --now enable endlessh