Neue Einträge ....

Howto use service command with docker in debian

Um die services benutzen zu können zuerst in den root Kontext wechseln:
su -
Alle Services anzeigen:
service --status-all
Einen Service deaktivieren:
systemctl disable <service-name>
Status eines Services anzeigen:
 service <service-name> status
Starten eines Services:
service <service-name> start
Docker Compose Service erstellen:

Zuerst muss eine Datei im Ordner /etc/systemd/system/ erstellt werden. Als Extension sollte service verwendet werden.

[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/srv/docker
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target
Den Service aktivieren mit:
systemctl enable <service-name>

Howto configure configure ip addresses in Debian

Um Systembefehle ausführen zu können muss im ersten Schritt der User mit dem su - Befehl auf den Root User gewechselt werden.

Zuerst muss herausgefunden werden wie die Schnittstellen unter Debian benannt sind. Das kann am einfachsten mit dem dmesg Befehl gemacht werden. Der Output es Befehls sieht in etwa so aus:

[    3.446594] usbcore: registered new interface driver uvcvideo
[    3.446596] USB Video Class driver (1.1.1)
[    3.490739] Adding 2094076k swap on /dev/sda5.  Priority:-1 extents:1 across:2094076k FS
[    3.493664] input: PC Speaker as /devices/platform/pcspkr/input/input6
[    4.127328] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[    4.127329] Bluetooth: BNEP filters: protocol multicast
[    4.127332] Bluetooth: BNEP socket layer initialized
[    4.405093] IPv6: ADDRCONF(NETDEV_UP): ens33: link is not ready
[    4.408882] IPv6: ADDRCONF(NETDEV_UP): ens33: link is not ready
[    4.416219] e1000: ens33 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[    4.416444] IPv6: ADDRCONF(NETDEV_CHANGE): ens33: link becomes ready
[    4.419136] IPv6: ADDRCONF(NETDEV_UP): ens37: link is not ready
[    4.432234] IPv6: ADDRCONF(NETDEV_UP): ens37: link is not ready
[    4.432851] e1000: ens37 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[    4.433275] IPv6: ADDRCONF(NETDEV_CHANGE): ens37: link becomes ready
[    4.437080] IPv6: ADDRCONF(NETDEV_UP): ens38: link is not ready
[    4.437566] IPv6: ADDRCONF(NETDEV_UP): ens38: link is not ready
[    4.444218] e1000: ens38 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[    4.444439] IPv6: ADDRCONF(NETDEV_CHANGE): ens38: link becomes ready
[    4.847883] fuse init (API version 7.26)
[    5.734230] NET: Registered protocol family 40
[    5.934233] Bluetooth: RFCOMM TTY layer initialized
[    5.934238] Bluetooth: RFCOMM socket layer initialized
[    5.934241] Bluetooth: RFCOMM ver 1.11

Die Netzwerkschnitstellen können über den Namen NIC (Network Interface Card) identifiziert werden. In obigen Beispiel hat der PC 3 Netzwerkkarten installiert. (ens33, ens37, ens38). Die Konfiguration der Dateien erfolgt nun in der /etc/network/interfaces.

Im folgenden sehen sie eine Beispielkonfiguration für die 3 Schnitsttellen. ens33 wird der DHCP seine Adresse bekommen, ens37 und ens38 bekommen eine fixe IP. Des weitern ist eine Schnittstelle lo zu finden, hierbei handelt es sich um das Loopback Interface. - Sollte der PC keine Netzwerkverbindung haben so kann man mit dem Loopback Device trotzdem mit sich selbst kommunizieren.

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

auto ens33
iface ens33 inet dhcp

auto ens37
iface ens37 inet static
        address 192.168.1.250
        netmask 255.255.255.0

auto ens38
iface ens38 inet static
        address 192.168.2.250
        netmask 255.255.255.0

Hat man die Änderungen in der Datei eingetragen so muss der Netzwerkdienst neu gestartet werden. - Dies erfolgt mit dem Kommando service networking restart bzw. systemctl restart networking. Eine Überprüfung der IP Adresse kann mit dem ip addr Befehl erfolgen.

Sollte es Probleme geben und der network-manager die Konfiguration überschreiben so muss dieser mit dem Kommando service networking stopgestoppt werden. Dauerhaft kann man den Networkmanager mit dem Kommando systemctl disable network-manager ausschalten.

Der Output sieht folgendermassen aus:

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:28:f0:85 brd ff:ff:ff:ff:ff:ff
    inet 192.168.154.162/24 brd 192.168.154.255 scope global ens33
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:28:f0:8f brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.250/24 brd 192.168.1.255 scope global ens37
       valid_lft forever preferred_lft forever
4: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:28:f0:99 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.250/24 brd 192.168.2.255 scope global ens38
       valid_lft forever preferred_lft forever

Sollte eine Schnittstelle falsche IP Adressen zugewiesen haben so kann diese Konfiguration mit dem Kommando ip addr flush <Schnittstelle> gelöscht werden.

Howto configure Debian 10 for basic routing operations

Unter NAT versteht man Network Address Traslation. Der Sinn dahinter ist es Netzwerkadressen umzuschreiben. Es kann zwischen Source NAT (SNAT), umschreiben der Quell Adresse und Destination NAT, umschreiben der Ziel Adresse unterschieden werden. Bei SNAT und DNAT wird standardmäßig immer eine Adresse auf genaue eine andere Adresse abgebildet. Für einen Zugang zum Internet muss jedoch eine öffentliche IP Adresse auf mehrere interne IP Adressen abgebildet werden. - Hierfür gibt es eine Sonderform von SNAT mit der Bezeichnung Masquerading.

Folgendes virtuelles Netzwerk dient zum Testen der Konfiguration:

PC1 und PC2 befinden sich in einem eigenen LAN Segment bzw. einem internen Netzwerk. PC3 fungiert als Firewall und benötigt 3 Schnittstellen. Die Namen der Schnittstellen können mit dem dmesg Befehl herausgefunden werden. Damit PC1 und PC2 sich mit dem Internet verbinden können muss ein Gateway in der IP Konfiguration eingetragen werden. Das erfolgt in der /etc/network/interfaces Datei.

Folgendes Beispiel zeigt die Konfigruation von PC1:

auto lo
iface lo inet loopback

auto ens33
iface ens33 inet static
address 192.168.1.1
netmask 255.255.255.0
gateway 192.168.1.250

Zuerst muss Fowarding in der Firewall aktiviert werden. Um Forwarding auf einer Firewall zu aktivieren folgendes Kommando auf der Konsole ausführen.

echo 1 > /proc/sys/net/ipv4/ip_forward

Der Status des IP Forwardings kann mit folgeden Kommand angezeigt werden. - Ist der Status auf 1 so ist das Forwarding aktiviert.

cat /proc/sys/net/ipv4/ip_forward

Nun sollte das Pingen zwischen den beiden äußeren Pc's möglich sein. Damit PC1 und PC2 ins Internet können muß Masquerading auf dem Routing PC aktiviert werden. Das erfolgt in Debian ab der Version 10 mittels NFT. (Net Filter Tables).

Falls das Paket nftables nicht installiert ist muss es mittels des Kommandos apt install nftables nachinstalliert werden. Folgendes Kommando dient zum aktivieren von Masquerading für das IP Netz 192.168.1.0/24. Als Output Interface wird eth0 festgelegt.

nft add table nat
nft add chain nat postrouting { type nat hook postrouting priority 100 \;}
nft add rule nat postrouting ip saddr 192.168.1.0/24 oif ens33 masquerade

Using Wireshark with non-root user in debian 10

Möchte man Wireshark unter Debian 10 mit dem Root User starten so kommt es zu folgender Fehlermeldung:

qt.qpa.screen: QXcbConnection: Could not connect to display 
Could not connect to any X display.

Falls es noch keine Wireshark Gruppe gibt so muss diese mit dem Befehlt groupadd wireshark hinzugefügt werden.

Um das zu umgehen sollte man Wireshark für bestimmte andere User freigeben. Um das zu erreichen müssen folgende Files angepasst werden.

su -
chgrp wireshark /usr/bin/dumpcap
chmod 750 /usr/bin/dumpcap
setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap

Dann muss der eigene User noch in die Wireshark Gruppe hinzugefügt werden. Die erfolgt in der Datei /etc/group. Die Datei ist folgendermassen aufgebaut:

hauptmj:x:1000:
systemd-coredump:x:999:
wireshark:x:125:hauptmj,root

Bei der Gruppe wireshark muss nun der Benutzer eingetragen werden.

Sollte alles richtig konfiguriert sein kann nun Wireshark über den Anwendungsstarter gestartet werden.

Die Netzwerkinterfaces sind nun im Wireshark zu sehen.

Docker Installation in Debian 10

Zuerst allgemeine Pakete runterladen.

su -
apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

Docker GPG Schlüssel installieren:

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

Überprüfen ob der Key eingetragen wurde:

apt-key fingerprint 0EBFCD88

Die Ausgabe sollte so aussehen:

pub   4096R/0EBFCD88 2017-02-22
      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <docker@docker.com>
sub   4096R/F273FCD8 2017-02-22

Stable Repository hinuzufügen:

add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"

Die Docker Pakete installieren:

apt-get update
apt-get install docker-ce docker-ce-cli containerd.io

Docker Compose Installation:

apt install docker-compose

Let's encrypt Installation

Installation Certbot:

apt install python-certbot-nginx

Konfiguration für nginx erstellen. SSL Files werden im /etc/certbot Verzeichnis angelegt:

certbot --nginx -d example.com -d www.example.com

Die Zertifikate werden im folgenden Ordner installiert:

/etc/letsencrypt/archive/www.example.com

Anpassen der NGINX Konfiguration:

server {

    listen 443 ssl;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_certificate /etc/nginx/certs/cert.pem;
    ssl_certificate_key /etc/nginx/certs/privkey.pem;
    client_max_body_size 20M;

}

Sollte kein Webserver installiert sein so kann mit dem Standalone Modus das Zertifikat geladen werden. Achtung es darf kein lokaler Webserver laufen sonst kann sich der Embedded Webserver nicht auf den Port 80 binden.

 certbot certonly --standalone

DNS with bind9 in Debian 10

Zuerst muss zum root User gewechselt werden, dann kann Bind9 installiert werden.

#su -
#apt install bind9

Im /etc/bind folgenden Files editieren:

/etc/bind/named.conf.local

Im ersten Schritt wird hier eine forward Zone konfiguriert. Mit der Forward Zone werden Namen auf IP Adressen aufgelöst. - Im Gegensatz dazu löst die Reverse Zone Ip Adressen auf Namen auf.

In dieser Datei wird die Zone angelegt. In der ersten Zeile wird der DNS Name festgelegt. Der Typ gibt an ob die Zone ein Master oder Slave ist. Der Parameter File zeigt auf das Zonen DB File, in diesen sind die einzelnen DNS Records mit den IP Adressen drinnen.

# This is the zone definition. replace example.com with your domain name
zone "server1.com" {
        type master;
        file "/etc/bind/zones/server1.com.db";
        };

Das Database File sollte folgendermaßen aussehen:

$ttl 3600
server1.com.      IN      SOA     ns1.server1.com. hostmaster.server1.com.(
                                                        2006081401
                                                        28800
                                                        3600
                                                        604800
                                                        38400
 )

server1.com.     IN      NS              ns1.server1.com.
server1.com.     IN      MX     10       mta.server1.com.
server1.com.     IN      A       192.168.0.10
www              IN      A       192.168.0.1
mta              IN      A       192.168.0.2
ns1              IN      A       192.168.0.3

Der SOA Eintrag bedeutet Start of authority. Das bedeutet das es sich um einen authoritativen Nameserver handelt, dieser ist für seine Zone zuständig. Im Gegensatz dazu bezieht ein nicht-authoritativer Nameserver seine Infomation nur vom authoritativen Nameserver. - Ein nicht-authorativer-Nameserver wird auch als Caching DNS Server bezeichnet.

Der Eintrag ttl gibt an wie lange dieser Eintrag im dns resolver des Clients gültig ist. Die TTL kann auch für jeden Record als zweiter Parameter festgelegt werden. In der dritten Spalte ist der Typ des DNS Eintrags hinterlegt.

  • NS ... Nameserver Record
  • MX ... MaileXchanger Record
  • A ... Address Record

Beim MX Eintrag kann noch die Priorität, in obigen Fall 10 eingestellt werden. Das wird benötigt falls es mehrere Mailserver gibt.

Ist die Konfiguration erstellt muss der Dienst neu gestartet werden:

#systemctl restart bind9

Zum Testen der Konfiguration gibt es mehrere Möglichkeiten.

  1. nslookup www.server1.com 127.0.0.1
  2. dig @localhost www.server1.com
  3. host www.orf.at

Um nslookup und dig verwenden zu können muss das Paket dnsutils nachinstalliert werden. Bei nslookup ist der erste Parameter der DNS Eintrag der abgefragt werden soll und der zweite Eintrag welcher Server abgefragt werden soll. Bei digist es genau umgekehrt, der erste Parameter ist der Server der zweite Parameter ist der DNS Eintrag.

Damit die Konfiguration systemweit wirkt muss noch die /etc/network/interfaces angepasst werden. Es muss folgender Eintrag zur IP Konfiguration hinzugefügt werden:

iface ens33 inet static
   address 192.168.1.1
   dns-nameservers 127.0.0.1

Sollte der Eintrag keine Wirkung zeigen so kann in der Datei /etc/resolv.conf der richtige DNS eingetragen werden.

Treten Fehler beim neu starten des Dienstes auf so kann in der Datei /var/log/syslognach Fehlern gesucht werden. Achtung ab Debian 12 muss der Fehler in journalctl -f gesucht werden.

Im nächsten Schritt muss nun noch die Reverse Zone konfiguriert werden. Das erfolgt in mehreren Dateien. Zuerst muß wieder die named.conf.local Datei angepasst werden und die Reverse Zone angelegt werden. Der Eintrag für das IP Netz 192.168.1.0 sieht folgendermaßen aus. - Wie man hier unschwer erkennen kann ist die IP Adresse des Netzes in umgekehrter Richtung geschrieben.

zone "1.168.192.in-addr.arpa" {
     type master;
     file "/etc/bind/zones/rev.1.168.192.in-addr.arpa";
};

Des weiteren muss jetzt noch das Zonenfile konfiguriert werden. Das sollte für das 192.168.1.0 Netz in der Datei 1.168.192.in-addr.arpaerfolgen. Die Datei schaut folgendermaßen aus:

@ IN SOA ns1.example.com. admin.example.com. (
                        2006081401;
                        28800;
                        604800;
                        604800;
                        86400
)

                     IN    NS     ns1.example.com.
1                    IN    PTR    example.com

In der Reverse Zone gibt es hauptsächlich PTR (Pointer) Records. Im speziellen wird hier die IP 192.168.1.1 mit dem PTR Record 1 angesprochen. Die Abfrage der Reverse Zone kann entweder wieder mittels den Befehlen dig oder nslookup erfolgen.

Achtung bei dig muss dig -x <ip-Adresse> PTR verwendet werden. -x ist für die Eingabe einer IPV4 Adresse erforderlich. PTR damit die Pointer Records angezeigt werden da dig standardmäßig nur A Records anzeigt.

DNS Replication with bind9 in Debian 10

Am Master sollte der Slave in der named.conf.local eingetragen werden. Der Eintrag sieht dann folgendermaßen aus.

zone "server1.com" {
        type master;
        allow-transfer{
       192.168.1.2;
        };  
        file "/etc/bind/server1.com.db";
};

Zum Erstellen eines zweiten Servers zur DNS Replikation muss am 2. Server in der Datei named.conf.local eine Slave Zone angelegt werden. Der Eintrag sieht folgendermaßen aus.

zone "server1.com" {
        type slave;
        masters{
       192.168.1.1;
        };  
        file "/var/cache/bind/server1.com.db";
};

Die IP Adresse des Masters Servers muss mit der IP des ersten DNS Server ausgetauscht werden. Sollen die Zonen übertragen werden so muss am ersten Server im Zonenfile die Seriennummer erhöht werden. Die Seriennummer besteht aus dem aktuellen Datum plus fortlaufende Nummer. Es ist der erste Eintrag im SOA Record.

Hat man die Änderungen am Master Server vorgenommen so muss der Dienst neu gestartet werden oder mittels rndc reload server1.com die Zone neu geladen werden. Möchte man den Transfer der Zonen automatisieren so kann man das in der Datei named.conf.optionseinstellen.

Der Eintrag sieht folgendermaßen aus:

  also-notify {192.168.1.2;};

Als IP Adresse muss hier die IP Adresse des Slave Servers eingetragen werden. - Ändert man nun am Master die Konfiguration, z.B. man erstellt eine neue IP so wird nach dem neu laden der Konfiguration der Zoneneintrag selbständig an den Slave übertragen.

Die Fehlersuche erfolgt in der Datei /var/log/syslog.

Möchte man seine DNS Server gegen Zonentransfers von nicht authorisierten DNS Servern absichern so ist das mit dnssec möglich. - Als ersten Schritt muss hier mittels des dnssec-keygen ein Schlüssel erstellt werden. - Der Befehl wird folgendermaßen aufgerufen:

dnssec-keygen -a hmac-md5 -b 256 -n HOST test.file

Dieser Schlüssel muß am Master installiert werden. Das geschieht mit diesem Befehl.

key master {
    algorithm    hmac-md5;
    secret       "yVisaOhpnWZEGaD4g+DKwg==";
};

Sollte hmac-md5 nicht mehr verfügbar sein so kann mit dem Befehl rndc-confgen ein Schlüssel erstellt werden. Der Output des Befehls sieht wie folgt aus und kann in die named.conf oder in die named.conf.options eingefügt werden. - Achtung wenn in der named.conf.options dann ausserhalb der options!

# Start of rndc.conf
key "rndc-key" {
        algorithm hmac-md5;
        secret "7L3Mt3l/lm1nwBUICWgprA==";
};

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};

