Skip to content
Snippets Groups Projects
Commit 7be9d963 authored by Benedikt Wildenhain's avatar Benedikt Wildenhain
Browse files

Versuchsdokumentation

parent 0abf4112
Branches
No related tags found
No related merge requests found
No preview for this file type
......@@ -87,4 +87,155 @@
\endgroup
\clearpage
\begin{center}
\Large\textbf{Versuchsskizze}
\par\medskip
\end{center}
\begin{enumerate}
\item Für eine Verbindung zwischen mehreren Geräten gibt es diverse Möglichkeiten:
\begin{itemize}
\item Ethernet (IEEE 802.3), bei typischen aktuellen PCs max. 1-10 GBit/s möglich, bei Verbindung von zwei Geräten mittels Kabel
(ab Gigabit ist hier kein Crossover-Kabel notwendig), bei mehr Geräten mit Hub oder Switch (im einfachsten Fall,
sofern keine Segmentierung gewünscht). Unter Linux erscheinen die dann als Gerät {\em eth0, eth1, \dots} oder {\em
enp\dots} (für PCI-Geräte) oder {\em enx} (für Geräte mit USB-Anbindung), zur Benennung gibt es Details unter
\url{https://systemd.io/PREDICTABLE_INTERFACE_NAMES/#what-precisely-has-changed-in-v197} und
\url{https://www.freedesktop.org/software/systemd/man/latest/systemd.net-naming-scheme.html}
\item Wireless-LAN (IEEE 802.11), theoretisch bei idealen Bedingungen Übertragung im Gigabit/s-Bereich möglich, aber ein
geteiltes Medium und meist geringere Datenraten erreichbar. Hier wird typischerweise ein Access-Point zur Verbindung mehrerer Geräte benutzt,
unter Linux erscheinen die Geräte z.\,B.\ als {\em wlan0} oder {\em wlp0s20f3}.
\item Verbindung zweier Geräte per USB-C (USB3.2: maximal 20 GBit/s, USB4: maximal 80 GBit/s), erscheint
unter Linux z.\,B.\ als {\em thunderbolt0}.
\item Jeder Netzwerkadapter erhält vom Hersteller einer eindeutige Hardwareadresse, die normalerweise nicht verändert
wird.
\end{itemize}
{\em Im Praxiversuch wurden Ethernet und USB-C verwendet.}
Damit Rechner (ohne Router oder über ein Point-to-Point-Protokoll) miteinander sprechen können, müsssen sie sich im
selben \href{https://de.wikipedia.org/wiki/Subnetz}{Subnetz} befinden. Die Subnetzmaske bzw. Präfixlänge gibt an,
wieviele Bits der IP-Adressen der Netzwerkteil sind, der Rest unterscheidet die einzelnen Hosts innerhalb eines Netzes,
so ist z.B. bei der IPv4-Adresse {\em 192.168.54.73/24} der Netzwerkteil 24 Bit lang und der Hostteil 32-24=8 Bit lang,
die Hosts dürfen sich also nur in der letzten 8-Bit-Zahl unterscheiden. Zur Vergabe einer IP-Adresse gibt es mehrere
Möglichkeiten:
\begin{itemize}
\item
Manuelle Vergabe: Temporär z.B. mit \lstinline[style=cmd]{sudo ip addr add 198.51.100.1/30 dev enp0s31f6} oder
dauerhift mittels Network-Manager (entweder graphisch oder über
\lstinline[style=cmd]{nmcli connection add con-name Beispielnetz type ethernet ifname enp0s31f6 ipv4.addresses 198.51.100.1/30}
\item Vergabe per \href{https://de.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol}{DHCP} (insb. bei IPv4
verbreitet): Ein oder mehrere Server vergeben auf Anfrage IP-Adressen und informieren über die Adresse des
Default-Gateways,
typischerweise werden auch Zusatzinformationen, wie z.B. die Subnetzmaske, DNS-Server und die Gültigkeitsdauer der
DHCP-Adresse mitgeliefert. Eine IPv4-Adresse kann z.B. temporär per \lstinline[style=cmd]{dhclient -eth0} oder
dauerhaft per
\lstinline[style=cmd]{nmcli connection add con-name Beispielnetz type ethernet ifname enp0s31f6 ipv4.method auto ipv4.link-local disabled}
(mit explizit deaktiviertem Fallback auf {\em link-lokal}-Adressen) konfiguriert werden.
\item Automatische Auswahl einer lokalen Adresse (bei IPv6 üblich, bei IPv4 eher als Fallback, falls kein DHCP-Server
erreichbar ist). Relevant sind hierfür insb.
\href{https://datatracker.ietf.org/doc/html/rfc3927}{Dynamic Configuration of IPv4 Link-Local Addresses} bzw.
\href{https://en.wikipedia.org/wiki/IPv6#Stateless_address_autoconfiguration_(SLAAC)}{SLAAC}. Der Rechner wählt
selbstständig eine Adresse aus dem Bereich 169.254.0.0/16 (IPv4) bzw. ff02::/16 (IPv6) aus und überprüft mittels
Address Resolution Protocol (IPv4), ob diese noch nicht verwendet wird (und wählt ggf.\ eine andere Adresse), bei
IPv6 wird diese von der Hardware-Adresse abgeleitet und ist dadurch automatisch eindeutig. Explizite Konfiguration
unter IPv4 z.\,B.\ mittels
\lstinline[style=cmd]{nmcli connection add con-name Beispielnetz type ethernet ifname enp0s31f6 ipv4.method link-local},
bei IPv6 wird eine lokale Adresse zwingend benötigt.
\item Eigenständige Auswahl einer globalen IPv6-Adresse mittels SLAAC und des
\href{https://en.wikipedia.org/wiki/Neighbor_Discovery_Protocol}{Neighbor Discovery Protocol}: Übliche
Vorgehensweise bei IPv6, hierfür müssen im Netzwerk entsprechende {\em Router Advertisements} verteilt werden, unter
Linux mittels \lstinline[style=cmd]{radvd}.
\end{itemize}
{\em Im Praxisversuch wurde IPv4 mit {\em link-local}-Adresse verwendet.}
\item Die per Kabel verbundenen Rechner konnten sich untereinander per \lstinline[style=cmd]{ping}-Kommando kontaktieren,
wobei ein Rechner auf Grund einer aktiven Firewall zunächst nicht antwortete. Mittels \lstinline[style=cmd]{ip neighbour}
und \lstinline[style=cmd]{wireshark} konnte aber dennoch überprüft werden, dass dieser Rechner tatsächlich auf
{\em arp}-Requests antwortete (per IPv6 wäre stattdessen NDP benutzt worden). Auch lies sich per
\lstinline[style=cmd]{wireshark} beobachten, wie mittels {\em arp} überprüft wurde, ob die gewählte IPv4-Adresse noch
frei war.
\item Mittels \lstinline[style=cmd]{nc -l -p 1234} wurde ein Chat-Dienst bereit gestellt und mittels
\lstinline[style=cmd]{nc 169.254.4.2 1234} wurde eine Verbindung zu diesem aufgebaut.
\item Als Serverdienst wurde ein SSH-Server eingesetzt, über \lstinline[style=cmd]{ssh 169.254.4.2} konnte ein
Verbindungsaufbau durchgeführt werden, alternativ ist auch mittels \lstinline[style=cmd]{nc 169.254.4.2 22} eine
Verbindung aufgebaut werden, welche mit einer Meldung der Art \lstinline[style=cmd]{SSH-2.0-OpenSSH_9.9p2 Debian-2}
beantwortet wurde und fortgeführt wurde, wenn über den Netcat-Client eine entsprechend aufgebaute Nachricht übermittelt
wurde (getestet durch Copy-and-Paste der initialen Nachricht).
\item Geeignete Dienste für einen Test wären {\em HTTP} oder {\em SMTP}, entsprechende Dialoge sehen folgendermaßen aus:
Webseitenabruf per HTTP:
\begin{lstlisting}[language=sh]
nc -C www.cvh-server.de 80
GET / HTTP/1.1
Host: www.cvh-server.de
HTTP/1.1 302 Found
Date: Thu, 10 Apr 2025 08:51:22 GMT
Server: Apache/2.4.62 (Debian)
Strict-Transport-Security: max-age=15768000; includeSubDomains
Location: https://www.cvh-server.de/
Content-Length: 293
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://www.cvh-server.de/">here</a>.</p>
<hr>
<address>Apache/2.4.62 (Debian) Server at www.cvh-server.de Port 80</address>
</body></html>
\end{lstlisting}
E-Mailversand per (E)SMTP (Hinweis: Auch wenn Sie hier früher quasi beliebige Absenderdaten eintragen konnten, überprüfen
einige Mailserver inzwischen, ob Ihre Absenderdaten zu Ihrem E-Mailaccount passen, auch gibt es Verfahren wie
\href{https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail}{DKIM},
\href{https://en.wikipedia.org/wiki/Sender_Policy_Framework}{SPF} und \href{https://en.wikipedia.org/wiki/DMARC}{DMARC}
mit denen überprüft werden kann, ob ein Mailserver berechtigt ist, Mails für eine bestimmte Domain zu erzeugen bzw.\
weiterzuleiten.)
\begin{lstlisting}
$ nc -C localhost 25
220 rechnername ESMTP Exim 4.98.2 Thu, 10 Apr 2025 11:06:28 +0200
EHLO localhost
250-rechnername Hello localhost [::1]
250-SIZE 52428800
250-LIMITS MAILMAX=1000 RCPTMAX=50000
250-8BITMIME
250-PIPELINING
250-PIPECONNECT
250-CHUNKING
250-STARTTLS
250-PRDR
250 HELP
MAIL FROM: praxisversuch@localhost.cvh-server.de
250 OK
RCPT TO: bwildenhain@cvh-server.de
250 Accepted
DATA
354 Enter message, ending with "." on a line by itself
Subject: Bitte schicken Sie uns Ihre PIN zu
From: support@badbank.example.org
To: bwildenhain@cvh-server.de
Bitte Senden Sie uns umgehendend Ihre PIN fuer Ihr Online-Banking zu um Ihr Konto zu verifizieren.
.
250 OK id=1u2nsR-000000006Ck-3mZP
quit
221 rechnername closing connection
\end{lstlisting}
\end{enumerate}
\end{document}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment