334 lines
7.4 KiB
TeX
334 lines
7.4 KiB
TeX
\documentclass[10pt]{beamer}
|
|
|
|
%\usepackage[utf8x]{inputenc}
|
|
\usepackage{ngerman}
|
|
\usepackage[ngerman]{babel}
|
|
\usepackage{amsmath}
|
|
\usepackage{bbm}
|
|
|
|
\usepackage{tabularx}
|
|
\usepackage{graphicx}
|
|
\usepackage{subfigure}
|
|
\usepackage{url}
|
|
%\usepackage{hyperref}
|
|
\usepackage{eurosym}
|
|
\usepackage{listings}
|
|
|
|
\usepackage{multirow}
|
|
\usepackage{colortbl}
|
|
\usepackage{booktabs}
|
|
\usepackage{setspace}
|
|
|
|
\usepackage[utf8]{inputenc}
|
|
|
|
\input{theme/theme}
|
|
|
|
\title{Linux Cluster in Theorie und Praxis}
|
|
\subtitle{iptables und nftables}
|
|
\author{Alfred Krohmer}
|
|
\date{4. März 2014}
|
|
\institute[ZIH TUD]{Zentrum für Informationsdienste und Hochleistungsrechnen -- TU Dresden}
|
|
%\room{INF 1046}
|
|
\address{Nöthnitzer Straße 46}
|
|
\city{01189 Dresden}
|
|
%\phone{+49 0351 - 463 38783}
|
|
\email{s4039299@mail.zih.tu-dresden.de}
|
|
|
|
\setbeamercovered{transparent}
|
|
\begin{document}
|
|
|
|
\zihmaketitle
|
|
|
|
\begin{frame}
|
|
\frametitle{Inhalt}
|
|
\tableofcontents
|
|
\end{frame}
|
|
|
|
|
|
\section{Einführung}
|
|
|
|
\begin{frame}
|
|
\frametitle{Einführung}
|
|
|
|
Zielstellungen bei der Entwicklung bei \texttt{nftables}
|
|
\begin{itemize}
|
|
\item Vereinfachung der Kernel-ABI
|
|
\item Vermeidung von Code-Redundanz
|
|
\item effizientere Abarbeitung der Regeln
|
|
\item bessere Fehlermeldungen
|
|
\end{itemize}
|
|
|
|
\end{frame}
|
|
|
|
|
|
\section{Rückblick / bisherige Firewall-Lösungen}
|
|
|
|
\begin{frame}
|
|
\frametitle{Rückblick / bisherige Firewall-Lösungen}
|
|
|
|
\begin{itemize}
|
|
\item 1994: ipfw
|
|
\item 1996: ipfwadm
|
|
\item 1999: ipchains
|
|
\item 2000: iptables
|
|
\item \textbf{2014: nftables}
|
|
\end{itemize}
|
|
|
|
\end{frame}
|
|
|
|
|
|
\section{Funktionsweise iptables vs. nftables}
|
|
|
|
\begin{frame}
|
|
\frametitle{Funktionsweise iptables vs. nftables}
|
|
|
|
\textbf{iptables:}
|
|
\begin{itemize}
|
|
\item nur für IPv4
|
|
\item andere Tools für andere Protokolle:
|
|
\begin{itemize}
|
|
\item ip6tables
|
|
\item arptables
|
|
\item ebtables
|
|
\end{itemize}
|
|
\item für jedes Protokoll eine eigenständige Implementierung im Kernel
|
|
\item Code für jedes Protokoll sehr spezifisch
|
|
\begin{itemize}
|
|
\item viel replizierter Code
|
|
\item hohe Performance
|
|
\end{itemize}
|
|
\end{itemize}
|
|
|
|
\end{frame}
|
|
|
|
\begin{frame}
|
|
\frametitle{Funktionsweise iptables vs. nftables}
|
|
\begin{center}
|
|
\includegraphics[width=10cm]{../iptables.png}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}
|
|
\frametitle{Funktionsweise iptables vs. nftables}
|
|
|
|
\textbf{nftables:}
|
|
\begin{itemize}
|
|
\item ein Tool für alle Protokolle \\
|
|
(IPv4, IPv6, Ethernet-Bridging, ARP)
|
|
\item einheitliche Schnittstelle zum Kernel
|
|
\item Implementierung als kleine virtuelle Maschine im Kernel
|
|
\item Regeln werden im Userspace zu Byte-Code kompiliert
|
|
\item Byte-Code kann auf Feldern und Bits der Pakete Operationen ausführen:
|
|
\begin{itemize}
|
|
\item vergleichen (matching) $\rightarrow$ bedingte Sprünge
|
|
\item arithmetische und logische Operationen
|
|
\item beliebige Änderungen am Paketinhalt
|
|
\end{itemize}
|
|
\item atomares Ersetzen von Regeln über Netlink-Transaktionen
|
|
\item funktioniert mit bisher verfügbaren Tools noch nicht effizient
|
|
\end{itemize}
|
|
|
|
\end{frame}
|
|
|
|
\begin{frame}
|
|
\frametitle{Funktionsweise iptables vs. nftables}
|
|
\begin{center}
|
|
\includegraphics[width=8cm]{../nftables.jpg}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\lstset{
|
|
basicstyle=\ttfamily\small
|
|
}
|
|
|
|
\begin{frame}[fragile]
|
|
\frametitle{Funktionsweise iptables vs. nftables}
|
|
\begin{itemize}
|
|
\item \hspace{0.3cm}
|
|
\begin{minipage}{0.97\linewidth}%
|
|
\begin{lstlisting}
|
|
payload load 4 offset network header + 16 => reg 1
|
|
compare reg 1 192.168.0.1
|
|
\end{lstlisting}
|
|
\end{minipage}
|
|
|
|
\item \hspace{0.3cm}
|
|
\begin{minipage}{0.97\linewidth}%
|
|
\begin{lstlisting}
|
|
payload load 4 offset network header + 16 => reg 1
|
|
set lookup reg 1 load result in verdict register
|
|
{ "192.168.0.1" : jump chain1,
|
|
"192.168.0.2" : drop,
|
|
"192.168.0.3" : jump chain2 }
|
|
\end{lstlisting}
|
|
\end{minipage}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
|
|
\section{Syntax und Tools}
|
|
|
|
\begin{frame}
|
|
\frametitle{Syntax und Tools}
|
|
|
|
\textbf{iptables:}
|
|
\begin{itemize}
|
|
\item iptables -A INPUT -p tcp --dport 22 -j LOG
|
|
\item iptables -A INPUT -p tcp --dport 22 -j DROP
|
|
\end{itemize}
|
|
|
|
\end{frame}
|
|
|
|
\begin{frame}[fragile]
|
|
\frametitle{Syntax und Tools}
|
|
|
|
\textbf{nftables:} nft
|
|
\begin{itemize}
|
|
\item nft add table filter
|
|
\item nft add chain filter input "\{ type filter hook input priority 0; \}" \\ \vspace{0.3cm}
|
|
\item nft add rule filter input \
|
|
tcp dport 22 log drop \\ \vspace{0.3cm}
|
|
|
|
\item als Script: \\
|
|
\begin{minipage}{.75\linewidth}%
|
|
\begin{lstlisting}
|
|
#!/usr/bin/nft -f
|
|
table filter {
|
|
chain input {
|
|
type filter hook input priority 0;
|
|
ip protocol tcp dport 22 drop log
|
|
}
|
|
\end{lstlisting}
|
|
\end{minipage}
|
|
|
|
\item nft bisher noch kaum in Linux-Distributionen verfügbar
|
|
\item in Arch Linux bisher nur im AUR verfügbar
|
|
|
|
\end{itemize}
|
|
|
|
\end{frame}
|
|
|
|
|
|
\section{Performance-Vergleich}
|
|
|
|
\begin{frame}
|
|
\frametitle{Performance-Vergleich}
|
|
|
|
Testaufbau:
|
|
\begin{center}
|
|
\includegraphics[width=10cm]{../../../bericht/bilder/nft-layout.pdf}
|
|
\end{center}
|
|
|
|
\end{frame}
|
|
|
|
\begin{frame}
|
|
\frametitle{Performance-Vergleich}
|
|
|
|
\begin{itemize}
|
|
\item Hardware:
|
|
\begin{itemize}
|
|
\item Sender / Empfänger:
|
|
\begin{itemize}
|
|
\item Intel Atom 330 (1,6 GHz)
|
|
\item NVIDIA MCP79 Ethernet Controller
|
|
\item 2 GB RAM
|
|
\end{itemize}
|
|
\item Firewall:
|
|
\begin{itemize}
|
|
\item Intel Core 2 Duo E6750 (2,6 GHz)
|
|
\item Intel 82572EI und 82566DM-2 Ethernet Controller
|
|
\item 2 GB RAM
|
|
\end{itemize}
|
|
\end{itemize}
|
|
|
|
\item Software:
|
|
\begin{itemize}
|
|
\item Paket-Generator: pktgen
|
|
\item Netzwerk-Monitor: ifpps (aus netsniff-ng)
|
|
\end{itemize}
|
|
|
|
\item Testablauf:
|
|
\begin{itemize}
|
|
\item zotac3 sendet Pakete über zotac-firewall an zotac4
|
|
\item Firewall hat entsprechend viele Regeln
|
|
\item Empfänger verwirft Pakete noch im iptables-Stack
|
|
\end{itemize}
|
|
\end{itemize}
|
|
|
|
\end{frame}
|
|
|
|
|
|
\begin{frame}
|
|
\frametitle{Ermittlung der optimalen Paketgröße}
|
|
\begin{center}
|
|
\includegraphics[width=11cm]{../../../bericht/benchmarks/nft-size-load-rate-send.pdf}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
|
|
\begin{frame}
|
|
\frametitle{Ermittlung der optimalen Paketgröße}
|
|
\begin{center}
|
|
\includegraphics[width=11cm]{../../../bericht/benchmarks/nft-size-load-rate-recv.pdf}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
|
|
\begin{frame}
|
|
\frametitle{Daten- und Paketdurchsatz}
|
|
\begin{center}
|
|
\includegraphics[width=11cm]{../../../bericht/benchmarks/nft-ipt-drop.pdf}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
|
|
\begin{frame}
|
|
\frametitle{Verarbeitungsgeschwindigkeit / Antwortzeit}
|
|
\begin{center}
|
|
\includegraphics[width=11cm]{../../../bericht/benchmarks/nft-ipt-drop-response.pdf}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\section{Schlussfolgerung}
|
|
|
|
\begin{frame}
|
|
\frametitle{Schlussfolgerung}
|
|
|
|
\begin{itemize}
|
|
\item iptables bezüglich Durchsatz noch überlegen, bei sehr vielen Regeln etwa gleich bzw. etwas schlechter als nftables
|
|
\item nftables skaliert bezüglich Antwortzeit besser
|
|
\item Vorteile nftables:
|
|
\begin{itemize}
|
|
\item Konzept mit virtueller Maschine mächtig
|
|
\item leichte Erweiterbarkeit
|
|
\end{itemize}
|
|
\item aber:
|
|
\begin{itemize}
|
|
\item momentan bei mittlerer Regelanzahl noch wesentlich schlechter performant als iptables
|
|
\item bisher so gut wie keine Dokumentation verfügbar
|
|
\end{itemize}
|
|
\item Fazit: (noch) nicht für den Produktiveinsatz bereit
|
|
\end{itemize}
|
|
|
|
\end{frame}
|
|
|
|
\section{Quellen}
|
|
|
|
\begin{frame}
|
|
\frametitle{Quellen}
|
|
|
|
\begin{itemize}
|
|
\item Projekt-Website von nftables: \\
|
|
\url{http://netfilter.org/projects/nftables/}
|
|
\item Tutorial von Eric Leblond:
|
|
\url{https://home.regit.org/netfilter-en/nftables-quick-howto/}
|
|
\item nftables Wiki: \\
|
|
\url{http://wiki.nftables.org/wiki-nftables/}
|
|
\item Wikipedia-Artikel: \\
|
|
\url{http://en.wikipedia.org/wiki/Nftables}
|
|
\end{itemize}
|
|
|
|
\end{frame}
|
|
|
|
|
|
\end{document} |