In den named.conf.options wird nun noch der key unter allow-transfer eingetragen.

allow-transfer  { key master; };

Zusätzlich muss bei den allgemeinen Einstellungen dnssec aktiviert werden. Das kann mit folgenden Befehlen eingestellt werden.

dnssec-enable yes;
dnssec-validation yes;

Damit die Schüssel übertragen werden können muss jetzt noch in der named.conf.options der jeweils andere Server mit dem Schlüssel eingetragen werden. Der Eintrag erfolgt ausserhalb der options.

server 192.168.1.1{
    keys { master; };
}

Sollte alles richtig konfiguriert sein so sollten die Zonen wieder automatisch übertragen werden. Zum testen sollte der Schlüssel einmal geändert werden damit man sieht das die Übertragung nicht mehr funktioniert. Sollte das der Fall sein so findet man einen TSIG Error in der syslog. Achtung ab Debian 12 muss der Fehler in journalctl -f gesucht werden.

Basic DHCP Configuration with ISC-DHCP in Debian 10

Damit der DHCP Server arbeiten kann benötigt er eine fixe IP Adresse. Eine Anleitung für IP Konfiguration finden sie hier.

Als ersten Schritt muss der isc DHCP Server installiert werden. Das kann mit dem Befehlt apt install isc-dhcp-server gemacht werden. Die Basiskonfiguration des DHCP Servers erfolgt in der Datei /etc/dhcp/dhcpd.conf. Das d im Namen dhcpd zeigt das es sich um die Konfiguration des DHCP Servers (Daemon) handelt, meistens befindet sich auch noch die DHCP Client Konfiguration mit dem Namen dhcp.conf im selben Verzeichnis.

Der Aufbau der Konfigurationsdatei sieht folgendermaßen aus:

option domain-name "example.org";
option domain-name-servers 192.168.1.222, 8.8.8.8;

default-lease-time 600;
max-lease-time 7200;

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.40 192.168.1.100;
  option routers 192.168.1.5;
}

Im oberen Bereich der Datei befinden sich die Optionen. - Hier werden die zusätzlichen Informationen z.B. der DNS Server oder das Gateway für die Clients festgelegt. Die Option Domain Name legt eine etwaige Domain fest die automatisch bei der Namensauflösung angehängt wird. Fragt der User mittels nslookup den Namen server1 ab so wird automatisch der Name server1.example.com abgefragt. Der Eintrag default-lease-time bestimmt wie lange ein DHCP Server seine IP Adresse behalten darf wenn der Client keine besonderen Einstellungen will. Max-Lease-Time bestimmt die maximale Lease Dauer die ein DHCP Client erfragen darf.

Der Dienst muss nach Änderungen der Konifguration mit dem Befehl service isc-dhcp-server restartet werden.

Der nächste Abschnitt ist die Subnetz Deklaration, hier wir das IP Netz festgelegt für das der DHCP Server arbeitet. Mittels des Range Parameter wird der Bereich für die vergebbaren IP Adresse festgelegt. Die Option routers gibt das default Gateway an.

