Neuer StratoServer: Unterschied zwischen den Versionen

Aus Wiki schlicker.org
Zur Navigation springen Zur Suche springen
Zeile 433: Zeile 433:
 
DocumentRoot /www/default/www
 
DocumentRoot /www/default/www
 
ServerName server1.afdb.de
 
ServerName server1.afdb.de
ServerAdmin karl@newyorker-lions.de
+
ServerAdmin karl@schlicker.org
  
 
CustomLog /www/default/logs/server1_access.log combined
 
CustomLog /www/default/logs/server1_access.log combined

Version vom 15. Mai 2023, 08:37 Uhr

Einen neuen Server bei Strato einrichten

Installation bei Strato

Bei Strato über den Installationsassistent wird ein neuer Server installiert. Dazu bei "Experten-Einsatz" das Betriebsystem "AlmaLinux 9" auswählen, das neue root-Password und die Sprache "deutsch" festlegen und mit einer minimalen Partitionierung den Server installieren.

Nach ca. 30min ist dann das neue System installiert und per ssh über die in der Strato-Oberfläche angegebene Primäre IP erreichbar

AlmaLinux 9 zu Rocky Linux 9

Da ich mehr mit Rocky Linux vertraut bin, wechseln wir gleich nach der Erst-Installtion das Betriebsystem.

# System aktualisieren
dnf -y update
dnf -y upgrade

cd /usr/local/src/
dnf install wget

# die wichtigen Dateien für RockyLinux herunterladen 
wget https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os/Packages/r/rocky-gpg-keys-9.1-1.11.el9.noarch.rpm 
wget https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os/Packages/r/rocky-release-9.1-1.11.el9.noarch.rpm
wget https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os/Packages/r/rocky-repos-9.1-1.11.el9.noarch.rpm

# Alle Pakete identifizieren, die AlmaLinux-typisch sind und diese löschen
rpm -qa|grep alma
rpm -e --nodpes almalinux-gpg-keys-9.1-1.9.el9.x86_64 almalinux-release-9.1-1.9.el9.x86_64 almalinux-repos-9.1-1.9.el9.x86_64
rpm -e --nodeps almalinux-gpg-keys-9.1-1.9.el9.x86_64 almalinux-release-9.1-1.9.el9.x86_64 almalinux-repos-9.1-1.9.el9.x86_64

# Anschließend die vorher heruntergeladenen RockyLinux-RPMs installieren
rpm -Uvh *

# Überprüfen, ob noch AlsaLinux-Datein vorhanden sind
rpm -qa|grep -i alsa

# System ist nun auf RockyLinux 
cat /etc/os-release 
NAME="Rocky Linux"
VERSION="9.1 (Blue Onyx)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.1"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Rocky Linux 9.1 (Blue Onyx)"
ANSI_COLOR="0;32"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:rocky:rocky:9::baseos"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
ROCKY_SUPPORT_PRODUCT="Rocky-Linux-9"
ROCKY_SUPPORT_PRODUCT_VERSION="9.1"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.1"

sshd einrichten

Zuerst wird ein neuer User angelegt

useradd -u 1000 -c "Karl's Admin Account" -m ktsadmin
passwd ktsadmin

anschließend wird die Datei /etc/ssh/sshd_config angepasst

dnf install -y vim
vim /etc/ssh/sshd_config
  PORT 9999
  PermitRootLogin no
systemctl restart sshd

2. IPv4 und IPV6 einrichten

Als erstes wird per NetworkManager eine 2. IP-Adresse konfiguriert und auch gleich die IPv6-IP aktiviert.

NetworkManager Konfigurationsdatei erstellen

vim /etc/NetworkManager/system-connection/Ethernet1.nmconnection
[connection]
id=Ethernet1
uuid=036aca4a-4251-4568-bce8-c2657ff311fe
type=ethernet
interface-name=eno1
timestamp=1672147920

[ethernet]

[ipv4]
address1=85.214.25.70/32,85.214.25.1
address2=85.214.91.231/32
dns=8.8.8.8;8.8.4.4;
method=manual

[ipv6]
address1=2a01:238:42ec:2f00:b821:b19c:85d0:1f03/64,fe80::1
dns=2001:4860:4860::8888;2001:4860:4860::8844;
method=manual

[proxy]

und mit

systemctl restart NetworkManager

aktiviert.

ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 0c:c4:7a:c3:01:93 brd ff:ff:ff:ff:ff:ff
    altname enp0s25
