首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

GitHub 開源項目 filter_firewall:基於 Netfilter 的包過濾防火牆實現詳解

     編輯:關於C語言

GitHub 開源項目 filter_firewall:基於 Netfilter 的包過濾防火牆實現詳解

本文介紹 GitHub 開源項目 filter_firewall,一個基於 Linux Netfilter 框架的內核級包過濾防火牆,支援按來源 IP、目的端口、鏈類型配置 Accept/Drop 規則。項目採用內核模組 + 用戶態配置工具雙模組架構,適合學習 Linux 內核網絡子系統與 Netfilter 開發。

一、項目架構

二、開發環境

  • OS:Ubuntu 12.04
  • Kernel:3.15
  • 工具:vim + GCC
  • 語言:C

三、核心功能模組

1. 數據包攔截與過濾

  • 註冊 Netfilter 掛鉤於 NF_INET_PRE_ROUTING / NF_INET_LOCAL_IN / NF_INET_FORWARD 等鏈點。
  • 提取 IP 頭(來源/目的 IP)、傳輸層頭(端口)。
  • 遍歷內核規則鏈表,匹配 -s IP -p PORT -i CHAIN,命中則 NF_DROP,否則 NF_ACCEPT。

2. 用戶配置規則命令行介面

模組位置職責
內核模組kernelspace/Netfilter 掛鉤攔截數據包,查規則表,決定 Accept/Drop
用戶態工具userspace/命令行解析參數,通過 Netlink/IOCTL 與內核交互下發規則

3. 使用示例

# 阻止 192.168.1.105 訪問本機 80 端口
./filter_client -A -p 80 -I -r drop -f 192.168.1.105

四、構建與部署步驟

# 1. 編譯內核模組
cd kernelspace
make clean && make && sudo make install  # 生成 .ko 並 insmod

# 2. 編譯用戶工具
cd ../userspace
make clean && make

# 3. 下發規則
sudo ./filter_client -A -p 80 -I -r drop -f 192.168.1.105

# 4. 查看日誌
tail -f /var/log/syslog   # 或 dmesg

五、已知限制與待完善

  • 刪除規則(-D)、OUTPUT/FORWARD 鏈、轉發 IP(-t)功能未完成。
  • 規則持久化、日誌級別控制、多條件組合匹配(如 IP 段、協議類型)缺失。
  • 僅支援 IPv4,無 IPv6 支援。

六、學習價值

  1. Netfilter 掛鉤註冊、數據包解析、判斷流程的標準範式。
  2. 內核模組與用戶態通信(Netlink/IOCTL/Procfs)實踐。
  3. 內核鏈表、自旋鎖、內存分配等核心 API 使用。
  4. Makefile 編譯內核模組的標準流程。

七、聯繫作者

Email: 18277973721@sina.cn(非真實手機號)
歡迎提 Issue、PR 或郵件交流改進建議。

八、項目地址

https://github.com/你的用戶名/filter_firewall  (原文未給具體鏈接,請自行搜索)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
選項含義取值狀態
-AAppend 規則無完成
-DDelete 規則無未完成
-p端口short完成
-I操作 INPUT 鏈無完成
-O操作 OUTPUT 鏈無未完成
-F操作 FORWARD 鏈無未完成
-r動作drop | accept完成
-f來源 IPIP 地址完成
-t轉發目的 IPIP 地址未完成