Des weiteren muss noch die Datei /etc/default/isc-dhcp-server angepasst werden. - Hier müssen die Schnittstellen angegeben werden an die der DHCP Server nach Broadcasts abhört. Die Datei hat folgenden Aufbau:

INTERFACESv4="ens33"
INTERFACESv6=""

Unter v4 sind IPV4 und unter v6 ist IPV6 zu verstehen. - Die IPV6 Funktionalität ist in obiger Konfiguration deaktiviert.

Zum testen der Konfiguration muss am Client PC wenn dieser Linux installiert hat der Befehl dhclient -v aufgerufen werden. Ist der DHCP Client eine Windows Maschine so muss der Befehl ipconfig /renew ausgeführt werden.

Eine weitere wichtige Funktionalität eines DHCP Servers ist die statische IP-Adressen-vergabe anhand der MAC Adresse. Hierfür muss die dhcpd.conf Datei um folgende Einträge ergänzt werden:

host pc123 {
hardware ethernet CC:50:E3:12:C8:83;
fixed-address 192.168.1.208;
}

Der Eintrag host muss pro Maschine die eine statische IP bekommen soll eindeutig sein. Hardware ethernet ist die Mac Adresse der Netzwerkschnittstelle (NIC). Fixe Adress ist die IP Adresse die der HOST zugewiesen bekommt.

