\subsection{Netfilter und IPtables}

\subsubsection{Grundkonfiguration}

Beim Systemstart wird der Dienst \emph{iptables.service} gestartet und die
Filterregeln aus der Datei \emph{/etc/iptables/iptables.rules} (siehe
\emph{aufgabe3.1/iptables.rules}) übernommen. Diese wurde so konfiguriert, dass
bestehende Verbindungen sowie Verbindungen im internen LAN automatisch erlaubt
werden. Der Zugriff von außerhalb ist auf den Port 22 beschränkt. Zusätzlich ist
\emph{Icmp} erlaubt. Zur Absicherung gegen Brute-Force-Angriffe wird der Dienst
\emph{SSH-Guard} verwendet. Für SSH-Guard haben wir eine eigene Chain
mit dem Namen \emph{sshguard} in der \emph{iptables.rules} eingetragen. Alle Zugriffe
auf Port 22 werden durch diese Chain gefiltert. Erfolgen in kurzer Zeit zu viele
unautorisierte Zugriffe, trägt das Programm \emph{SSH-Guard} automatisch temporär
eine neue DROP-Regel in die \emph{sshguard}-Chain ein. Verbindungen nach außen
werden ungefiltert durchgelassen, weil es nicht effektiv ist, einzelne Ports zu
sperren. Ein in das System bereits eingedrungener Angreifer könnte einfach
Pakete auf anderen offenen Ports versenden.

\subsubsection{Forwarding und Masquerading}

Der Zugriff auf das Internet wird durch folgende Regel in der NAT-Tabelle:

\begin{lstlisting}
-A POSTROUTING -o eth0 -j MASQUERADE
\end{lstlisting}

für die Compute-Nodes zugängig gemacht. Dazu musste noch die Datei \emph{/etc/sysctl.d} mit der Zeile:

\begin{lstlisting}
net.ipv4.ip_forward = 1
\end{lstlisting}

erstellt werden.


\subsubsection{Diagnose und Logging}

Alle abgeblockten Verbindungen landen in der \emph{logging}-Chain, wo sie durch:

\begin{lstlisting}
-A logging -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
\end{lstlisting}

geloggt werden. Die Anzahl der Meldungen wurde auf 2 Meldungen pro Minute
limitiert. Der Log wird in der Datei \emph{/var/log/iptables.log} gespeichert.
