Anleitung - grundlegende Einrichtung dieses VPS (virtueller privater Server) - Dezember 2024

Hier kommen allgemeine Anleitungen und Fragen zum Betrieb dieses VPS rein.
Nur registrierte Benutzer können hier Themen erstellen.
Antworten
Benutzeravatar
admin.stefan-voswinkel.de
Administrator
Beiträge: 27
Registriert: Sa 14. Dez 2024, 15:03

Anleitung - grundlegende Einrichtung dieses VPS (virtueller privater Server) - Dezember 2024

Beitrag von admin.stefan-voswinkel.de »

Ich möchte hier eine kleine Anleitung schreiben, wie ich diesen VPS eingerichtet habe.
Diese Anleitung wird hauptsächlich erstellt, damit ich selber weiß, wie ich diesen VPS eingerichtet habe.
Dies ist notwendig, damit falls wenn ich nochmal einen VPS einzurichten habe,
ich nicht erst im Internet suchen muss, wie ich dies zu erledigen habe.

Am 09.12.2024 wurde bei Contabo der "VPS 0 SSD" kurzfristig angeboten.
Diesen habe ich bestellt.

Als Betriebssystem wurde Debian 11 mit bereits vorinstalliertem LAMP ausgewählt.

Debian_11_und_LAMP.png
Debian_11_und_LAMP.png (8.74 KiB) 3770 mal betrachtet



Folgende Programme werden von mir bei der Einrichtung verwendet:

Das wichtigste Programm von diesen ist PuTTY.
Es wird verwendet, um per SSH eine Verbindung zum VPS aufzubauen.

Als erstes das Programm PuTTY starten und die benötigte IP-Adresse eingeben.
Als Benutzername root eingeben und Enter drücken.
Danach dann das Passwort eingeben.
Während der Eingabe des Passworts werden keine Zeichen angezeigt.
Putty_login.png
Putty_login.png (2.09 KiB) 3740 mal betrachtet


Code: Alles auswählen

apt update

Code: Alles auswählen

apt upgrade -y

Code: Alles auswählen

apt autoremove -y

Code: Alles auswählen

apt install sudo

Code: Alles auswählen

apt install ca-certificates apt-transport-https lsb-release gnupg curl nano unzip -y

Code: Alles auswählen

apt install php7.4 -y

Code: Alles auswählen

apt install php7.4-cli -y

Code: Alles auswählen

apt install php7.4-common -y

Code: Alles auswählen

apt install php7.4-curl -y

Code: Alles auswählen

apt install php7.4-gd -y

Code: Alles auswählen

apt install php7.4-intl -y

Code: Alles auswählen

apt install php7.4-json -y

Code: Alles auswählen

apt install php7.4-mbstring -y

Code: Alles auswählen

apt install php7.4-mysql -y

Code: Alles auswählen

apt install php7.4-opcache -y

Code: Alles auswählen

apt install php7.4-readline -y

Code: Alles auswählen

apt install php7.4-xml -y

Code: Alles auswählen

apt install php7.4-xsl -y

Code: Alles auswählen

apt install php7.4-zip -y

Code: Alles auswählen

apt install php7.4-bz2 -y

Code: Alles auswählen

apt install libapache2-mod-php7.4 -y

Code: Alles auswählen

apt install mariadb-server mariadb-client -y

Code: Alles auswählen

mysql -u root -p
MariaDB_login.png
MariaDB_login.png (14.4 KiB) 3727 mal betrachtet


Danach soll dann ein neuer Benutzer in MariaDB angelegt werden.

TODO: Der Benutzername und das Passwort müssen durch die echten Werte ersetzt werden.
In der Anleitung dürfen bei diesen Angaben nicht die echten Werte enthalten sein.

Code: Alles auswählen

CREATE USER 'Der_echte_Benutzername_soll_hier_nicht_erkennbar_sein'@'localhost'
 IDENTIFIED BY 'Das_echte_Passwort_soll_hier_nicht_erkennbar_sein';

TODO: Der 'Name_der_neuen_Datenbank' soll durch den gewünschten Namen ersetzt werden.

Code: Alles auswählen

CREATE DATABASE `Name_der_neuen_Datenbank`;

Code: Alles auswählen

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;

Code: Alles auswählen

FLUSH PRIVILEGES;

Code: Alles auswählen

service mysql restart

Code: Alles auswählen

mysql_secure_installation
Folgende Fragen beantworten:

Code: Alles auswählen

Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y 

Code: Alles auswählen

cd /var/www
TODO: Der Ordnername_Domain soll genauso heißen, wie die Domain, welche dafür verwendet werden soll.