HowTo create a simple bash script

Um mehrere Befehle abzuspeichern und nacheinander auszuführen kann man sie in einem bash Script abspeichern.

Das Bash Script ist eine normale Textdatei. Sie ist mit einer bat Datei unter Windows vergleichbar und hat folgenden Aufbau:

#!/bin/bash

# Befehle

ls -al

Ganz oben steht mit welchen Programm das Skript ausgefüht wir in unserem Fall mit der BASH Shell. - Das ist die Standard Shell unter Debian. Mit dem Hash Tag werden Kommentare eingegeben. Die Befehle können wie auf der Kommandozeile eingegeben werden.

Damit das Bash script ausführbar wird müssen noch die Execute Rechte für die Datei erstellt werden. Dies erfolgt mit dem chmod +x <dateiname>Befehl.

Das Bash Script kann dann mit ./dateiname ausgeführt werden. Der Punkt/Slash am Anfang ist notwendig da Linux sonst nur Befehle in den bin Verzeichnissen ausführt.

Advanced DHCP configuration with DDNS

DDNS erweitert den DHCP Server um die Möglichkeit den Hostnamen einer neu vergebenen IP gleichzeitig im DNS Server zu registrieren. Um diese Funktionalität einzurichten muss sowohl der ISC DHCP Server als auch der Bind DNS Server konfiguriert werden.

