Xây dựng mô hình bảo vệ mạng bằng bức tường lửa iptable của linux

LỜI NÓI ĐẦU Từ xa xưa nhân loại đã tìm mọi cách để thông tin liên lạc với nhau, và đã phát minh ra nhiều phương cách thông tin liên lạc rất đa dạng và phong phú để cho việc chuyển tin tức từ nơi này sang nơi khác một cách thuận tiện và nhanh chóng. Từ những phương cách thô sơ đơn giản như truyền miệng, đi bộ, đi ngựa, gửi qua chim bồ câu, qua thuyền bè Cho tới những phương cách hiện đại hơn như máy radio, điện thoại và truyền hình, TV (television), vận chuyển thư từ bằng máy bay, gửi thư bằng điện tín v.v. đã giúp cho việc thông tin liên lạc rất hữu hiệu và nhanh chóng. Sự phát minh ra máy vi tính và sự hình thành của Mạng Lưới Thông Tin Toàn Cầu (Internet) đã mở ra một kỷ nguyên mới cho việc thông tin liên lạc. Từ một máy vi tính nối vào Mạng Lưới Thông Tin Toàn Cầu (WWW) người sử dụng có thể gửi và nhận tin tức từ khắp nơi trên thế giới với khối lượng tin tức khổng lồ và thời gian tối thiểu thông qua một số dịch vụ sẵn có trên Internet. Tuy nhiên việc làm này đã làm phát sinh những vấn đề khá quan trọng. Đó là việc quản lý các tài nguyên thông tin của mình, bao gồm nguồn thông tin (các thông tin về một doanh nghiệp, một tổ chức hay là của một quốc gia nào đó) và việc bảo vệ chống lại sự truy cập bất hợp pháp. Từ đây nảy sinh ra một yêu cầu đó là cần có một giải pháp hoặc một hệ thống an ninh bảo vệ cho hệ thống mạng và luồng thông tin chạy trên nó. Một trong các giải pháp chính và tốt nhất hiện nay là đưa ra khái niệm Firewall và xây dựng nó để giải quyết những vấn đề này. Thuật ngữ “Firewall” có nguồn gốc từ một kỹ thuật thiết kế trong xây dựng để ngăn chặn và hạn chế hoả hoạn. Trong Công nghệ mạng thông tin, Firewall là một kỹ thuật được tích hợp vào hệ thống mạng để chống lại sự truy cập trái phép nhằm bảo vệ nguồn thông tin nội bộ cũng như hạn chế sự xâm nhập vào hệ thống của một số thông tin khác không mong muốn. Có hai loại kiến trúc FireWall cơ bản là: Proxy/Application FireWall và filtering gateway Firewall. Hầu hết các hệ thống Firewall hiện đại là loại lai (hybrid) của cả hai loại trên. Nhiều công ty và nhà cung cấp dịch vụ Internet sử dụng máy chủ Linux như một Internet gateway. Những máy chủ này thường phục vụ như máy chủ mail, web, ftp, hay dialup. Hơn nữa, chúng cũng thường hoạt động như các Firewall, thi hành các chính sách kiểm soát giữa Internet và mạng của công ty. Khả năng uyển chuyển, tính kinh tế, và sự bảo mật cao khiến cho Linux thu hút như là một thay thế cho những hệ điều hành thương mại. Tính năng Firewall chuẩn được cung cấp sẵn trong kernel của Linux được xây dựng từ hai thành phần : Ipchains và IP Masquerading. Linux IP Firewalling Chains là một cơ chế lọc gói tin IP. Những tính năng của IP Chains cho phép cấu hình máy chủ Linux như một filtering gateway/firewall dễ dàng. Một thành phần quan trọng khác của nó trong kernel là IP Masquerading, một tính năng chuyển đổi địa chỉ mạng (network address translation- NAT) mà có thể che giấu các địa chỉ IP thực của mạng bên trong. Ngoài ra trong kernel của Linux 2.4x và 2.6x cũng có một Firewall ứng dụng lọc gói tin có thể cấu hình ở mức độ cao Netfilter/Iptables. Netfilter/Iptable gồm 2 phần là Netfilter ở trong nhân Linux và Iptables nằm ngoài nhân. Netfilter cho phép cài đặt, duy trì và kiểm tra các quy tắc lọc gói tin trong Kernerl. Netfilter tiến hành lọc các gói dữ liệu ở mức IP. Netfilter làm việc nhanh và không làm giảm tốc độ của hệ thống. Được thiết kế để thay thế cho linux 2.2.x Ipchains và linux 2.0.x ipfwadm, có nhiều đặc tính hơn Ipchains và được xây dựng hợp lý hơ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 Netfilter xử lí. Chương trình Iptables được dùng để quản lý các quy tắc lọc gói tin bên dưới cơ sở hạ tầng của Netfilter. Các ứng dụng của Iptables đó là làm IP Masquerading, IP NAT và IP Firewall. Tài liệu này được viết ra nhằm đem đến cho mọi người cái nhìn rõ nét về FireWall và đặc biệt là FireWall Iptables của Linux. Nội dung chính của tài liệu gồm 3 Chương và 1 Phụ lục. Chương I: Các mối đe dọa an ninh mạng và một số giải pháp Chương II:Tổng quan firewall Chương III: Iptable trong linux Chương IV: Ứng dụng của iptable trong linux Phụ Lục A: Danh sách các từ viết tắt trong tài liệu này hoặc có liên quan. MỤC LỤC LỜI CẢM ƠN 1 LỜI NÓI ĐẦU 2 CHƯƠNG I: CÁC MỐI ĐE DỌA AN MẠNG VÀ MỘT SỐ GIẢI PHÁP 4 1.1 Tầm quan trọng của bức tường lửa 4 1.2 Đối tượng bảo vệ của bức tường lửa 4 1.2.1 Bảo vệ dữ liệu 4 1.2.2 Bảo vệ các tài nguyên trên mạng 5 1.2.3Bảo vệ uy tín, danh tiếng của công ty 5 1.3. Một số mối đe dọa an ninh mạng 5 1.3.1.Tấn công truy nhập mạng 5 1.3.2. Tấn công theo kiểu khai thác mạng: 6 1.3.3.Tạo cửa hậu, xóa nhật ký: 8 1.3.4 Tấn công từ chối dịch vụ 8 1.3.5 Giả mạo địa chỉ IP: 9 1.3.6 Đùa nghịch, quấy rối: 10 1.3.7 Phá hoại: 10 1.3.8 Gián điệp: 10 1.3.9 Vô ý hay thiếu hiểu biết của con người: 10 1.3.10 Tấn công vào yếu tố con người: 10 CHƯƠNG II:TỔNG QUAN FIREWALL 11 2.1. Một số khái niệm : 11 2.2.Chức năng: 11 2.2.1. Khả năng của hệ thống firewall 12 2.2.2. Những hạn chế của firewall 13 2.3. Phân loại bức tường lửa (Firewall) 13 2.3.1. Firewall lọc gói 14 2.3.2. Bức tường lửa ứng dụng(Application firewall) 16 2.3.3. Bức tường lửa nhiều tầng 18 2.4. Một vài kiến trúc firelwall 18 2.4.1 Screening Router 18 2.4.2 Dual-Homed Host 19 2.4.3. Bastion Host (máy chủ pháo đài) 20 2.4.4. Screened host (máy chủ sang lọc) 21 2.4.5. Screened Subnet (mạng con) 21 CHƯƠNG III: IPTABLES TRONG LINUX 24 3.1 Giới thiệu IPTABLES - IPCHAINS - so sánh 24 3.1.1 Giới thiệu Ipchains : Ipchains - quản trị IP Firewall 24 3.1.2 Giới thiệu Netfilter/Iptables 25 3.2 Cài đặt Iptables trong Kernel 27 3.3 Cài đặt ứng dụng phần người dùng (user-land) 30 3.4. Cách thức packet qua Firewall. 31 3.5. Các bảng và chuỗi luật 33 3.5.1 Bảng Nat 33 3.5.2 Bảng lọc (filter) 35 3.5.3 Bảng mangle 36 CHƯƠNG IV : ỨNG DỤNG Firewall 38 4.1 Sử dụng Iptable 38 4.1.1 Các file cấu hình 38 4.1.2 Các thao tác trong toàn bộ chuỗi luật 38 4.1.3 luật đơn 39 4.1.4 Mô tả bộ lọc 40 4.1.5 Mô tả hành động 44 4.2.1 Ứng dụng Iptables làm masquerading 48 4.2.2 Ứng dụng IPTABLES làm NAT 55 4.2.3 Phần mềm ứng dụng Iptables/Netfilter trong Linux. 63 KẾT LUẬN 64 PHỤ LỤC 65 TÀI LIỆU THAM KHẢO 66

