Bài số 2: Bắt gói tin với iptables và phân tích hoạt động lệnh ping
Dựa trên hệ thống mạng mô phỏng đã hoàn thành trong bài 1, bài này sử dụng chức năng log gói tin trong iptables của nhân Linux nhằm bắt và phân tích các gói tin ICMP để hiểu cơ chế làm việc của lệnh ping. Các bước thực hiện như sau:
- Bước 1: Thiết lập luật log gói tin với iptables
- Bước 2: Thực thi kịch bản ping và bắt các gói tin ICMP
- Bước 3: Sử dụng công cụ phân tích gói tin Wireshark
Bước 1: Thiết lập luật log gói tin với iptables
Iptables là công cụ được cài sẵn trong nhân Linux của CentOS, nó thực hiện lọc các gói tin theo sơ đồ đường đi như trong hình vẽ bên dưới.
Tạm thời chưa cần quan tâm đến các tính năng phức tạp của iptables (xem chi tiết về iptables trong phần 3.4.1: Xử lý gói tin trong iptables). Điều ta quan tâm ở đây là chèn vào các luật để bắt và hiển thị các gói tin khi đi vào hệ thống (tại bước PREROUTING) và đi ra hệ thống (bước POSTROUTING):
Bước 2: Thực thi kịch bản ping và bắt các gói tin ICMP
Với 2 luật vừa tạo, tất cả các gói tin thuộc tất cả các giao thức khi đi vào và đi ra hệ thống Linux CentOS đều được ghi lại trong file /var/log/messages. Chú ý kiểm tra dịch vụ iptables đã được kích hoạt trong hệ thống hay chưa:
Thiết lập cấu hình iptables như trên cho các router R1, R2, R3 và sử dụng lệnh tail để hiển thị thông tin log trong file /var/log/messages. Do mỗi gói tin được ghi lại theo 1 dòng trong file log nên có thể dùng tail kết hợp với grep để lọc chỉ hiển thị các dòng thông tin có chứa từ khóa ICMP:
Đứng trên máy R1 và ping đến máy R4, đồng thời chạy các lệnh tail trên router trung gian (R2 hoặc R3) sẽ thấy các gói tin ICMP TYPE=8 (Echo Request) được gửi đi và ICMP TYPE=0 (Echo Reply) được trả về.
Bước 3: Sử dụng công cụ phân tích gói tin Wireshark
Wireshark là công cụ rất mạnh để bắt và phân tích các gói tin đi qua một giao diện kết nối mạng của máy tính. Tham khảo phụ lục để cài đặt Wireshark lên các router. Trong khi thực hiện lệnh ping, dùng Wireshark bắt gói tin và lọc ICMP và so sánh với log file khi sử dụng iptables.