Lọc gói tin tĩnh: Chỉ dựa trên các trƣờng trong tiêu đề gói tin nhƣ (Các cổng, địa chỉ nguồn, địa chỉ đích, hƣớng truyền và giao diện). Trong lọc gói gói tĩnh, việc xử lý mỗi gói tin không phụ thuộc vào các gói tin trƣớc đó đƣợc gửi và nhận trong các kết nối.
Lọc gói tin động: Tạo ra trạng thái cho mỗi kết nối đi ra từ mạng nội bộ và ghi nhớ các cổng và địa chỉ nguồn và đích của mỗi gói tin. Trong lọc gói tin động, việc xử lý mỗi gói tin phụ thuộc vào các gói tin trƣớc đó đƣợc gửi và nhận trong cùng kết nối. Đảm bảo gói tin của giao thức TCP từ khi thiết lập kết nối với mảng tin SYN đến SYN/ACK cùng các mảng dữ liệu cho đến khi kết thúc với mảng tin FIN thuộc về một kết nối. Ví dụ: Cho phép mảng TCP của một trang Web đƣợc truyền vào mạng nội bộ nhƣng tin tặc không thể chèn mảng tin vào luồng các mảng tin của trang Web hoặc tin tặc không thể giả danh Web site đã kết nối vào mạng nội bộ.
Chúng ta tóm tắt một số đặc điểm chính của lọc gói động nhƣ sau: - Lọc gói động xử lý với các trạng thái của kết nối
- Trạng thái ở đây là một khái niệm tƣơng đối, nó đƣợc định nghĩa nhƣ „điều kiện của kết nối”, nó phụ thuộc vào từng giao thức cụ thể đƣợc sử dụng
- Trạng thái của các kết nối hợp pháp đƣợc lƣu trữ trong bảng trạng thái (Bảng luồng). Có thể lƣu trạng thái dƣới dạng băm (Hash) để tìm kiếm nhanh hơn. - Lọc gói dựa trên việc so sánh trạng thái của goia tin với bảng luồng.
- Thông thƣờng lọc gói sẽ tiêu tốn nhiều thời gian khi thiết lập một kết nối mới Chƣơng 2 đã trình bày các kỹ thuật lọc gói tin. Dựa trên các kỹ thuật này có rất nhiều mô hình kiến trúc Firewall khác nhau đƣợc thiết kế. Nhƣng những thiết kế vẫn chủ
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/ yếu dự c kiến trúc cơ bản đó là kiến trúc Dual Home Host, Screen Host và Screen Subnet. Trên hệ điều hành Windows có rất nhiều công cụ quản trị mạng giúp các nhà quản trị có thể bảo vệ mạng của mình rất hữu hiệu. Nhƣng một giải pháp cho việc xây dựng mạng truy cập Internet ổn định là dùng Server chạy trên hệ điều hành Linux. Hiện nay Linux đang đƣợc coi là một trong những hệ điều hành tốt nhất trong môi trƣờng mạng, giải pháp này giúp giảm chi phí đầu tƣ về phần cứng cho server, tăng tốc độ của mạng cục bộ và đảm bảo môi trƣờng mạng chạy ổn định. Vì vậy, chƣơng 3 của luận văn sẽ xây dựng chƣơng trình giải bài toán thử nghiệm lọc gói tĩnh và động dựa trên bức tƣờng lửa mã nguồn mở Iptables trong Linux.
Chƣơng 3
XÂY DỰNG THỬ NGHIỆM BỨC TƢỜNG LỬA 3.1. Phân tích bài toán
* Bài toán:
Có một mạng máy tính trong trƣờng trung học phổ thông gồm 3 phòng: 01 phòng thực hành cơ sở, 01 phòng thực hành mạng, 01 văn phòng. Trong đó máy văn phòng đƣợc kết nối với máy chủ qua Firewall theo mô hình khách/chủ (Client/Server). Với yêu cầu thực tế tại trƣờng cần cấu hình cho phòng thực hành cơ sở có thể sử dụng để thi (Có thể lấy các file chƣơng trình từ máy chủ tệp tin (Server File)), nhƣng không đƣợc truy cập vào Web. Phòng thực hành mạng ngoài yêu cầu nhƣ phòng thực hành cơ sở thì còn có thể vào mạng. Các máy tính văn phòng có thể vào máy chủ tệp tin và vào mạng nhƣng không đƣợc phép vào Server 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/
Hình 3.1. Sơ đồ kết nối mạng trong trƣờng học
3.1.1. Xây dựng chính sách lọc gói tin tĩnh
Mô tả yêu cầu bài toán: Giả sử cần phải xây dựng bảng chính sách lọc gói theo các luật sau:
Luật 0: cho phép các luồng thông tin hai chiều giữa tƣờng lửa và các máy tính văn phòng đƣợc sử dụng tất cả các dịch vụ tại tất cả các cổng giao diện.
Luật 1: Từ chối các dịch vụ phát sinh từ phòng máy cơ sở tại tất cả các giao diện tới tƣờng lửa.
Luật 2: Cho phép các dịch vụ mạng cơ bản nhƣ http, https, smtp, ssh, fpt, imap… từ phòng thực hành mạng tới tƣờng lửa qua các giao diện.
Luật 3: Cho phép luồng thông tin của dịch vụ DNS từ firewall tới phòng thực hành mạng và hệ thống các máy văn phòng.
Luật 4: Từ chối luồng thông tin của dịch vụ DNS từ firewall tới phòng thực hành cơ sở.
Luật 5: Cấm các luồng thông tin của dịch vụ DNS từ firewall tới server thi và ngƣợc lại.
Luật 6: Cho phép luồng thông tin của dịch vụ DNS, fpt, ssh từ firewall tới server file và ngƣợc lại.
Bên cạnh đó ta có thể xây dựng thêm các luật để cấm các máy tính văn phòng từ địa chỉ 10.16.17.1 tới 10.16.17.255 truy cập vào server thi bằng cách thiết lập luật từ chối luồng thông tin phát sinh từ các dịch vụ trong dải địa chỉ này tới server thi. Một luật nữa cũng khá cần thiết trong hệ thống là cấm tất cả các truy cập từ bên ngoài (Không phải các máy trong dải địa chỉ của nhà trƣờng thuộc hệ thống mạng của phòng máy cơ sở, mạng và các máy văn phòng) tới server file bằng cách thiết lập chính sách luật cho phép các luồng phát sinh từ các địa chỉ của 3 phòng máy tới server file và từ chối tất cẩ các luồng phát sinh từ tất cả các địa chỉ qua bất kỳ cổng và dịch vụ.
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/
3.1.2. Xây dựng chính sách lọc gói tin động
Mô tả yêu cầu bài toán: Là một firewall cài trên hosting dùng để bảo vệ cho Web Server, trong đó cho phép các dịch vụ nhƣ SSH, http, smtp, ftp từ tất cả các địa chỉ đƣợc truy cập tới, còn các các dịch vụ khác đều bị từ chối hoặc cấm.
Giả sử cần phải xây dựng bảng chính sách lọc gói theo các luật sau:
Luật 0: Cấm tất cả các luồng dữ liệu từ cổng giao diện bên ngoài internet (Ethernet 0) đi tới tƣờng lửa của hosting.
Luật 1: Mọi hành động và dịch vụ đƣợc thực hiện trực tiếp ngay trên hosting thì đều đƣợc phép.
Luật 2: Các luồng dữ liệu từ bất kỳ địa chỉ nào đƣợc phép đi tới hosting thông qua firewall bao gồm các gói dữ liệu của các dịch vụ ssh, ICMP, http/https, imap, pop3, ping, telnet, ftp/ftp data, SMTP,… Firewall sẽ kiểm tra các gói dữ liệu tới hosting nếu đúng định dạng của các dịch vụ trên thì sẽ chuyển tiếp tới hosting. Việc kiểm tra các gói tin này không còn đơn thuần dựa vào địa chỉ nơi gửi nhƣ trong lọc gói tin tĩnh, các gói tin sẽ đƣợc firewall kiểm tra cả phần tiêu đề và định dạng dữ liệu trƣớc khi đƣợc đƣa tới hosting để tránh các gói tin tặc. Tuy nhiên trong trƣờng hợp cần chặn các cuộc tấn công từ chối dịch vụ cho hosting thì các địa chỉ nguồn gửi vẫn có giá trị.
Luật 3: Dữ liệu từ các dịch vụ còn lại đi tới firewall thì đều bị từ chối cho phép đi tới hosting.
Luật 4: Các dịch vụ từ tƣờng lửa tới hosting đều đƣợc phép.
3.2. Phân tích lựa chọn công cụ
Giao diện của chƣơng trình đƣợc xây dựng bằng ngôn ngữ lập trình Quickly, một ngôn ngữ lập trình phổ biến đƣợc phát triển cho hệ điều hành mã nguồn mở nhƣ Linux, Ubuntu… Ngôn ngữ này có nền tảng và các thƣ viện dùng chung của Python. So với các ngôn ngữ trên môi trƣờng Windows thì các ngôn ngữ trên hệ điều hành mã nguồn mở chƣa hỗ trợ nhiều và sâu trong việc thiết kế giao diện, để bắt đầu ta vẫn phải dùng tới một số các lệnh trong giao diện dòng lệnh Terminal. Ngoài ra việc thiết kế giao diện và viết chƣơng trình là hoàn toàn tách biệt.
Để cài đặt Quickly từ môi trƣờng Terminal ta sử dụng lệnh: :~# sudo –i
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/ :~# apt –get install Quickly
Sau khi cài đặt để tạo một giao diện mới, thiết kế giao diện, lập trình và thực thi chƣơng trình ta dùng các lệnh lần lƣợt theo thứ tự sau:
:~# Quickly create ubuntu-application Tên chƣơng trình :~# Quickly design
:~# Quickly edit :~# Quickly run
Việc xây dựng chƣơng trình để thƣc hiện các chính sách lọc gói bằng các ngôn ngữ lập trình nhƣ Quickly hay Shell đã tƣơng đối thuận lợi, tuy nhiên vẫn đòi hỏi ngƣời sử dụng có kỹ năng lập trình. Gần đây, các nhà phát triển đã xây dựng các công cụ hƣớng giao diện Window để hỗ trợ cho các nhà quản trị xây dựng chính sách dễ dàng hơn. Ví dụ nhƣ công cụ Firewall Builder
Việc xây dựng bức tƣờng lửa lọc gói tin dựa trên 2 kỹ thuật lọc gói tin tĩnh và động là sử dụng công cụ mã nguồn mở TP Tables
* Giới thiệu về Iptables [8]
Iptables là một tƣờng lửa ứng dụng lọc gói dữ liệu rất mạnh, miễn phí và có sẵn trên kernel Linux 2.4.x và 2.6.x. Netfilter/Iptables gồm 2 phần là Netfilter ở trong nhân Linux và Iptables nằm ngoài nhân. Iptables chịu trách nhiệm giao tiếp giữa ngƣời dùng và Netfilter để đẩy các luật của ngƣời dùng vào cho Netfiler xử lí. Netfilter tiến hành lọc các gói dữ liệu ở mức IP.
Hình 3.2. Netfilter và Iptables trong nhân Linux
ểm tra . Netfilter làm việc trực tiếp trong nhân, nhanh và không làm giảm tốc độ của hệ thố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/ 2.4x. Netfil
.
:
Xây dựng bức tường lửa dựa trên cơ chế lọc gói tĩnh (stateless) và lọc gói động (stateful)
Dùng bảng NAT và masquerading chia sẻ sự truy cập mạng nếu không có đủ địa chỉ mạng.
Dùng bảng NAT để cài đặt transparent proxy
Có khả năng theo dõi sự kết nối, có khả năng kiểm tra nhiều trạng thái của packet. Nó làm việc này cho UDP và ICMP tốt nhất là kết nối TCP, thí dụ tình trạng đầy đủ của lọc ICMP chỉ cho phép hồi âm khi có yêu cầu phát đi, chứ không chặn các yêu cầu nhƣng vẫn chấp nhận hồi âm với giả sử rằng chúng luôn đáp lại lệnh ping. Sự hồi âm không do yêu cầu có thể là tín hiệu của sự tấn công hoặc cửa sau.
Xử lý các packet đơn giản trong các chains (Một danh sách các nguyên tắc) INPUT, OUTPUT, FORWARD. Trên các host có nhiều giao diện mạng, các packet di chuyển giữa các giao diện chỉ trên chain FORWARD .
Phân biệt rõ ràng giữa lọc packet và NAT (Nework Address Translation)
Có khả năng giới hạn tốc độ kết nối và ghi nhật ký. Bạn có thể giới hạn kết nối và ghi nhật ký ồ ạt để tránh sự tấn công từ chối dịch vụ (Deinal of service).
Có khả năng lọc trên các cờ và địa chỉ vật lý của TCP.
Là một Firewall có nhiều trạng thái, nên nó có thể theo dõi trong suốt quá trình kết nối, do đó nó an toàn hơn Firewall khác có ít trạng thái.
Iptables bao gồm một vài bảng, mỗi bảng với một chính sách (Police) mặc định và các nguyên tắc trong chain xây dựng sẵn.
*Hoạt động xử lý gói tin IP [1], [11]
Jumps là cơ chế chuyển một packet đến một target nào đó để xử lý thêm một số thao tác khác.
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/ Target là cơ chế hoạt động trong Iptables, dùng để nhận diện và kiểm tra packet. Khi một target đƣợc nhận dạng, gói dữ liệu cần nhảy để thực hiện các xử lý tiếp theo. Các target đƣợc xây dựng sẵn trong Iptables nhƣ:
Target Ý Nghĩa Tùy chọn
ACCEPT Iptables ngừng xử lý gói dữ liệu đó và chuyển tiếp nó vào một ứng dụng cuối hoặc hệ điều hành để xử lý
DROP Iptables ngừng xử lý gói dữ liệu đó và gói dữ liệu bị chặn, loại bỏ
LOG Thông tin của gói sẽ đƣợc đƣa vào syslog để kiểm tra. Iptables tiếp tục xử lý gói với quy luật kế tiếp
--log-prefix “string”
Iptables sẽ thêm vào log message một chuỗi do ngƣời dung định sẵn. Thông thƣờng là để thông báo lý do vì sao gói bị bỏ
REJECT Tƣơng tự nhƣ DROP nhƣng nó sẽ gởi trả lại cho phía ngƣời gởi một thông báo lỗi rằng gói đã bị chặn và loại bỏ
--reject-with qualifier
Tham số qualifier sẽ cho biết loại thông báo gửi trả lại phía gởi. Qualifier gồm các loại sau: icmp-port-unreachable (default) icmp-net-unreachable icmp-host-unreachable icmp-proto-unreachable icmp-net-prohibited icmp-host-prohibited tcp-reset echo-reply
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/ DNAT Dùng để thực hiện Destination
network address translation, địa chỉ đích của gói dữ liệu sẽ đƣợc viết lại
--to-destination ipaddress
Iptables sẽ viết lại địa chỉ paddress vào địa chỉ đích của gói dữ liệu
SNAT Dùng để thực hiện Source Networkaddress
Translation. Mặc định thì địa chỉ IP nguồn sẽ giống nhƣ IP nguồn của firewall
--to-source <address>[- <address>][:<port>-<port>]
Miêu tả IP vả port sẽ đƣợc viết lại bởi iptables
MASQUER ADE
Dùng để thực hiện Source Networkaddress Translation. Mặc định thì địa chỉ IP nguồn sẽ giống nhƣ IP nguồn của firewall
[--to-ports <port>[- <port>]] Ghi rõ tới các port nguồn mà port nguồn gốc có thể ánh xạ đƣợc
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/
3.3. Kết quả thử nghiệm thực thi chƣơng trình * Với kỹ thuật lọc gói tin tĩnh * 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