docx66 trang | Chia sẻ: lvcdongnoi | Lượt xem: 3996 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Xây dựng mô hình bảo vệ mạng bằng bức tường lửa iptable của linux, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
p tài nguyên của mạng cục bộ qua IP NAT, khi packet đến IP NAT nó sẽ thay đổi địa chỉ đích của packet bằng một địa chỉ của mạng nội bộ. Để chuyển đổi trường địa chỉ nguồn hoặc đích trong packet chúng ta sử dụng 3 chuỗi luật được xây dựng sẵn: chuỗi luật Preouting: dùng để chuyển đổi địa chỉ các gói tin ngay sau khi đi vào Firewall. Chuỗi luật PosROUting: Dùng để thay đổi địa chỉ gói tin trước khi chúng ra khỏi Firewall. Chuỗi luật OUTPUT: Dùng để thay đổi địa chỉ các gói tin được phát sinh cục bộ (trên Firewall) trước khi định tuyến. Các hành động thực hiện trong bảng này là: - DNAT dùng trong trường hợp bạn có một địa chỉ ip chung (public) và muốn chuyển hướng các truy nhập vào Firewall tới một số máy khác (ví dụ trên DMZ). Nói cách khác, chúng ta thay đổi địa chỉ đích của gói tin và dẫn đường cho nó tới một số máy tính khác. Hình 3.3: NAT tĩnh - SNAT được dùng để thay đổi địa chỉ nguồn của các gói tin. Để làm ẩn các phần trong mạng cục bộ hoặc DMZ… Ví dụ nếu một Firewall biết được địa chỉ IP ở ngoài, nhưng cần thay thế địa chỉ IP của mạng cục bộ bằng địa chỉ của Firewall. với hành động này Firewall sẽ tự động SNAT và De-SNAT các gói tin, do đó để có khả năng thực hiện kết nối từ LAN đến Internet. ví dụ nếu dùng 192.168.0.0/netmask, các gói tin sẽ không bao giờ đến được Internet, bởi vì IANA đã điều chỉnh những mạng này là private và chỉ dùng trong các LAN độc lập. Hình 3.4: NAT động - MASQUERADE được dùng giống như là SNAT, nhưng hành động MASQUERADE thực hiện tính toán ít hơn. Vì mỗi lần hành động MASQUERADE bắt gặp (hit) một gói tin nó sẽ tự động kiểm tra địa chỉ IP để dùng thay vì thực hiện các thao tác như SNAT - chỉ dùng một địa chỉ IP được cấu hình đơn. MASQUERADE làm cho nó có thể thực hiện tốt với địa chỉ IP DHCP động mà ISP của bạn có thể cung cấp cho PPP,PPPoE hoặc SLIP các kết nối đến Internet. 3.5.2 Bảng lọc (filter) Bảng filter dùng để lọc các gói tin. Chúng ta có thể kiểm tra và lọc các gói tin tương ứng và lọc gói chúng theo cách mà chúng ta muốn. Đây là nơi chúng ta thật sự thực hiện hành động trên các gói tin và kiểm tra nội dung của gói tin và loại bỏ (DROP) hoặc chấp nhận(ACCEPT) chúng.Có 3 chuỗi luật được xây dựng sẵn trong bảng này là: - Input được áp dụng cho tất cả các gói tin đến Firewall.packet cho host được chuyển qua chain input. Chú ý rằng tất cả các gói tin đến máy này đều phải thông của chuỗi input, không cần biết đến giao tiếp mạng nào hay hướng đến của chúng. - FORWARD được áp dụng trên tất cả các gói tin sẽ đi qua Firewall (các gói tin không được phát sinh trên máy Firewall và có đích đến ngoài máy Firewall). Là packet được nhận bởi host mà nó được định cho một host khác thì nó sẽ được chuyển sang chain này. - OUTPUT được áp dụng cho tất cả các gói tin được phát sinh từ các tiến trình cục bộ tức là packet được tạo từ host và chuyển cho host khác thì được chuyển qua chain output. * Phần lớn tất cả các hành động áp dụng lên gói tin đều có thể được sử dụng trong chuỗi luật này tuy nhiên những hành động đã được nêu ở phần trên chỉ có thể được sử dụng trong bảng riêng của nó. 3.5.3 Bảng mangle Được sử dụng để thay đổi thông tin của gói tin. Ta có thể thay đổi nội dung gói tin và phần header của gói tin đó. Bảng này gồm 5 chuỗi luật được xây dựng sẵn. - PREOUTING: được sử dụng để thay đổi gói tin khi chúng vừa vào Firewall và trước khi chúng qua bước quyết định dẫn đường. - POSTROUTING: được sử dụng để thay đổi thông tin gói tin ngay sau khi tất cả các quyết định dẫn đường được thực hiện. - INPUT: được sử dụng để thay đổi thông tin gói tin sau khi chúng đã được dẫn tới bản thân máy cục bộ, nhưng trước khi được gửi tới tiến trình ứng dụng. - FORWARD: được sử dụng để thay đổi thông tin gói tin sau khi chúng đã sang bước quyết định dẫn đường đầu tiên, nhưng trước khi chúng chịu tác động của quyết định dẫn đường cuối cùng. - OUTPUT: được sử dụng để thay đổi thông tin của các gói tin được phát sinh cục bộ trước khi chúng được chuyển sang bước quyết định dẫn đường. Chúng ta không sử dụng bảng này để thực hiện lọc gói tin và cũng không thực hiện chuyển đổi địa chỉ NAT hay masquerading trong bảng này. Các hành động có thể được sử dụng trong bảng này bao gồm:TOS, TTL, MARK, chúng chỉ hợp lệ trong bảng mangle. - TOS: dùng xác lập một byte (8 - bit) TOS (Type of service) trong phần tiêu đề IP của gói tin. Nó không thực sự hoàn hảo trên thực tế nó không sử dụng trên internet và hầu hết các router không quan tâm đến giá trị trong trường này, và đôi khi chúng thực hiện sai trên thông tin chúng nhận được. - TTL: dùng thay đổi trường TTL (Time To Live) của gói tin tương kết. - MARK: dùng xác lập các giá trị cho trường điểm đặc biệt cho gói tin. Những điểm này được nhận diện bởi các chương trình iprouter2 để thực hiện dẫn đường khác nhau trên gói phụ thuộc vào mark mà chúng có. Chúng ta cũng có thể giới hạn băng thông và class based queuing trên những mark này. Kết Chương: Trong chương vừa rồi chúng ta đã tìm hiểu về bức tường lửa trong Linux. Và trong đó có một số Firewall được cấu hình và hoạt động trên nền console nhỏ và tiện dụng đó là Ipchains và Iptables. Ipchains có sẵn trong kernel Linux 2.2x và Linux 2.0x ipfwadm. Còn Netfilter/Iptables có thể cấu hình ở mức độ cao và có nhiều đặc tính hơn Ipchains. Bên cạnh đó Iptables cũng có nhiều ứng dụng, như là cài đặt, duy trì và kiểm tra IP Firewall, IP Nat hay IP Masquerading. Chương tiếp theo dành để nói về một số những ứng dụng đó, đó là dùng Iptables để làm IP Masquerading, IP Nat, và một số phần mềm ứng dụng. CHƯƠNG IV : ỨNG DỤNG Firewall 4.1 Sử dụng Iptable 4.1.1 Các file cấu hình - Để khởi động, ngừng hoặc khởi động lại Iptables có thể dùng lệnh sau: /etc/rc.d/init.d/Iptables start : khởi động iptables. /etc/rc.d/init.d/Iptables stop : ngừng iptables. /etc/rc.d/init.d/Iptables restart : khởi động lại iptables. - Để cấu hình Iptables thì dùng file : /etc/sysconfig/iptables. 4.1.2 Các thao tác trong toàn bộ chuỗi luật Một đặc trưng rất hữu dụng của Iptables là khả năng nhóm các nguyên tắc quan hệ với nhau vào cùng một chain, có thể đặt tên chain bất kỳ mà bạn muốn, nhưng để phân biệt với chain đã xây dựng sẵn nên đặt tên chain bằng chữ thường. Tên chain có thể lên tới 16 ký tự. - Tạo chain mới: dùng tuỳ chọn ‘-N’ hoặc ‘new-chain’. - Xoá chain: Dùng tuỳ chọn ‘-X’ hoặc ‘delete-chain’. Có một cặp giới hạn xoá chain: xoá rỗng và không là mục tiêu của bất kỳ nguyên tắc nào. Không thể xoá một trong ba chain được xây dựng sẵn. Nếu không chỉ rõ chain thì tất cả các chain do người dùng định nghĩa sẽ bị xoá nếu có thể. - Liệt kê một chain: Có thể liệt kê tất cả các nguyên tắc trong một chain bằng lệnh ‘-L’. ‘refcnt’ được liệt kê cho mỗi chain do người dùng định nghĩa có số của nguyên tắc có chain như là hành động của nó. Chain này phải rỗng trước khi có thể xoá chúng. Nếu tên chain bị bỏ qua thì tất cả chain được liệt kê ngay cả chain rỗng. * Có 3 tuỳ chọn có thể đi cùng với ‘-L’ ‘-n’ rất hữu dụng để ngăn chặn Iptables cố gắng tìm kiếm địa chỉ IP, nếu dùng DNS như mọi người thì sẽ là nguyên nhân lớn nếu DNS không được cài đặt đúng hoặc có lọc yêu cầu DNS ở ngoài. Nó cũng là nguyên nhân port TCP và UDP xuất ra một số khác hơn tên. ‘-v’ cho xem chi tiết tất cả các nguyên tắc như đếm số packet và số byte, so sanh TOS và giao diện, nếu không thì giá trị này bị bỏ qua. Số lượng packet và số lượng byte được hiển thị sử dụng các hậu tố ‘K’, ‘M’, ‘G’ mô tả cho 1000, 1000000, 1000000000. Sử dụng cờ ‘-x’ sẽ in ra tất cả các số. - Khởi động lại bộ đếm: Nó hữu dụng cho reset bộ đếm. Được thực hiện với lựa chọn ‘-Z’ hoặc ‘--zero’. Vấn đề với cách tiếp cận này là thỉnh thoảng cần biết giá trị bộ đếm tức thời trước khi reset lại bộ đếm. - Cài đặt chính sách: Chúng ta chú thích toàn bộ cái gì xảy ra khi một packet vào cuối một chain được xây dựng sẵn khi chúng ta thảo luận làm thế nào một packet đi qua các chain trước đó. Trong trường hợp này, chính sách của chain xác định số phận của packet. Chỉ những chain được xây dựng sẵn (INPUT, OUTPUT, FORWARD) mới có chính sách, bởi vì nếu packet rơi vào cuối chain của người dùng định nghĩa thì nó duyệt trở lại chain trước. Chính sách có thể là ACCEPT hoặc DROP. 4.1.3 luật đơn Đây là công việc hàng ngày của việc lọc packet, vận hành các nguyên tắc. Với các lệnh hay sử dụng là thêm (-A), chèn (-I), xoá (-D) và thay thế (-R) là mở rộng của các khái niệm này. Mỗi nguyên tắc là một tập hợp các điều kiện mà packet phải gặp, và phải làm gì nếu gặp chúng. Ví dụ nếu bạn muốn huỷ tất cả các packet ICMP đến từ địa chỉ 127.0.0.1 thì trong trường hợp này điều kiện giao thức phải là ICMP địa chỉ nguồn phải là 127.0.0.1 và hành động là ‘DROP’. Và câu lệnh thực hiện sẽ là # iptables –A INPUT –s 127.0.0.1 –p icmp –j DROP Thêm 1 nguyên tắc vào chain INPUT, một nguyên tắc chỉ định cho các packet từ 127.0.0.1 ‘-s 127.0.0.1’ với giao thức icmp ‘-p icmp’ và nhảy đến huỷ ‘-j DROP’ Chúng ta có thể xoá một nguyên tắc bằng một trong hai cách. Nếu chúng ta biết đó là luật duy nhất trong chain INPUT, chúng ta có thể dùng số của nguyên tắc để xoá. # iptables –D INPUT 1 : Xoá nguyên tắc 1 trong chain input Cách thứ hai là làm giống như lệnh thêm nguyên tắc nhưng thay –A thành –D. Lệnh này cho phép chúng ta xoá một nguyên tắc trong chain có nhiều nguyên tắc # iptables –D INPUT –s 127.0.0.1 –p icmp –j DROP cú pháp –D phải chính xác giống như các lựachọn –A (hoặc –I hoặc –R). Nếu có nhiều nguyên tắc giống nhau trong một chain thì nguyên tắc đầu tiên sẽ bị xoá. 4.1.4 Mô tả bộ lọc Chúng ta sử dụng ‘-p’ để chỉ định giao thức và ‘-s’ để chỉ định địa chỉ nguồn nhưng có các lựa chọn khác để chúng ta có thể sử dụng để chỉ định những đặc tính của packet. Sau đây là các tuỳ chọn cơ bản - Chỉ định IP nguồn (‘-s’ ‘--source’ hoặc ‘--src’) và IP đích (‘-d’ ‘--destination’ hoặc ‘--dst’) có thể sử dụng theo 4 cách: Thông thường là dùng tên đầy đủ ‘localhost’ hoặc ‘www.linuxhq.com’. Cách thứ 2 là chỉ rõ địa chỉ IP ‘127.0.0.1’. Cách 3 và cách 4 cho phép chỉ ra một nhóm địa chỉ IP ví dụ 199.95.207.0/24 hoặc 199.95.207.0/255.255.255.0. Cả hai đều chỉ định địa chỉ IP từ 199.95.207.0 tới 199.95.207.255. Trong trường hợp đặc biệt để chỉ định địa chỉ IP ‘/0’ chúng ta dùng câu lệnh: # iptables -A input -s -j DENY - Chỉ định ngược: Có nhiều cờ, bao gồm ‘-s’ hoặc ‘-d’ có tham số ‘!’ đặt trước nó để chỉ định không đúng với địa chỉ đã cho. Ví dụ ‘-s !localhost’ chỉ định các packet không đến từ máy cục bộ. - Chỉ định giao thức: Giao thức có thể chỉ định với cờ ‘-p’. Giao thức cũng có số hiệu hoặc tên (TCP, UDP, ICMP). Tên giao thức có thể là chữ hoa hay chữ thường. Giao thức có thể chỉ định dấu ‘!’ trước nó. - Chỉ định một giao diện: Tuỳ chọn ‘-i’ (hoặc ‘--in-interface’) và ‘-o’ (hoặc ‘--out-interface’ để chỉ tên một giao diện được thoả. Một giao diện là thiết bị vật lý mà packet đi vào ‘-i’ hoặc đi ra ‘-o’. Có thể dùng lệnh ‘ifconfig’ để liệt kê các giao diện đang hoạt động . * Các packet duyệt qua chain INPUT nghĩa là không phải giao diện đi ra, vì vậy bất kỳ nguyên tắc sử dụng ‘-o’ trong chain này sẽ không bao giờ được thoả. Tương tự các packet duyệt qua chain OUTPUT nghĩa là giao diện đi vào, vì vậy bất kỳ nguyên tắc sử dụng ‘-i’ trong chain này sẽ không bao giờ được thoả. Chỉ có các packet chuyển đến chain forward có cả 2 giao diện đi vào và đi ra. * Hoàn toàn hợp lý để chỉ định giao diện không tồn tại, nguyên tắc sẽ không thoả mãn bất kỳ cho đến khi giao diện được đưa ra. Điều này cực kỳ hữu dụng cho liên kết gọi bằng cách quay số PPP (Point to Point Protocol) dùng giao diện ppp0 và các liên kết tương tự. * Trong trường hợp đặc biệt, một tên giao diện ở cuối với dấu cộng ‘+’ sẽ thoả mãn với tất cả giao diện (dù có tồn tại hay không) mà nó bắt đầu với chuỗi đó. Ví dụ chỉ định một nguyên tắc đúng với tất cả giao diện ppp thì tuỳ chọn ‘-i ppp+ được sử dụng. * Tên giao diện có thể được đặt trước bởi dấu ‘!’ để packet không thoả với giao diện chỉ định. - Chỉ định phân đoạn packet: Một vài packet quá lớn để đưa lên đường truyền một lần, nên packet được chia thành nhiều mảnh nhỏ hơn và gửi đi như là nhiều packet . Ở nơi nhận nó sẽ gép lại các mảnh này để khôi phục lại toàn bộ packet. * Vấn đề với phân mảnh là sau khi header của IP là một phần của bên trong packet. Nếu nhìn phía trong packet đại diện cho các header giao thức (TCP, UDP, ICMP) thì không thể biết, vì các header chỉ chứa trong mảnh đầu tiên. * Nếu bạn đang theo dõi dấu vết sự kết nối hoặc NAT thì đừng lo lắng về sự phân mảnh vì tất cả các mảnh được trộn lại với nhau trước khi chúng đến bộ lọc. * Điều quan trọng là phải hiểu sự phân mảnh như thế nào để xem xét bởi nguyên tắc lọc. Bất kỳ một nguyên tắc lọc hỏi những thông tin mà chúng có sẽ không thoả. Điều này phân mảnh đầu tiên được xem như bất kỳ packet khác, các phân mảnh thứ 2 trở về sau thì không thể. Thí dụ: Một nguyên tắc –p TCP –sport www sẽ không bao giờ thoả phân mảnh nào khác hơn phân mảnh đầu tiên kể cả nguyên tắc ngược lại –p TCP –sport !www. * Tuy nhiên, bạn chỉ có thể chỉ định một nguyên tắc đặc biệt cho các phân mảnh thứ 2 trở về sau sử dụng cờ ‘-f’ hoặc ‘--fragment’. Nó cũng hợp lý để chỉ định rằng một nguyên tắc không chấp nhận các mảnh thứ 2 trở đi bởi dấu ‘!’ đi trước. * Thường được chú ý như một sự an toàn cho các phân mảnh thứ 2 trở đi để đi qua, từ khi bộ lọc ảnh hưởng đến phân mảnh đầu tiên và theo đó ngăn chặn lắp ghép trên host đích. * Các packet khác thường (chẳng hạn các packet TCP, UDP hoặc ICMP quá ngắn) sẽ bị huỷ bỏ khi lọc. - Sự mở rộng đến iptables: Iptables có khả năng mở rộng, nghĩa là cả kernel và công cụ iptables có thể mở rộng để cung cấp đặc tính mới. - Sự mở rộng TCP: TCP được tự động tải nếu ‘--protocol tcp’ được chỉ định và không thoả những cái khác. Nó cung cấp những lựa chọn sau (không thoả với việc phân mảnh). * --tcp-flags: theo sau bởi tuỳ chọn ‘!’, tiếp theo là 2 chuỗi cờ, cho phép lọc trên cờ TCP chỉ dịnh. Chuỗi đầu tiên của cờ là mặt nạ: Một danh sách cờ muốn kiểm tra. Chuỗi thứ hai của cờ nói cái nào được thi hành. Ví dụ # iptables -A INPUT --protocol tcp --tcp-flags ALL,SYN,ACK –j DENY Chỉ định này là tất cả các cờ sẽ kiểm tra (‘ALL’ đồng nghĩa với ‘SYN, ACK, FIN, RST, URG, PSH’), nhưng chỉ SYN và ACK được thi hành. Có tham số ‘NONE’ nghĩa là không có cờ. * --syn đi trước tuỳ chọn này là ‘!’, điều này là viết ngắn cho ‘--tcp-flags SYN, RST, ACK, SYN’ * --source-port: theo sau tuỳ chọn ‘!’, là một port đơn hoặc một dãy port. Port có thể là tên port hoặc số. Dãy port hoặc là 2 tên port cách nhau bởi dấu ‘-’ hoặc chỉ định lớn hơn hoặc bằng cho một port, hoặc nhỏ hơn hoặc bằng cho một port. * --sport đồng nghĩa với ‘--source-port’ chỉ định cổng nguồn * --destination-port và –dport là chỉ định cổng đích, chỉ định lớn hơn hoặc bằng cho một cổng hoặc nhỏ hơn hoặc bằng. * --tcp-option: Theo sau tuỳ chọn ‘!’ và một số, thoả một packet với tuỳ chọn tcp bằng số đó. Một packet không có header TCP phức tạp sẽ bị huỷ tự động nếu cố gắng làm kiểm tra tuỳ chọn TCP. - Mở rộng cờ TCP: Nó thỉnh thoảng hữu dụng để cho phép một kết nói TCP trực tiếp, nhưng không ngược lại. Ví dụ: Muốn cho phép một kết nối đến server www bên ngoài, nhưng không có sự kết nối Server này. * Sự tiếp cận mà không hiểu sự ngăn chặn các packet TCP đến từ Server. Thật không may sự kết nối TCP đòi hỏi các packet làm việc cả 2 hướng. * Giải pháp là chỉ khoá những packet được sử dụng cho yêu cầu của kết nối. Những packet này được gọi là packet SYN, bởi chỉ không cho phép các packet này, có thể ngừng sự cố gắng kết nối trên đường đi của chúng. * Cờ ‘--syn’ được dùng cho mục đích này: nó chỉ hợp lệ đối với những nguyên tắc chỉ định giao thức TCP. Ví dụ để chỉ rõ kết nối tạm thời từ 192.168.6.1: -p TCP –s 192.168.1.1 –syn * Cờ này có thể đảo ngược với dấu ‘!’ phía trước, điều này có nghĩa là mọi packet trừ những packet khởi tạo. - Mở rộng UDP: Mở rộng này sẽ tự động được tải nếu ‘--protocol udp’ được chỉ định, và không hợp lệ cho các chỉ định khác. Nó cung cấp tuỳ chọn ‘--source-port’, ‘--destination-port’ và ‘--dport’ giống như TCP ở trên. - Mở rộng ICMP: Mở rộng này tự động tải về nếu ‘--protocol icmp’ được chỉ định, và không thoả với các chỉ định khác. Nó cung cấp một tuỳ chọn mới: * --icmp-type :theo sau tuỳ chọn ‘!’ tiếp theo là tên kiểu hoặc kiểu số hoặc kiểu số và mã được cách bởi ‘/’. ví dụ --icmp-type network-redirect, --icmp-type 8 hoặc --icmp-type 8/0. Để biết được danh sách các kiểu icmp hợp lệ dùng câu lệnh ‘-p icmp --help’. - Các mở rộng khác: Có 2 mở rộng khác trong netfilter nếu được cài đặt, có thể gọi lên với tuỳ chọn ‘-m’ * mac: Thành phần này được chỉ định tường minh với ‘-m mac’ hoặc ‘--match mac’. dùng trong kernel 2.3, 2.4, 2.5, 2.6. Nó được sử dụng để thoả các địa chỉ card mạng nguồn của packet đi vào. Vì vậy, nó chỉ có tác dụng cho các packet duyệt qua chain PREROUTING, INPUT và FORWARD. Nó chỉ có một tuỳ chọn: --mac-source: Nó có thể theo sau tuỳ chọn ‘!’, tiếp đó là địa chỉ card mạng với hệ số 16 được cách nhau bởi dấu hai chấm ‘:’. Ví dụ: iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01 * limit: Thành phần này phải được chỉ định tường minh với ‘--m limit’ hoặc ‘--match limit’. Nó được dùng để giới hạn tốc độ thoả, như là ngăn chặn những thông báo nhật ký. Nó chỉ thoả cho số lần trên giây. Có 2 tham số tuỳ chọn. --limit: tốc độ chạm mức đỉnh tính bằng số packet/s (giây), m(phút), h (giờ), d (ngày) --limit-burst: Mức đỉnh, tính bằng số packet. Ví dụ: # iptables -N test # iptables -A test -m limit --limit-burst 5 --limit 2/m -j RETURN # iptables -A test -j DROP # iptables -A INPUT -i lo -p icmp --icmp-type echo-request -j test Đầu tiên lệnh iptables -N test để tạo một chain mới tên là test (table mặc định là filter). Tùy chọn -A test (append) để thêm luật mới vào chain test. Đối với chain test, giới hạn limit-burst ở mức 5 gói, limit là 2 gói/phút, nếu thỏa luật sẽ trở về (RETURN) còn không sẽ bị DROP. Sau đó nối thêm chain test vào chain INPUT với tùy chọn card mạng vào là lo, giao thức icmp, loại icmp là echo-request. Luật này sẽ giới hạn các gói PING tới lo là 2 gói/phút sau khi đã đạt tới 5 gói. 4.1.5 Mô tả hành động - Bây giờ chúng ta biết những gì cần kiểm tra mà chúng ta có thể làm trên packet. Chúng ta cần cách nói những gì làm với packet thoả với kiểm tra của chúng ta được gọi là hành động của các luật. - Có hai hành động đơn giản được xây dựng sẵn là DROP và ACCEPT. Nếu một luật thoả một packet và hành động của nó là một trong 2 hành động này thì không có luật nào được tham khảo: số phận packet đã được quyết định. - Có 2 kiểu hành động khác được xây dựng đó là sự mở rộng và chain do người dùng định nghĩa. 4.1.5.1 Chuỗi luật do người dùng định nghĩa một mặt mạnh của Iptables thừa hưởng từ Ipchains là khả năng cho người dùng tạo các chain mới, ngoài các chain đã xây dựng sẵn (INPUT, FORWARD, và OUTPUT). Quy ước các chain do người dùng định nghĩa là chữ thường để phân biệt với các chain có sẵn. Khi một packet thoả một hành động của luật do người dùng định nghĩa chain. Packet bắt đầu đi qua các nguyên tắc trong chain do người dùng định nghĩa. Nếu chain đó không quyết định số phận của packet. Sau đó nó chuyển về chain trước đó và chuyển đến luật kế tiếp trong chain hiện hành. Chain do người dùng định nghĩa có thể nhảy đến một chain khác do người dùng định nghĩa, nhưng không làm vòng lặp. Packet sẽ bị huỷ nếu chúng tìm thấy vòng lặp. 4.1.5.2 Sự mở rộng đến Iptables Một kiểu khác của hành động là sự mở rộng. Sự mở rộng của hành động là một thành phần của kernel và mở rộng tuỳ chọn tới Iptables để cung cấp cho dòng lệnh lựa chọn mới. - LOG: thành phần này cung cấp kernel ghi nhật ký những packet thoả. Nó cung cấp thêm các lựa chọn: --log-level: Theo sau bởi một số chỉ cấp độ hoặc tên. Tên hợp lệ ‘debug’, ‘info’, ‘notice’, warning’, ‘err’, ‘crit’, ‘alert’ và ‘emerge’, không phân biệt chữ hoa hay chữ thường tương ứng với số từ 7 đến 0. --log-prefix: Theo sau một chuỗi lên đến 14 ký tự, thông báo này được gửi đi bắt đầu của thông báo nhật ký, để cho phép nó nhận dạng duy nhất. Thành phần này đặc biệt hữu dụng sau hành động limit, vì vậy không có việc ghi nhật ký ào ạt. - REJECT: Thành phần này ảnh hưởng giống như DROP, ngoại trừ người gửi đã gửi một ICMP thông báo lỗi ‘port unreachable’. Ghi chú rằng thông báo lỗi ICMP không gửi nếu * Packet được lọc là thông báo lỗi ICMP trong vị trí đầu tiên, hoặc một vài kiểu ICMP không biết. * Packet được lọc là header không phân mảnh. * Gửi quá nhiều thông báo lỗi ICMP tới đích 4.1.5.3 Hành động đặc biệt được xây dựng sẵn Có 2 hành động được xây dựng sẵn là RETURN và QUEUE - RETURN có ảnh hưởng giống như việc rơi xuống cuối của chain: cho một luật trong chain được xây dựng sẵn, chính sách của chain được thực thi. Cho một luật trong chain do người dùng định nghĩa, nó tiếp tục duyệt trong chain trước, ngay sau luật đã chuyển đến chain này. - QUEUE là một hành động đặc biệt, nơi mà các packet xếp hàng chờ xử lý. Nếu không có một vài điều gì đó chờ packet (ví dụ chương trình chưa ghi xong) thì packet sẽ bị huỷ. 4.2 các ứng dụng Trong phần này chúng ta sẽ tìm hiểu 2 ứng dụng đó là ứng dụng Iptables làm IP Masquerading, IP NAT. * Các yêu cầu đối với ứng dụng trong Linux 2.4.x - Bất kỳ phần cứng nào phù hợp với Linux - Dùng kernel 2.4.x từ www.kernel.org - Chương trình iptables có phiên bản 1.2.4 hoặc mới hơn - Tiện ích tải modules và Kernel, tốt nhất có phiên bản 2.1.121 hoặc cao hơn tại website ftp://ftp.kernel.org/pub/linux/utils/kernel/modutils - Mạng TCP/IP cấu hình thích hợp và đang chạy trên máy Linux - Có khả năng kết nối với Internet vủa máy ‘Linux#1’ - Cấu hình, biên dịch, cài đặt Kernel của Linux phù hợp để chạy IP NAT, IP Masquerading. * Gán địa chỉ riêng cho mạng LAN bên trong - Tất cả các máy bên trong không có địa chỉ IP thật trên Internet, phải chỉ định địa chỉ cho những máy này không xung đột với bất kỳ địa chỉ Internet nào. - Theo RFC 1918 chỉ định những địa chỉ cho các mạng riêng. Có 3 vùng địa chỉ dành riêng mà không hiện diện trên Internet. 10.0.0.0 - 10.255.255.255 172.16.0.0 - 172.31.255.255 192.168.0.0 - 192.168.255.255 * Kiểm tra các modul cần thiết - Biên dịch kernel mới nếu cần, chú ý đến sự an toàn khi bổ sung IP NAT, IP Masquerading, chúng là một Gateway lên Internet. - Kiểm tra Kernel tồn tại cho khả năng cung cấp cho IP NAT, IP Masquerading. Dùng lệnh ‘uname -a’ để xem. - Để chắc rằng phiên bản của Linux sẵn sàng cho việc chạy các ứng dụng thì có thể kiểm tra bằng cách sau: Chạy lệnh ‘ls /proc/sys/net/ipv4’ khi đã login vào Linux. Những thành phần sau được hiện diện ip_dynaddr ip_forward Chạy lệnh ‘/sbin/lsmod’ và ‘ls /proc/net/’ + nếu IP Masquerading được biên dịch tĩnh vào kernel. Những thành phần sau được hiện diện ip_masquerade; ip_conntrack; ip_tables_names + với IP NAT và IP Firewall sẽ thấy có những thành phần sau: ip_tables; ip_conntrack; iptable_filter; iptable_mangle; iptable_nat; ipt_LOG; ipt_limit; ipt_state Nếu Kernel dùng iptables qua việc tải modules khi chạy thì dùng lệnh trên thì sẽ không thấy thành phần trên, bởi vì nó chưa được tải. Dùng lệnh ‘ls /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/’, có thể sẽ thấy những file: ip_conntrack.o, ip_conntrack_ftp.o, ip_conntrack_irc.o, ip_nat_ftp.o, ip_nat_irc.o, ip_tables.o, ipt_MASQUERADE.o,iptable_nat.o, iptable_mangle.o, iptable_filter.o, ipt_REJECT.o,ipt_tcpmss.o Nếu thấy những file này, iptables được biên dịch sử dụng tại modules khi chạy, thì hệ thống đã sẵn sàng cho chức năng IP NAT, IP Masquerading. 4.2.1 Ứng dụng Iptables làm masquerading Trong ứng dụng này dùng Iptables trong máy chủ Linux làm IP Masquerading để chia sẻ thông tin truy cập Internet cho một mạng nội bộ bên trong qua một đường kết nối dial up kết nối đến Internet. Ứng dụng khi mạng nội bộ không có địa chỉ IP thật trên Internet. IP Masquerading là một dạng của NAT. 4.2.1.1 Cách làm việc của IP Masquerading Hình 3.1 Mô hình kết nối máy Linux và Anybox Như hình vẽ, một máy Linux được cài đặt IP Masquerading trên là ‘Linux#1’ và được kết nối đến Internet qua đường kết nối dial up (ppp) hoặc Ethernet…Được gán một địa chỉ thật trên Internet là 111.222.121.212 Nó cũng có một giao diện mạng khác, có thể kết nối bằng đường dial up (ppp) hoặc Ethernet… Hệ thống thứ 2 không cần Linux đó là ‘Any box’, kết nối với máy ‘Linux#1’ để truy cập Internet qua máy ‘Linux#1’. Máy này không có địa chỉ IP thật trên Internet. Với cấu hình IP Masquerading và định tuyến thích hợp thì máy Any box có thể tương tác với Internet như là nó kết nối trực tiếp tới Internet. Máy ‘Any box’ kết nối với máy ‘Linux#1’ qua ppp hoặc Ethernet, đồng thời gateway của nó là máy ‘Linux#1’. Khi packet đến ‘Linux#1’ từ ‘Any box’, nó gán số hiệu cổng nguồn mới và địa chỉ IP của chính nó vào header của packet, lưu lại thông tin header của packet nguyên gốc Masquerading Server sau đó gói packet đã thay đổi lên giao diện ppp/Ethernet đến Internet. Khi packet đáp lại từ Internet vào ‘Linux#1’, nó sẽ kiểm tra số hiệu cổng là một trong số các cổng được gán ở trên, sau đó Masquerading Server lấy thông tin header cũ đã lưu trước đó đặt lại vào header packet và gửi packet trở lại ‘Any box’. Máy gọi packet sẽ không biết những thay đổi này. 4.2.1.2 File cấu hình cho IP Masquerading Vào lúc này kernel và các gói phần mềm khác đã được cài đặt. Tất cả các địa chỉ mạng, Gateway và các địa chỉ DNS đã được cấu hình trên Linux Server Masquerading. Chú ý: File script/etc/rc.d/rc.local sẽ gọi file script /etc/rc.d/rc.Firewall sau mỗi lần khởi động hệ thống. Script sẽ tải tất cả những modules cần thiết cho IP Masquerading. Sau đây là file cấu hình Masquerading đơn giản: #!/bin/sh # rc.Firewall-2.4 FWVER=0.74 # Khởi tạo IP Masquerading đơn giản cho Kernel 2.4.x # Sử dụng iptables. echo -e "\n\nLoading simple rc.Firewall version $FWVER..\n" # Vị trí của chuong trình iptables và các modules IPTABLES=/sbin/iptables DEPMOD=/sbin/depmod MODPROBE=/sbin/modprobe # Ðặt giao diện bên trong(INTERNAL) và bên ngoài(EXTERNAL) của mạng # Mỗi mạng IP Masquerading cần có ít nhất một mạng bên ngoài và một mạng # bên trong # Trong thí dụ này, "ppp0" là bên ngoài và "eth0" là bên trong EXTIF="ppp0" INTIF="eth0" echo " External Interface: $EXTIF" echo " Internal Interface: $INTIF" #= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = #= = No editing beyond this line is required for initial MASQ testing = = echo -en " loading modules: " # Cần kiểm tra tất cả các modules cần thiết echo " - Verifying that all kernel modules are ok" $DEPMOD -a echo "--------------------------------------------------------------------- -" # # Tải module “iptables” vào kernel # echo -en "ip_tables, " $MODPROBE ip_tables # Tải module “ip_conntrack” vào kernel # Module này theo dõi trạng thái của kết nối # echo -en "ip_conntrack, " $MODPROBE ip_conntrack # Tải module theo dõi trạng thái kết nối của dịch vụ FTP # echo -en "ip_conntrack_ftp, " $MODPROBE ip_conntrack_ftp # Tải module theo dõi trạng thái kết nối của dịch vụ IRC # echo -en "ip_conntrack_irc, " $MODPROBE ip_conntrack_irc # Tải module dùng cho chức năng NAT # echo -en "iptable_nat, " $MODPROBE iptable_nat # Tải module dùng cho chức năng NAT của dịch vụ FTP # echo -en "ip_nat_ftp, " $MODPROBE ip_nat_ftp # Tải module dùng cho chức năng NAT của dịch vụ IRC # #echo -e "ip_nat_irc" #$MODPROBE ip_nat_irc echo "--------------------------------------------------------------------- -" echo -e " Done loading modules.\n" #Chú ý : Cho phép chuyển tiếp IP # echo " Enabling forwarding.." echo "1" > /proc/sys/net/ipv4/ip_forward # Cho phép sử dụng địa chỉ động từ SLIP, PPP, hoặc DHCP # echo " Enabling DynamicAddr.." echo "1" > /proc/sys/net/ipv4/ip_dynaddr # Cho phép chuyển tiếp IP và Masquerading đơn giản # Ghi chú: IP Masquerading là một dạng SNAT. # # Trong thí dụ theo sau : cho địa chỉ mạng LAN nội bộ là # 192.168.0.x , subnet mask là 255.255.255.0 # kết nối đến Internet trên giao diện “ppp0” # Thí dụ này cho phép các máy bên trong Masquerading đi ra, nhưng # không cho phép khởi tạo đi vào từ bên ngoài # # Xóa bất kỳ cấu hình trước # echo " Clearing any existing rules and setting default policy.." $IPTABLES -P INPUT ACCEPT $IPTABLES -F INPUT $IPTABLES -P OUTPUT ACCEPT $IPTABLES -F OUTPUT $IPTABLES -P FORWARD DROP $IPTABLES -F FORWARD $IPTABLES -t nat -F echo " FWD: Allow all connections OUT and only existing and related ones IN" $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT $IPTABLES -A FORWARD -j LOG echo " Enabling SNAT (MASQUERADE) functionality on $EXTIF" $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE echo -e "\nrc.Firewall-2.4 v$FWVER done.\n" 4.2.1.3 Cấu hình cho các máy nội bộ truy cập Internet qua IP Masquerading Bên cạnh việc đặt địa chỉ IP thích hợp cho các máy nội bộ bên trong IP Masquerading (gán IP tĩnh hoặc IP động), đặt địa chỉ IP Gateway thích hợp của Server Linux Masquerading, địa chỉ DNS server. Cấu hình Microsoft Windows 2000 : Sau khi đã cài card mạng thích hợp vào + Trên màn hình chọn ‘My Network Places’/‘properties’ /chọn card mạng thích hợp /‘properties’/chọn ‘Internet protool(TCP/IP)’/‘properties’/‘Use the following IP address’ à đặt địa chỉ IP thích hợp 192.168.0.x (1<x<255), trừ các địa chỉ IP đã sử dụng, subnet mask 255.255.255.0 và Default gateway 192.168.0.1 + Chọn ‘Use the following IP address’ à cho vào thông tin DNS thích hợp. + Chọn ‘OK’ hai lần và khởi động lại máy. + Dùng lệnh ‘ping’ đến địa chỉ 192.168.0.1 xem có kết nối được với máy Linux server Masquerading. 4.2.1.4 Kiểm tra IP Masquerading - Bước 1: Kiểm tra kết nối cục bộ của các máy nội bộ. ----------------------------------- masq-client# ping 192.168.0.10 PING 192.168.0.10 (192.168.0.10): 56 data bytes 64 bytes from 192.168.0.10: icmp_seq=0 ttl=255 time=0.8 ms 64 bytes from 192.168.0.10: icmp_seq=1 ttl=255 time=0.4 ms 64 bytes from 192.168.0.10: icmp_seq=2 ttl=255 time=0.4 ms 64 bytes from 192.168.0.10: icmp_seq=3 ttl=255 time=0.5 ms --- 192.168.0.10 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.5/0.8 ms ------------------------------------ - Bước 2: Kiểm tra kết nối máy cục bộ đến Server Masquerading. ------------------------------------ masq-client# ping 192.168.0.1 PING 192.168.0.1 (192.168.0.1): 56 data bytes 64 bytes from 192.168.0.1: icmp_seq=0 ttl=255 time=0.8 ms 64 bytes from 192.168.0.1: icmp_seq=1 ttl=255 time=0.4 ms 64 bytes from 192.168.0.1: icmp_seq=2 ttl=255 time=0.4 ms 64 bytes from 192.168.0.1: icmp_seq=3 ttl=255 time=0.5 ms --- 192.168.0.1 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.5/0.8 ms ----- ------------------------------- - Bước 3: Kiểm tra kết nối cục bộ của Server IP Masquerading. -------------------------------------- masq-server# ping 192.168.0.1 PING 192.168.0.1 (192.168.0.1): 56 data bytes 64 bytes from 192.168.0.1: icmp_seq=0 ttl=255 time=0.8 ms 64 bytes from 192.168.0.1: icmp_seq=1 ttl=255 time=0.4 ms 64 bytes from 192.168.0.1: icmp_seq=2 ttl=255 time=0.4 ms 64 bytes from 192.168.0.1: icmp_seq=3 ttl=255 time=0.5 ms ^C --- 192.168.0.1 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.5/0.8 ms --------------------------------------- - Bước 4: Kiểm tra kết nối server IP Masquerading đến máy cục bộ. ------------------------------------ masq-server# ping 192.168.0.10 PING 192.168.0.10 (192.168.0.10): 56 data bytes 64 bytes from 192.168.0.10: icmp_seq=0 ttl=255 time=0.8 ms 64 bytes from 192.168.0.10: icmp_seq=1 ttl=255 time=0.4 ms 64 bytes from 192.168.0.10: icmp_seq=2 ttl=255 time=0.4 ms 64 bytes from 192.168.0.10: icmp_seq=3 ttl=255 time=0.5 ms ^C --- 192.168.0.10 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.5/0.8 ms ------------------------------------ - Bước 5: Kiểm tra kết nối giao diện với bên ngoài của server Masquerading. ------------------------------------- masq-server# ping 12.13.14.15 PING 12.13.14.15 (12.13.14.15): 56 data bytes 64 bytes from 12.13.14.15: icmp_seq=0 ttl=255 time=0.8 ms 64 bytes from 12.13.14.15: icmp_seq=1 ttl=255 time=0.4 ms 64 bytes from 12.13.14.15: icmp_seq=2 ttl=255 time=0.4 ms 64 bytes from 12.13.14.15: icmp_seq=3 ttl=255 time=0.5 ms ^C --- 12.13.14.15 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.5/0.8 ms ------------------------------------- - Bước 6: Kiểm tra kết nối máy nội bộ đến giao diện bên ngoài của server Masquerading. ------------------------------------- masq-client# ping 12.13.14.15 PING 12.13.14.15 (12.13.14.15): 56 data bytes 64 bytes from 12.13.14.15: icmp_seq=0 ttl=255 time=0.8 ms 64 bytes from 12.13.14.15: icmp_seq=1 ttl=255 time=0.4 ms 64 bytes from 12.13.14.15: icmp_seq=2 ttl=255 time=0.4 ms 64 bytes from 12.13.14.15: icmp_seq=3 ttl=255 time=0.5 ms ^C --- 12.13.14.15 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.5/0.8 ms ------------------------------------- 4.2.2 Ứng dụng IPTABLES làm NAT Trong ứng dụng này dùng iptables trên máy chủ Linux làm IP NAT cho phép một mạng bên ngoài truy cập vào mạng nội bộ và cho phép mạng nội bộ truy cập mạng bên ngoài qua IP NAT. - Khi một máy bên trong mạng nội bộ truy cập vào tài nguyên bên ngoài thì packet được gửi đến IP NAT, IP NAT sẽ thay đổi địa chỉ nguồn của packet bằng một địa chỉ hợp lệ trong dãy địa chỉ được cấp trên Internet nếu còn. - Khi một máy của mạng bên ngoài truy cập tài nguyên của mạng cục bộ qua IP NAT, khi packet đến IP NAT nó sẽ thay đổi địa chỉ đích của packet bằng một địa chỉ của mạng nội bộ. Hình 3.2 Mô hình kết nối máy Linux với mạng nội bộ và Internet 4.2.2.1 Các chain do người dùng định nghĩa - ‘bad_tcp_packet’: chứa các nguyên tắc xem xét những packet TCP đi vào có header dị hình. Loại những packet có bit SYN và ACK được bật nhưng được xem là packet đầu của kết nối mới, loại những packet không có bit SYN được bắt đầu nhưng được xem là packet đầu của kết nối mới. - ‘allowed’: Chứa các nguyên tắc xem xét những packet TCP có bit SYN được bắt đầu và được xem là packet đầu của kết nối mới thì được phép đi qua. Cho phép những packet đến từ những kết nối đã được thiết lập (ESTABLISHED) hoặc là quan hệ với một kết nối đã thiết lập (RELATED) để thông tin truyền được trên hai hướng. Cuối cùng là huỷ tất cả các trường hợp còn lại. - ‘tcp_packets’: Chỉ định những số hiệu cổng nào được phép sử dụng trên Firewall từ Internet (xét số hiệu cổng và trạng thái của packet). - ‘udp_packets’: Chứa các nguyên tắc xem xét những packet UDP có số hiệu cổng nào được chấp nhận trên Firewall. Internet (chỉ xét số hiệu cổng, không xét trạng thái của packet). - ‘icmp_packets’: Chứa các nguyên tắc xem xét những packet ICMP có kiểu nào được chấp nhận. 4.2.2.2 Cấu trúc file cấu hình và file cấu hình - configuration: Phần cấu hình chung cho script này. Phần này bao gồm định nghĩa các giao diện, địa chỉ IP của các giao diện và vị trí của chương trình iptables. - modules: Tải vào kernel những modules cần thiết cho ứng dụng - filtertr table: * proc : Cấu hình những đòi hỏi trong hệ thống file proc. * set policies : Đặt những chính sách mặc định cho các chain hệ thống. * create userspecified chains : Tạo các chain do người dùng định nghĩa. * create content in userspecified chains : Tạo nội dung cho các chain do người dùng định nghĩa. * INPUT chain : các nguyên tắc cho chain INPUT. * FORWARD chain : các nguyên tắc cho chain FORWARD. * OUTPUT chain : các nguyên tắc cho chain OUTPUT. - nat table : * PREROUTING chain : các nguyên tắc cho chain PREROUTING. * POSTROUTING chain : các nguyên tắc cho chain POSTROUTING. - Chú ý : file script /etc/rc.d/rc.local sẽ gọi file script /etc/rc.d/rc.Firewall_nat sau mỗi lần khởi động hệ thống Script sẽ tải tất cả những modules cần thiết cho IP NAT. - Sau đây là file cấu hình cho IP NAT(SNAT và DNAT). #!/bin/sh # rc.Firewall_nat – Kh.i t.o IP NAT (SNAT - DNAT) # cho Kernel Linux 2.4.x s. d.ng iptables # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1. Configuration options. # 1.1 Cấu hình giao diện với Internet. INET_IP="203.162.76.1" INET_IFACE="eth0" INET_BROADCAST="203.162.76.255" # 1.2 Cấu hình giao diện cục bộ LAN_IP="192.168.0.1" LAN_IP_RANGE="192.168.0.0/24" LAN_IFACE="eth1" # 1.4 Cấu hình giao diện Localhost. LO_IFACE="lo" LO_IP="127.0.0.1" # 1.5 Vị trí chương trình iptables. IPTABLES="/usr/sbin/iptables" # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 2. Tải những Module cần thiết. /sbin/depmod -a /sbin/modprobe ip_tables /sbin/modprobe ip_conntrack /sbin/modprobe iptable_filter /sbin/modprobe iptable_mangle /sbin/modprobe iptable_nat /sbin/modprobe ipt_LOG /sbin/modprobe ipt_limit /sbin/modprobe ipt_state # # # # # # # # # # # # # # # # ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 3. Cấu hình cần thiết cho hệ thống file proc. echo "1" > /proc/sys/net/ipv4/ip_forward # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 4. Cài đặt các nguyên tắc # 4.1 Filter table # 4.1.1 Cài đặt các chính sách mặc định cho các chain hệ thống $IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT DROP $IPTABLES -P FORWARD DROP # 4.1.2 T.o các chain do ngu.i dùng ð.nh nghia # Tạo chain bad_ tcp_packets $IPTABLES -N bad_tcp_packets # Tạo chain allowed, tcp_packets, udp_packets, icmp_packets # $IPTABLES -N allowed $IPTABLES -N tcp_packets $IPTABLES -N udp_packets $IPTABLES -N icmp_packets # 4.1.3 Tạo nội dung chain do người dùng định nghĩa # bad_tcp_packets chain # $IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK \ -m state --state NEW -j REJECT --reject-with tcp-reset $IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG \ --log-prefix "New not syn:" $IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP # # allowed chain # $IPTABLES -A allowed -p TCP --syn -j ACCEPT $IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A allowed -p TCP -j DROP # # TCP rules # $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 21 -j allowed $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 22 -j allowed $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 113 -j allowed # # UDP ports # $IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 2074 -j ACCEPT $IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 4000 -j ACCEPT # # ICMP rules # $IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT $IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT # # 4.1.4 INPUT chain # # Các packet dị dạng không muốn. # $IPTABLES -A INPUT -p tcp -j bad_tcp_packets # # Các nguyên tắc cho mạng không là phần của Internet # $IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT $IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT $IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT $IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPT # # Nguyên tắc cho các packet đến từ Internet. # $IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED \ -j ACCEPT $IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets $IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udp_packets $IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets # # Ghi lại các packet không khớp với các nguyên tắc trên. # $IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \ --log-level DEBUG --log-prefix "IPT INPUT packet died: " # # 4.1.5 FORWARD chain # Các packet dị dạng không muốn. # $IPTABLES -A FORWARD -p tcp -j bad_tcp_packets $IPTABLES -A FORWARD –p TCP -i $INET_IFACE –o $LAN_IFACE -j ACCEPT # # Chấp nhận các packet chúng ta muốn forward # $IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # # Ghi lại các packet không khớp với nguyên tắc trên. # $IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG\ --log-level DEBUG --log-prefix "IPT FORWARD packet died: " # # 4.1.6 OUTPUT chain # # # Các packet dị dạng không muốn # $IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets # # Các nguyên tắc OUTPUT được phép. # $IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT $IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT $IPTABLES -A OUTPUT -p ALL -s $INET_IP -j ACCEPT # # Ghi lại các packet không khớp với nguyên tắc trên. # $IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG\ --log-level DEBUG --log-prefix "IPT OUTPUT packet died: " # # # # # # # 4.2 nat table # # 4.2.4 PREROUTING chain – cho phép DNAT # $IPTABLES -t nat -A PREROUTING –p TCP -i $INET_IFACE -d $INET_IP – dport 23 –j DNAT –to-destination 192.168.0.254 # # 4.2.5 POSTROUTING chain # # # Cho phép SNAT # $IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IP - Cấu hình cho máy nội bộ truy cập mạng bên ngoài IP NAT thực hiện như trong ứng dụng IP Masquerading. 4.2.2.3 Kiểm tra NAT từ mạng nội bộ đến mạng bên ngoài và ngược lại - Bước 1: Kiểm tra kết nối cục bộ của các máy nội bộ ------------------------------------ nat-client# ping 192.168.0.10 PING 192.168.0.10 (192.168.0.10): 56 data bytes 64 bytes from 192.168.0.10: icmp_seq=0 ttl=255 time=0.8 ms 64 bytes from 192.168.0.10: icmp_seq=1 ttl=255 time=0.4 ms 64 bytes from 192.168.0.10: icmp_seq=2 ttl=255 time=0.4 ms 64 bytes from 192.168.0.10: icmp_seq=3 ttl=255 time=0.5 ms --- 192.168.0.10 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.5/0.8 ms ------------------------------------ - Bước 2: Kiểm tra kết nối máy cục bộ đến server IP NAT ------------------------------------ nat-client# ping 192.168.0.1 PING 192.168.0.1 (192.168.0.1): 56 data bytes 64 bytes from 192.168.0.1: icmp_seq=0 ttl=255 time=0.8 ms 64 bytes from 192.168.0.1: icmp_seq=1 ttl=255 time=0.4 ms 64 bytes from 192.168.0.1: icmp_seq=2 ttl=255 time=0.4 ms 64 bytes from 192.168.0.1: icmp_seq=3 ttl=255 time=0.5 ms --- 192.168.0.1 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.5/0.8 ms ------------------------------------ - Bước 3: Kiểm tra kết nối cục bộ của Server IP NAT -------------------------------------- nat-server# ping 192.168.0.1 PING 192.168.0.1 (192.168.0.1): 56 data bytes 64 bytes from 192.168.0.1: icmp_seq=0 ttl=255 time=0.8 ms 64 bytes from 192.168.0.1: icmp_seq=1 ttl=255 time=0.4 ms 64 bytes from 192.168.0.1: icmp_seq=2 ttl=255 time=0.4 ms 64 bytes from 192.168.0.1: icmp_seq=3 ttl=255 time=0.5 ms ^C --- 192.168.0.1 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.5/0.8 ms --------------------------------------- - Bước 4: Kiểm tra kết nối server IP NAT đến máy cục bộ ------------------------------------ nat-server# ping 192.168.0.10 PING 192.168.0.10 (192.168.0.10): 56 data bytes 64 bytes from 192.168.0.10: icmp_seq=0 ttl=255 time=0.8 ms 64 bytes from 192.168.0.10: icmp_seq=1 ttl=255 time=0.4 ms 64 bytes from 192.168.0.10: icmp_seq=2 ttl=255 time=0.4 ms 64 bytes from 192.168.0.10: icmp_seq=3 ttl=255 time=0.5 ms ^C --- 192.168.0.10 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.5/0.8 ms ------------------------------------ - Bước 5: Kiểm tra kết nối giao diện với bên ngoài của server IP NAT ------------------------------------- nat-server# ping 203.162.76.1 PING 203.162.76.1(203.162.76.1): 56 data bytes 64 bytes from 203.162.76.1: icmp_seq=0 ttl=255 time=0.8 ms 64 bytes from 203.162.76.1: icmp_seq=1 ttl=255 time=0.4 ms 64 bytes from 203.162.76.1: icmp_seq=2 ttl=255 time=0.4 ms 64 bytes from 203.162.76.1: icmp_seq=3 ttl=255 time=0.5 ms ^C --- 203.162.76.1 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.5/0.8 ms ------------------------------------- - Bước 6: Kiểm tra kết nối từ máy nội bộ đến giao diện bên ngoài của server IP NAT ------------------------------------- nat-client# ping 203.162.76.1 PING 203.162.76.1(203.162.76.1): 56 data bytes 64 bytes from 203.162.76.1: icmp_seq=0 ttl=255 time=0.8 ms 64 bytes from 203.162.76.1: icmp_seq=1 ttl=255 time=0.4 ms 64 bytes from 203.162.76.1: icmp_seq=2 ttl=255 time=0.4 ms 64 bytes from 203.162.76.1: icmp_seq=3 ttl=255 time=0.5 ms ^C --- 203.162.76.1 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.5/0.8 ms ------------------------------------- 4.2.3 Phần mềm ứng dụng Iptables/Netfilter trong Linux. Do những ưu điểm của hệ điều hành Linux, việc xây dựng mô hình bảo vệ mạng bằng bức tường lửa Iptables trong Linux rất được sự quan tâm của nhiều cá nhân và tổ chức. Nhiều phần mềm đã được ra đời và đã được áp dụng. Bạn có thể tự xây dựng bức tường lửa cho mình mà không gặp phải khó khăn nào lớn cả. Những phần mềm như là SBS2004;Rainmail tích hợp rất nhiều chức năng như và dịch vụ như là Mail Server, webmail, proxy, Squid guard… Fwbuilder là một công cụ linh hoạt và khá mạnh, nó có thể dùng để xây dựng bức tường lửa, xây dựng các chính sách cho một số dạng Firewall khác nhau như là ptables (Linux2.4 và 2.6), ipfilter, openbsd pf với các modul Cisco PIX. Kết Chương. Trong chương vừa rồi đã trình bày qua về cách sử dụng Iptables. Các thao tác trong các chuỗi luật có sẵn và chuỗi luật do người dùng định nghĩa hay các hành động. Nói về cách cài đặt, duy trì, kiểm tra IP Masquerading và IP Nat của Iptables. Và với những tinh năng như vậy, Iptables là một giải pháp lọc gói tin mới, cao cấp hơn so với những gì có sẵn đối với Linux kernel trước 2.4x. KẾT LUẬN Đề tài về Firewall luôn là mối quan tâm hàng đầu của các nhà quản trị mạng nói riêng và của những nhà tin học nói chung. Để có thể xây dựng được một mạng riêng mà có thể tránh khỏi mọi sự tấn công là không thể, nhưng chúng ta có thể xây dựng được những mạng có tính an toàn cao theo những yêu cầu cụ thể. Để có thể xây dựng được những mạng như vậy, người quản trị mạng phải nắm rõ được những kiến thức cơ bản về Firewall. Thực hiện đề tài xây dựng chương trình Firewall Iptables trong Linux sau quá trình học tập và tìm hiểu, đề tài này đã minh hoạ phần nào những kiến thức cơ bản đó và những ví dụ rất cụ thể giúp cho người đọc có thể trực tiếp thực hiện một cách dễ dàng. Trong phần ứng dụng đã minh hoạ được một số chức năng của hệ thống Firewall: IP Masquerading, IP NAT. Nhưng do thời gian có hạn, lượng kiến thức liên quan đến đề tài rất nhiều, nên những ứng dụng trên chỉ mang tính chất minh hoạ. 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 các đơ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. Hệ thống Firewall này mang tính ứng dụng thực tế cao vì: * Phần cứng sử dụng cho hệ thống này không cần có cấu hình mạnh. * Tất cả các phần mềm sử dụng cho hệ thống này đều là phần mềm mã nguồn mở. * Tài liệu hỗ trợ cho các phần mềm này có đầy đủ trên Internet và miễn phí. * Trên Internet có nhiều diễn đàn về chủ đề này. * Hệ thống được thiết kế mềm dẻo tuỳ vào chính sách an toàn của đơn vị. * Sử dụng hệ điều hành có độ ổn định cao và bảo mật tốt. PHỤ LỤC CÁC TỪ VIẾT TẮT- ĐỊNH NGHĨA- THUẬT NGỮ Linux là hệ điều hành có mã nguồn mở. Kernel: Nhân hệ điều hành Linux, là thành phần chính trong hệ điều hành Linux Console: Mọi hệ thống Linux có một console chính (giao tiếp chính) được nối trực tiếp với máy tính. Console là một kiểu đặc biệt của terminal (thiết bị đầu cuối), được nhận diện khi hệ thống được khởi động. Đối với một số hệ điều hành Unix, các lệnh phải được thực hiện tại console. Thông thường console chỉ cho phép tài khoản quản trị hệ thống được truy nhập. Squid là các webproxy phổ biến trên thị trường. Nó là mã nguồn mở và miễn phí. Nó có thể thực hiện vài tác vụ lọc trước khi hoạt động trao đổi tới webserver của bạn, thực hiện thêm các chức năng webcaching chuẩn cho mạng của bạn. Mô hình tham chiếu OSI (Open Systems Interconnect) là một mô hình kiến trúc 7 tầng được phát triển bởi tổ chức chuẩn hoá quốc tế IOS (International Standards Organization) mô tả cấu trúc và chức năng của giao thức truyền dữ liệu. ICMP (Internet Control Message Protocol) Giao thức điều khiển thông báo Internet. Kết hợp với lớp Internet và sử dụng gói dữ liệu IP để gửi thông báo điều khiển, báo lỗi cho TCP/IP. TCP: Transmisson Control Protocol – Giao thức điều khiển truyền UDP: Giao thức gói dữ liệu. Telnet: cung cấp dịch vụ vào mạng từ xa. DNS: Domain Name Service cung cấp dịch vụ ánh xạ địa chỉ IP thành tên. FTP: File Transfer Protocol cung cấp dịch vụ truyền tập tin. TÀI LIỆU THAM KHẢO Các trang web: Sách tham khảo: Tài liệu môn học Lý thuyết mạng, An toàn mạng, CĐTN An toàn mạng của thầy Nguyễn Văn Tam. Bảo mật và tối ưu hóa Linux Red Hat của Nguyễn Ngọc Tuấn – Hồng Phúc. Iptables Tutorial1 Oskar Andreasson - Copyright © 2001-2005 Oskar Andreasson. Mạng máy tính và các hệ thống mở - mã thư viện 02261. David A. Ranch [May 26, 2003]- Linux IP Masquerade HOWTO- GNU General Public License Rusty Russell [14/01/2002]- Linux 2.4 NAT HOWTO-GNU General Public License Rusty Russell, Linux iptables HOWTO – mailing list MỤC LỤC

Các file đính kèm theo tài liệu này:

  • docxXây dựng mô hình bảo vệ mạng bằng bức từong lửa iptable của linux.docx