Für einen Bekannten sollte ich einen Linux Virtual Private Server (VPS) einrichten. Ausgesucht haben wir uns einen VPS von Contabo. Die Bestellung und die Bereitstellung gingen flott und unkompliziert. Eine laufende LAMP Installation gab es kostenlos auf dem von uns gewählten Debian8 dazu. Was will man mehr?
Als die Zugangsdaten übersendet wurden stellte ich erstmal fest, dass man sich direkt als root per SSH (Secure Shell) auf die Maschine verbinden konnte. Das finde ich aus Sicherheitsgründen nicht so prickelnd. Also habe ich das abgestellt.
SSH mit root auf dem Virtual Private Server abstellen
Erstmal muss man einen normalen User anlegen, der auch root werden darf.
adduser <username>
usermod -aG sudo username
Jetzt müssen wir noch dem SSH-Daemon (SSHD) beibringen, dass root sich nicht mehr anmelden darf, aber dafür der neue User. Damit nichts schief geht macht man das am Besten in zwei Schritten.
Zuerst in der Datei /etc/ssh/sshd_config die Zeile
AllowUsers <username>
ergänzen und den SSHD neu starten mit
service ssh reload
Jetzt ausprobieren, ob man sich mit dem neuen User auch per SSH anmelden kann (ssh username@contaboserver)
Wenn das funktioniert, kann man den direkten Root Login deaktivieren. Dazu verändert man widerum in die Datei /etc/ssh/sshd_config die Zeile
PermitRootLogin yes
in
PermitRootLogin no
Jetzt den SSHD wieder neu starten und jetzt sollte man sich nicht mehr mit dem User root per SSH anmelden können.
Login mit SSH Schlüsseln, ohne Passworteingabe
Ziel ist es sich mit einem Kommand
ssh <UserAufDemServer>@<Server>
und ohne Passworteingabe am Server anzumelden.
Der Zugriff auf einen Server ohne Passwort mittels SSH-Schlüsselpaaren funktioniert, so daß der User, der sich von einem Client anmelden möchte ein Schlüsselpaar (Public-Key, Private-Key) benötigt. Der Public-Key wird dann auf dem Server abgelegt. Bei der Anmeldung sendet der Server dem Client eine zufällige Nachricht (Challenge), die der Client mit dem Private-Key verschlüsselt und em Server zurück schickt. Der Server entschlüsselt dann diese Challenge mit dem vorhandenen Public-Key des Users und überprüft so, ob dieser auch wirklich der Eigentümer des Public-Key ist.
Also generiert man sich ein Schlüsselpaar, falls man noch keines hat.
ssh-keygen
Diese werden normalerweise im Verzeichnis ~/.ssh in zwei Dateien id-rsa und id-rsa.pub abgelegt. Das .pub steht dabei für public und dort steht auch der Public-Key drin.
Den Inhalt der Datei id-rsa.pub trägt man jetzt auf dem Server in die Datei ~/.ssh/authorized_keys ein und stellt sicher, dass auf die Datei nur vom Eigentümer zugegriffen werden kann.
chmod 700 /home/BENUTZERNAME/.ssh
chmod 600 /home/BENUTZERNAME/.ssh/authorized_keys
Das war’s schon. Jetzt sollte die Anmeldung ohne Passwort funktionieren.
Fail2ban installieren gegen Denial of Service Angriffe
Da man mit einem Virtual Private Server ja immer im Netz ist und viele Bots durch die Gegen eiern, die versuchen mit einer Denial- of-Service-Attacke (DoS-Attacke) den ein oder anderen Rechner lahm zu legen, ist es eine guite Idee Fail2ban zu installieren. Fail2ban überwacht eine ganze Menge von Logdateien und -einträgen und blockt den jeweiligen Port für eine einstellbare Zeit, um DoS Attacken abzuwehren.
Die Installation geschieht als root mit
apt-get install fail2ban
Der Dienst wird dabei auch gleich gestartet und hat eine sehr breite Menge von Standard-Einstellungen, die alle üblichen Dienste absichern.
Update 1: Locale auf deutsch ändern
Im Nachgang ist mir noch aufgefallen, dass der Virtual Private Server alle Locale-Einstellungen auf englisch eingestellt hatte. Um diese Einstellungen auf deutsch umzustellen, rekonfiguriert man das Paket locales mit
dpkg-reconfigure locales
Ich habe folgende Standorteinstellungen gewählt:
- de_DE ISO-8859-1
- de_DE.UTF-8 UTF-8
- de_DE@euro ISO-8859-15
Leider benötigt das System nach dieser Anpassung einen Neustart
shutdown -r now
Update 2: SSH von einem Rechner, der eine dynamische IP-Adresse hat
Nicht immer arbeitet man von einem Rechner aus, der eine feste IP-Adresse hat, sondern ggf. auch von zu Hause, wo die meisten sichelrich eine vom Internet-Prvider dynamisch zugewiesene IP-Adresse erhalten. Ich habe mich gefragt, ob man es auch von dort aus hinbekommt sich ohne Passowrt per SSH an dem Virtual Private Server anzumelden. Um das zu erreichen braucht man einen Servernamen, der immer auf die aktuelle dynmaische IP Adresse zeigt. So einen Servernamen gibt es kostenlos bspw. bei no-ip.com. Die Einrichtung hat Frank Lüttig in seinem Artikel Dynamische DNS mit No-IP.com beschrieben. Um dieses Setup mit dem VPS zu verheiraten müssen lediglich zwei kleine Änderungen vorgenommen werden.
Der Servername von no-ip.com muss in der Datei /etc/fail2ban/jail.conf eingetragen werden
ignoreip = 127.0.0.1/8 <no-ip-Servername>
und in der Datei ~/.ssh./authorized_keys ersetzt man an das Ende der Zeile mit dem Public-Key user@<LokalerHostname> durch user@<no-ip-Servername>.
Schon kann es losgehen. Jetzt fehlt nur noch das richtige Marketing.
Thank you for writing this. I am interested in something such as this. Fantastic facts Let me return pertaining to more knowledge about Water Eating plan.
In der Theorie hatte ich schon über das Einrichten von ssh und fail2ban gelesen, aber das Einloggen ohne Passworteingabe mit Schlüsselpaar kannte ich noch nicht. Das Prinzip von privaten und öffentlichen Schlüssel kenne ich, aber halt nicht im Zusammenhang mit ssh. Danke für diesen schönen Artikel.
Pingback: Linux Virtual Private Server PHPMyAdmin absichern
Sehr schön und gut erklärt
Mag solche Tutorials
Gerne mehr über Vserver und