ltcp/nftables/Präsentation/Latex/lctp_prensentation.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}