Am DNS Server muss die Konfiguration vom /etc/bind/zones Verzeichnis ins /var/cache/bind/zones Verzeichnis kopiert werden. - Das war bereits bei der Master Slave Replikation beim DNS notwendig da sich die Zonendateien dynamisch ändern können. Der Bind User und die Bind Gruppe sollten nun Schreibrechte auf die Dateien besitzen. Die Datei named.conf.local muß nun noch auf die neuen Zonenfiles im /var/cache/bind Ordner zeigen. Die Datei sollte dann folgenden Inhalt haben.

zone "server1.com" {
    type master;
    file "/var/cache/bind/zones/server1.com.db";
    allow-update{key rndc-key;};
};

Des weiteren muss ein Key erstellt werden der es dem DHCP Server erlaubt die Daten im DNS Server upzudaten. Der Key kann mit foilgendem Befehl erstellt werden:

dnssec-keygen -a hmac-md5 -b 256 -n HOST key.file

Der key kann nun mittels include Befehl in die named.conf.local eingebunden werden. Der include Befehl sollte am Anfang der Datei stehen.

include "/etc/bind/rndc.key"
...

Nun muss noch die Konifguration des DHCP Servers angepasst werden. Die Datei /etc/dhcp/dhcpd.conf muss um folgenden Zeilen ergänzt werden.

ddns-updates on;
ddns-update-style interim;
update-static-leases on;
key rndc-key {algorithm .....};
allow unknown-clients;
use-host-decl-names on;

Hier eine Erkärung der einzelnen Parameter.

  • ddns-updates on, Dynamische Updates werden aktiviert
  • ddns-update-style interim, sollte immer „interim“ sein; die andere aber veraltete Möglichkeit wäre „adhoc“
  • update-static-leases on, auch statische leases werden geupdatet
  • authoritative, Wenn der DHCP der einzige seiner Art im Netzwerk ist oder sein soll, sollte diese Option gesetzt sein.
  • key rndc-key, Hier wird der Key für die Übertragung definiert (rndc-key), welcher auch beim DNS-Server verwendet wird.
  • allow unknown-clients, Ist standardmäßig aktiviert; es werden auch Adressen an unbekannte Clients vergeben.
  • use-host-decl-names on, Die von den Hosts definierten Hostnames werden verwendet.
  • log-facility local7, Logging für DHCP ist aktiviert.