3: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 0c:c4:7a:c3:01:92 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 85.214.91.231/32 scope global noprefixroute eno1
       valid_lft forever preferred_lft forever
    inet 85.214.25.70/32 scope global noprefixroute eno1
       valid_lft forever preferred_lft forever
    inet6 2a01:238:42ec:2f00:b821:b19c:85d0:1f03/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::ec4:7aff:fec3:192/64 scope link 
       valid_lft forever preferred_lft forever

IP Forwarding aktivieren

vim /etc/sysctl.d/10-ipforward.conf
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding=1

Webmin mit SSL-Zertifikat (Letsencrypt)

Benötigte RPMs für webmin installieren

cd /usr/local/src
dnf  -y install epel-release
dnf -y install perl-lib perl-Encode-Detect perl-open
# webmin herunterladen
wget https://downloads.sourceforge.net/project/webadmin/webmin/2.010/webmin-2.010-1.noarch.rpm?
rpm -Uvh webmin
# anschließend webmin anpassen, auf 2. IP-Adresse binden und ssl erst mal auschalten
vim /etc/webmin/miniserv.conf

  bind=85.214.91.231
  ssl=0

systemctl restart webmin

nun läuft Webmin auf der 2.IP über http (http://2ip:10000)

Letsencrypt installieren

dnf install -y snapd
systemctl restart snapd
snap install core
snap refresh core
ln -s /var/lib/snapd/snap /snap
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot

damit ist das Letsencrypt-Tool certbot installiert.

Da für die Letsencrypt-Zertifikatserstellung ein laufender Webserver (Apache) vorausgesetzt wird, muss dieser zuerst installiert und konfiguriert werden.

Apache und PHP installieren

Dazu erst mal die REPOs von RPMFusion und Remi hinzufügen

wget https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-9.noarch.rpm
wget https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-9.noarch.rpm
rpm -Uvh rpmfusion*.rpm
dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm

dnf module reset php
dnf module install php:remi-8.2
dnf install httpd
systemctl restart httpd

Apache konfigurieren

cat > /etc/httpd/conf.d/letsencrypt.conf << __EOF__
Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/
<Directory "/var/www/html/.well-known/acme-challenge/">
     Options None
     AllowOverride None
     ForceType text/plain
      RedirectMatch 404 "^(?!/\.well-known/acme-challenge/[\w-]{43}$)"
</Directory>
__EOF__

cat > /etc/httpd/conf.d/namevirtualhost.conf << __EOF__
NameVirtualHost 1.IP:80
NameVirtualHost 2.IP:80
__EOF__

cd /etc/httpd/conf.d/
cat > mod_compress.conf <<  __EOF__
<FilesMatch "\.js\.gzip$">
  AddType "text/javascript" .gzip
</FilesMatch>
<FilesMatch "\.css\.gzip$">
  AddType "text/css" .gzip
</FilesMatch>
AddEncoding gzip .gzip
__EOF__

cat > mod_expires.conf  << __EOF__
<IfModule mod_expires.c>
    # turn on the module for this directory
    ExpiresActive on
    # set default
    ExpiresDefault "access plus 24 hours"

    # cache common graphics
    ExpiresByType image/jpg "access plus 1 months"
    ExpiresByType image/gif "access plus 1 months"
    ExpiresByType image/jpeg "access plus 1 months"
    ExpiresByType image/png "access plus 1 months"

    # cache CSS
    ExpiresByType text/css "access plus 1 months"

    # cache other filetypes
    ExpiresByType text/javascript "access plus 1 months"
    ExpiresByType application/javascript "access plus 1 months"
</IfModule>
__EOF__

cat > mod_deflate.conf << __EOF__
<IfModule !mod_deflate.c>
LoadModule deflate_module /usr/lib/httpd/modules/mod_deflate.so
</IfModule>
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
#SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ \
#    no-gzip dont-vary
SetEnvIfNoCase Request_URI \
    \.(?:exe|t?gz|zip|bz2|sit|rar)$ \
    no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

Header append Vary User-Agent env=!dont-vary

DeflateFilterNote Input input_info
DeflateFilterNote Output output_info
DeflateFilterNote Ratio ratio_info
LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate
#CustomLog /var/log/httpd/deflate_log deflate
</IfModule>
__EOF__

systemctl restart httpd

Virtuellen Host erstellen

groupadd -g 1005 wwwgrp01
usermod -aG wwwgrp01 apache

cd /etc/httpd/conf.d/
cat > admin1.afdb.de.conf << __EOF__
<VirtualHost 85.214.91.231:80>
#-------------------------------------------------------------------------
# admin4.afdb.de
#
# webmaster         : webmaster@schlicker.org
# betreiber [email] : karl
# angelegt [von]    : 2022-12-28 [karl]
# gruppe            : wwwgrp01
#
#-------------------------------------------------------------------------

#  General setup for the virtual host
DocumentRoot /www/default/www
ServerName admin1.afdb.de
ServerAdmin karl@schlicker.org

CustomLog /www/default/logs/admin1_access.log combined
ErrorLog  /www/default/logs/admin1_error.log

DirectoryIndex index.html index.php    

<Directory "/www/default/www/">
  Require all granted
  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</Directory>

</VirtualHost>
__EOF__

systemctl restart httpd

Zertifikat erzeugen

Bei der Zertifikat-Erstellung wird die Option "In ein Verzeichnis erstellen" ausgewählt und anschließend das Verzeichnis "/var/www/html" genommen.

certbot certonly -d admin2.afdb.de -d server2.afdb.de

Webmin anpassen

Nachdem das Zertifikat nun erfolgreich erstellt worden ist, wird nun die Konfiguration von Webmin angepasst.

vim /etc/webmin/miniserv.com 
  port 443
  ssl 1
  keyfile=/etc/webmin/privkey.pem
  extracas=/etc/webmin/chain.pem
  certfile=/etc/webmin/cert.pem

# die benötigten Softlinks erstellen
cd /etc/webmin
ln -s /etc/letsencrypt/live/admin2.afdb.de/cert.pem .
ln -s /etc/letsencrypt/live/admin2.afdb.de/chain.pem .
ln -s /etc/letsencrypt/live/admin2.afdb.de/privkey.pem .

# und anschließend Webmin restartet
systemctl restart webmin

Cronjob für die Zertifikaterneuerung erstellen

cd /etc/cron.d
cat > cert_renew << __EOF__
MAILTO=root
SHELL=/bin/bash
# letsencrypt cert renew von Karl jeden Sontag 
0 0 * * Sun root /usr/bin/certbot renew >> /var/log/letsencrypt/cert_renew.log 2>&1
# Qmail Cert renew
#0 0 * * Sun root /var/qmail/bin/renew_cert.sh >> /var/log/letsencrypt/renew_qmail_cert.log 2>&1
__EOF__

Apache mit SSL einrichten

dnf install -y mod_ssl
cd /etc/httpd/conf.d/
vim ssl.conf
  Listen 85.214.25.70:443 https
systemctl restart httpd

Alle Webseiten auf https umleiten

cat > http2https.conf << __EOF__ 
<VirtualHost 85.214.25.70:80>
###############################################################
# Alle untenangegebenen Server auf https umlenken
# Besitzer:    Karl Schlicker
# Webmaster:   Karl Schlicker
# Angelegt:    Karl Schlicker (karl@schlicker.org)
# am:          2022-12-31
# Gruppe:      
###############################################################
DocumentRoot /www/default/www

# mail.afdb.de
ServerName mail.afdb.de
ServerAlias server1.afdb.de

ServerAdmin karl@schlicker.org 

CustomLog /www/default/logs/access.log combined
ErrorLog /www/default/logs/error.log
#RewriteLog /www/default/logs/rewrite.log
#RewriteLogLevel 5 

DirectoryIndex index.html index.php

<Directory "/www/default/www">
  Require all granted
  RewriteEngine On
 
  RewriteCond %{HTTPS} !=on
  RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [L,R=301]
  
  Options +FollowSymLinks +Includes
  AllowOverride All
</Directory>
</VirtualHost>
__EOF__

systemctl restart httpd

virtuellen Host für server1.afdb.de anlegen

cat > server1.afdb.de.conf << __EOF__
<VirtualHost 85.214.25.70:443>
#-------------------------------------------------------------------------
# server1.afdb.de
#
# webmaster         : webmaster@schlicker.org
# betreiber [email] : karl
# angelegt [von]    : 2022-12-31 [karl]
# gruppe            : wwwgrp01
#
#-------------------------------------------------------------------------

#  General setup for the virtual host
DocumentRoot /www/default/www
ServerName server1.afdb.de
ServerAdmin karl@schlicker.org

CustomLog /www/default/logs/server1_access.log combined
ErrorLog  /www/default/logs/server1_error.log

DirectoryIndex index.html index.php    

<Directory "/www/default/www/">
  Require all granted
  RewriteEngine On
</Directory>

</VirtualHost>
__EOF__

ftp-Server einrichten

Mail einrichten

siehe QMAIL-Toaster

rkhunter

logwatch

logrotate

dnf-automatic

Fail2ban (link) – a great tool for automatically banning suspicious IP addresses ClamAV (link) – an open-source antivirus engine Lynis (link) – open-source auditing tool for Linux