
Siper は、Go と C (eBPF) で構築された、XDP ベースの高性能 IP ブラックリストファイアウォールです。Linux ネットワークスタックの中で最も早い段階、つまりネットワークドライバレベルで悪意のあるトラフィックをドロップできます。XDP (高速データパス) を活用することで、パケットはカーネルの重いネットワークサブシステムに到達する前に処理され、激しい DDoS 条件下でも極めて高いパフォーマンスを発揮します。
XDP による高性能:パケットフィルタリングは XDP_DROP を使用して NIC ドライバレベルで行われ、iptables や nftables と比較して CPU オーバーヘッドが大幅に低減されます。
LPM (最長プレフィックスマッチ):専用の BPF LPM Trie マップを使用した効率的な IP 範囲検索により、CIDR ベースのブロック (例:192.168.1.0/24) をサポートします。
永続的な設定:ルールはローカルの JSON ベースのブラックリストで管理され、ブロックされたアドレスの監査とバージョン管理が容易に行えます。
リアルタイムの可観測性:ドロップおよび通過トラフィックのパケット数・バイト数カウンタを追跡する組み込みのメトリクスを提供します。
ミニマリストなアーキテクチャ:コンパイル済みの BPF オブジェクトがデータプレーンを、Go ベースの CLI がコントロールプレーンを担当します。
Siper はコントロールプレーン (ユーザースペース) とデータプレーン (カーネルスペース) を分離する原則に基づいて動作します。
siper run が実行されると、Go アプリケーションが JSON を解析し、eBPF オブジェクトをコンパイル/ロードして、BPF マップに IP プレフィックスを投入します。前提条件
make
build/ ディレクトリに移動します。
ローカル設定ファイルに IP 範囲を追加または削除します。
# CIDR をリストに追加
sudo ./siper add --cidr 1.2.3.0/24 --comment "既知のボットネット"
# ルールを削除
sudo ./siper del --cidr 1.2.3.0/24
特定のネットワークインターフェースにファイアウォールをアタッチします。
# ファイアウォールを開始
sudo ./siper run --iface eth0 --path ./blacklist.json
# ファイアウォールを停止してデタッチ
sudo ./siper stop --iface eth0
カーネル内部で何が起きているかを確認します。
# BPF マップ内の現在アクティブなキーを表示
sudo ./siper dump-keys
# ドロップ/通過統計を監視
sudo ./siper dump-metrics
プルリクエストは歓迎します。バグ修正や小さな改善については、プルリクエストを送信してください。大きな変更については、まず issue を作成して変更内容を議論してください。
このプロジェクトはフリーソフトウェアです。GPLv3 ライセンスの条項に基づき、再配布や改変が可能です。詳細は LICENSE ファイルを参照してください。