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):

> iptables -t mangle -A PREROUTING -j LOG
> iptables -t mangle -A POSTROUTING -j LOG
> iptables -t mangle -L -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
LOG        all  --  0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4     
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
LOG        all  --  0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4   

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:

> service iptables status
iptables: Firewall is not running.
> service iptables start
iptables: Applying firewall rules:                         [  OK  ]
> service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
1    LOG        all  --  0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4

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:

> tail -f /var/log/messages | grep ICMP
Dec 24 07:55:39 mydomain2 kernel: IN= OUT=eth2 SRC=192.168.1.130 DST=192.168.2.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=57606 SEQ=1
Dec 24 07:55:40 mydomain2 kernel: IN= OUT=eth2 SRC=192.168.1.130 DST=192.168.2.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=57606 SEQ=2
Dec 24 07:55:41 mydomain2 kernel: IN= OUT=eth2 SRC=192.168.1.130 DST=192.168.2.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=57606 SEQ=3

Đứ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.