Kết quả thử nghiệm thực thi chƣơng trình

Một phần của tài liệu Một số kỹ thuật lọc gói tin trong IP (Trang 67 - 98)

* Với kỹ thuật lọc gói tin tĩnh

Từ việc sử dụng các công cụ nhƣ giới thiệu ở trên và sau khi thực hiện việc xây dựng thì các luật lọc gói tĩnh tƣơng ứng với Bài toán trên đƣợc thể hiện trên hình 3.3a, 3.3b

Hình 3.3a. Các chính sách luật lọc gói tin tĩnh

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ Sau khi đã có các luật thì các luật đó cần đƣợc cài đặt và active trƣớc khi bắt đầu thực thi trên thiết bị.

Tóm tắt chƣơng trình lọc gói tin tĩnh:

//Khai báo đƣờng dẫn tới các thƣ viện mã nguồn mở IPtables, IP, IPconfig, IP set, thƣ //viện quản trị quyền truy cập logger:

IPTABLES="/sbin/iptables" IP6TABLES="/sbin/ip6tables" IPTABLES_RESTORE="/sbin/iptables-restore" IP6TABLES_RESTORE="/sbin/ip6tables-restore" IP="/sbin/ip" IFCONFIG="/sbin/ifconfig" VCONFIG="/sbin/vconfig" BRCTL="/sbin/brctl" IFENSLAVE="/sbin/ifenslave" IPSET="/usr/sbin/ipset" LOGGER="/usr/bin/logger"

// Lấy thông tin về máy chủ và hệ thống mạng kết nối hiện tại.

getInterface () // cổng giao tiếp

getaddr_internal() // Địa chỉ mạng nội bộ getnet_internal() // Mạng nội bộ

getaddr() // Địa chỉ

getnet() // Lấy thông tin mạng

//Tìm kiếm các chƣơng trình tƣờng lửa cà các công cụ bảo vệ đang chạy.

find_program()

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/

check_tools() // Tìm các công cụ, IP tables

//Reset bảng IP tables V4, V6

$IPTABLES -P OUTPUT DROP

$IPTABLES -P INPUT DROP $IPTABLES -P FORWARD DROP

//Các thủ tục cài đặt các thiết lập mới cho cổng giao tiếp, địa chỉ mạng, bảng iptables

update_addresses_of_interface() { /*thân thủ tục cập nhật địa chỉ cổng giao tiếp*/}

clear_addresses_except_known_interfaces() {/*thân thủ tục xóa các địa chỉ cổng còn lại*/} check_run_time_address_table_files(){/*thân thủ tục kiểm tra lại bảng địa chỉ*/}

//Thân script dùng để thiết lập các luật trong tập luật lọc gói tin tĩnh

