--- /dev/null
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{beamerthemeIPFire}[IPFire Beamer Theme]
+
+% ---------------------------------------------------------------------------
+% Required packages
+% ---------------------------------------------------------------------------
+
+\RequirePackage{fontspec}
+\RequirePackage{hyperref}
+\RequirePackage{minted}
+\RequirePackage{tikz}
+\RequirePackage{xcolor}
+
+\usetikzlibrary{calc}
+
+% ---------------------------------------------------------------------------
+% Fonts
+% ---------------------------------------------------------------------------
+
+\setsansfont{Prompt}[
+ Path = fonts/Prompt/font/,
+ Extension = .ttf,
+ UprightFont = *-Regular,
+ BoldFont = *-Bold,
+ ItalicFont = *-Italic,
+ BoldItalicFont = *-BoldItalic,
+]
+
+\renewcommand{\familydefault}{\sfdefault}
+
+% Hyperref options
+\hypersetup{
+ colorlinks = true,
+ linkcolor = primary,
+ urlcolor = primary,
+ citecolor = primary,
+}
+
+% Minted defaults for code blocks
+\setminted{
+ fontsize = \footnotesize,
+ breaklines = true,
+ bgcolor = grey-lighter,
+ frame = none,
+ linenos = false,
+}
+
+% ---------------------------------------------------------------------------
+% Colours
+% ---------------------------------------------------------------------------
+
+\definecolor{primary}{HTML}{ff2e52}
+
+\definecolor{grey}{HTML}{4a4a4a}
+\definecolor{grey-lighter}{HTML}{ededed}
+
+\definecolor{danger}{HTML}{ac001a}
+
+% ---------------------------------------------------------------------------
+% Beamer base theme
+% ---------------------------------------------------------------------------
+
+\useinnertheme{default}
+\useoutertheme{default}
+\usecolortheme{default}
+
+% Disable navigation symbols
+\setbeamertemplate{navigation symbols}{}
+
+\setbeamercolor{normal text}{fg=grey, bg=white}
+\setbeamercolor{structure}{fg=primary}
+\setbeamercolor{alerted text}{fg=danger}
+\setbeamercolor{example text}{fg=grey}
+\setbeamercolor{background canvas}{bg=white}
+\setbeamercolor{frametitle}{fg=white, bg=primary}
+\setbeamercolor{block title}{fg=white, bg=primary}
+\setbeamercolor{block body}{fg=grey, bg=grey-lighter}
+\setbeamercolor{block title alerted}{fg=white, bg=danger}
+\setbeamercolor{block body alerted}{fg=grey, bg=grey-lighter}
+\setbeamercolor{itemize item}{fg=primary}
+\setbeamercolor{itemize subitem}{fg=grey}
+\setbeamercolor{enumerate item}{fg=primary}
+\setbeamercolor{footline}{fg=grey, bg=grey-lighter}
+
+% ---------------------------------------------------------------------------
+% Fonts in beamer
+% ---------------------------------------------------------------------------
+
+\setbeamerfont{title}{size=\LARGE, series=\bfseries}
+\setbeamerfont{subtitle}{size=\large, series=\normalfont}
+\setbeamerfont{author}{size=\normalsize}
+\setbeamerfont{date}{size=\small}
+\setbeamerfont{frametitle}{size=\large, series=\bfseries}
+\setbeamerfont{block title}{size=\normalsize, series=\bfseries}
+\setbeamerfont{footline}{size=\tiny}
+
+% ---------------------------------------------------------------------------
+% Title Slide
+% ---------------------------------------------------------------------------
+
+\defbeamertemplate*{title page}{IPFire}{%
+ \begin{tikzpicture}[remember picture, overlay]
+ % Background stripe
+ \fill[primary]
+ (current page.north west) rectangle
+ ([yshift=-0.45\paperheight] current page.north east);
+ % Bottom bar
+ \fill[grey-lighter]
+ (current page.south west) rectangle
+ ([yshift=0.08\paperheight] current page.south east);
+ % Logo (top-right of red area)
+ \node[anchor=north east, inner sep=8pt] at
+ ([xshift=-8pt, yshift=-8pt] current page.north east) {%
+ \textcolor{white}{\textbf{\large IPFire}}%
+ };
+ % Title text
+ \node[anchor=west, text width=0.85\paperwidth, inner sep=0pt] at
+ ([xshift=0.06\paperwidth, yshift=-0.15\paperheight] current page.north west) {%
+ \usebeamerfont{title}\usebeamercolor[fg]{title page}\color{white}%
+ \inserttitle%
+ };
+ % Subtitle
+ \node[anchor=west, text width=0.85\paperwidth, inner sep=0pt] at
+ ([xshift=0.06\paperwidth, yshift=-0.27\paperheight] current page.north west) {%
+ \usebeamerfont{subtitle}\color{white!85!primary}%
+ \insertsubtitle%
+ };
+ % Author / date block (on white/light area)
+ \node[anchor=west, inner sep=0pt] at
+ ([xshift=0.06\paperwidth, yshift=0.18\paperheight] current page.south west) {%
+ \color{grey}\usebeamerfont{author}\insertauthor
+ \ifx\insertinstitute\empty\else
+ ~\textbar~\insertinstitute
+ \fi
+ };
+ \node[anchor=west, inner sep=0pt] at
+ ([xshift=0.06\paperwidth, yshift=0.12\paperheight] current page.south west) {%
+ \color{grey!70}\usebeamerfont{date}\insertdate%
+ };
+ \end{tikzpicture}%
+}
+
+% ---------------------------------------------------------------------------
+% Frame Title
+% ---------------------------------------------------------------------------
+
+\defbeamertemplate*{frametitle}{IPFire}{%
+ \nointerlineskip
+ \begin{beamercolorbox}[wd=\paperwidth, ht=0.55cm, dp=0.25cm, leftskip=0.5cm]{frametitle}
+ \usebeamerfont{frametitle}\insertframetitle
+ \ifx\insertframesubtitle\empty\else
+ \hspace{0.5em}{\small\usebeamerfont{framesubtitle}\insertframesubtitle}
+ \fi
+ \end{beamercolorbox}
+ % Thin accent line under frame title
+ \begin{tikzpicture}[overlay]
+ \draw[primary, line width=0.4pt]
+ (0, 0) -- (\paperwidth, 0);
+ \end{tikzpicture}%
+}
+
+% ---------------------------------------------------------------------------
+% Footline
+% ---------------------------------------------------------------------------
+
+\defbeamertemplate*{footline}{IPFire}{%
+ \begin{beamercolorbox}[
+ wd=\paperwidth,
+ ht=0.3cm,
+ dp=0.2cm,
+ leftskip=0.5cm,
+ rightskip=0.5cm
+ ]{footline}
+ \usebeamerfont{footline}%
+ \color{grey}%
+ \insertshorttitle
+ \hfill
+ \insertshortauthor
+ \hspace{1em}%
+ \textcolor{primary}{\insertframenumber\,/\,\inserttotalframenumber}%
+ \end{beamercolorbox}%
+}
+
+% ---------------------------------------------------------------------------
+% Itemize Bullets
+% ---------------------------------------------------------------------------
+
+\setbeamertemplate{itemize item}{%
+ \tikz[baseline=-0.5ex]{\fill[primary] (0,0) circle (0.12em);}%
+}
+
+\setbeamertemplate{itemize subitem}{%
+ \tikz[baseline=-0.5ex]{\draw[primary, line width=0.6pt] (0,0) circle (0.1em);}%
+}
+
+\setbeamertemplate{itemize subsubitem}{%
+ \tikz[baseline=-0.5ex]{\fill[grey] (0,-0.08em) -- (0.2em,-0.08em) -- (0.1em,0.08em) -- cycle;}%
+}
+
+% ---------------------------------------------------------------------------
+% Section Divider Slide
+% ---------------------------------------------------------------------------
+
+% \sectionframe{Title}{Subtitle (optional)}
+\newcommand{\sectionframe}[2][]{%
+ \begin{frame}[plain, noframenumbering]
+ \begin{tikzpicture}[remember picture, overlay]
+ \fill[primary]
+ (current page.north west) rectangle (current page.south east);
+ \node[anchor=center, text width=0.8\paperwidth, align=center] at
+ ([yshift=0.04\paperheight] current page.center) {%
+ \color{white}\usebeamerfont{title}\textbf{#2}%
+ };
+ \ifx\empty#1\else
+ \node[anchor=center, text width=0.8\paperwidth, align=center] at
+ ([yshift=-0.06\paperheight] current page.center) {%
+ \color{white!80!primary}\usebeamerfont{subtitle}#1%
+ };
+ \fi
+ \end{tikzpicture}
+ \end{frame}
+}
+
+\endinput
%% presentation.tex — IPFire Beamer Presentation Template
\documentclass[
- aspectratio=169, % 16:9 widescreen; use 43 for 4:3 classic
- t, % top-align frame content by default
- 10pt,
+ aspectratio=169, % 16:9 widescreen; use 43 for 4:3 classic
+ t, % top-align frame content by default
+ 10pt,
]{beamer}
+% ---------------------------------------------------------------------------
+% Theme
+% ---------------------------------------------------------------------------
+
+% Load our IPFire theme
+\usetheme{IPFire}
+
+% ---------------------------------------------------------------------------
+% Packages
+% ---------------------------------------------------------------------------
+
+\usepackage{csquotes}
+\usepackage{graphicx}
+
+% ---------------------------------------------------------------------------
+% Language
+% ---------------------------------------------------------------------------
+
+\usepackage{polyglossia}
+ \setdefaultlanguage{english}
+
% ---------------------------------------------------------------------------
% Metadata
% ---------------------------------------------------------------------------
\tableofcontents[hideallsubsections]
\end{frame}
+ % ---------------------------------------------------------------------------
+ % Slides are split into individual files under slides/
+ % Add or remove \input lines as needed.
+ % ---------------------------------------------------------------------------
+
+ \input{slides/01-introduction}
+ \input{slides/02-content}
+ \input{slides/99-closing}
+
% ---------------------------------------------------------------------------
% Appendix (optional)
% ---------------------------------------------------------------------------
--- /dev/null
+\sectionframe[Background \& Motivation]{Introduction}
+
+\section{Introduction}
+
+% ---------------------------------------------------------------------------
+% A basic content slide
+% ---------------------------------------------------------------------------
+
+\begin{frame}{What is IPFire?}
+ IPFire is a hardened, versatile, state-of-the-art Open Source firewall
+ based on Linux. Its ease of use, high performance in any scenario and
+ extensibility make it usable for everyone.
+
+ \bigskip
+
+ \begin{itemize}
+ \item Stateful Packet Inspection (SPI) Firewall
+ \item Intrusion Detection and Prevention
+ \item Web Proxy with Content Filtering
+ \item VPN support (IPsec, OpenVPN, WireGuard)
+ \end{itemize}
+\end{frame}
+
+% ---------------------------------------------------------------------------
+% Two-column layout
+% ---------------------------------------------------------------------------
+
+\begin{frame}{IPFire at a Glance}
+ \begin{columns}[T]
+ \begin{column}{0.48\textwidth}
+ \textbf{Designed for security}
+ \begin{itemize}
+ \item Minimal attack surface
+ \item Regular security updates
+ \item Kernel hardening
+ \end{itemize}
+ \end{column}
+ \begin{column}{0.48\textwidth}
+ \textbf{Community-driven}
+ \begin{itemize}
+ \item Open Source (GPL)
+ \item Active mailing lists \& forums
+ \item \href{https://www.ipfire.org}{ipfire.org}
+ \end{itemize}
+ \end{column}
+ \end{columns}
+\end{frame}
+
+% ---------------------------------------------------------------------------
+% Slide with a block
+% ---------------------------------------------------------------------------
+
+\begin{frame}{Key Principle}
+ \begin{block}{Security by Default}
+ IPFire ships in a secure configuration out of the box. Administrators
+ open only what is explicitly needed — not the other way around.
+ \end{block}
+
+ \bigskip
+
+ \begin{alertblock}{Important}
+ Always keep your IPFire installation up to date to benefit from the
+ latest security patches.
+ \end{alertblock}
+\end{frame}
--- /dev/null
+\sectionframe[Demos, code, and data]{Content Examples}
+
+\section{Content Examples}
+
+% ---------------------------------------------------------------------------
+% Code listing (minted — requires --shell-escape when building)
+% If you don't want --shell-escape, replace \begin{minted}{bash}
+% with \begin{verbatim} or use the listings package instead.
+% ---------------------------------------------------------------------------
+
+\begin{frame}[fragile]{Checking Firewall Status}
+ You can inspect the active firewall rules from the shell:
+
+ \begin{minted}{bash}
+# List all iptables rules with counters
+iptables -nvL --line-numbers
+
+# Check INPUT chain only
+iptables -nvL INPUT
+
+# Show NAT rules
+iptables -t nat -nvL
+ \end{minted}
+\end{frame}
+
+% ---------------------------------------------------------------------------
+% Overlays / incremental reveal
+% ---------------------------------------------------------------------------
+
+\begin{frame}{How IPFire Handles a Packet}
+ \begin{enumerate}
+ \item<1-> Packet arrives on an interface
+ \item<2-> Connection tracking checks state table
+ \item<3-> Firewall rules evaluated top-to-bottom
+ \item<4-> \alert{Intrusion detection} inspects payload (optional)
+ \item<5-> Packet forwarded, dropped, or rejected
+ \end{enumerate}
+
+ \onslide<5->{%
+ \bigskip
+ \begin{block}{Stateful Inspection}
+ IPFire tracks connection state so return traffic for established
+ connections is allowed automatically — without explicit rules.
+ \end{block}
+ }
+\end{frame}