1. Trang chủ
  2. » Giáo Dục - Đào Tạo

báo cáo cá nhân mạng thông tin đề tài mạng định nghĩa bằng phần mềm sdn

17 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Mạng định nghĩa bằng phần mềm - SDN
Tác giả Nguyễn Trung Kiệm
Người hướng dẫn Thầy Nguyễn Tiến Dũng
Trường học Trường Đại học Bách Khoa Hà Nội
Chuyên ngành Mạng thông tin
Thể loại Báo cáo cá nhân
Năm xuất bản 2021
Thành phố Hà Nội
Định dạng
Số trang 17
Dung lượng 1,56 MB

Nội dung

ỨNG DỤNG FIREWALL VÀO SDN1.1 Giới thiệu chungTường lửa Firewall là một hệ thống security, có thể dựa trên phần cứng hoặc phầnmềm, sử dụng các quy tắc để kiểm soát traffic vào, ra khỏi hệ

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN TỬ - VIỄN THÔNG

-□□&□□ -BÁO CÁO CÁ NHÂN

MẠNG THÔNG TIN

Đề tài: Mạng định nghĩa bằng phần mềm - SDN

Giảng viên hướng dẫn: Thầy Nguyễn Tiến Dũng

Nhóm sinh viên thực hiện: Nhóm 7

Trang 2

Hà Nội, 12-2021

Trang 3

MỤC LỤC

DANH MỤC HÌNH VẼ i

DANH MỤC BẢNG BIỂU ii

CHƯƠNG 1 ỨNG DỤNG FIREWALL VÀO SDN 3

1.1 Giới thiệu chung 3

1.2 Xây dựng Topology mạng 3

CHƯƠNG 2 ĐỊNH NGHĨA POLICY CHO FIREWALL 5

2.1 Định nghĩa bằng command 5

2.2 Định nghĩa thông qua Ryu 5

2.2.1 Chặn toàn bộ traffic từ host 1 đến host 3 5

2.2.2 Chỉ chặn truy cập TCP đến cổng 80 trên host 1 8

CHƯƠNG 3 KẾT QUẢ MÔ PHỎNG 9

3.1 Chặn toàn bộ traffic từ host 1 đến host 3 9

3.2 Chỉ chặn truy cập TCP đến cổng 80 trên host 1 11

KẾT LUẬN 14

3.3 Những kết quả làm được: 14

3.4 Định hướng tương lại: 14

TÀI LIỆU THAM KHẢO 15

Trang 4

DANH MỤC HÌNH VẼ

Hình 1.1 Topology mạng 3 switch và 3 host 3

Hình 1.2 Khởi chạy mạng topology băng mininet 4

Hình 3.1 Khởi chạy Ryu với rule chặn toàn bộ traffic từ host 1 đến host 3 9

Hình 3.2 Kiểm tra kết nối các host thông qua mininet 9

Hình 3.3 Flow Table của switch s1 10

Hình 3.4 Flow Table của switch s3 10

Hình 3.5 Kiểm tra kết nối các host thông qua mininet 11

Hình 3.6 Kiểm tra traffic trên port 80 12

Hình 3.7 Kiểm tra traffic trên port 75 12

Hình 3.8 Flow Table của switch s1 13

Trang 5

DANH MỤC BẢNG BIỂU

Bảng 2.1 Toàn bộ field của OFPMatch 7 Bảng 2.2 ID protocol của IP 8

Trang 6

CHƯƠNG 1 ỨNG DỤNG FIREWALL VÀO SDN

1.1 Giới thiệu chung

Tường lửa (Firewall) là một hệ thống security, có thể dựa trên phần cứng hoặc phần mềm, sử dụng các quy tắc để kiểm soát traffic vào, ra khỏi hệ thống Tường lửa hoạt động như một rào chắn giữa mạng an toàn và mạng không an toàn Nó kiểm soát các truy cập đến nguồn lực của mạng thông qua một mô hình kiểm soát chủ động Nghĩa là, chỉ những traffic phù hợp với chính sách được định nghĩa trong tường lửa mới được truy cập vào mạng, mọi traffic khác đều bị từ chối