Code: Alles auswählen

mkdir Ordnername_Domain

Code: Alles auswählen

chown -R www-data:www-data /var/www/
TODO: Der Dateiname soll ähnlich heißen, wie der Name der Domain, welche in der conf-Datei konfiguriert werden soll.
TODO: Der "Name_der_Domain" soll durch den gewünschten Namen ersetzt werden.

Code: Alles auswählen

nano /etc/apache2/sites-available/Name_der_Domain.conf
TODO: Überall wo "Name_der_Domain" steht, soll der echte Name der zu verwendenden Domain eingefügt werden.

Code: Alles auswählen

<VirtualHost *:80>
ServerName Name_der_Domain
DocumentRoot /var/www/Name_der_Domain
ErrorLog ${APACHE_LOG_DIR}/error_Name_der_Domain.log
CustomLog ${APACHE_LOG_DIR}/access_Name_der_Domain.log combined
</VirtualHost>

<Directory /var/www/Name_der_Domain>
    AllowOverride All
</Directory>
Die conf-Datei muss dann mit Strg+O abgespeichert werden.
Danach dann mit Strg + X den Editor nano wieder verlassen.

TODO: Der "Name_der_Domain" soll durch den gewünschten Namen ersetzt werden.

Code: Alles auswählen

a2ensite Name_der_Domain.de.conf

Code: Alles auswählen

systemctl restart apache2


Code: Alles auswählen

