.. _server: ========================= Server ========================= Benutzer ================================================= Erstellen ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: sh sudo useradd -m $USER_NAME # -m um Benutzerverzeichnis anzulegen sudo usermod -aG sudo $USER_NAME sudo passwd $USER_NAME sudo su $USER_NAME chsh -s /bin/bash # /bin/bash als Standardshell einstellen (ist schöner) exit exit Dann muss noch der ssh public key von der lokalen Maschine mit der man sich auf dem Server verbinden will auf den Server kopiert werden. Falls ssh Passwort Authentifizierung noch aktiviert ist kann dies mit dem folgenden Befehl gemacht werden: .. code-block:: sh ssh-copy-id $USER_NAME@$SERVER_IP Anderfall muss er z.B. von einem anderen Benutzer kopiert werden: .. code-block:: sh sudo su $USER_NAME cd ~ mkdir .ssh cd .ssh sudo cp ../../$OLD_USER/.ssh/authorized_keys . sudo chown $USER_NAME authorized_keys Sichere am besten den ssh Schlüssel deines Gerätes, damit du den Zugang nicht verlierst! Nützliche Befehle ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: sh # create home dir usermod -d path user # list all processes of user ps -fU user # generate ssh key (only once) ssh-keygen # " -t rsa" for rsa Apache ================================================= Installation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: sh sudo apt update sudo apt upgrade sudo apt install apache2 sudo apt install php libapache2-mod-php Website hinzufügen ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ WICHTIG! Füge eine Verlinkung von deiner Domain auf die Server IP in den DNS-Records hinzu! Als erstes einen RSA-Key für den Benutzer erstellen, falls noch nicht vorhanden: .. code-block:: sh chmod +x ~ # Benutzerordner muss ausführbar sein, damit Apache datauf zugreifen kann. ssh-keygen cat .ssh/id_rsa.pub Der zu sehende KEY muss in github als Deploy-Key hinterlegt werden, damit das Repo geklont werden kann! Anschließend das Repo klonen: .. code-block:: sh git clone git@github.com:KlugeNico/$REPO_NAME.git mv $REPO_NAME/ www Certbot installieren und Zertifikat erstellen: .. code-block:: sh sudo apt install certbot sudo apt install python3-certbot-apache sudo certbot certonly --apache -d www.$URL -d $URL Die Apache Konfiguration erstellen: .. code-block:: sh cat << EOF > apache-config-file.txt ServerName www.$URL ServerAlias $URL Redirect permanent / https://www.$URL/ ServerName $URL Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile /etc/letsencrypt/live/www.$URL/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.$URL/privkey.pem Redirect permanent / https://www.$URL/ ServerName www.$URL Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile /etc/letsencrypt/live/www.$URL/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.$URL/privkey.pem DocumentRoot /home/$USER/www/html ErrorLog ${APACHE_LOG_DIR}/$USER-error.log CustomLog ${APACHE_LOG_DIR}/$USER-access.log combined Options FollowSymlinks AllowOverride All Require all granted EOF sudo mv apache-config-file.txt /etc/apache2/sites-available/www-${URL//[.]/-}.conf Und schließlich die Seite aktivieren: .. code-block:: sh # Notwendige apache mods aktivieren sudo a2enmod rewrite sudo a2enmod ssl sudo systemctl reload apache2 # Anschließend Seite aktivieren und Apache neu starten sudo a2ensite www-${URL//[.]/-}.conf sudo systemctl reload apache2 Weiteres ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: sh # Apache ports verwalten sudo nano /etc/apache2/ports.conf # Allgemeine Konfiguration sudo nano /etc/apache2/apache2.conf # Apache logs Services ================================================== Ein Service startet automatisch mit Linux, läuft also (sofern es keine Fehler gibt) immer wenn der Server läuft: Erstellen ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Erstelle die Datei /etc/systemd/system/{ServiceName}.service mit folgendem Inhalt: .. code-block:: cfg # The {Service Name} service (part of systemd) # file: /etc/systemd/system/{ServiceName}.service [Unit] Description = {Service Description} Wants = network-online.target After = network-online.target [Service] User = $USER ExecStart = {Service Start Commando} Restart = on-failure [Install] WantedBy = multi-user.target EOF Setze die Berechtigungen der Service-Datei und starte den Service: .. code-block:: sh sudo chmod 644 /etc/systemd/system/{ServiceName}.service sudo systemctl daemon-reload sudo systemctl enable {ServiceName} sudo systemctl start {ServiceName} Entfernen ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: sh sudo systemctl stop [servicename] sudo systemctl disable [servicename] sudo rm /etc/systemd/system/[servicename] sudo rm /etc/systemd/system/[servicename] # and symlinks that might be related sudo rm /usr/lib/systemd/system/[servicename] sudo rm /usr/lib/systemd/system/[servicename] # and symlinks that might be related sudo systemctl daemon-reload sudo systemctl reset-failed Nützliche Befehle ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: sh # view and follow the log journalctl -fu {ServiceName} # view log since yesterday journalctl --unit={ServiceName} --since=yesterday # view log between a date journalctl --unit={ServiceName} --since='2020-12-01 00:00:00' --until='2020-12-02 12:00:00' # Check whether the service is active sudo systemctl is-active {ServiceName} # View the status of the service sudo systemctl status {ServiceName} # Restarting the service sudo systemctl reload-or-restart {ServiceName} # Stopping the service sudo systemctl stop {ServiceName} Server Safety ================================================== SSH ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ sshd konfigurieren in Datei /etc/ssh/sshd_config .. code-block:: cfg PermitRootLogin no PubkeyAuthentication yes PasswordAuthentication no PermitEmptyPasswords no (Port [Some Random Port]) .. code-block:: sh sudo sshd -t # Check Syntax sudo service sshd reload # Reload sshd fail2ban installieren für Schutz gegen Bots usw. (optional) .. code-block:: cfg sudo apt install fail2ban Auto-Updates ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: sh sudo apt install unattended-upgrades sudo dpkg-reconfigure -plow unattended-upgrades Disable root ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: sh sudo passwd -l root to reenable: .. code-block:: sh sudo passwd -u root Secure shared memory ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Datei /etc/fstab bearbeiten Entweder für guten Schutz komplett schreibgeschützt: .. code-block:: cfg tmpfs /run/shm tmpfs ro,noexec,nosuid 0 0 Oder für mehr Kompatibilität nur Ausführen verbieten: .. code-block:: cfg none /run/shm tmpfs rw,noexec,nosuid,nodev 0 0 Anschließend Neustart Firewall ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Allgemein: .. code-block:: sh sudo ufw default deny incoming sudo ufw default allow outgoing Webserver: .. code-block:: sh sudo ufw allow 22 sudo ufw allow 80 sudo ufw allow 443 Ethereum: .. code-block:: sh # E.a. Allow p2p ports for lighthouse sudo ufw allow 9000/tcp sudo ufw allow 9000/udp # Allow eth1 port sudo ufw allow 30303/tcp sudo ufw allow 30303/udp Allow ssh only for special IP: .. code-block:: sh sudo ufw allow from 192.168.1.0/24 sudo ufw allow from proto tcp to any port Änderungen übernehmen und firewall starten: .. code-block:: sh sudo ufw enable Ubuntu Pro ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Mit Ubuntu Pro erhält man schneller Sicherheitsupdates und kann man kann Features wie kernel-updates zur Laufzeit aktivieren. Aktuell bekommt man gratis ein Token der für 5 Maschinen verwendet werden kann. .. code-block:: sh sudo apt update && sudo apt upgrade sudo pro attach $YOUR_TOKEN Weiteres ================================================== .. code-block:: sh # Quellliste für apt bearbeiten nano /etc/apt/sources.list # restart os shutdown -r now # Add Variable nano /etc/environment # Java version wechseln update-alternatives --config java # Java version anmelden update-alternatives --install /usr/bin/java java /usr/lib/jvm/.../bin/java 1 # PHP Error log tail -f /var/log/apache2/error.log