Đối với SDN thì tính năng chính của Firewall là ngăn việc gói tin đi hoặc đến 1 host Để làm được việc đó chúng ta cần sử dụng action DROP trong flow entry

1.2 Xây dựng Topology mạng

Như các phần trước, chúng ta có 3 switch và 2 host, nhưng ở phần này em xin được thiết

kế mạng có 3 switch và mỗi switch có 1 host như hình sau:

Hình 1.1 Topology mạng 3 switch và 3 host

h2 = net.addHost('h2', cls=Host, ip='172.23.22.167',

defaultRoute=None, mac='00:00:00:02:02:02')

h1 = net.addHost('h1', cls=Host, ip='172.23.22.168',

3

Trang 7

defaultRoute=None, mac='00:00:00:01:01:01')

h3 = net.addHost('h3', cls=Host, ip='172.23.22.169',

defaultRoute=None, mac='00:00:00:03:03:03')

Em cấp them host 3 với địa chỉ IP = '172.23.22.169' và địa chỉ MAC là '00:00:00:03:03:03'

Ngoài ra mỗi host bây giờ em có gán thêm địa chỉ MAC tương ứng với từng host, ví dụ h1 = “'00:00:00:01:01:01'” Mục đính gán địa chỉ MAC để việc đơn giản hóa việc specific địa chỉ MAC vào các rule cho firewall Nếu không chỉ rõ địa chỉ MAC thì mininet sẽ tự tạo địa chỉ MAC một cách ngẫu nhiên

Để chạy topology ta sử dụng mininet với câu lệnh sau:

$ sudo python /topo.py

Nếu chạy thành công ta thu được ảnh sau:

Hình 1.2 Khởi chạy mạng topology băng mininet

4

Trang 8

CHƯƠNG 2 ĐỊNH NGHĨA POLICY CHO FIREWALL

2.1 Định nghĩa bằng command

Ta có định add flow firewall bằng cách sử dụng Terminal

$ sudo ovs-ofctl add-flow [tên switch] [policy mà mình mong muốn] action=DROP

Ví dụ: Ta muốn chặn toàn bộ traffic đi ra từ host 1, ta thực hiện câu lệnh sau:

sudo ovs-ofctl add-flow s1 dl_type=0x0800, priority=65535, nw_src=10.0.0.1, action=DROP

Trong đó:

- priority nên được để cao hơn để tránh xung đột với flow khác có priority giá trị cao hơn làm cho flow firewall này không hoạt động

- 0x0800 là Internet Protocol version 4 (IPv4)

- nw_src là địa chỉ IP nguồn

2.2 Định nghĩa thông qua Ryu

Như ta có thể thấy, ta có thể add flow firewall một cách dễ dàng thông qua terminal Tuy nhiên việc thực hiện như trên có nhiều bất lợi như là nếu ta muốn add nhiều flow firewall thì phải nhập nhiều lần, thậm chí ta có thể cấu hình sai gây ra nhiều rắc rồi Chính vì vậy

ta sẽ định nghĩa ra 1 file python để Ryu có thể đọc file đó và cấu hình giúp chúng ta

Vì thời lượng bài tập lớn có hạn, em xin phép làm firewall cho 2 trường hợp Đó là chặn toàn bộ traffic từ host 1 đến host 3 và chỉ chặn truy cập TCP đến cổng 80 trên host 1

2.2.1 Chặn toàn bộ traffic từ host 1 đến host 3

Ta có thể nhìn đoạn code sau:

eth_src = "00:00:00:01:01:01"

eth_dst = "00:00:00:03:03:03"

eth_type = 0x0800

priority = 30000

actions = []