apt install snapd -y
certbot installieren (wird für Let's Encrypt verwendet)

Code: Alles auswählen

snap install --classic certbot
'VPS neustarten

Code: Alles auswählen

reboot

Code: Alles auswählen

ln -s /snap/bin/certbot /usr/bin/certbot

Code: Alles auswählen

certbot --apache

Code: Alles auswählen

certbot renew --dry-run



Verwendete Quellen:
https://www.bennetrichter.de/anleitunge ... hpmyadmin/

https://www.running-cool.de/mysql/user- ... eisen.html

https://www.tutorialspoint.com/fix-erro ... e-in-mysql

https://dev.to/sertxudev/clear-screen-a ... b-cli-17ek

https://help.dogado.de/hc/de/articles/2 ... BCcksetzen

https://goneuland.de/mariadb-benutzer-v ... -loeschen/

https://profi-tutorials.de/linux/admini ... istration/

https://www.mawa-solutions.com/faq/arti ... nux-server

https://snapcraft.io/docs/installing-snap-on-debian

https://certbot.eff.org/instructions?ws=apache&os=snap

https://www.cyberciti.biz/faq/mysql-cha ... -password/

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
admin.stefan-voswinkel.de
Administrator
Beiträge: 27
Registriert: Sa 14. Dez 2024, 15:03

Anleitung - grundlegende Einrichtung dieses VPS (virtueller privater Server) - Dezember 2024

Beitrag von admin.stefan-voswinkel.de »

Als nächstes sollen nun die Domain auf dem alten Server abgeschaltet werden.
Dies ist nur notwendig, wenn die Domain von einem anderen Server umgezogen worden ist.

Dazu ist auf dem alten Server zuerst der entsprechende vhost im Apache zu deaktivieren.
Danach kann dann das entsprechende Let’s Encrypt – Zertifikat entfernt werden.



Apache Domain deaktivieren:

TODO: Der "Name_der_Konfigurationsdatei" soll durch den echten Namen ersetzt werden.

Code: Alles auswählen

a2dissite Name_der_Konfigurationsdatei.conf

Code: Alles auswählen

systemctl reload apache2


Let’s Encrypt – Zertifikat entfernen:

Code: Alles auswählen

certbot delete
Danach dann noch die entsprechende Nummer für das zu löschende Let’s Encrypt – Zertifikat auswählen.



Verwendete Quellen:
https://wiki.ubuntuusers.de/Apache/Virtual_Hosts/

https://www.linuxheld.de/2021/09/21/let ... t-certbot/

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
admin.stefan-voswinkel.de
Administrator
Beiträge: 27
Registriert: Sa 14. Dez 2024, 15:03

Anleitung - grundlegende Einrichtung dieses VPS (virtueller privater Server) - Dezember 2024

Beitrag von admin.stefan-voswinkel.de »

Nachdem die allerersten Grundlagen installiert worden sind,
habe ich als erstes ein phpBB3-Forum installiert,
damit ich eine Möglichkeit habe,
mir online aufzuschreiben, was ich überhaupt gemacht habe.

Installationsanleitung für phpBB 3.3.x
Knowledge Base - Installationsanleitung für phpBB 3.3.x




Installierte zusätzliche phpBB-Erweiterungen:

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
admin.stefan-voswinkel.de
Administrator
Beiträge: 27
Registriert: Sa 14. Dez 2024, 15:03

Anleitung - grundlegende Einrichtung dieses VPS (virtueller privater Server) - Dezember 2024

Beitrag von admin.stefan-voswinkel.de »

Als nächstes sollte der SSH-Port geändert werden.

Code: Alles auswählen

nano /etc/ssh/sshd_config
Nachschauen wo

Code: Alles auswählen

#Port 22
steht und die Zahl nach dem Port in den gewünschten Wert ändern,
sowie das # entfernen.
Die Datei abspeichern (Strg + O) und den Editor (Strg + X) verlassen.

Danach den SSH-Dienst neu starten.

Code: Alles auswählen

systemctl restart sshd.service

Verwendete Quellen:
https://www.thomas-krenn.com/de/wiki/Ab ... _absichern

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
admin.stefan-voswinkel.de
Administrator
Beiträge: 27
Registriert: Sa 14. Dez 2024, 15:03

Anleitung - grundlegende Einrichtung dieses VPS (virtueller privater Server) - Dezember 2024

Beitrag von admin.stefan-voswinkel.de »

Danach dann phpMyAdmin installieren.

Code: Alles auswählen

cd /usr/share

Code: Alles auswählen

wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip -O phpmyadmin.zip

Code: Alles auswählen

unzip phpmyadmin.zip

Code: Alles auswählen

rm phpmyadmin.zip

Code: Alles auswählen

mv phpMyAdmin-*-all-languages phpmyadmin

Code: Alles auswählen

chmod -R 0755 phpmyadmin

Code: Alles auswählen

nano /etc/apache2/conf-available/phpmyadmin.conf
Folgenden Inhalt einfügen:

Code: Alles auswählen

# phpMyAdmin Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
</Directory>

# Disallow web access to directories that don't need it
<Directory /usr/share/phpmyadmin/templates>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
    Require all denied
</Directory>
Mit Strg + O die Datei abspeichern und mit Strg + X nano wieder verlassen

Code: Alles auswählen

a2enconf phpmyadmin

Code: Alles auswählen

systemctl reload apache2

Code: Alles auswählen

mkdir /usr/share/phpmyadmin/tmp/

Code: Alles auswählen

chown -R www-data:www-data /usr/share/phpmyadmin/tmp/

Verwendete Quellen:
https://www.bennetrichter.de/anleitunge ... hpmyadmin/

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
admin.stefan-voswinkel.de
Administrator
Beiträge: 27
Registriert: Sa 14. Dez 2024, 15:03

Anleitung - grundlegende Einrichtung dieses VPS (virtueller privater Server) - Dezember 2024

Beitrag von admin.stefan-voswinkel.de »

E-Mail-Funktion zum Senden serverweiter E-Mails über SMTP aktivieren

Falls zum Senden der Emails eine E-Mail-Adresse von google verwendet werden soll
(was in meinem Fall zutrifft),
muss als erstes die 2-Faktor-Authentifizierung des entsprechenden google-Accouts aktiviert werden.
https://myaccount.google.com/security


Danach muss dann ein App-Passwort erstellt werden,
welches anstatt des wirklichen Passwortes des google-Accounts verwendet werden muss.
Das App-Passwort muss in der Konfigurationsdatei verwendet werden
(nicht das Passwort des google-Accounts).
Das App-Passwort wird von google festgelegt und ist nicht editierbar.
https://myaccount.google.com/apppasswords



Code: Alles auswählen

apt-get install msmtp msmtp-mta mailutils

Code: Alles auswählen

nano /etc/msmtprc


Dateiinhalt einfügen:
Die Werte wo TODO steht, müssen noch angepasst werden.
Die echten Werte sollen in dieser Anleitung nicht erkennbar sein.

Code: Alles auswählen

# Set default values for all following accounts.
defaults

# Use the mail submission port 587 instead of the SMTP port 25.
port 587

# Always use TLS.
tls on

# Set a list of trusted CAs for TLS. The default is to use system settings, but
# you can select your own file.
tls_trust_file /etc/ssl/certs/ca-certificates.crt

# Mail account
# TODO: Use your own mail address
account bob@meindedomain.de

# Host name of the SMTP server
# TODO: Use the host of your own mail account
host smtp.meindedomain.de

# This is especially important for mail providers like 
# Ionos, 1&1, GMX and web.de
set_from_header on

# Envelope-from address
# TODO: Use your own mail address
from bob@meindedomain.de

# Authentication. The password is given using one of five methods, see below.
auth on

# TODO: Use your own user name fpr the mail account
user bob@meindedomain.de

# Password method 3: Store the password directly in this file. Usually it is not
# a good idea to store passwords in plain text files. If you do it anyway, at
# least make sure that this file can only be read by yourself.
# TODO: Use the password of your own mail account
password pAssW0Rd123


# Set a default account
# TODO: Use your own mail address
account default: bob@meindedomain.de

# Map local users to mail addresses (for crontab)
aliases /etc/aliases
Die Datei dann mit Strg + O abspeichern und nano mit Strg + X verlassen.

Code: Alles auswählen

chmod 640 /etc/msmtprc

Code: Alles auswählen

chown root:msmtp /etc/msmtprc

Code: Alles auswählen

nano /etc/aliases

Dateiinhalt einfügen:
Die E-Mail-Adressen, müssen noch angepasst werden.
Die echten Werte sollen in dieser Anleitung nicht erkennbar sein.

Code: Alles auswählen

root: admin@meinedomain.de 
default: admin@meinedomain.de
Die Datei dann mit Strg + O abspeichern und nano mit Strg + X verlassen.

Code: Alles auswählen

nano /etc/mail.rc

Dateiinhalt einfügen:

Code: Alles auswählen

set sendmail="/usr/bin/msmtp -t"
Die Datei dann mit Strg + O abspeichern und nano mit Strg + X verlassen.


Das Versenden von E-Mails über die ssh-Eingabekonsole sollte bereits funktionieren,
allerdings ist dies uninteressant, weil E-Mails normalerweise über php versendet werden sollen.

Im Verzeichnis "/etc/php/7.4" nachschauen, welche Unterverzeichnisse vorhanden sind

Code: Alles auswählen

ls /etc/php/7.4
und in jeder php.ini in dem entsprechenden Unterverzeichnisse folgenden Werte ändern:

Code: Alles auswählen

sendmail_path = "/usr/bin/msmtp -t"


Code: Alles auswählen

nano /etc/php/7.4/apache2/php.ini

Code: Alles auswählen

nano /etc/php/7.4/cli/php.ini

Code: Alles auswählen

nano /etc/php/7.4/fpm/php.ini





Danach dann noch den Webserver neu starten.

Code: Alles auswählen

service apache2 restart
Als letztes die E-Mail-Funktion testen.
Dazu kann versucht werden eine E-Mail über ein php-Script zu versenden
oder eine E-Mail über das Kontaktformular der Forumssoftware an einen Testbenutzer zu versenden.
Der Testbenutzer muss vor dem Senden einer Test-E-Mail noch erstellt werden
(damit man überprüfen kann, ob die E-Mails auch wirklich ankommen).


Verwendete Quellen:
https://decatec.de/linux/linux-einfach- ... mit-msmtp/

https://arnaudr.io/2020/08/24/send-emai ... ith-msmtp/

https://www.sascha-syring.net/e-mails-v ... mit-msmtp/

https://askubuntu.com/questions/1289573 ... ilable-sys

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
admin.stefan-voswinkel.de
Administrator
Beiträge: 27
Registriert: Sa 14. Dez 2024, 15:03

Anleitung - grundlegende Einrichtung dieses VPS (virtueller privater Server) - Dezember 2024

Beitrag von admin.stefan-voswinkel.de »

ssh-Brute Force Angriffe abwehren

Code: Alles auswählen

apt-get install fail2ban

Code: Alles auswählen

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Code: Alles auswählen

apt-get install iptables

Code: Alles auswählen

nano /etc/services
In der Datei den Wert welcher bei ssh steht ändern,
auf den Wert, welcher auch in der Datei "/etc/ssh/sshd_config" bei Port steht.

Code: Alles auswählen

nano /etc/fail2ban/jail.local
Das # löschen und die Empfangs-E-Mail-Adresse eintragen
(nur falls man bei Aktionen über E-Mail informiert werden möchte)

Code: Alles auswählen

#destemail = root@localhost 
Das # löschen und die Sender-E-Mail eintragen
(Dieselbe E-Mail-Adresse verwenden, wie bei der Konfiguration von msmtp)

Code: Alles auswählen

#sender = root@<fq-hostname>
Suchen nach:

Code: Alles auswählen

action = %(action_)s
und umändern in

Code: Alles auswählen

action = %(action_mwl)s
Dies ist notwendig, damit E-Mail versendet werden.

Dort wo "[sshd]" steht muss

Code: Alles auswählen

enabled	= true
eingefügt werden, damit die Überprüfung des ssh-Ports als aktiviert konfiguriert gilt.

Danach die Datei mit Strg + O abspeichern und mit Strg + X nano verlassen

Danach muss man Fail2ban neu starten:

Code: Alles auswählen

systemctl restart fail2ban.service
Nachdem man überprüft hat, ob fail2ban ordnungsgemäß funktioniert,
sollte die bantime in der Datei "/etc/fail2ban/jail.local" je nach persönlichen Vorlieben angepasst werden.

Dazu kann dann der Wert bei

Code: Alles auswählen

bantime  = 10m
geändert werden.

Um zu testen, ob fail2ban funktioniert, kann man sich einfach über PuTTY am ssh anmelden und
mehrmals ein falsches Passwort eingeben.
Zum Testen ob fail2ban funktioniert, sollte die bantime keinesfalls höher gestellt werden,
weil sollte fail2ban ordnungsgemäß funktionieren, man sich selber für die eingestellte Zeit ausgesperrt hat.

Testen ob der fail2ban-Service funktioniert:

Code: Alles auswählen

/etc/init.d/fail2ban status

Code: Alles auswählen

fail2ban-client status sshd

Verwendete Quellen:
https://www.godaddy.com/resources/de/se ... t-fail2ban

https://askubuntu.com/questions/692278/ ... -in-ubuntu

https://serverfault.com/questions/38285 ... ort-number

https://www.thomas-krenn.com/de/wiki/SS ... _absichern

https://edywerder.ch/fail2ban-email-notification

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
admin.stefan-voswinkel.de
Administrator
Beiträge: 27
Registriert: Sa 14. Dez 2024, 15:03

Anleitung - grundlegende Einrichtung dieses VPS (virtueller privater Server) - Dezember 2024

Beitrag von admin.stefan-voswinkel.de »

Deaktivierung der Fail2ban E-Mail-Funktion

Nachdem der VPS einige Zeit lief und Fail2ban ordnungsgemäß funktioniert hat,
wurde mir das ständige Empfangen von E-Mails von Fail2ban dann doch zu nervig.
Deshalb wurde die Deaktivierung der Fail2ban E-Mail-Funktion beschlossen.

Sollte ich doch noch wissen wollen, welche IP-Adressen gerade blockiert sind,
dann sollte ich einfach in der Fail2ban-Logdatei nachschauen:

Code: Alles auswählen

var/log/fail2ban.log



jail.local zum editieren öffnen

Code: Alles auswählen

nano /etc/fail2ban/jail.local

Suchen nach:

Code: Alles auswählen

action = %(action_mwl)s
umändern in

Code: Alles auswählen

action = %(action_)s


Wichtig:
Direkt in der Datei mit # an der Stelle wo geändert wurde, einen Kommentar einbauen.
Dies ist wichtig, damit man später selber noch weiß, wieso man an dieser Stelle Änderungen durchgeführt hat

Code: Alles auswählen

#2025-01-18:
#Das ständige Bimmeln auf dem Handy nervt mich und deshalb 
#schalte ich das senden der E-Mails wieder ab


Danach die Datei mit Strg + O abspeichern und mit Strg + X nano verlassen

Danach muss man Fail2ban neu starten:

Code: Alles auswählen

systemctl restart fail2ban.service

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
admin.stefan-voswinkel.de
Administrator
Beiträge: 27
Registriert: Sa 14. Dez 2024, 15:03

Anleitung - grundlegende Einrichtung dieses VPS (virtueller privater Server) - Dezember 2024

Beitrag von admin.stefan-voswinkel.de »

Das gesamte System auf Deutsch umstellen

Code: Alles auswählen

dpkg-reconfigure locales

02.png
02.png (24.81 KiB) 3353 mal betrachtet

Mit den Pfeiltasten zur deutschen Sprache wechseln
03.png
03.png (25.18 KiB) 3353 mal betrachtet

Mit Space die deutsche Sprache markieren
04.png
04.png (25.22 KiB) 3353 mal betrachtet

Mit der Tabulatortaste auf OK wechseln und danach die Enter-Taste drücken
05.png
05.png (25.26 KiB) 3353 mal betrachtet

06.png
06.png (22.96 KiB) 3353 mal betrachtet


Mit den Pfeiltasten zur deutschen Sprache wechseln und diese als Standard-Sprache auswechseln
07.png
07.png (22.98 KiB) 3353 mal betrachtet

09.png
09.png (11.41 KiB) 3353 mal betrachtet

Danach dann den VPS neu starten

Code: Alles auswählen

reboot



Verwendete Quellen:
https://wiki.debian.org/de/HowTo/Install/Deutsch

Link:
BBcode:
HTML:
Hide post links
Show post links
Antworten