Professional Documents
Culture Documents
Mục tiêu bài học của bài thực hành này là cho sinh viên biết được cách
VPN làm việc trong lúc hoạt động và cách mà VPN có thể giúp vượt qua
lọc tường lửa. chúng ta sẽ thực hiện một VPN rất đơn giản trong bài
thực hành này, và sử dụng nó để vượt qua tường lửa. Loại VPN phụ
thuộc vào 2 phần : IP tunneling và mã hóa. Công nghệ tunneling là thứ
thiết yếu nhất để giúp vượt tường lửa; việc mã hóa được dùng cho việc
bảo vệ thông tin của lưu lượng đi qua VPN tunnel. Để đơn giản, chúng
ta chỉ tập trung vào phần tunneling, vì vậy lưu lượng bên trong tunnel sẽ
không được mã hóa. Chúng tôi có 1 lab VPN riêng, bảo gồm cả
tunneling và mã hóa. Nếu người đọc cảm thấy hứng thú, bạn có thể thực
hiện bài thực hành VPN của chúng tôi và học hỏi về cách xây dựng 1
VPN hoàn chỉnh. Trong bài thực hành này, chúng ta chỉ tập trung vào
cách sử dụng VPN tunnel để vượt qua tường lửa. Bài thực hành này gồm
2 chủ đề : Firewall, VPN.
II. Thực hành.
2.1 Bài 1 : Cài đặt máy ảo.
Chúng ta cần 2 máy ảo, 1 máy bên trong tường lửa, máy còn lại nằm bên
ngoài tường lửa. Mục tiêu là để giúp máy bên trong tường lửa có thể đến
được trang web bên ngoài đã bị chặn bởi tường lửa. Chúng ta sử dụng 2
máy ảo, VM1 và VM2, cho 2 máy này. VM1 và VM2 được cho là 2
máy kết nối với nhau thông qua Internet bằng router. Việc thiết lập này
có thể yêu cầu nhiều hơn 2 máy ảo. Để đơn giản, chúng ta sử dụng mạng
LAN để mô phỏng kết nổi Internet. Về cơ bản, chúng ta cần kết nối
VM1 và VM2 bằng card mạng “ Nat Network “. Hình dưới đây miêu tả
bài thực hành.
Tải và giải nén máy ảo Ubuntu 16.04 VMs trên trang chủ của
Seedsecuritylabs.org.
Cài đặt và sử dụng máy ảo trên phần mềm Virtual Box. Nhớ chỉnh lại
card mạng thành card Nat Network.
2.2 Bài 2 : Thiết lập tường lửa.
Trong bài này, chúng ta sẽ thiết lập tường lửa trên máy VM1 (Ubuntu
Client) để chặn truy cập vào 1 trang web nào đó. Bạn cần phải chắc rằng
địa chỉ IP của trang web mục tiêu là cố định hoặc nằm trong 1 dãy cố
định; Nếu không, bạn có thể gặp sự cố khi chặn hoàn toàn trang web
mục tiêu. Vui lòng tham khảo bài thực hành tường lửa để biết thêm chi
tiết về cách chặn một trang web.
Trong thế giới thực, tường lửa nên vận hành trên 1 máy riêng biệt,
không phải trên máy VM1 (Ubuntu Client). Để giảm thiểu số lượng máy
ảo sử dụng trong bài thực hành này, chúng ta đặt tường lửa vào máy
VM1 (Ubuntu Client). Thiết lập tường lửa trên máy VM1 yêu cầu quyền
người dùng cao nhất, và để thiết lập đường hầm VPN. Người ta có thể
nói răng khi chúng ta đã có quyền người dùng cao nhất, tại sao chúng ta
không thể tắt tường lửa trên máy VM1. Đây là một ý kiến tốt, nhưng hay
nhớ rằng chúng ta đặt tường lửa vào máy VM1 bởi vì chúng ta không
muốn tạo một cái máy ảo khác trong bài thực hành này. Vì vậy, mặc dù
bạn có quyền người dùng cao nhất trên máy VM1, bạn không được phép
sử dụng quyền để cấu hình lại tường lửa. Bạn phải sử dụng VPN để vượt
qua nó.
So sánh với việc đặt tường lửa vào một máy tính bên ngoài, thì việc đặt
tường lửa trên VM1 có một vấn đề nhỏ mà chúng ta cần phải giải quyết.
Khi chúng ta thiết lập tường lửa để chặn gói tin, chúng ta cần phải chắc
rằng sẽ không chặn phải gói tin dùng để truy cập vào giao diện ảo được
VPN sử dụng, nếu không VPN của chúng ta sẽ không thể nhận được gói
tin. Vì vậy, chúng ta không thể thiết lập các quy tắc tường lửa trước khi
định tuyến, càng không thể thiết lập các quy tắc trên giao diện ảo. Chúng
ta chỉ cần thiết lập các quy tắc trên giao diện mạng lưới thật của máy
VM1, vì thế nó sẽ không ảnh hưởng đến gói tin gửi đến giao diện ảo.
Chúng ta có thể sử dụng chương trình ufw để thiết lập các quy tắc cho
tường lửa. Chương trình này là giao diện người dùng của chương trình
iptables. Người ta có thể sử dụng trực tiếp iptables, nhưng theo kinh
nghiệm, thì sử dụng ufw sẽ tiện lợi hơn.
+ Chỉnh IP cho 2 máy Server và Client.
+ Sau khi thiết lập tường lửa, ta tiến hành ping để kiểm tra xem có
ping đến địa chỉ 157.240.13.35 được không.
Chúng ta thiết lập một đường hầm VPN giữa VM1 (Ubuntu Client) và
VM2 (Ubuntu Server). Khi người dùng trên máy VM1 cố gắng truy cập
vào một trang web bị chặn, lưu lượng truy cập sẽ không điều hướng đi
qua mạng của nó, bởi vì nó sẽ bị chặn. Thay vì thế, gói tin gửi đến trang
web bị chặn từ máy VM1 sẽ được định tuyến đến đường hầm VPN và
đến VM2. Một khi gói tin đã đến đó, VM2 sẽ định tuyến nó đến đích
đến cuối cùng. Khi gói tin trả lời trở về, nó sẽ trở về VM2, nơi mà sẽ
điều hướng gói tin vào đường hầm VPN, cuối cùng đưa gói tin về VM1.
Đó là cách mà VPN giúp VM1 vượt qua tường lửa.
Chúng tôi đã tạo ra một chương trình VPN mẫu, bao gồm chương trình
máy khách (vpnclient) và chương trình máy chủ (vpnserver), cả 2
chương trình này có thể được tải về từ trang web Seedsecuritylabs.org.
Chương trình VPN đơn giản này chỉ thiết lập một đường hầm VPN giữa
máy khách và máy chủ, nó không có mã hóa lưu lượng đường hầm.
Chương trình vpnclient và vpnserver là hai đầu của đường hầm VPN.
Chúng giao tiếp với nhau bằng cách sử dụng giao thức TCP hoặc UDP
thông qua các sockets được miêu tả như hình dưới đây.
Trong mẫu code của chúng tôi, chúng tôi chọn sử dụng UDP cho đơn
giản. Đường dấu chấm giữa máy client và server mô tả đường dẫn của
đường hầm VPN. Chương trình VPN Client và Server kết nối với hệ
thống chủ thông qua TUN, bằng cách thực hiện 2 bước : (1) : Lấy gói tin
IP từ hệ thống lưu trữ, vì thế gói tin có thể được gửi thông qua đường
hầm, (2) lấy gói tin IP từ đường hầm, và sau đó chuyển hướng nó đến hệ
thống lưu trữ, nơi này sẽ chuyển tiếp gói tin đến đích đến cuối cùng của
nó.
Mô tả cách tạo đường hầm VPN bằng cách sử dụng chương trình
vpnclient và vpnserver.
Bước 1 : Chạy chương trình VPN Server.
Đầu tiên, chúng ta chạy chương trình VPN Server vpnserver trên máy ảo
Ubuntu Server. Sau khi chạy chương trình, cổng mạng ảo TUN sẽ xuất
hiện trong hệ thống. ( chúng ta có thể kiểm tra bằng câu lệnh ifconfig -a;
tên của cổng sẽ là tun0 trong hầu hết các trường hợp, nhưng chúng có
thể là tunX, với X là 1 con số). Đây là 1 cổng mới chưa được cấu hình,
vì vậy chúng ta cần phải cấu hình nó bằng cách đặt địa chỉ IP cho nó.
Chúng ta sử dụng 192.168.53.1 cho cổng này, ngoài ra bạn có thể sử
dụng địa chỉ IP khác.
Chạy lệnh bên dưới. Lệnh đầu tiên sẽ khởi động chương trình server, và
lệnh thứ hai sẽ chỉ định địa chỉ IP cho cổng tun0 và kích hoạt nó. Chú ý
rằng câu lệnh đầu tiên sẽ khóa và chờ đợi cho việc kết nối, vậy nên
chúng ta sẽ sử dụng một cửa sổ dòng lệnh khác để chạy dòng lệnh thứ
hai.
Qua máy Client ping để kiểm tra.