Bài số 3: Làm việc với IKE

Sử dụng sơ đồ mạng trong bài thực hành số 1, giả sử có thêm nhiều các trạm mới muốn tham gia vào kết nối bảo mật như C0 và C2. Cần sử dụng tính năng IKE để tự động tạo và phân phối cơ sở dữ liệu SA giữa các trạm này. Lưu ý cần xóa các cơ sở dữ liệu cũ đã được thiết lập thủ công bằng lệnh setkey với tham số -c (console mode) và dùng các lệnh flush & spdflush:

[root@C2 ~]# setkey -c
flush;
spdflush;
^C

Bước 1: Thiệt lập cấu hình IPSec IKE trên các trạm.

Trên mỗi trạm C0, C1, C2, thực hiện các công việc sau.
Tạo file chưa khóa chia sẽ giữa các trạm. Khác với các khóa dùng để mã hóa hay giải mã, khóa chia sẻ này chỉ nhằm mục đích xác thực giữa các trạm khi IKE thiết lập liên kết để trao đổi thông tin. Nó hoạt động như một lệnh login với password là khóa được cung cấp. Do chế độ thiết lập kết nối IKE đơn giản như vậy, giá trị các khóa chia sẽ này phải ở chế độ bảo mật cao. Người sử dụng thông thường không có quyền đọc.

[root@C0 ~]# cat /etc/psk.txt
192.168.0.7          123
192.168.1.7          123
192.168.2.7     123

[root@C0 ~]# chmod 400 /etc/psk.txt
[root@C0 ~]# ls -l /etc/psk.txt
-r--------. 1 root root 202 Aug  2 13:52 /etc/psk.txt

Tạo file cấu hình /etc/raccoon.conf. Các từ khóa anonymous được sử dụng để khai báo các kết nối mà có thể áp dụng bất cứ máy nào yêu cầu. Có thể thay anonymous bằng các thông tin địa chỉ IP của trạm remote.

[root@C0 ~]# cat /etc/racoon.conf 
path pre_shared_key "/etc/psk.txt";

remote anonymous {
        exchange_mode main;
        proposal {
                encryption_algorithm 3des;
                hash_algorithm md5;
                authentication_method pre_shared_key;
                dh_group modp1024;
        }
}

sainfo anonymous {
        pfs_group modp768;
        encryption_algorithm 3des;
        authentication_algorithm hmac_md5;
        compression_algorithm deflate;
}
			 

Tạo file cấu hình /etc/setkey.conf. So sánh với file cấu hình tương ứng trong trường hợp tạo các SA bằng cách thủ công, phần khai báo SA được bỏ đi, chỉ giữ lại phần khai báo các SP. Để cho đơn giản, duy nhất giao thức ESP được sử dụng để bảo vệ các kết nối inout giữa các máy C0, C1, C2.

[root@C0 ~]# cat /etc/setkey.conf 
#!/usr/sbin/setkey -f

# Flush the SAD and SPD
flush;
spdflush;

# Security policies
spdadd 192.168.0.7 192.168.2.7 any -P out ipsec
           esp/transport//require;
spdadd 192.168.2.7 192.168.0.7 any -P in ipsec
           esp/transport//require;

spdadd 192.168.0.7 192.168.1.7 any -P out ipsec
           esp/transport//require;
spdadd 192.168.1.7 192.168.0.7 any -P in ipsec
           esp/transport//require;
			 

Chạy setkey và kiểm tra thấy mỗi trạm đều có SP nhưng chưa có SA.

[root@C0 ~]# setkey -f /etc/setkey.conf 
[root@C0 ~]# setkey -D
No SAD entries.
[root@C0 ~]# setkey -PD
192.168.1.7[any] 192.168.0.7[any] 255
	fwd prio def ipsec
	esp/transport//require
	created: Aug  2 14:22:38 2016  lastused:                     
	lifetime: 0(s) validtime: 0(s)
	spid=3266 seq=1 pid=4131
	refcnt=1
192.168.1.7[any] 192.168.0.7[any] 255
	in prio def ipsec
	esp/transport//require
	created: Aug  2 14:22:38 2016  lastused:                     
	lifetime: 0(s) validtime: 0(s)
	spid=3256 seq=2 pid=4131
	refcnt=1
192.168.0.7[any] 192.168.1.7[any] 255
	out prio def ipsec
	esp/transport//require
	created: Aug  2 14:22:38 2016  lastused:                     
	lifetime: 0(s) validtime: 0(s)
	spid=3249 seq=3 pid=4131
	refcnt=1
192.168.2.7[any] 192.168.0.7[any] 255
	fwd prio def ipsec
	esp/transport//require
	created: Aug  2 14:22:38 2016  lastused:                     
	lifetime: 0(s) validtime: 0(s)
	spid=3242 seq=4 pid=4131
	refcnt=1
192.168.2.7[any] 192.168.0.7[any] 255
	in prio def ipsec
	esp/transport//require
	created: Aug  2 14:22:38 2016  lastused:                     
	lifetime: 0(s) validtime: 0(s)
	spid=3232 seq=5 pid=4131
	refcnt=1
192.168.0.7[any] 192.168.2.7[any] 255
	out prio def ipsec
	esp/transport//require
	created: Aug  2 14:22:38 2016  lastused:                     
	lifetime: 0(s) validtime: 0(s)
	spid=3225 seq=0 pid=4131
	refcnt=1
			 

Chạy tiến trình racoon trên tất cả các trạm để thiết lập môi trường IKE.