match = parser.OFPMatch(

5

Trang 9

eth_dst=eth_dst, eth_src=eth_src, eth_type=eth_type)

self.add_flow(datapath, priority, match, actions)

Chúng ta sẽ đặt các biến eth_src và eth_dst để lữu trữ địa chỉ MAC của host 1 và địa chỉ MAC của host 3 Ở đây ta có biến actions =[] thì Ryu hiểu đây là DROP Tức là khi gặp gói tin IP có địa chỉ MAC nguồn là host 1 và MAC đích là host 3 thì ngay lập sẽ bị loại

bỏ, không cho gói tin từ host 1 đến host 3 0x0800 là IP

OFPMatch là 1 class mô tả các field cho header của IP Ở trong OpenFlow 1.3 có tổng cộng có hơn 40 tham số đầu vào, nếu đầu vào không chỉ định rõ cho 1 field thì nó sẽ

“wildcard” và sẽ match bất cứ thông tin

Và cuối cùng ta sử dụng hàm add_flow() để add flow vào flow table để sau có traffic tương tự thì Data plane tự thực hiện, không cần đưa traffic đến Ryu để kiểm tra

2.2.2 Chỉ chặn truy cập TCP đến cổng 80 trên host 1

Cũng tương tự với trường hợp kia, chúng ta cũng viết code tượng tự cho trường hợp này: actions = []

priority = 30000

mac_h1 = "00:00:00:01:01:01"

ip_h1= "172.23.22.168"

match = parser.OFPMatch(eth_dst=mac_h1,

ipv4_dst=ip_h1, eth_type=0x0800, ip_proto=6, tcp_dst=80) self.add_flow(datapath, priority, match, actions)

Để chặn được traffic TCP đến host 1 thì có 2 vùng chúng ta cần chỉ rõ trong OFPMatch Đó là ip_proto và eth_type Nếu thiếu 1 trong 2 field đó thì flow này không được add vào flow table

eth_type là 0x0800 chúng ta đều biết đó là IP còn ip_proto là protocol của IP và 6 là TCP Chúng ta có bảng protocol phổ biến của IP như sau:

Protocol Number Key Protocol

6 TCP Transmission Control Protocol

17 UDP User Datagram Protocol

6

Trang 10

Bảng 2.1 ID protocol của IP

Và cuối cùng chúng ta add flow vào flow table thông qua add_flow()

7

Trang 11

CHƯƠNG 3 KẾT QUẢ MÔ PHỎNG

3.1 Chặn toàn bộ traffic từ host 1 đến host 3

Để kích hoạt Ryu ta sử dụng câu lệnh sau:

$ ryu-manager ryu.app.simple_switch_stp_13 block_h1_to_h3.py

Trong đó: ryu.app.simple_switch_stp_13 là thuật toán tự add-flow trong SDN với spanning tree protocol và block_h1_to_h3.py là file rule firewall do mình tự tạo

Nếu chạy thành công ta sẽ có được thông báo như hình sau:

Hình 3.3 Khởi chạy Ryu với rule chặn toàn bộ traffic từ host 1 đến host 3

Để thử nghiệm file rule đã hoạt động chưa, ta sử dụng lệnh pingall trên mininet ta thấy

được như sau:

Hình 3.4 Kiểm tra kết nối các host thông qua mininet

8

Trang 12

h1 không thể ping được h3 và ngược lại h3 cũng không thể ping được h1, nhưng h1 ping h2 và h2 cũng ping h3

Để kiểm tra kỹ hơn chúng ta thực hiện câu lệnh sau:

$ sudo ovs-ofctl dump-flows s1

Với câu lệnh trên chúng ta sẽ in toàn bộ flow table trong switch s1:

Hình 3.5 Flow Table của switch s1

Và chúng ta đã thấy rule do chúng ta đặt ra đã có trong flow table

Không chỉ tại switch s1 và tái switch s3 và switch s2, rule cũng đã được add vào flow table như ảnh sau:

Hình 3.6 Flow Table của switch s3

9

Trang 13

Chính vì thế chúng ta đã thử nghiệm hành công

3.2 Chỉ chặn truy cập TCP đến cổng 80 trên host 1

Cũng tương tự với trường hợp trên ta cũng thực hiện câu lệnh tương tự

$ ryu-manager ryu.app.simple_switch_stp_13 tcp_html_h1.py Trong đó: tcp_html_h1.py là file rule firewall chặn traffic TCP đến cổng 80 trên host 1 do mình tự tạo

Đầu tiên chúng ta kiểm tra kết nối đến các host bằng lệnh pingall trên miniet, ta thu được

ảnh sau:

Hình 3.7 Kiểm tra kết nối các host thông qua mininet

Chúng ta thấy được rằng các host đều ping được đến với nhau

Để kiểm tra firewall đã hoạt động đúng theo mong muốn của mình thì chúng ta cần mở terminal trên host 1 và host còn lại Để mở terminal trên host của mininet ta sử dụng câu

lệnh xterm + tên_host Lúc này sẽ có màn hình terminal của host để mình thao tác lệnh

Để kiểm tra kết nối TCP em sử dụng chương trình netcat để kiểm tra

Ở trên host 1 ta thực hiện câu lệnh sau:

$ nc -l 80

Trong đó:

- nc là chương trình netcat

- -l là listen, mình sẽ dung chương trình này để listen tại cổng 80

Ở trên host 2 ta thực hiện câu lệnh sau:

$ nc 172.23.22.168 80

Trong đó:

- nc là chương trình netcat

- 172.23.22.168 là địa chỉ IP của host 1

10

Trang 14

- 80 là port 80 của host 1

Sau khi thực hiện 2 lệnh ta gửi 1 vài bản tin TCP từ host2 sang host 1 ta thấy được rằng:

Hình 3.8 Kiểm tra traffic trên port 80

Dù phía host 2 đã gửi 4 bản tin nhưng phía host 1 không nhận được bất kì bản tin nào

Để kiểm tra thêm, chúng ta thử mở cổng khác(không phải 80) trên host 1 xem host 2 có kết nối được không?? Ví dụ chúng ta sử dụng 75

Hình 3.9 Kiểm tra traffic trên port 75

Và chúng ta có thể thấy rang host 2 gửi 5 bản tin thì host 1 đều nhận được cả Chứng tỏ mạng SDN đã chặn mọi traffic TCP đến host 1 thông qua port 80, chứ mọi port khác SDN không hề chặn

Bây giờ chúng ta xem flow table, kiểm tra rule firewall do chúng ta đặt ra đã có trong flow table của switch:

11

Trang 15

Hình 3.10 Flow Table của switch s1

Chính vì vậy chúng ta đã thử nghiệm hành công

12

Trang 16

KẾT LUẬN

3.3 Những kết quả làm được:

- Thực hành tổng quan về mạng SDN

- Mô hình hóa được mạng SDN thông qua Open vSwitch và chạy ứng dụng nhỏ là Firewall và firewall hoạt động thành công dựa theo yêu cầu mong muốn của mình

3.4 Định hướng tương lại:

- Vì thời lượng có hạn nên em chỉ mới làm được ứng dụng nho nhỏ của mạng SDN

đó là Firewall, ngoài ra mạng SDN có rất nhiều ứng dụng lớn

- Một trong những điểm mạnh của controller SDN cũng như Ryu đó là mình có thể giao tiếp với nó thông qua REST API Đây là một lợi thế tạo tiền đề để phát triển mạnh mẽ NFV Orchestrator (Network Function Virtualization Orchestrator)

13

Trang 17

TÀI LIỆU THAM KHẢO

[1] Tài liệu tham khảo từ Future Internet Lab – Trường đại học Bách Khoa Hà Nội

14

Ngày đăng: 22/07/2024, 09:54

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w