Nun muß noch die Subnetztdeklaration angepasst werden. Die Einträge sollten um folgende 2 Zeilen erweitert werden:

subnet 192.168.1.0 netmask 255.255.255.0{
    range ....

    ddns-domainname "server1.com";
    ddns-rev-domainname "in-addr.arpa";
}

Dannach muss noch der DNS Server der aktualisiert werden werden soll in der dhcpd.conf Datei eingetragen werden. Das erfolgt für die Forward Zone folgendermassen:

zone server1.com{
    primary 127.0.0.1;
    rndc-key <wie oben>
}

Sollte alles richtig konfigruriert sein so ist die Namesauflösung der Forward- und der Reversezone erfolgreich möglich. Testen kann man das mit nslookup oder dig.

Die Ip Adressevergabe und mögliche Fehler sollten in der /var/log/syslog Datei mitprotokolliert werden. Achtung ab Debian 12 muss der Fehler in journalctl -f gesucht werden!

HTTP authentication with Apache 2

Zuerst muss Apache2 installiert werden.

apt install apache2

Zusäätzlich muss zur Authentifizierung noch folgende PAket installiert werden:

sudo apt install apache2-utils

Darin befindet sich das htpasswd Programm. Ein Benutzer und ein Kennwort werden mit folgenden Befehl erstellt.

htpasswd -c /etc/apache2/.htpasswd user1234

Nun muss noch Apache konfiguriert werden. Die Konfiguratuion wird in der Datei /etc/apache2/sites-enabled/000-default.conf eingetragen.

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

  <Directory "/var/www/html">
      AuthType Basic
      AuthName "Restricted Content"
      AuthUserFile /etc/apache2/.htpasswd
      Require valid-user
  </Directory>
</VirtualHost>

Nun muss der Apache Service noch mit service apache2 restart neu gestartet werden. Beim Zugriff auf dem Webserver sollte nun ein Authentifizierungsfenster erscheinen.

Self Signed SSL Zertifikat

Folgende Schritte sind zur Erstellung eines Self Signed Zertifikats mit OpenSSL notwendig.

Damit das SSL Zertifkat erstellt werden kann zuerst einen DNS Eintrag in der /etc/hosts Datei erstellen. Im unteren Beispiel die Adresse www.server1.com auf 127.0.0.1 zeigen lassen. Die Konfiguration sollte dann folgendermaßen aussehen:

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       www.server1.com

1) Privaten Schlüssel erstellen:

openssl genrsa -out www.server1.com.key 2048

2) CSR (Certificate Sign Request)

openssl req -new -key www.server1.com.key -out www.server1.com.csr

3) Zertifikat erstellen:

openssl x509 -req -days 365 -in www.server1.com.csr -signkey www.server1.com.key -out www.server1.com.crt

Mit folgenden Befehl wird SSL am Apache Server eingeschalten:

a2enmod ssl

Um die Konfiguration zu aktivieren muß in der Datei /etc/apache2/sites-enabled/000-default.conf eingetragen werden. Die Konfiguration wie folgt aus:

<VirtualHost *:443>
ServerName www.server1.com
DocumentRoot /var/www/meinedomain/
....
SSLEngine On
SSLCipherSuite HIGH:MEDIUM
SSLCertificateFile /etc/apache2/ssl/www.server1.com.crt 
SSLCertificateKeyFile /etc/apache2/ssl/www.server1.com.key
</VirtualHost>

SSL Zertifikat mit docker unter Windows generieren

docker run -it -v ${PWD}/export:/export frapsoft/openssl genrsa -des3 -passout pass:x -out /export/server.pass.key 2048

docker run -it -v ${PWD}/export:/export frapsoft/openssl rsa -passin pass:x -in /export/server.pass.key -out /export/server.key

docker run -it -v ${PWD}/export:/export frapsoft/openssl req -new -key /export/server.key -out /export/server.csr -subj "/C=UK/ST=Warwickshire/L=Leamington/O=OrgName/OU=IT Department/CN=example.com"

docker run -it -v ${PWD}/export:/export frapsoft/openssl x509 -req -days 365 -in /export/server.csr -signkey /export/server.key -out /export/server.crt

OpenVPN Installation

Um einen neuen Benutzer in OpenVPN zu erstellen, können Sie folgende Schritte ausführen:

1) Erstellen Sie einen Benutzer-Account: Verwenden Sie das Befehlszeilentool "useradd" oder "adduser", um einen neuen Benutzer-Account auf Ihrem OpenVPN-Server zu erstellen.

