Bài số 1: Thiết lập IPSec cơ chế transport
Với sơ đồ kết nối mạng như hình vẽ trên, cần thiết lập IPSec trên các máy C0 và C2 để dòng dữ liệu giữa 2 trạm này được bảo mật. Các dòng dữ liệu khác (ví dụ như giữa C0 và C1 hay giữa C1 và C2) vẫn hoạt động bình thường trong chế độ không bảo mật. Các bước thực hiện bao gồm:
- Cài đặt IPSec trên C0 và C2, 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 C0 và C2.
- 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: Tạo khóa cho kết nối giữa C0 và C2
Các trạm C0 và C2 tham gia vào các kênh truyền bảo mật nên cần cài đặt ipsec-tools:
Sử dụng dd và xxd để tạo các khóa phục vụ các giao thức IPSec. Nếu không thấy xxd trong hệ thống thì cài đặt nó từ gói ứng dụng vim-common:
Tạo 2 khóa 128bit (16 byte) để phục vụ kết nối AH giữa C0 và C2:
Tạo 2 khóa 192bit (24 byte) để phục vụ kết nối ESP giữa C0 và C2:
Bước 2: Thiết lập cơ sở dữ liệu SPD và SAD
Trong bước này, 2 khóa 128bit và 2 khóa 192bit vừa được tạo ra sẽ được sử dụng để tạo các cơ sở dữ liệu SPD và SADB trên các máy trạm C0 và C2 với phần mềm netkey (nằm trong gói ipsec-tools). Tạo các file cấu hình /etc/netkey.conf trên C0 và C2:
[root@C0 ~]# cat /etc/setkey.conf #!/usr/sbin/setkey -f # Configuration for 192.168.0.7 # Flush the SAD and SPD flush; spdflush; # Attention: Use this keys only for testing purposes! # Generate your own keys! # AH SAs using 128 bit long keys add 192.168.0.7 192.168.2.7 ah 0x200 -A hmac-md5 0x7f2b48773d91866ea7ec5ba9c05ddacd; add 192.168.2.7 192.168.0.7 ah 0x300 -A hmac-md5 0xde223910095d4f6de8e9f9167c7fc87e; # ESP SAs using 192 bit long keys (168 + 24 parity) add 192.168.0.7 192.168.2.7 esp 0x201 -E 3des-cbc 0xdd98016473998a2bf5ed57cf1969b02370abaa47a05b5a5b; add 192.168.2.7 192.168.0.7 esp 0x301 -E 3des-cbc 0x2ffe65b464153efbca53a24a75fcf2a9ff574ae9952e8b87; # Security policies spdadd 192.168.0.7 192.168.2.7 any -P out ipsec esp/transport//require ah/transport//require; spdadd 192.168.2.7 192.168.0.7 any -P in ipsec esp/transport//require ah/transport//require; [root@C2 ~]# cat /etc/setkey.conf #!/usr/sbin/setkey -f # Configuration for 192.168.2.7 # Flush the SAD and SPD flush; spdflush; # Attention: Use this keys only for testing purposes! # Generate your own keys! # AH SAs using 128 bit long keys add 192.168.0.7 192.168.2.7 ah 0x200 -A hmac-md5 0x7f2b48773d91866ea7ec5ba9c05ddacd; add 192.168.2.7 192.168.0.7 ah 0x300 -A hmac-md5 0xde223910095d4f6de8e9f9167c7fc87e; # ESP SAs using 192 bit long keys (168 + 24 parity) add 192.168.0.7 192.168.2.7 esp 0x201 -E 3des-cbc 0xdd98016473998a2bf5ed57cf1969b02370abaa47a05b5a5b; add 192.168.2.7 192.168.0.7 esp 0x301 -E 3des-cbc 0x2ffe65b464153efbca53a24a75fcf2a9ff574ae9952e8b87; # Security policies spdadd 192.168.0.7 192.168.2.7 any -P in ipsec esp/transport//require ah/transport//require; spdadd 192.168.2.7 192.168.0.7 any -P out ipsec esp/transport//require ah/transport//require;
Một số lưu ý:
- Lệnh flush và spdflush của setkey dùng để xóa toàn bộ cơ sở dữ liệu SP và SA.
- Các lệnh add dùng để thêm các bản ghi SA vào cơ sở dữ liệu SAD. Trên 2 máy trạm C0 và C2, các SA phục vụ kết nối dữ liệu giữa C0 và C2 phải giống nhau nên có thể copy phần này giữa 2 file cấu hình.
- Khi copy các khóa đã tạo vào các lệnh add này, cần thêm 0x ở đầu.
- Các lệnh spdadd để thêm các bản ghi SP vào cơ sở dữ liệu. Tương tự như các SA, SP trên C0 và C2 gần giống nhau. Điểm khác biệt duy nhất là chiều của dòng dữ liệu (in/out) đối nghịch nhau.
Trên từng máy trạm C0 và C2, chạy setkey với các file cấu hình vừa tạo để thiết lập các bản ghi trong cơ sở dữ liệu SAD và SPD. Nếu không có lỗi xảy ra, có thể sử dụng setkey với tham số -D hoặc -DP để hiển thị cơ sở dữ liệu SAD và SPD. Kiểm tra kết quả hiển thị cơ sở dữ liệu xem các thông số thiết lập đã chính xác chưa:
[root@C2 ~]# setkey -f /etc/setkey.conf [root@C2 ~]# setkey -D 192.168.2.7 192.168.0.7 esp mode=transport spi=769(0x00000301) reqid=0(0x00000000) E: 3des-cbc 2ffe65b4 64153efb ca53a24a 75fcf2a9 ff574ae9 952e8b87 seq=0x00000000 replay=0 flags=0x00000000 state=mature created: Aug 6 02:24:03 2016 current: Aug 6 02:24:07 2016 diff: 4(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=4266 refcnt=0 192.168.0.7 192.168.2.7 esp mode=transport spi=513(0x00000201) reqid=0(0x00000000) E: 3des-cbc dd980164 73998a2b f5ed57cf 1969b023 70abaa47 a05b5a5b seq=0x00000000 replay=0 flags=0x00000000 state=mature created: Aug 6 02:24:03 2016 current: Aug 6 02:24:07 2016 diff: 4(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=2 pid=4266 refcnt=0 192.168.2.7 192.168.0.7 ah mode=transport spi=768(0x00000300) reqid=0(0x00000000) A: hmac-md5 de223910 095d4f6d e8e9f916 7c7fc87e seq=0x00000000 replay=0 flags=0x00000000 state=mature created: Aug 6 02:24:03 2016 current: Aug 6 02:24:07 2016 diff: 4(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=3 pid=4266 refcnt=0 192.168.0.7 192.168.2.7 ah mode=transport spi=512(0x00000200) reqid=0(0x00000000) A: hmac-md5 7f2b4877 3d91866e a7ec5ba9 c05ddacd seq=0x00000000 replay=0 flags=0x00000000 state=mature created: Aug 6 02:24:03 2016 current: Aug 6 02:24:07 2016 diff: 4(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=4266 refcnt=0 [root@C2 ~]# setkey -DP 192.168.2.7[any] 192.168.0.7[any] 255 out prio def ipsec esp/transport//require ah/transport//require created: Aug 6 02:24:03 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=65 seq=1 pid=4267 refcnt=1 192.168.0.7[any] 192.168.2.7[any] 255 fwd prio def ipsec esp/transport//require ah/transport//require created: Aug 6 02:24:03 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=58 seq=2 pid=4267 refcnt=1 192.168.0.7[any] 192.168.2.7[any] 255 in prio def ipsec esp/transport//require ah/transport//require created: Aug 6 02:24:03 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=48 seq=0 pid=4267 refcnt=1
Bước 3: Kiểm tra các dòng dữ liệu
Sử dụng ping để tạo dòng dữ liệu ICMP đi và về giữa C0 với C2. Có thể thấy kết quả lệnh ping không có gì thay đổi, vẫn giống như khi không thiết lập IPSec:
Dùng công cụ Wireshark bắt gói tin giữa 2 trạm C0&C2, có thể thấy không có gói tin ICMP nào được gửi giữa 2 trạm. Thay vào đó là các gói tin ESP với phần dữ liệu bị mã hóa (chính là các gói tin ICMP). Các giá trị SPI trong header của ESP và AH khớp với các giá trị SPI trong cơ sở dữ liệu hiển thị ở bước 2.
Giữ nguyên thiết lập IPSec trên C0 và C2, thực hiện các lệnh ping từ C0 đến C1 hoặc C2 đến C1 và bắt gói tin bằng Wireshark, sẽ lại thấy xuất hiện các gói tin ICMP không được mã hóa. Như vậy có nghĩa là các thiết lập cơ sở dữ liệu SPD và SAD trên C0 và C2 chỉ có tác dụng với dòng dữ liệu được trao đổi giữa 2 trạm này. Các dòng dữ liệu khác được xử lý như bình thường, không có bảo mật.