script_body() { # Rule 0 (NAT)

$IPTABLES -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j //

# Rule 0 (global) // Luật 0 có dải địa chỉ tác động từ 10.16.17.1 tới 10.16.17.128 $IPTABLES -N RULE_0

$IPTABLES -A INPUT -s 10.16.17.1 -m state --state NEW -j RULE_0 // dải các địa chỉ bị tác động bởi luật 0

$IPTABLES -A INPUT -s 10.16.17.2/31 -m state --state NEW -j RULE_0 ……….

$IPTABLES -A INPUT -s 10.16.17.128/25 -m state --state NEW -j RULE_0// địa chỉ cuối của dải bị tác động bởi luật

// Luật tác động tới các tin đi ra từ trong mạng nội bộ có điạ chỉ trong dải nói trên tới cổng Ethernet 0 của tƣờng lửa thì đều đƣợc phép nhƣ mô tả trong 2 lệnh dƣới.

$IPTABLES -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j MASQUERADE $IPTABLES -A RULE_0 -j LOG --log-level info --log-prefix "RULE 0 -- ACCEPT " $IPTABLES -A RULE_0 -j ACCEPT

// TƢƠNG TỰ NHƢ VẬY TA CÓ CÁC LUẬT CÒN LẠI NHƢ ĐƢỢC TRÌNH BÀY TRONG PHỤ LỤC # Rule 1 (NAT) ĐẾN # Rule 7 (NAT) theo các bƣớc

1. Quy định dải địa chỉ tác động của luật 2. Xác định chiều và cổng của gói tin

3. Hành động đối với gói tin: ACCEPT, REJECT, DENNY Chi tiết chƣơng lọc gói tin tĩnh đƣợc trình bày trong Phụ lục 1

* Với kỹ thuật lọc gói tin động

Hình 3.5a, 3.5b là giao diện cho chính sách lọc gói động tƣơng ứng với Bài toán trên

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ Sau khi đã có các luật thì các luật đó cần đƣợc cài đặt và active trƣớc khi bắt đầu thực thi trên thiết bị.

Hình 3.5b. Các chính sách luật lọc gói tin động

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/

Hình 3.7. Các luật trong firewall đƣợc active và bắt đầu thực thi trên hệ thống

Tóm tắt chƣơng trình lọc gói tin động:

//Khai báo đƣờng dẫn tới các thƣ viện mã nguồn mở IPtables, IP, IPconfig, IP set, thƣ //viện quản trị quyền truy cập logger:

IPTABLES="/sbin/iptables" IP6TABLES="/sbin/ip6tables" IPTABLES_RESTORE="/sbin/iptables-restore" IP6TABLES_RESTORE="/sbin/ip6tables-restore" IP="/sbin/ip" IFCONFIG="/sbin/ifconfig" VCONFIG="/sbin/vconfig" BRCTL="/sbin/brctl" IFENSLAVE="/sbin/ifenslave" IPSET="/usr/sbin/ipset" LOGGER="/usr/bin/logger"

// thông tin về máy chủ và hệ thống mạng kết nối hiện tại.

getInterface () // cổng giao tiếp

getaddr_internal() // Địa chỉ mạng nội bộ getnet_internal() // Mạng nội bộ

getaddr() // Địa chỉ

getnet() // Lấy thông tin mạng

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/

find_program()

check_tools() // Tìm các công cụ, IP tables

//Reset bảng IP tables V4, V6 $IPTABLES -P OUTPUT DROP $IPTABLES -P INPUT DROP $IPTABLES -P FORWARD DROP

//Lấy bảng các địa chỉ hiện có kết nối và sửa chữa

CURRENT_ADDRS_ALL_SCOPES="" CURRENT_ADDRS_GLOBAL_SCOPE=""

CURRENT_ADDRS_ALL_SCOPES=$(list_addresses_by_scope $interface 'scope .*' "$ignore_list")

CURRENT_ADDRS_GLOBAL_SCOPE=$(list_addresses_by_scope $interface 'scope global' "$ignore_list")

//Các thủ tục load modul so sánh và kiểm tra trạng thái đầy đủ của gói tin

load_modules() {/* gọi các modul*/}

// Các thủ tục cài đặt các thiết lập mới cho cổng giao tiếp, bảng iptables

update_addresses_of_interface() { /*thân thủ tục cập nhật địa chỉ cổng giao tiếp*/}

clear_addresses_except_known_interfaces() {/*thân thủ tục xóa các địa chỉ cổng còn lại*/} check_run_time_address_table_files(){/*thân thủ tục kiểm tra lại bảng địa chỉ*/}

verify_interfaces(){/*thân thủ tục xác nhận cổng giao tiếp của tƣờng lửa*/}

//Thân script dùng để thiết lập các luật trong tập luật lọc gói tin tĩnh

script_body() { # Rule 2 (global)

$IPTABLES -N Cid4169X2512.0

// Kiểm tra sự tồn tại của trong bảng luồng

for i_eth0 in $i_eth0_list do

// Nếu thấy thì so sánh các thông tin kết nối có phù hợp hay không

test -n "$i_eth0" && $IPTABLES -A OUTPUT -d $i_eth0 -m state --state NEW -j Cid4169X2512.0

done

//Các gói tin của các dịch vụ sau là hợp luồng và được cho accept còn lại thì hủy gói tin

$IPTABLES -A Cid4169X2512.0 -p icmp -m icmp --icmp-type 3 -j ACCEPT $IPTABLES -A Cid4169X2512.0 -p icmp -m icmp --icmp-type 0/0 -j ACCEPT $IPTABLES -A Cid4169X2512.0 -p icmp -m icmp --icmp-type 8/0 -j ACCEPT $IPTABLES -A Cid4169X2512.0 -p icmp -m icmp --icmp-type 11/0 -j ACCEPT $IPTABLES -A Cid4169X2512.0 -p icmp -m icmp --icmp-type 11/1 -j ACCEPT $IPTABLES -A Cid4169X2512.0 -p tcp -m tcp -m multiport --dports

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/

//Tạo luồng mới, lưu vào bảng luồng Nếu chưa tồn tại trong bảng luồng

$IPTABLES -A INPUT -p icmp -m icmp --icmp-type 3 -m state --state NEW -j ACCEPT

$IPTABLES -A INPUT -p icmp -m icmp --icmp-type 0/0 -m state --state NEW -j ACCEPT

$IPTABLES -A INPUT -p icmp -m icmp --icmp-type 8/0 -m state --state NEW -j ACCEPT

$IPTABLES -A INPUT -p icmp -m icmp --icmp-type 11/0 -m state --state NEW - j ACCEPT

$IPTABLES -A INPUT -p icmp -m icmp --icmp-type 11/1 -m state --state NEW - j ACCEPT

$IPTABLES -A INPUT -p tcp -m tcp -m multiport --dports 21,80,443,143,110,25,22 -m state --state NEW -j ACCEPT

Tương tự cho các luồng còn lại từ Rule 0 – Rule 4 NHƢ ĐƢỢC TRÌNH BÀY TRONG PHỤ LỤC

1. Kiểm tra sự tồn tại của trong bảng luồng

2. Nếu thấy thì so sánh các thông tin kết nối có phù hợp hay không

3. Các gói tin của các dịch vụ sau là hợp luồng và đƣợc cho accept còn lại thì hủy gói tin

4, Nếu chƣa có luồng thì tạo luồng mới, lƣu vào bảng luồng

Chi tiết chƣơng trình tạo các luật lọc gói tin động đƣợc trình bày trong Phụ lục 2

Khi thực thi chƣơng trình, các luật trong firewall sẽ đƣợc cài đặt và active trên thiết bị. Nếu có các kết nối thực và dải địa chỉ phòng máy cũng nhƣ địa chỉ hosting tƣơng ứng thì các chính sách luật sẽ đƣợc thực thi.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/

* Tóm tắt chƣơng trình trên quickly:

Chƣơng trình trên quickly sử dụng lập trình python. Nó cho phép thực thi các lệnh shell ngay trong dòng lệnh

import os import os.system import os.spawn* import os.popen* import popen2.* import commands.* Class FirewallUI(Window): __gtype_name__ “FirewallUI”

def finish_initializing( self, builder): # pylint: disable=f1002

”””Setup the main window”””

supper(FirewallUI, self).finish_initializing(builder)

self.PreferencesDialog = Preferences FirewallUIDialog

// main code

def on_tbtNewStaticFW_clicked( self, builder): ””” – Static firewall button clicked – ””’

process = subprocess.Popen ([ufw,'-disable], stdout=subprocess.PIPE) print process.stdout.read()

process = subprocess.Popen("/home/huong/Desktop/staticFirewall.fw", shell=True)

print process

process = subprocess.Popen ([ufw,'-enable], stdout=subprocess.PIPE) print process.stdout.read()

def on_tbtNewStaticFW_clicked( self, builder): ””” – Dynamic firewall button clicked – ””’

process = subprocess.Popen ([ufw,'-disable], stdout=subprocess.PIPE) print process.stdout.read()

process = subprocess.Popen("/home/huong/Desktop/DynamicFw.fw", shell=True)

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/

process = subprocess.Popen Popen([ufw,'-enable], stdout=subprocess.PIPE)

print process.stdout.read() #buil

Kết quả thử nghiệm đƣợc thực hiện trong 2 trƣờng hợp:

* Trường hợp 1:

Thử kiểm tra truy nhập Internet trong trƣờng hợp điều kiện truy cập không thỏa mãn theo tập luật sẽ cho kết quả nhƣ hình sau:

Hình 3.9. Cấm truy cập Internet

Khi điều kiện truy cập Internet khi thỏa mãn tập luật và đƣợc phép truy cập sẽ cho kết quả nhƣ hình sau:

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/

Hình 3.10. Cho phép truy cập Internet

Trường hợp 2:

Thử kiểm tra tín hiệu khi kết nối tới Website khi đã bị cấm theo tập luật sẽ cho kết quả nhƣ hình sau:

Hình 3.11. Luật chƣa đƣợc active

Thử khi luật đƣợc active sẽ cho kết quả nhƣ hình sau:

Hình 3.12. Luật đƣợc active

Trong chƣơng 3, luận văn đã phát biểu bài toán cần giải quyết. Luận văn đã lựa chọn Bức tƣờng lửa mã nguồn mở IPTables và và xây dƣng chƣơng trình lập chính sách cho trƣờng hợp lọc gói tĩnh và lọc gói động của bài toán. Luận văn cũng giới thiệu công

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ cụ Firewall Builder với giao diện Window cho phép ngƣời quản trị mạng tạo chính sách cho IPTables và các bức tƣờng lửa khác nhƣ Ipfilter và pf (Packet filter) và PIX dễ dàng hơn. Với hệ thống Firewall sử dụng Iptables trên Linux đạt đƣợc sự ổn định cao của hệ điều hành Linux và một Iptables với nhiều chức năng đáp ứng đƣợc cho nhu cầu của đơn vị có nhu cầu xây dựng hệ thống Firewall khi có mạng nội bộ kết nối Internet.

KẾT LUẬN

Thực hiện đề tài tìm hiểu “Một số kỹ thuật lọc gói tin trong IP”, sau quá trình học tập và tìm hiểu em đã đạt đƣợc những kết quả sau:

A. NHỮNG KẾT QUẢ CHÍNH CỦA LUẬN VĂN

1. Đã trình bày khái quát về An toàn và bảo mật trong mạng IP. 2. Hệ thống hóa một số kỹ thuật lọc gói tin:

- Kỹ thuật lọc gói tin tĩnh - Kỹ thuật lọc gói tin động

Luận văn có trình bày một số giải pháp bảo vệ mạng, sử dụng giải pháp kỹ thuật bức tƣờng lửa.

3. Đã xây dựng chƣơng trình tạo bảng chính sách trong hệ thống bảo vệ an toàn mạng IP dựa trên hai kỹ thuật lọc gói tin tĩnh và động sử dụng công cụ mã nguồn mở IP Tables.

B. HƢỚNG PHÁT TRIỂN CỦA ĐỀ TÀI

1. Tiếp tục nghiên cứu để hoàn thiện tốt hơn nữa hệ thống bảo vệ an toàn mạng phục vụ cho nhu cầu của đơn vị mình.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/

TÀI LIỆU THAM KHẢO Tiếng việt:

[1] Nguyễn Thúc Hải. Mạng máy tính và các hệ thống mở, Nhà xuất bản Giáo dục, 1997

Tiếng Anh:

[2] Alan G. Konheim (2007), "Computer Security and Cryptography", John Wiley

& Sons, Inc, 2007.

[3]. Meenakshi Patel, Sanjay Sharma (2012), “Detection of malicious attack in manet a behavioral approach”, IEEE

[4] Orla McGann, B.Eng. IPv6 Packet Filtering, Masters Thesis of the National

University of Ireland Maynooth, January 2005

[5]. Johannes Weber (2013), IPv6 Security Test Laboratory; Ruhr – University

Bochum; Germany. 2013

[6] Scott A. Crosby and Dan S. Wallach. Denial of Service via Algorithmic Complexity Attacks. In USENIX Security 2003, aug 2003.

[7] Paul Ferguson and Daniel Senie. RFC 2827: Network Ingress Filtering: Defeating

Denial of Service Attacks which employ Source Address, May 2000.

[8] Mrinal Buddekar Install ip6tables for IPv6 on CentOS 32/64bit Linux, August 28, 2013

Website: [9] http://securityworld.worldiswelcome.com/packet-filtering-firewall-an- introduction&prev=/search%3Fq%3Dpacket%2Bfiltering%2Bfirewalls%26rlz%3D1 C1CHMO_viVN541VN541%26es_sm%3D122 [10] http://www.netfilter.org [11] http://www.quantrimang.com

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/

PHỤ LỤC 1. Phụ lục 1: Tập luật lọc gói tin tĩnh

bin/sh

# DO NOT MODIFY !

# 4 11:38:33 2015 ICT by huong # files: * StaticFirewall.fw /etc/StaticFirewall.fw

# Compiled for iptables (any version) Internal network is configured with address 192.168.1.0/255.255.255.0 FWBDEBUG="" PATH="/sbin:/usr/sbin:/bin:/usr/bin:${PAT H}" export PATH LSMOD="/sbin/lsmod" MODPROBE="/sbin/modprobe" IPTABLES="/sbin/iptables" IP6TABLES="/sbin/ip6tables" IPTABLES_RESTORE="/sbin/iptables- restore" IP6TABLES_RESTORE="/sbin/ip6tables- restore" IP="/sbin/ip" IFCONFIG="/sbin/ifconfig" VCONFIG="/sbin/vconfig" BRCTL="/sbin/brctl" IFENSLAVE="/sbin/ifenslave" IPSET="/usr/sbin/ipset" LOGGER="/usr/bin/logger" log() { echo "$1"

which "$LOGGER" >/dev/null 2>&1 && $LOGGER -p info "$1" } getInterfaceVarName() { echo $1 | sed 's/\./_/' } getaddr_internal() { dev=$1 name=$2 af=$3

L=$($IP $af addr show dev $dev | sed -n '/inet/{s!.*inet6* !!;s!/.*!!p}' | sed 's/peer.*//') test -z "$L" && { eval "$name=''" return } eval "${name}_list=\"$L\"" } getnet_internal() { dev=$1 name=$2 af=$3

L=$($IP route list proto kernel | grep $dev | grep -v default | sed 's! .*$!!')

test -z "$L" && { eval "$name=''" return } eval "${name}_list=\"$L\"" } getaddr() { getaddr_internal $1 $2 "-4" } getaddr6() { getaddr_internal $1 $2 "-6" } getnet() { getnet_internal $1 $2 "-4" } getnet6() {

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ getnet_internal $1 $2 "-6"

}

# function getinterfaces is used to process wildcard interfaces

getinterfaces() { NAME=$1

$IP link show | grep ": $NAME" | while read L; do OIFS=$IFS IFS=" :" set $L IFS=$OIFS echo $2 done } diff_intf() { func=$1 list1=$2 list2=$3 cmd=$4

for intf in $list1 do

echo $list2 | grep -q $intf || { # $vlan is absent in list 2 $func $intf $cmd } done } find_program() { PGM=$1

which $PGM >/dev/null 2>&1 || { echo "\"$PGM\" not found" exit 1 } } check_tools() { find_program which find_program $IPTABLES find_program $MODPROBE find_program $IP } reset_iptables_v4() {

$IPTABLES -P OUTPUT DROP $IPTABLES -P INPUT DROP $IPTABLES -P FORWARD DROP cat /proc/net/ip_tables_names | while read table; do

$IPTABLES -t $table -L -n | while read c chain rest; do

if test "X$c" = "XChain" ; then $IPTABLES -t $table -F $chain fi done $IPTABLES -t $table -X done } reset_iptables_v6() {

$IP6TABLES -P OUTPUT DROP $IP6TABLES -P INPUT DROP $IP6TABLES -P FORWARD DROP

cat /proc/net/ip6_tables_names | while read table; do

$IP6TABLES -t $table -L -n | while read c chain rest; do

if test "X$c" = "XChain" ; then $IP6TABLES -t $table -F $chain fi done $IP6TABLES -t $table -X done } P2P_INTERFACE_WARNING="" missing_address() { address=$1 cmd=$2

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/

Một phần của tài liệu Một số kỹ thuật lọc gói tin trong IP (Trang 67 - 98)