Professional Documents
Culture Documents
Lab 4 - Netfilter Module - 2020
Lab 4 - Netfilter Module - 2020
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 nội dung chính:
- Import các 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:
Output:
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, chạy iperf server trên máy hiện tại bằng lệnh: iperf -s -i 1
Trên máy client, khởi tạo kết nối và gửi gói tin đến iperf server bằng giao thức TCP bằng
lệnh: iperf -c <serverIp> -i 1
Dùng lệnh insmod để cài đặt Netfilter module này vào Kernel:
Trên server:
Trên máy client, thực hiện lại lệnh iperf -c <serverIp> -i 1
1. Cài đặt, hoàn thành các bước trong phần hướng dẫn thực hành ở trên (1đ)
2. Sửa lại file nkmod.c để hook DROP các gói tin UDP và ICMP (2đ).
Hướng dẫn:
- Protocol code tham khảo ở đây:
http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
- Sau khi thực hiện xong, dùng công cụ Ping và Iperf để kiểm tra kết quả.
- Cách sử dụng Iperf: Ref#1, Ref#2.
3. 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 packets có source IP đến từ địa chỉ máy client, chẳng hạn,
192.168.10.10, ACCEPT tất cả các packets còn lại (2đ)
Hướng dẫn: kiểm tra source IP của IP header.
- Cấu trúc IP header tham khảo tại đây: ip.h
- Hàm hỗ trợ chuyển IP (kiểu unsigned int) sang địa chỉ IP (char array): snprintf
b. DROP các packet kết nối đến Port đích là 80 (2đ)
Hướng dẫn: xét destination port trong cả hai trường hợp UDP header và TCP
header.
- Cấu trúc UDP/TCP header tham khảo tại đây: tcp.h, udp.h
- Trích xuất UDP header.
c. DROP các gói tin đi từ máy tính hiện tại đến facebook.com, ACCEPT tất cả
các packets còn lại (3đ)
Hướng dẫn:
- Kiểm tra và drop packet gửi đến tất cả các địa chỉ IP của facebook.com
- Thay đổi Hook phù hợp để kiểm tra packet được gửi từ máy tính ra ngoà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.