Git Product home page Git Product logo

seccamp-xdp's Introduction

Seccamp-XDP

このリポジトリは 「XDP 入門」の講義資料及びサンプルコードです.

Note 以下の資料は SECCON Workshop Fukuoka で使用したものです. この資料は XDP 入門の資料をアップデートしたものとなっています.

スライド - XDP で作って学ぶファイアウォールとロードバランサー


想定対象者

  • eBPF/XDP に興味がある方
  • ネットワークロードバランサーやファイアウォールの実装に興味がある方
  • とりあえず eBPF/XDP で動くものを作ってみたい方

進め方

Warning XDP プログラムを動作させるためには Linux 環境が必要です. Docker, WSL 環境では動作しません.

本資料を使ったハンズオンは基礎編と実践編の二つのパートで構成されています. XDP の知識が少ない方は基礎編,実践編の順に進めることをお勧めします. XDP のコードを書いたことのある方は実践編のみでよいです.

基礎編では hello world を出力するだけの簡単なプログラムからパケットカウンタの XDP プログラムを実装,動作させることで XDP プログラムの書き方や動かし方を学びます.

実践編では最終的にシンプルなネットワークロードバランサーである scmlb を実装して動かすことをゴールとしています. scmlb は以下の機能を有します.

  • パケットカウンタ
  • ファイアウォール
  • 非常に単純な DoS 攻撃防御機能
  • ラウンドロビンによるロードバランサー

データプレーンは XDP で実装し,コントロールプレーンには Go 言語を利用しています.

詳しくは scmlb/README.mdを参照してください.

構成

ディレクトリ構成は以下のようになっています.

  • app
    • ハンズオンで利用するテスト用アプリケーションのコード及びビルドスクリプト
  • scmlb
    • ハンズオンの実践編で利用するネットワークロードバランサーの実装
    • 詳しくは scmlb/README.mdを参照してください.
  • topology
    • ハンズオンで利用するネットワークを作成するためのスクリプト群
  • tutorial
    • ハンズオンの基礎編で利用する XDP 関連コード

セットアップ

必要なツールをセットアップします.

セットアップは各々の環境によって異なるので必要に応じて実行してください.

ビルド/ネットワーク操作関連ツール

$ make setup

Go 言語

本リポジトリで実装するロードバランサー(scmlb) のコントロールプレーンに Go 言語を利用しています. 動作させるために バージョン 1.20 以上の Go 言語が必要です. インストールには以下のコマンドを実行してください.

$ make setup-golang

任意のバージョンを指定してインストールしたい場合は以下のように実行してください.

$ make GO_VERSION=<インストールしたいバージョン> setup-golang

bpftool

bpftool は eBPF プログラムやマップを操作するためのコマンドです. 以下のコマンドでインストールできます.

$ make bpftool

gRPC 関連

本リポジトリで実装するロードバランサー(scmlb) でデーモンプログラム(scmlbd) と CLIプログラム(scmlb) の通信を gRPC を利用して実装しています. 以下のコマンドで gRPC 関連のツールのセットアップができます.

$ make -C scmlb setup

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.