[root@C0 ~]# racoon -F -f /etc/racoon.conf
Foreground mode.
2016-08-02 14:24:18: INFO: @(#)ipsec-tools 0.8.2 (http://ipsec-tools.sourceforge.net)
2016-08-02 14:24:18: INFO: @(#)This product linked OpenSSL 1.0.1e-fips 11 Feb 2013 (http://www.openssl.org/)
2016-08-02 14:24:18: INFO: Reading configuration from "/etc/racoon.conf"
2016-08-02 14:24:18: INFO: 192.168.0.7[500] used for NAT-T
2016-08-02 14:24:18: INFO: 192.168.0.7[500] used as isakmp port (fd=11)
2016-08-02 14:24:18: INFO: 192.168.0.7[4500] used for NAT-T
2016-08-02 14:24:18: INFO: 192.168.0.7[4500] used as isakmp port (fd=12)

Bước 2: 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, C0 với C1 hoặc C1 với C2. Lệnh ping chạy bình thường như trường hợp không có bảo mật hoặc giống như trong bài 1 (khai báo SA thủ công). Dùng công cụ Wireshark bắt gói tin giữa 2 trạm C0&C2, kết quả cũng giống như khi khai báo SA thủ công. 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).
Trong khi lệnh ping đang chạy, thực hiện setkey -D để xem cơ sở dữ liệu SA. Các SA phục vụ cho kết nối ping đã được tự động thiết lập. Có thể thấy những SA này có nhiều thông số hơn các SA được tạo theo cách thủ công như trong bài thực hành số 1.

[root@C0 ~]# setkey -D
192.168.0.7 192.168.2.7 
	esp mode=transport spi=130509956(0x07c76c84) reqid=0(0x00000000)
	E: 3des-cbc  b3d9d9f7 b821a831 bc254844 769cdfc4 c17df1d2 14aae29d
	A: hmac-md5  8e912c80 42383b9f ff77c7d5 72fd27f0
	seq=0x00000000 replay=4 flags=0x00000000 state=mature 
	created: Aug  2 14:29:21 2016	current: Aug  2 14:29:30 2016
	diff: 9(s)	hard: 28800(s)	soft: 23040(s)
	last: Aug  2 14:29:22 2016	hard: 0(s)	soft: 0(s)
	current: 320(bytes)	hard: 0(bytes)	soft: 0(bytes)
	allocated: 5	hard: 0	soft: 0
	sadb_seq=1 pid=4184 refcnt=0
192.168.2.7 192.168.0.7 
	esp mode=transport spi=139088032(0x084a50a0) reqid=0(0x00000000)
	E: 3des-cbc  fb1100fc bcfd8f15 753b36b8 c6ca1154 deaf23e0 e044593f
	A: hmac-md5  82147976 e0ccc982 9fe74b48 6ef21fc3
	seq=0x00000000 replay=4 flags=0x00000000 state=mature 
	created: Aug  2 14:29:21 2016	current: Aug  2 14:29:30 2016
	diff: 9(s)	hard: 28800(s)	soft: 23040(s)
	last: Aug  2 14:29:22 2016	hard: 0(s)	soft: 0(s)
	current: 320(bytes)	hard: 0(bytes)	soft: 0(bytes)
	allocated: 5	hard: 0	soft: 0
	sadb_seq=0 pid=4184 refcnt=0
			 

Bước 3: Thiết lập cấu hình IKE trên các router để áp dụng chế độ tunnel

Một cách hoàn toàn tương tự như trong bước 1, IKE cũng có thể được thiết lập trên các router R1 và R2 để tự động tạo các SA trên hai router này. Dựa trên đó, các đường truyền dữ liệu giữa các trạm có thể được khải báo bảo vệ bằng cơ chế tunnel.

[root@R2 ~]# cat /etc/psk.txt 
192.168.1.1          123

[root@R2 ~]# cat /etc/racoon.conf 
path pre_shared_key "/etc/psk.txt";

remote anonymous {
        exchange_mode main;
        proposal {
                encryption_algorithm 3des;
                hash_algorithm md5;
                authentication_method pre_shared_key;
                dh_group modp1024;
        }
}

sainfo anonymous {
        pfs_group modp768;
        encryption_algorithm 3des;
        authentication_algorithm hmac_md5;
        compression_algorithm deflate;
}

[root@R2 ~]# cat /etc/setkey.conf 
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;

[root@R2 umip]# racoon -F -f /etc/racoon.conf
Foreground mode.
2016-08-07 13:30:59: INFO: @(#)ipsec-tools 0.8.2 (http://ipsec-tools.sourceforge.net)
2016-08-07 13:30:59: INFO: @(#)This product linked OpenSSL 1.0.1e-fips 11 Feb 2013 (http://www.openssl.org/)
2016-08-07 13:30:59: INFO: Reading configuration from "/etc/racoon.conf"
2016-08-07 13:30:59: INFO: 192.168.1.2[500] used for NAT-T
2016-08-07 13:30:59: INFO: 192.168.1.2[500] used as isakmp port (fd=9)
2016-08-07 13:30:59: INFO: 192.168.1.2[4500] used for NAT-T
2016-08-07 13:30:59: INFO: 192.168.1.2[4500] used as isakmp port (fd=10)
2016-08-07 13:30:59: INFO: 192.168.2.1[500] used for NAT-T
2016-08-07 13:30:59: INFO: 192.168.2.1[500] used as isakmp port (fd=11)
2016-08-07 13:30:59: INFO: 192.168.2.1[4500] used for NAT-T
2016-08-07 13:30:59: INFO: 192.168.2.1[4500] used as isakmp port (fd=12)