Professional Documents
Culture Documents
Lab 4 - Netfilter Module
Lab 4 - Netfilter Module
Ghi chú: định dạng file bài nộp <Hoten>_<MSSV>_BTn.doc hoặc .zip nếu có yêu cầu chỉnh
sửa source
VD: NguyenVanA_13020010_BT4.doc
I. Nội dung
Trong bài Lab này, chúng ta sẽ tìm hiểu về cách viết một module NetFilter, là thành phần
packet filtering trong nhân Linux (từ v2.6). Netfilter chủ yếu cung cấp một bộ các hooks
trong nhân Linux cho phép các Kernel module có thể đăng ký các hàm trả về (callback)
trong các tầng giao thức mạng. Một hàm trả về sẽ được gọi khi mỗi gói tín truyền qua
đúng hook mà lúc đầu đã đăng ký. Trong lab này sẽ làm việc với gói tin IPv4.
Một máy khác cùng kết nối vào mạng ( OS tùy ý) (cài iperf)
Các gói thư viện cần cài đặt trên Ubuntu (Make, Kernel 3.19):
sudo reboot
Khởi động lại giữa phím Shift nếu không hiện vào bootmenu Grub
III. Cấu trúc một kernel module cơ bản
Gồm 4 phần chính
- Thư viện
- Hàm init
- Hàm exit
- Cài đặt
Ví dụ một chương trình mẫu, tạo file hello.c với nội dung sau:
Tạo file Makefile (chú ý phải đúng từng khoảng trắng)
Lưu ý dòng 1 chỉnh tên cho đúng với tập tin .c ban đầu, thay .c bằng .o
Cho 2 tập tin vào cùng 1 thư mục và tiến hành build và loade vào kernel xem mục V
IV. Các Netfilter hooks cho IPv4
Netfilter định nghĩa 5 hooks cho IPv4. Chúng được định nghĩa trong file
linux/netfilter_ip4.h
Hook Được gọi lúc
NF_INET_PRE_ROUTING Trước khi ra các quyết định routing
NF_INET_LOCAL_IN Sau các quyết định routing nếu các
packets đi đến host này
NF_INET_FORWARD Nếu packets được chuyển tiếp đến
interface khác
NF_INET_LOCAL_OUT Khi packets đến từ những
NF_INET_POST_ROUTING Trước khi các outbound packets đi lên
đường truyền
Bảng 1. Các sự kiện mà các hook có thể đăng ký
Trong trường hợp build bị lỗi nếu thiếu linux-header, thì install gói thư viện sau:
apt-get install linux-headers-`uname -r`
Hoặc
sudo apt-get install linux-headers-$(uname -r)
Sau khi build xong dùng máy còn lại ping đến máy Ubuntu:
Dùng lệnh insmod để cài đặt Netfilter module này vào Kernel:
Máy còn lại start UDP client để kết nối tới máy Ubuntu bằng lệnh:
iperf –c <ip_máy_ubuntu> -u
2. MỞ RỘNG
Tìm hiểu và chỉnh sửa lại hook theo các yêu cầu sau:
a. DROP các packet có source IP đến từ một địa chỉ cụ thể, chẳng hạn,
192.168.10.10 , ACCEPT tất cả
b. DROP các packet đi đến địa chỉ Port đích là 80.
c. Chỉ cho phép các gói tin đi đến địa chỉ 118.69.123.142 (uit.edu.vn) đi ra
ngoài, DROP tất cả còn lại.
Lưu ý: từng câu làm được sẽ được cộng thêm số điểm tương đương, lưu ý làm xong
phải có bước kiểm tra lại kết quả bằng iperf hoặc lệnh ping