Bài số 2: Thiếp lập IPSec cơ chế tunnel
Tiếp tục sử dụng kết nối mạng trong bài trước. Giả sử xuất hiện nhu cầu tất cả các trạm giữa 2 mạng 192.168.0.0/24 và 192.168.2.0/24 cần trao đổi dữ liệu bảo mật. Chế độ transport như bài trước vẫn có thể áp dụng nhưng phải cấu hình IPSec trên tất cả các trạm (rất tốn công sức quản trị). Thay vào đó, cơ chế đường hầm giữa router R1 và R2 có thể được sử dụng. Các bước thực hiện bao gồm:
- Cài đặt IPSec trên R1 và R2, chuẩn bị khóa cho các thuật toán mã hóa & tạo cơ sở dữ liệu chính sách bảo mật (SPD) và liên kết bảo mật (SAD) trên R1 và R2.
- Chạy thử hệ thống và theo dõi, so sánh các dòng dữ liệu bảo mật & không bảo mật.
Bước 1: thiết lập môi trường & cấu hình IPSec trên R1&R2
Sau khi cài đặt ipsec-tools trên R1&R2 và sử dụng dd kết hợp xxd để chuẩn bị khóa tạo các file cấu hình setkey trên R1&R2. Để đơn giản, cấu hình sẽ được khai báo cho riêng giao thức ESP (không sử dụng AH):
[root@R1 ~]# cat /etc/setkey.conf #!/usr/sbin/setkey -f # Configuration for 192.168.1.1 # Flush the SAD and SPD flush; spdflush; # ESP SAs using 192 bit long keys (168 + 24 parity) add 192.168.1.2 192.168.1.1 esp 0x201 -m tunnel -E 3des-cbc 0x98a7ca89b932fb3b1705928499f0fd01d7a64cc5380f3ff6; add 192.168.1.1 192.168.1.2 esp 0x301 -m tunnel -E 3des-cbc 0x0f400582883897193fd8664db0df192ac94f20f261447d2d; # Security policies tunnel mode spdadd 192.168.0.0/24 192.168.2.0/24 any -P out ipsec esp/tunnel/192.168.1.1-192.168.1.2/require; spdadd 192.168.2.0/24 192.168.0.0/24 any -P in ipsec esp/tunnel/192.168.1.2-192.168.1.1/require; [root@R2 ~]# cat /etc/setkey.conf #!/usr/sbin/setkey -f # Configuration for 192.168.1.2 # Flush the SAD and SPD flush; spdflush; # ESP SAs using 192 bit long keys (168 + 24 parity) add 192.168.1.2 192.168.1.1 esp 0x201 -m tunnel -E 3des-cbc 0x98a7ca89b932fb3b1705928499f0fd01d7a64cc5380f3ff6; add 192.168.1.1 192.168.1.2 esp 0x301 -m tunnel -E 3des-cbc 0x0f400582883897193fd8664db0df192ac94f20f261447d2d; # Security policies tunnel mode spdadd 192.168.0.0/24 192.168.2.0/24 any -P in ipsec esp/tunnel/192.168.1.1-192.168.1.2/require; spdadd 192.168.2.0/24 192.168.0.0/24 any -P out ipsec esp/tunnel/192.168.1.2-192.168.1.1/require;
Một số điểm lưu ý:
- Khi khai báo các SA với lệnh add, địa chỉ IP của router 2 đầu hầm (R1&R2) được sử dụng cùng với tham số -m tunnel.
- Khi khai báo các SP, địa chỉ nguồn & đích của các dòng dữ liệu được khai báo theo địa chỉ mạng, cùng với thông tin về đường hầm.
Khởi tạo cơ sở dữ liệu SPD & SAD với setkey -f và kiểm tra với tham số -D & -PD:
[root@R2 ~]# setkey -f /etc/setkey.conf [root@R2 ~]# setkey -D 192.168.1.1 192.168.1.2 esp mode=tunnel spi=769(0x00000301) reqid=0(0x00000000) E: 3des-cbc 0f400582 88389719 3fd8664d b0df192a c94f20f2 61447d2d seq=0x00000000 replay=0 flags=0x00000000 state=mature created: Aug 6 10:20:04 2016 current: Aug 6 10:20:10 2016 diff: 6(s) hard: 0(s) soft: 0(s) last: hard: 0(s) soft: 0(s) current: 0(bytes) hard: 0(bytes) soft: 0(bytes) allocated: 0 hard: 0 soft: 0 sadb_seq=1 pid=14093 refcnt=0 192.168.1.2 192.168.1.1 esp mode=tunnel spi=513(0x00000201) reqid=0(0x00000000) E: 3des-cbc 98a7ca89 b932fb3b 17059284 99f0fd01 d7a64cc5 380f3ff6 seq=0x00000000 replay=0 flags=0x00000000 state=mature created: Aug 6 10:20:04 2016 current: Aug 6 10:20:10 2016 diff: 6(s) hard: 0(s) soft: 0(s) last: hard: 0(s) soft: 0(s) current: 0(bytes) hard: 0(bytes) soft: 0(bytes) allocated: 0 hard: 0 soft: 0 sadb_seq=0 pid=14093 refcnt=0 [root@R2 ~]# setkey -PD 192.168.2.0/24[any] 192.168.0.0/24[any] 255 out prio def ipsec esp/tunnel/192.168.1.2-192.168.1.1/require created: Aug 6 10:20:04 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=577 seq=1 pid=14094 refcnt=1 192.168.0.0/24[any] 192.168.2.0/24[any] 255 fwd prio def ipsec esp/tunnel/192.168.1.1-192.168.1.2/require created: Aug 6 10:20:04 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=570 seq=2 pid=14094 refcnt=1 192.168.0.0/24[any] 192.168.2.0/24[any] 255 in prio def ipsec esp/tunnel/192.168.1.1-192.168.1.2/require created: Aug 6 10:20:04 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=560 seq=0 pid=14094 refcnt=1
Bước 2: Kiểm tra các dòng dữ liệu
Tạo một dòng dữ liệu ICMP giữa C0 với C2 bằng lệnh ping:
Dùng Wireshark để theo dõi các gói tin trao đổi giữa R1 và R2. Không thấy xuất hiện các gói tin ICMP mà thay vào đó là các gói ESP với SPI tương ứng như khai báo trong cơ sở dữ liệu SPD và SAD.
Tiếp tục sử dụng ping để tạo các dòng dữ liệu ICMP giữa C0 với C1 hoặc C2 với C1 và kiểm tra các gói tin trên đường truyền. Gói tin ICMP lại xuất hiện mà không được mã hóa.
Cơ chế IPSec (cả 2 chế độ transport và tunnel) hoạt động xen giữa tầng IP và tầng trên, nên nó độc lập với tầng trên. Có thể sử dụng iperf3 để tạo các dòng dữ liệu TCP hoặc UDP giữa C0 và C2 rồi kiểm soát các gói tin giữa R1&R2. Tương tự như khi ping, iperf3 hoạt động bình thường như trong chế độ không bảo mật, tuy nhiên các gói tin TCP hoặc UDP sẽ không được nhìn thấy trên đường truyền giữa R1&R2. Thay vào đó là các gói ESP.