sudo useradd -m -s /bin/bash vpnuser

2) Erstellen Sie ein Passwort für den Benutzer: Verwenden Sie das Befehlszeilentool "passwd", um ein Passwort für den neuen Benutzer zu erstellen.

sudo passwd vpnuser

3) Erstellen Sie einen Client-Konfigurationsdatei : Erstellen Sie eine OpenVPN-Client-Konfigurationsdatei für den neuen Benutzer. Diese Datei enthält die Verbindungsparameter für den OpenVPN-Server. Sie können eine Vorlage verwenden oder eine eigene erstellen.

sudo nano /etc/openvpn/client-configs/vpnuser.conf

4) Erstellen Sie ein Zertifikat und einen Schlüssel für den Benutzer: Verwenden Sie das Befehlszeilentool "easy-rsa" oder "openssl", um ein Zertifikat und einen Schlüssel für den neuen Benutzer zu erstellen.

cd /etc/openvpn/easy-rsa
source vars
./build-key vpnuser

5) Konfigurieren Sie den OpenVPN-Server: Fügen Sie den neuen Benutzer in die OpenVPN-Serverkonfigurationsdatei ein und starten Sie den OpenVPN-Server neu.

sudo nano /etc/openvpn/server.conf
sudo service openvpn restart

6) Geben Sie dem Benutzer das Zertifikat und die Konfigurationsdatei: Übertragen Sie die erstellte Client-Konfigurationsdatei und das Zertifikat an den Benutzer, damit er sich mit dem OpenVPN-Server verbinden kann.

Es gibt auch Möglichkeiten das automatisch zu machen, mit scripts oder anderen tools die es ermöglichen mehrere User auf einmal zu erstellen.

PFX Zertifikat NGINX

Ein PFX-Dateiarchiv kann folgende Bestandteile enthalten:

SSL/TLS-Zertifikat: Dies ist das digitale Zertifikat, das von einer Zertifizierungsstelle ausgestellt wurde und die Identität einer Website oder eines Servers authentifiziert.

Privater Schlüssel: Der private Schlüssel ist der kryptografische Schlüssel, der mit dem SSL/TLS-Zertifikat verknüpft ist. Er wird verwendet, um verschlüsselte Daten zu entschlüsseln und digitale Signaturen zu erstellen.

Zwischenzertifikate (Optional): Manchmal enthält eine PFX-Datei auch Zwischenzertifikate, die eine Verbindung zwischen dem SSL/TLS-Zertifikat und dem Stammzertifikat herstellen.

Das PFX-Format wird häufig verwendet, um Zertifikate und private Schlüssel zwischen verschiedenen Systemen oder Servern zu übertragen oder zu sichern. Zum Beispiel wird es verwendet, wenn ein SSL/TLS-Zertifikat von einem Zertifizierungsanbieter ausgestellt wird und dann auf einem Webserver installiert werden muss. Der Serveradministrator kann das Zertifikat und den privaten Schlüssel in einer PFX-Datei exportieren und dann auf den Server importieren.

Es ist wichtig zu beachten, dass PFX-Dateien oft passwortgeschützt sind, um die Sicherheit der enthaltenen privaten Schlüssel zu gewährleisten.

Um Schlüssel und Zertifikat zu extrahieren sind folgende Schritte notwendig.

Zertfikat extrahieren

root@srv:/data/ssl# openssl pkcs12 -in cert2025.pfx -clcerts -nokeys -out cert2025.crt
Enter Import Password:

Key extrahieren

root@srv:/data/ssl# openssl pkcs12 -in cert2025.pfx -nocerts -out cert2025.key
Enter Import Password:
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

Key decodieren

root@sev:/data/ssl# openssl rsa -in cert2025.key -out cert2025.key_dec
Enter pass phrase for cert2025.key:
writing RSA key

Freigabe Windows nicht veränderbar/lesbar

Änderungen bei der Freigabeeinstellung

Screenshot 2024-03-07 092114.png

Dateisystemrechte einstellen

Achtung: Jeder muss 2x vorkommen, Einmal für den aktuellen Ordner, einmal für die Unterordner bzw. Dateien

Screenshot 2024-03-07 092146.png

Detaileinstellungen für die Dateien und Unterordner

Screenshot 2024-03-07 092206.png

Detaileinstellungen für aktuellen Ordner

Screenshot 2024-03-07 092222.png