Đề tài Xây dựng mô hình bảo vệ mạng bằng bức từơng lửa iptable của linux

Tài liệu Đề tài 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 CẢM ƠN Mở đầu cho đề tài tốt nghiệp này, em xin thành thật tỏ lòng kính trọng và biết ơn đến ban giám hiệu, cùng các thầy cô giáo đã giúp đỡ em, đặc biệt là thầy giáo Nguyễn Văn Tam - Viện công nghệ thông tin, thầy Đào Văn Thành là những thầy đã trực tiếp hướng dẫn em thực hiện đề tài tốt nghiệp này và đã cho em những chỉ dẫn và những kiến thức quý giá. Em xin chân thành cảm ơn các thầy cô luôn sẵn sàng giúp đỡ và tạo mọi điều kiện tốt nhất cho em. Cảm ơn bạn bè đã luôn quan tâm động viên cổ vụ giúp đỡ để em thực hiện tốt bài tập tốt nghiệp này. Mặc dù có nhiều cố gắng bằng toàn bộ kiến thức để hoàn thành công việc, xong thời gian có hạn và kinh nghiệm kiến thức chưa nhiều nên việc trình bày, phân tích, xây dựng chương trình có nhiều thiếu sót cần được bổ xung. Vì vậy, em rất mong nhận được ý kiến đóng góp của thầy cô và bạn bè để đề tài này được hoàn thiện hơn trong tương lai. Hà Nội 6/2007 Người thực hiện Nguyễn Tuấn Anh LỜI NÓI ĐẦU Từ xa xưa nhân loại đã...

docx66 trang | Chia sẻ: hunglv | Lượt xem: 1164 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Xây dựng mô hình bảo vệ mạng bằng bức từơng lửa iptable của linux, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
LỜI CẢM ƠN Mở đầu cho đề tài tốt nghiệp này, em xin thành thật tỏ lòng kính trọng và biết ơn đến ban giám hiệu, cùng các thầy cô giáo đã giúp đỡ em, đặc biệt là thầy giáo Nguyễn Văn Tam - Viện công nghệ thông tin, thầy Đào Văn Thành là những thầy đã trực tiếp hướng dẫn em thực hiện đề tài tốt nghiệp này và đã cho em những chỉ dẫn và những kiến thức quý giá. Em xin chân thành cảm ơn các thầy cô luôn sẵn sàng giúp đỡ và tạo mọi điều kiện tốt nhất cho em. Cảm ơn bạn bè đã luôn quan tâm động viên cổ vụ giúp đỡ để em thực hiện tốt bài tập tốt nghiệp này. Mặc dù có nhiều cố gắng bằng toàn bộ kiến thức để hoàn thành công việc, xong thời gian có hạn và kinh nghiệm kiến thức chưa nhiều nên việc trình bày, phân tích, xây dựng chương trình có nhiều thiếu sót cần được bổ xung. Vì vậy, em rất mong nhận được ý kiến đóng góp của thầy cô và bạn bè để đề tài này được hoàn thiện hơn trong tương lai. Hà Nội 6/2007 Người thực hiện Nguyễn Tuấn Anh 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. CHƯƠNG I: CÁC MỐI ĐE DỌA AN MẠNG VÀ MỘT SỐ GIẢI PHÁP 1.1 Tầm quan trọng của bức tường lửa Ngày nay qua mạng Internet, chúng ta có thể truy nhập tới mọi nơi trên thế giới thông qua một số dịch vụ, khi ngồi trước máy vi tính con người có thể biết mọi thông tin trên toàn cầu, có thể giải trí, con người có thể kinh doanh tiếp thị trên toàn cầu và tiếp cận đươc khối lượng thông tin khổng lồ, luôn cập nhật trong thời gian tương đối nhanh. Tuy nhiên, cùng với những lợi ích mà Internet đem lại thì vấn đề an ninh mạng cần được đưa ra xem xét một cách nghiêm túc vì khi tham gia vào mạng có rất nhiều nguy hiểm. Nguy hiểm chính là các tin tặc trên Internet luôn rình rập để ăn trộm các thông tin.Vấn đề này là mối đe dọa lớn đối với mỗi cá nhân, một doanh nghiệp, một tổ chức hay một quốc gia về sự hư hỏng và mất mát thông tin. Thông tin là sự sống còn của một doanh nghiệp, một tổ chức hay một quốc gia. Do đó, chúng ta phải bảo vệ thông tin từ các mối đe dọa, một trong các giải pháp tốt nhất hiện nay là sử dụng bức tường lửa (firewall). 1.2 Đối tượng bảo vệ của bức tường lửa Trong môi trường Internet có nhiều tổ chức, quốc gia cùng tham gia. Do đó, nhu cầu bảo vệ thông tin trên Internet có thể chia làm 3 loại như sau: 1.2.1 Bảo vệ dữ liệu Những thông tin lưu trữ trên hệ thống máy tính cần được bảo vệ do các yêu cầu sau: Tính bí mật (Secrecy): những thông tin có giá trị về kinh tế, quân sự, chính sách… cần được giữ kín. Tính toàn vẹn (Integrity): Thông tin không bị mất mát hoặc sửa đổi đánh tráo. Để làm được điều đó thì chúng ta phải ngăn ngừa được sự thay đổi thông tin một cách vô ý hay cố ý và ngăn những kẻ tấn công hệ thống vì họ có thể sửa đổi, xóa bỏ, hoặc làm hỏng thông tin quan trọng mang tính sống còn cho các hoạt động của tổ chức. Tính sẵn sàng (Availability): Yêu cầu truy nhập thông tin vào đúng thời điểm cần thiết và ngăn ngừa việc nắm giữ thông tin và tài nguyên để hệ thống chứa các thông tin hoặc cung cấp các dịch vụ có khả năng truy cập được, đáp ứng các yêu cầu và tránh mất mát những thông tin quan trọng. Trong các yêu cầu này, thì tính bí mật là quan trọng nhất đối với thông tin lưu trữ trên mạng. Tuy nhiên, khi thông tin này không được bí mật thì tính toàn vẹn cũng rất quan trọng. Không một cá nhân, một tổ chức nào lãng phí tài nguyên vật chất và thời gian để lưu trữ những thông tin mà không biết tính đúng đắn của thông tin đó. 1.2.2 Bảo vệ các tài nguyên trên mạng Mối đe dọa trên các tài nguyên này là ai đó xâm nhập vào mạng của chúng ta và sử dụng chúng như tài nguyên của chính họ. Trong thực tế, trong các cuộc tấn công trên Internet, kẻ tấn công sau khi đã làm chủ hệ thống bên trong, có thể sử dụng những máy này để phục vụ cho lợi ích của mình như chạy các chương trình dò tìm mật khẩu người sử dụng, sử dụng các liên kết mạng sẵn có để tiếp tục tấn công các hệ thống khác… 1.2.3Bảo vệ uy tín, danh tiếng của công ty Một phần lớn các cuộc tấn công không được thông báo rộng rãi, và là một trong những nguyên nhân là nỗi lo bị mất uy tín của cơ quan, đặc biệt là các công ty lớn và các cơ quan trong nội bộ nhà nước. Sự đe dọa này thể hiện ở chỗ một người nào đó xuất hiện trên Internet với định danh là mạng của chúng ta, thực hiện những gì mà qui ước quốc tế về lưu thông trên Internet cấm, hay gửi đi những thông tin không hợp pháp. Hậu quả là ảnh hưởng tới uy tín của chúng ta, thậm chí cả tiền bạc. 1.3. Một số mối đe dọa an ninh mạng Các mối đe dọa về bảo mật mạng có thể là con người và thiên nhiên (lũ lụt, động đất, hỏa hoạn, … ) nhưng phạm vi đề tài chỉ tập trung và khía cạnh con người. Con người Cố tình vô tình Bên trong Bên ngoài thiếu hiểu biết Có thể phân loại những tấn công theo tính chất hoạt động như sau: 1.3.1.Tấn công truy nhập mạng ` 1.3.1.1 Tấn công theo mật khẩu: mật khẩu là tập hợp là tất cả các chữ cái, chữ số. Có hai cách tấn công theo mật khẩu Tấn công thô: là dùng tất cả các tổ hợp, các kí tự để làm mật khẩu vào mạng và thử truy nhập. Tấn công này thường dùng cho mạng LAN. Tấn công dùng từ điển: dự đoán một số từ khóa thông thường người ta hay dùng làm password. Tấn công này thường dùng cho từ xa truy nhập vào mạng. 1.3.1.2. Tấn công theo phân tích mật khẩu: Hầu hết trong các hệ điều hành đều lưu username và password. Nhưng mỗi hệ điều hành có các cách lưu khác nhau. Ví dụ, trong Window có file System_32/ config/ SAM/ Security Acount, trong Linux, Unix có 2 file etc/passwd và etc/shadow. Trong các hệ điều hành thì hầu như password đều được mã hóa theo thuật toán DES và MD5 chứ nó không lưu bản rõ. Đối với Win 95,98 thì dùng thuật toán DES. Đối với Win NT và Win 2000 thì dùng thuật toán hàm băm MD4 sau đó sử dụng MD5. Đối với Win 2000 sau này dùng Kerboros. Các thuật toán công khai như vậy thì người ta đều biết. Thông thường biết mã và thuật toàn thì người ta giải mã được nhưng có một số thuật toán mà người ta giải mã rất khó như thuật toán DES thì người ta phải phá vài chục năm mới phá được (phương pháp này giống kiểu tấn công thô). Do đó, tin tặc sử dụng các kỹ thuật sau để tấn công: Sử dụng wordlist: Danh sách của những từ sử dụng như danh mục địa phương, danh mục họ tên của nước nào đó. Đầu tiên dùng thuật toán mã hóa wordlist sau đó so sánh worslist đã mã với mật khẩu. Có thể nói dùng phương pháp này cũng gần đi tới kết quả. Sử dụng chương trình giám điệp : Tin tặc dùng chương trình này để copy các tệp mật khẩu. Khi copy được các tệp mật khẩu thì nó cũng có thể thay đổi mật khẩu được. Người dùng nên dùng password phức tạp để tin tặc tấn công khó hơn. 1.3.2. Tấn công theo kiểu khai thác mạng: Đầu năm 90 tin tặc đã sử dụng kỹ thuật tiếm quyền để khai thác mạng 1.3.2.1 Kỹ thuật làm tràn bộ đệm: Kiểu bộ đệm có thể làm tràn bộ đệm trên ngôn ngữ lập trình, ví dụ trên ngôn ngữ lập trình C: int f (int j ) { int i; char buf [128]; gets (buf); } chương trình chính gọi chương trình con thông qua stack và sử dụng push, pop. Stack 100h Địa chỉ byte 1000 4 j 996 4 return address 992 4 i 988 128 buf …. (1) Return address CT CT Shell NOP NOP NOP khoảng cách đó là tin tặc không biết trước nên tin tặc phải thử nhiều lần để biết return address cách bộ đệm bao nhiêu. Khi biết khoảng các đó rồi thì phải viết địa chỉ vào để chương trình của tin tặc nhảy vào tiếp, nó không cần biết địa chỉ chính xác mà nó nhảy vào bất kỳ một NOP nào đó ( NOP không làm gì cả sau đó đến chương trình của tin tặc). Do các ngôn ngữ lập trình trỏ tới bộ đệm mà không giới hạn bộ đệm đó là bao nhiêu nên tin tặc dùng lỗ hổng để tấn công. Tóm lại lỗ hổng kỹ thuật làm trần bộ đệm là kỹ thuật dễ dàng nhất để tin tặc tấn công vào mạng chiếm quyền điếu khiển. 1.3.2.2 Lỗi của Unicode: Do đường dẫn URL bằng mã Unicode khi truy nhập mail hay web thì cũng phải qua Unicode để dẫn tới tài nguyên. Nếu là mã của ASCII thì đường dẫn chỉ cho phép truy nhập vào nguồn tài nguyên đúng thư mục của server cung cấp cái thông tin đó. 1.3.3.Tạo cửa hậu, xóa nhật ký: Để tiếp tục tấn công vào lần sau (tấn công sau khi đã vào mạng). Nó xóa các cổng truyền thông tạo ra các cổng truyền thông mới (nếu cổng truyền thông server không cho phép thì tạo ra để cho phép). Tạo ra người sử dụng mới, người sử dụng có quyền quản trị. Cài các chương trình cho phép tin tặc từ xa có thể điều khiển được, thường điều khiển để lấy thông tin hoặc phá hoại. Ngụy trang để xóa hết tên tệp, thay đổi tên thư mục, thay đổi những lệnh mà người quản trị sử dụng để phát hiện truy nhập. Xóa tệp nhật ký để cho người quản trị không thấy được dấu vết đã truy nhập hoặc có thể thay đổi tệp đăng ký, thay đổi thời gian ghi nhật ký. Ví dụ như khi truy nhập tuần này thì nó thay đổi thời gian là tuần trước (nhật ký tuần trước thì không thông báo) làm cho người quản trị không quản lí được. Khắc phục: Một số tệp quan trọng của hệ thống thì phải được bảo vệ tính toàn vẹn của nó thông quan việc tạo ra các tóm lược và sau một thời gian nhất định thì phải kiểm tra tệp đó có toàn vẹn không. Đối với một số nhật ký quan trọng thì được sao chép lưu giữ, bảo vệ để tin tặc không thay đổi được. Luôn kiểm tra các cổng truyền thông để phát hiện tin tặc có truyền thông tin ra từ máy không. 1.3.4 Tấn công từ chối dịch vụ CT tin tặc SYN Fload: server SYN3 SYN2 SYN1 SYN4 SYN1/ACK ACK RST/ACK SYN SYN5 SYN là yêu cầu của tin tặc gửi tới server Đầu tiên tin tặc gửi yêu cầu tới server, khi server nhận được yêu cầu của tin tặc thì server trả lời cho tin tặc nhưng tin tặc lại không xác nhận trả lời của server (ACK) làm cho server chờ trả lời. Khi server chờ hết thời gian Tout thì server buộc phải gửi yêu cầu hủy kết nối (RST/ACK). Khi tin tặc nhận được hủy kết nối thì tin tặc tiếp tục gửi tín hiệu SYN để yêu cầu kết nối và cứ như vậy server chỉ phục vụ cho tin tặc không phục được cái khác. Khắc phục: Có một số firewall chặn một số cổng SYN như Checkpoint. Làm tăng hàng đợi server có thể phục vụ. Xác định Tout một cách mềm dẻo cũng có thể tránh được tắc nghẽn do tin tặc gây ra. Xác định thêm một bộ đệm để biết được chu trình thiết lập liên kết một nửa và từ đó có quy trình để đối phó. Kết hợp các công cụ của hệ điều hành. *Tấn công UDP flood: Tin tặc gửi rất nhiều UDP làm cho server không kịp sử lý. Khắc phục: Sử dụng firewall, chỉ cho phép các dịch vụ UDP cần thiết buộc phải có như DNS, DHCP, SNMP. Những gói UDP của các dịch vụ này thì bắt buộc phải cho vào mạng còn các gói UDP của các dịch vụ khác thì không cần thiết. * Tấn công SMURF Tấn công kiểu ICMP, thường sử dụng chế độ Broadcast (quảng bá) như thông tin Echo gửi thông tin quảng bá cho tất cả các máy và tất cả các máy gửi lại thông tin cho echo response. Chính vì vậy, làm cho máy rất chậm có thể gây tê liệt hệ thống. Khắc phục: Cấu hình bức tường lửa để từ chối Broadcast từ các máy khác gửi đến. .Tấn công Teardrop: Tin tặc chia gói tin thành nhiều mảnh và đánh địa chỉ offset , số không theo trình tự làm cho router server bận rộn tức là làm cho server tê liệt vì không kịp sử lí gói tin đến. . Tấn công Mail Bomb: bomb thư cũng làm cho server tê liệt 1.3.5 Giả mạo địa chỉ IP: Việc giả mạo địa chỉ IP có thể được thực hiện thông qua việc sử dụng khả năng dẫn đường trực tiếp. Với cách tấn công này, tin tặc gửi các gói IP tới mạng bên trong với địa chỉ IP giả mạo (thông thường là địa chỉ của một mạng hoặc một máy được coi là an toàn đối với mạng bên trong), đồng thời phải chỉ rõ đường dẫn mà các gói tin IP phải gửi đi. 1.3.6 Đùa nghịch, quấy rối: Là do con người có tính tò mò, xâm nhập vào hệ thống tìm những thông tin mà họ thích thú. Họ thường làm hỏng hệ thống do thiếu kiến thức hoặc cố gắng che dấu vết của họ. 1.3.7 Phá hoại: Là những người cố ý phá hoại hệ thống thông tin mà họ muốn. Những người này thường là họ bất bình trong môi trường làm việc của họ, hoặc do tính chất cạnh tranh nào đó. Chúng có thể xóa dữ liệu hoặc làm hỏng thiết bị hệ thống mà chúng xâm nhập. 1.3.8 Gián điệp: Là những người xâm nhập vào hệ thống và chỉ lấy những thông tin nào có giá trị lớn như các hệ thống tín dụng, ngân hàng…Khó phát hiện tức thời được, thường chúng lấy thông tin mà không để lại dấu vết. 1.3.9 Vô ý hay thiếu hiểu biết của con người: Các tai họa hoàn toàn không phải do kẻ xấu làm nên, mà đa số là do những người chưa được đào tạo tốt về kiến thức máy tính nên không nhận thức được các mối nguy hiểm cho hệ thống và do những người quản trị hệ thống thiếu kinh nghiệm, hoặc lỗi của một chương chình ứng dụng… 1.3.10 Tấn công vào yếu tố con người: Tin tặc liên lạc với người quản trị hệ thống, giả làm một người sử dụng để yêu cầu làm thay đổi mật khẩu, thay đổi quyền truy nhập của mình đối với hệ thống hoặc có thậm chí có thể làm thay đổi một số cấu hình của hệ thống để thực hiện các phương pháp tấn công khác. Với kiểu tấn công này, không một thiết bị nào có thể ngăn chặn một cách hữu hiệu mà chỉ có một cách là giáo dục người sử dụng mạng nội bộ về những yêu cầu về bảo mật để đề cao cảnh giác với những hiện tượng đáng nghi ngờ. Nói chung, con người là một điểm yếu trong bất kỳ hệ thống bảo vệ nào, chỉ có sự giáo dục và tinh thần hợp tác từ phía người sử dụng có thể nâng cao được hệ thống bảo vệ. CHƯƠNG II:TỔNG QUAN FIREWALL 2.1. Một số khái niệm : -Nguồn gốc từ một kỹ thuật thiết kế trong xây dựng để ngăn chặn hạn chế các hỏa hoạn, trong công nghệ thông tin, Firewall là một cơ chế đảm bảo an toàn cho mạng máy tính, nó bao gồm một hoặc nhiều những thành phần tạo lên bức tường lửa với mục đích để ngăn cản điều khiển các truy xuất giữa mạng bên ngoài với mạng nội bộ. Bức tường lửa có thể là một server proxy, filter, hoặc phần cứng, phần mềm…để hiểu chi tiết hơn về bức tường lửa ta sẽ xem xét về các chức năng của bức tường lửa. - Về mặt vật lý, thường có sự khác nhau từ nơi này qua nơi khác.Thông thường Firewall là tập phần cứng sau : một router,một Host hay một tổ hợp nào đó của routers,máy tính và mạng có các phần mềm thích hợp - Về mặt logic, Firewall là bộ tách(Separator) vì nó phân định một bên là mạng ngoài không an toàn và bên kia là mạng nội bộ cần được bảo vệ, là bộ tách(Restricter) vì nó ngăn chặn sự tấn công từ bên ngoài, là bộ phân tích(Analyzer) vì nó xem xét các gói thông tin vào ra để quyết định cho vào ra hay không. - Về mặt tư tưởng nhằm giải quyết 2 công việc : Cửa khẩu(Gates) và chốt chặn(chokes). Cửa khẩu nhằm đảm bảo dữ liệu, dịch vụ thông suốt giữa các mạng. Chốt chặn nhằm kiểm soát và ngăn chặn nguồn thông tin xác định nào đó vào ra mạng nội bộ. 2.2.Chức năng: -Bức tường lửa cho phép hoặc cấm các dịch vụ từ bên trong ra bên ngoài và từ bên ngoài vào bên trong. -Nó kiểm soát các máy thông qua các địa chỉ các ứng dụng, thông qua các cổng. -Nó kiểm soát người sử dụng truy cập giữa các mạng . -Kiểm soát theo nội dung truyền thông giữa mạng bên trong và mạng bên ngoài. -Ngăn cản, chặn những tấn công từ bên ngoài vào bên trong nội bộ. Một vài từ ngữ sử dụng trong firewall có ý nghĩa sau Mạng nội bộ (Internal network): bao gồm các máy tính, các thiết bị mạng. Mạng máy tính thuộc các đơn vị quản lý (Trường học, Công ty, Tổ chức đoàn thể, Quốc gia,…) cùng nằm một bên với firewall. Host bên trong (Internal Host): máy thuộc mạng nội bộ Host bên ngoài (External Host): máy bất kỳ kết nối vào liên mạng và không thuộc mạng nội bộ nói trên. “Nội bộ ”hay “bên trong” chỉ rõ thuộc đơn vị cùng một bên đối với firewall của đơn vị đó. Về vị trí: Firewall là nơi kiểm soát chặt chẽ và hạn chế về luồng thông tin vào ra của một mạng nội bộ khi giao tiếp với các thành phần bên ngoài nó. Về mục tiêu: nó ngăn cản đe dọa từ bên ngoài với những yêu cầu cần được bảo vệ, trong khi vẫn đảm bảo các dịch vụ thông suốt qua nó. Sơ đồ tổng quát của firewall Figure2-1: sơ đồ tổng quát của firewall 2.2.1. Khả năng của hệ thống firewall + Một Firewall là một trung tâm quyết định những vấn đề an toàn: Firewall đóng vai trò là một chốt chặn, mọi dòng thông tin đi vào hay đi ra một mạng nội bộ đều phải qua nó theo các chính sách an toàn đã được cài đặt. Tập trung kiểm soát chặt chẽ các dòng thông tin đó có lợi hơn là phân tán trên diện rộng. + Một firewall làm cho chính sách an toàn trở nên hiệu quả thực sự: Nhiều dịch vụ mà người sử dụng dịch vụ mong muốn vốn có những chỗ không an toàn. Firewall chỉ cho đi qua sau khi đã kiểm nhận và được phép. Mặt khác, firewall còn cho phép kiểm soát nghiêm ngặt mọi người sử dụng về quyền xâm nhập Internet. Firewall có thể cấu hình đa dạng, nhiều mức khác nhau. Do đó, Firewall có thể bảo đảm thích hợp cho một chính sách an toàn đã chọn. + Firewall có thể ghi nhận lại các giao tiếp với Internet rất hiệu quả: Như đã nói ở trên, mọi luồng thông tin vào hay ra mạng nội bộ đều phải qua Firewall. Do đó, nó cung cấp một vị trí tốt nhất để tập hợp những thông tin về hệ thống và mạng đã dùng. Ghi nhận điều gì xẩy ra trong giao tiếp giữa mạng nội bộ và bên ngoài. Những thông tin đó rất quý giá cho những nguời có trách nhiệm quản lý. + Firewall có thể hạn chế được sự đổ vỡ của hệ thống bên trong: Firewall có thể tách một phần mạng nội bộ với các phần khác trong mạng nội bộ. Làm điều này nhằm mục đích có những phần được ủy quyền nhiều hơn. Do đó, hạn chế được những nguy hiểm xẩy ra hơn. 2.2.2. Những hạn chế của firewall Tuy có những khả năng trên, xong mô hình Firewall có những hạn chế nhất định sau: + Firewall không thể bảo vệ trước những kẻ phá hoại từ bên trong, đánh cắp dữ liệu làm hư hỏng phần cứng và phần mềm hay thay đổi chương trình mà không cần đến Firewall. + Firewall không thể ngăn chặn một cuộc tấn công nếu cuộc tấn công này không đi qua nó. Một cách cụ thể, Firewall không thể chống lại một cuộc tấn công từ một đường dial-up, hoặc sự dò rỉ thông tin do dữ liệu bị sao chép bất hợp pháp lên đĩa mềm. + Firewall không thể bảo vệ chống lại những mối đe dọa mới phát sinh vì nó không thể tự động bảo vệ trước những mối đe dọa mới phát sinh. Do đó, khi có những vấn đề mới cần cấu hình lại cho Firewall. + Firewall không thể bảo vệ chống lại virus. Firewall hầu hết chỉ xem xét địa chỉ nơi gửi, nơi đến, số cổng của gói thông tin chứ không xem chi tiết phần dữ liệu ngay cả các phần mềm lọc gói thông tin. Firewall không thể làm nhiệm vụ quét virus trên dữ liệu được chuyển qua nó do sự xuất hiện của các virus mới và do có rất nhiều cách để mã hóa dữ liệu thoát khỏi sự kiểm soát của Firewall. Do đó, chống virus bằng Firewall là vấn đề không khả thi, vì có quá nhiều loại virus và có quá nhiều cách virus ẩn trong dữ liệu. Tuy nhiên Firewall vẫn là giải pháp hữu hiệu nhất được áp dụng rộng rãi. 2.3. Phân loại bức tường lửa (Firewall) Firewall bao gồm các loại sau : Bức tường lửa lọc gói tin (packet-filtering router). Bức tường lửa ứng dụng (proxy). Bức tường lửa nhiều tầng 2.3.1. Firewall lọc gói Figure2-2: Firewall lọc gói Bức tường lửa lọc gói làm việc ở tầng 3 đối với mô hình OSI. Thông tin được đưa lên tầng 3 sau đó lại tiếp tục được chuyển đi. Nếu thông tin được ở dưới tầng 3 thì bức tường lửa không thể kiểm soát được, ví dụ như mạng LAN không dây dữ liệu được truyền ở dưới tầng 3. Do vậy, bức tường lửa không thể kiểm soát được mà mạng LAN không dây phải dùng một phần mềm khác để bảo vệ và kiểm soát dữ liệu. Bộ lọc gói cho phép hay từ chối mỗi gói mà nó nhận được. Khi nhận được gói tin từ Internet, nó kiểm tra toàn bộ dữ liệu để quyết định xem đoạn dữ liệu đó có thỏa mãn một trong các luật lệ của gói đặt ra hay không. Các luật lệ này là dựa trên thông tin ở đầu mỗi gói (packet header). Thông tin của ở đầu gói tin bao gồm: SA DA Port Get Index html SA (Source Address): địa chỉ IP nguồn. DA(Destination Address): địa chỉ IP đích. (Nếu đi từ bên trong ra bên ngoài thì địa chỉ nguồn là ở bên trong mạng nội bộ còn địa chỉ đích là bên ngoài. Nếu đi từ bên ngoài vào bên trong thì địa chỉ nguồn sẽ là ở bên ngoài còn địa chỉ đích sẽ là ở bên trong mạng nội bộ). Port: lọc theo cổng nguồn, cổng đích của giao thức tương ứng với TCP hay UDP . Các giao thức (UDP, TCP, ICMP…): nó có thể cấm và cho phép, ví dụ có thể cấm giao thức UDP và chỉ cho TCP và ICMP hoặc Cấm ICMP cho phép TCP và UDP… Dạng thông điệp ICMP (Internet control message protocol). Nếu luật được thỏa mãn thì gói được chuyển qua firewall, nếu không thỏa mãn thì gói sẽ bị hủy đi. Nhờ vậy mà firewall có thể ngăn chặn được các kết nối vào máy chủ hoặc mạng nào đó được xác định hoặc khóa việc truy nhập vào hệ thống mạng nội bộ từ những địa chỉ không cho phép. Như vậy, việc kiểm soát càng làm cho firewall có khả năng chỉ cho phép một một số loại kết nối nhất định vào máy chủ nào đó hoặc chỉ một số dịch vụ nào đó (Telnet, SMNP, FTP…) được phép mới chạy được trên hệ thống mạng cục bộ. Mặc dù firewall loại này có tốc độ kiểm tra nhanh nhưng chúng cũng tương đối dễ bị qua mặt. Một phương pháp để vượt qua firewall kiểu này là giả mạo địa chỉ IP (IP spoofing), ví dụ như trong hệ thống mạng của một công ty, khi một người nào đó đi công tác ở xa nhưng vẫn phải truy nhập vào mạng của công ty để lấy dữ liệu. Khi đó, firewall vẫn phải mở các dịch vụ để người đó vào lấy dữ liệu và nhân cơ hội này thì hacker ăn trộm địa chỉ IP và tấn công vào mạng và làm cho firewall tưởng rằng các gói của hacker đến từ nguồn thực sự. Loại router được sử dụng trong Firewall để làm Pactket Filtering được xem như là một Sreening router. - Một số khác nhau giữa router bình thường và Screening router: router bình thường thì chọn đường đi tốt nhất để gửi gói tin. Screening router thì xem xét gói tin kỹ hơn, nó xác định một gói có được gửi đi hay không bởi chính sách bảo mật của nó. Một số ưu điểm của lọc gói Do bức tường lửa lọc gói ở tầng 3 nên nó kiểm tra tất cả các ứng dụng đi qua nó. Nó không phụ thuộc vào ứng dụng mặc dù của mail hay web. Chi phí thấp vì cơ chế lọc gói đã được bao gồm trong mỗi phần mềm router và nó chỉ xem xét thông tin của đầu gói tin, do đó thời gian trì hoãn thấp. Sẵn sàng cho nhiều sản phẩm phần mềm và phần cứng, cả trong các sản phẩm thương mại và miễn phí. Ngoài ra bộ lọc gói là trong suốt đối với người sử và các ứng dụng vì vậy nó không yêu cầu sự huấn luyện đặc biệt nào cả . Giúp bảo vệ toàn mạng, một thuận lợi chính của nó là đơn giản và tương đối nhẹ. Một số nhược điểm của lọc gói Việc định nghĩa các chế độ lọc gói là một việc khá phức tạp, nó đòi hỏi người quản trị cần có các hiểu biết về các dịch vụ Internet, các dạng packet header, và các giá trị cụ thể mà họ có thể nhận trên mỗi trường. Khi đòi hỏi sự lọc là càng lớn thì các quy tắc về lọc gói càng trở lên dài và phức tạp, rất khó để quản lý và điều khiển. Do làm việc dựa trên header của gói tin, bộ lọc gói không kiểm soát được nội dung thông tin của gói tin. Các gói tin chuyển qua vẫn có thể mang theo những hành động với ý đồ ăn cắp thông tin hay phá hoại của kẻ xấu. 2.3.2. Bức tường lửa ứng dụng(Application firewall) Figure 2-3: Bức tường lửa ứng dụng Làm việc ở tầng 7 của mô hình OSI. Nếu TCP thì nó làm việc ở tầng dịch vụ. Nó không kiểm soát được thông tin ở tầng ứng dụng. Nguyên tắc hoạt động chung: Firewall này được thiết lập từ phần mềm ứng dụng. Không chuyển tiếp các gói tin IP. Tốc độ xử lí chậm. Mỗi một dịch vụ phải có kết nối chương trình tương ứng: ví dụ đối với web thì phải có kết nối tương ứng để quản lí web và chương trình tương ứng để cho phép hay cấm, đối với mail thì cũng phải có kết nối tương ứng để quản lí mail và chương trình tương ứng để cho phép hay cấm. Vì nó làm việc ở tầng ứng dụng do đó nó cho phép nhiều công cụ ghi lại quá trình kết nối. Do quản lí kết nối nên các chương trình yêu cầu dịch vụ của client gốc có thể phải thay đổi để thích ứng với proxy. Quá trình kết nối được thực hiện theo kiểu đại diện chính vì vậy firewall kiểu này người ta còn gọi là proxy. Proxy có hai thành phần: Proxy Server: là chương trình ứng sử với server bên ngoài thay mặt cho các yêu cầu của người sử dụng bên trong. Nó chuyển tiếp các yêu cầu hợp lệ của mọi người sử dụng và quyết định cái nào cho qua, cái nào ngăn lại. Proxy Client: là chương trình của người sử dụng làm việc với Proxy server thay vì với server thực. Một số ưu điểm của Proxy Dịch vụ Proxy có thể ghi lại nhật ký thông tin rất tốt, bởi vì nó hiểu được giao thức ứng dụng. Có thể ghi lại những hoạt động theo cách hữu hiệu nhất, chỉ ghi lại những lệnh đã phát ra và nhận lại. Dịch vụ Proxy có thể lưu trữ lại các dữ liệu đã được yêu cầu, để giảm bớt khả năng hoạt động và giảm bớt tải trên đường liên kết mạng khi có yêu cầu đến cùng dữ liệu . Dịch vụ Proxy có thể làm packet filtering thông minh, có khả năng lọc kiểu nội dung của dịch vụ Web (loại bỏ Javascript,…) và nhận biết virus tốt hơn hệ thống packet filtering. Dịch vụ proxy có thể xác thực người sử dụng (packet filtering có thể nhưng khó khăn). Dịch vụ Proxy có thể bảo vệ các máy bên trong trước các packet nguy hiểm. Một số khuyết điểm của Proxy Các dịch vụ Proxy chậm hơn các dịch vụ không có Proxy, độ chậm phụ thuộc vào dịch vụ được thiết kế. Ngoài ra, khi một phần mềm Proxy đang có hiệu lực mà hệ thống cần dịch vụ mới, có thể ngoài tầm kiểm soát của nó (lỗ hổng an toàn mới), do đó cần phần mền Proxy mới. Dịch vụ Proxy có thể đòi hỏi nhiều server khác nhau cho mỗi dịch vụ vì proxy Server phải hiểu giao thức đó để xác định cái gì được phép và cái gì không được phép. Dịch vụ Proxy thường đòi hỏi biến đổi ứng dụng, thủ tục, trừ khi ứng dụng được thiết kế cho proxy. Hạn chế của biến đổi này là không thể luôn sử dụng dễ dàng như bình thường. 2.3.3. Bức tường lửa nhiều tầng Figure 2-4: Firewall nhiều tầng Kết hợp từ tầng 3 với tầng ứng dụng, có thể cấm và cho phép ở tầng phiên, tầng trình, tầng giao vận. Đối với bức tường lửa lọc gói ngoài những thông số kiểm soát như địa chỉ nguồn, địa chỉ đích, cổng nguồn, cổng đích, giao thức tầng trên (TCP, UDP, ICMP) thì còn có bức tường lửa phân tích chi tiết hơn về gói tin. Ví dụ ACK, ACK=0 (khởi động một kết nối của gói tin đầu của kết nối), ACK=1 (là các gói theo sau).ACK=0, SYN =1 (Yêu cầu kết nối); ACK=1,SYN=1 (trả lời kết nối). Kiểm tra chi tiết về gói tin để bảo vệ hệ thống tốt hơn, chống các dịch vụ từ bên ngoài. Tất cả những điều trên đã giới thiệu sơ qua về bức tường lửa, để hiểu được chi tiết bức tường lửa nó hoạt động như thế nào, được xậy dựng như thế nào, và bức tường lửa có những loại kiến trúc nào thì chúng ta cùng đi vào phần hai “kiến trúc cơ bản và hoạt động của bức tường lửa”. 2.4. Một vài kiến trúc firelwall 2.4.1 Screening Router Screening Router là một kiểu Firewall đơn giản, chỉ gồm một router sử dụng cơ chế packet filtering. Screening Router bảo vệ cho toàn mạng, có giá thành thấp. Screening Router không linh động có thể cho phép hoặc ngăn cấm các giao thức bởi số hiệu cổng. Screening Router không cho phép phòng thủ chiều sâu khi nó bị tổn thương hay có lỗi an toàn thì toàn bộ hệ thống dễ dàng bị tổn thương. Figure 2-5: Kiến trúc Screening Router 2.4.2 Dual-Homed Host Firewall kiểu kiến trúc Dual-Homed Host được xây dựng trên máy tính Dual-Homed Host. Một máy tính Dual-Homed Host có tối thiểu hai giao diện, một giao diện để kết nối với bên ngoài và một giao diện để kết nối với bên trong (mạng nội bộ). Chức năng đầu tiên của nó hoạt động như bộ định tuyến Khi giữ vai trò bức tường lửa, nó không thể thực hiện được chức năng định tuyến mà thay vào đó là chức năng phân tích gói tin. Các gói tin IP thì truyền giữa mạng trong và mạng ngoài. Dual-Homed Host là một điểm bảo vệ không có chiều sâu, nên sự an toàn của các máy bên trong phải rất hoàn hảo. Nếu Dual-Homed Host bị tổn thương thì toàn bộ mạng bên trong sẽ bị tổn thương. Máy chủ trung gian có thể cung cấp các dịch vụ như Proxy. Nó thường tốt cho những người sử dụng bên trong mạng nội bộ truy cập Internet hơn là những người sử dụng trên Internet truy cập tài nguyên bên trong mạng nội bộ. Hình 2.6. Cấu trúc firewall Dual Home Host. 2.4.3. Bastion Host (máy chủ pháo đài) Máy chủ pháo đài thuộc mạng nội bộ, nó chỉ có một giao diện để kết nối với một mạng nội bộ. Máy tính có cấu hình bảo mật ở mức độ bảo mật cao. Trên nó được cài các phần mềm bảo vệ ví dụ như Proxy trên firewall. Mọi thông tin từ bên ngoài muốn đưa vào bên trong đều phải qua máy chủ pháo đài hay mọi thông tin từ bên trong ra bên ngoài cũng qua máy chủ pháo đài. Đặt ở điểm mà mạng nội bộ kết nối với Internet: đối mặt chính với các kẻ tấn công truy nhập. Figure 2-7: Kiến trúc Bastion Host 2.4.4. Screened host (máy chủ sang lọc) Cả server và router đều là thành phần của bức tường lửa. Về cấu trúc thì máy chủ sàng lọc có một router và một máy chủ để lọc thông tin. Chức năng an ninh cơ bản là do bộ lọc. Máy chủ nội bộ chỉ được phép kết nối Internet đối với một số dịch vụ hạn chế. Phần lớn các máy nội bộ phải sử dụng các dịch vụ đại diện trên các máy chủ nội bộ. Khi máy chủ có lỗ hổng an ninh thì thì mạng nộ bộ rễ bị tấn công. Nếu trường hợp router bị đánh thủng thì server nằm ngay trong mạng nội bộ bị tổn thương và chính vì vậy mạng nội bộ bị ảnh hưởng . Figure 1-8: Kiến trúc Screened host 2.4.5. Screened Subnet (mạng con) Screened Subnet dẫn xuất từ kiến trúc Screened host bằng cách thêm vào một tầng an toàn gọi là mạng ngoại vi (Perimeter network), nhằm cô lập mạng nội bộ ra với mạng bên ngoài và cô lập Bastion host bằng cách đặt chúng trên mạng ngoại vi, nhằm tránh sự lay lan khi bastion bị tổn thương. Screened Subnet có hai router. Rrouter ngoài được cấu hình để bảo vệ các máy chủ pháo đài và bộ định tuyến trong và mạng nội bộ. Các máy chủ pháo đài phục vụ như một điểm chính của mạng nội bộ liên hệ với các mạng Internet. Router trong ngăn cách máy chủ pháo đài với mạng nội bộ, khi hệ thống bảo mật trên pháo đài bị tổn thương thì máy chủ pháo đài cũng không thể bị lợi dụng làm bàn đạp để tấn công vào mạng nội bộ vì trong mạng nội bộ đã có một router trong bảo vệ. Như vậy Screened Subnet đã tạo nên một tầng bảo vệ lớn. Bastion host trong mạng ngoại vi là điểm tiếp xúc của kết nối đi vào từ bên ngoài. Ngoài ra nó còn phục vụ cho các máy bên trong truy cập mạng bên ngoài theo một vài hướng sau: Có thể cài đặt cả router giao tiếp với Internet và router giao tiếp với mạng nội bộ là packet filtering, điều này cho phép mạng nội bộ truy cập trực tiếp mạng bên ngoài. Có thể cài đặt một Proxy server trên một bastion host và mạng nội bộ từ Internet, điều này cho phép các mạng nội bộ truy nhập mạng bên ngoài gián tiếp. Router trong (Interior router) nó có chức năng packet filtering. Các dịch vụ mà router trong cho phép giữa Bastion host và mạng nội bộ, giữa mạng bên ngoài và mạng nội bộ không nhất thiết phải giống nhau. Giới hạn giữa dịch vụ bastion host và mạng nội bộ nhằm làm giảm số lượng máy có thể bị tấn công khi bastion host bị tổn thương. Hình 2.9. Cấu trúc firewall Screen Subnet. Trong các kiến trúc trên thì kiến trúc Screened Subnet được sử dụng nhiều nhất hiện nay. Trong mỗi một cơ quan bao giờ giờ cũng có một trang web để giới thiệu với bên ngoài và phải có giao dịch với bên ngoài. Do đó, họ phải dùng kiến trúc bưc tường lửa có kiểu Screened Subnet thì mới an toàn vì nếu dùng cấu trúc khác thì khi tin tặc tấn công được vào server thì mạng nội bộ sẽ bị tổn thương, có thể dẫn đến tê liệt mạng hoàn toàn. Chính vì vậy, mỗi một cơ quan nên sử dụng bức tường lửa có cấu trúc Screened Subnet là hợp lí nhất. Kết Chương: Trong Chương vừa rồi chúng ta đã tìm hiểu về Firewall, và đó là tập hợp thành phần làm nhiệm vụ ngăn cản hay điều khiển việc truy xuất giữa mạng ngoài và mạng nội bộ. Firewall được chia làm hai loại là Firewall ứng dụng và Firewall mức mạng. Firewall mức ứng dụng kiểm tra các lưu thông chi tiết hơn Firewall mức mạng và duy trì nhiều mô hình bảo mật hơn Firewall mức mạng nhưng lại thiếu tính trong suốt và khó hiểu. Có rất nhiều mô hình kiến trúc Firewall khác nhau mà người thiết kế mạng nên áp dụng các mô hình đó như thế nào đối với những bài toán cụ thể được đặt ra cho những yêu cầu khác nhau về tính bảo mật của cơ quan. Nhưng những thiết kế vẫn chủ yếu dựa trên cá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. Để có thể xây dựng được các chương trình bảo vệ mạng trong Linux, trước tiên chúng ta cần thực hiện việc cài đặt và cấu hình chương trình bảo vệ mạng vào trong hệ điều hành Linux. Ở đây cụ thể là chương trình Iptables trong Linux. CHƯƠNG III: IPTABLES TRONG LINUX Trong hệ thống Unix/Linux có rất nhiều Firewall. Trong đó có một số Firewall được cấu hình và hoạt động trên nền Console rất nhỏ và tiện dụng đó là Iptable và Ipchains 3.1 Giới thiệu Iptables - Ipchains - so sánh 3.1.1 Giới thiệu Ipchains : Ipchains - quản trị IP Firewall Một trong những phần mềm mà linux sử dụng để cấu hình bảng NAT của kernel là Ipchains. Bên trong chương trình Ipchains có hai trình kịch bản (script) chính có thể được sử dụng để đơn giản hoá công tác quản trị Ipchains Những Firewall cũ hơn của Linux không xử lý các packet phân mảnh, chỉ hỗ trợ các giao thức TCP, UDP hoặc ICMP. Không thể chỉ định những nguyên tắc ngược Ipchains được dùng để cài đặt, duy trì và kiểm tra các luật của IP Firewall trong Linux kernel. Những luật này có thể chia làm nhóm chuỗi luật khác nhau là: IP input chain (chuỗi luật input áp dụng cho các gói tin đi đến Firewall), IP output chain (áp dụng cho các gói tin được phát sinh cục bộ trên Firewall và đi ra khỏi Firewall), IP Forwarding chain (áp dụng cho các gói tin được chuyển tiếp tới máy hoặc mạng khác thông qua Firewall) và các chuỗi luật do người dùng định nghĩa (user defined). Ipchains sử dụng khái niệm chuỗi luật (chain) để xử lý các gói tin. Một chuỗi luật là một danh sách các luật dùng để xử lý các gói tin có cùng kiểu là gói tin đến, gói tin chuyển tiếp hay gói tin đi ra. Những luật này chỉ rõ hành động nào được áp dụng cho gói tin. Các luật được lưu trữ trong bảng NAT là những cặp địa chỉ IP chứ không phải từng địa chỉ IP riêng lẻ. Một luật Firewall chỉ ra các tiêu chuẩn cho packet và đích đến. Nếu packet không đúng, luật kế tiếp sẽ được xem xét, nếu đúng thì luật kế tiếp sẽ chỉ định rõ giá trị của đích có thể các chain do người dùng định nghĩa hay có thể là một trong các giá trị cụ thể sau: ACCEPT, DENY, REJECT, MASQ, REDICRECT hay RETURN * ACCEPT: Cho phép packet đi qua * DENY/DROP: huỷ packet mà không có trả lời thông báo cho client biết điều này. * REJECT: tương tự như DROP nhưng sẽ có trả lời cho client biết gói tin đã bị huỷ bỏ * MASQ: Chỉ hợp lệ đối với chain forward và chain do người dùng định nghĩa và được dùng khi kernel được biên dịch với CONFIG_IP_MASQUERADE. Với chain này packet sẽ được masquerade như là nó được sinh ra từ máy cục bộ, hơn thế nữa các packet ngược sẽ được nhận ra và chúng sẽ được demasqueraded một cách tự động, bỏ qua forwarding chain. * REDIRECT: Chỉ hợp lệ với chain input và chain do người dùng định nghĩa và chỉ được dùng khi Linux kernel được biên dịch với tham số CONFIG_IP_TRANSPARENT_PROXY được định nghĩa. Với điều này packets sẽ được chuyển tới socket cục bộ, thậm chí chúng được gửi đến host ở xa. 3.1.2 giới thiệu netfilter/Iptables 3.1.2.1 Giới thiệu Iptables Hình 3.1 vị trí Netfilter/Iptables trong Kernel Linux 2.4. Iptables là một tường lửa ứng dụng lọc gói dữ liệu rất mạnh, có sẵn bên trong kernel Linux 2.4.x và 2.6.x. Netfilter/Iptable gồm 2 phần là Netfilter ở trong nhân Linux và Iptables nằm ngoài nhân. 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.Hệ thống con Netfilter của Linux 2.4x cho phép cài đặt, duy trì, và kiẻm tra các quy tắc lọc gói tin trong Kernel. 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. Nó 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. Netfilter cung cấp 1 số ưu điểm và hiện nay nó đã trở thành một giải pháp mạnh mẽ và hoàn thiện hơn để giúp bạn bảo vệ các mạng cộng tác. Tuy nhiên, Netfilter cũng không phải là một giải pháp hoàn toàn mới. Nó là một khung làm việc để xử lý các gói tin khi chúng đi qua các thành phần của Kernel. Netfilter bao gồm: * Xây dựng bức tường lửa dựa trên cơ chế lọc gói stateless và 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õ 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ử sự đơn giản của các packet thoả thuậ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 hơn là trên 3 chain. * 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 sự kết nối, do đó nó an toàn hơn Firewall 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. 3.1.2.2 So sánh Iptables và Ipchains - Sự khác biệt đầu tiên mà chúng ta có thể thấy là tên của các chain xây dựng sẵn chuyển từ chữ thường sang chữ hoa. - Cờ “-i” bây giờ có nghĩa là giao diện đi vào (incoming interface) và chỉ làm việc trong chain INPUT và FORWARD. Các nguyên tắc trong chain OUTPUT hoặc FORWARD trước đây sử dụng “-i” được thay đổi thành “-o”. - Các cổng của TCP và UDP bây giờ cần đưa ra “- source-port hoặc –sport/--destination-port hoặc dport” được đặt sau “-p tcp” hoặc “-p udp”. - Cờ TCP –y bây giờ là –syn phải được đặt sau “-p tcp”. - DENY đích, bây giờ là DROP. - Tên chain có thể lên đến 16 ký tự. - REJECT và LOG bây giờ chúng có thể riêng biệt với kernel. - Iptables có một hệ thống con cho NAT riêng biệt 3.2 Cài đặt Iptables trong Kernel Iptables được cấu hình trong kernel khi thực hiện cài đặt. Để chạy Iptables các lựa chọn sau đây cần thiết trong khi cấu hình hoặc một trong số những lệnh liên quan. CONFIG_PACKET- lựa chọn này cho phép các ứng dụng và các tiện ích cần thiết để làm việc trực tiếp đến các thiết bị mạng khác nhau. Ví dụ tiện ích tcpdump hoặc snort. CONFIG_NETFILTER- lựa chọn này yêu cầu nếu bạn dùng máy tính của bạn như là 1 Firewall hoặc gateway cho Internet cần một trình điềukhiển cho một giao diện ví dụ bộ tích hợp ethernet, PPP và SLIP interface. CONFIG_IP_NF_CONTRACK – thành phần này cần cho theo dõi kết nối (connection tracking). Connection tracking được sử dụng trong các công việc khác (NAT và Masquerading). Nếu cần một máy Firewall trên mạng cục bộ thì cần đánh dấu lựa chọn này. Ví dụ thành phần này cần rc.fr.txt để làm việc CONFIG_IP_FTP- thành phần này là cần thiết nếu muốn theo dõi kết nối trên các kết nối FTP. Không cần lựa chọn này nếu không dùng FTP cho Firewall hoặc gateway CONFIG_IP_NF_IPTABLES- lựa chọn này cần thiết nếu muốn thực hiện bất kỳ loại lọc filtering, masquerading hoặc NAT. Nó thêm toàn bộ khung làm việc (framework) của Iptables vào kernel. Nếu không có lựa chọn này sẽ không thể làm được gì với Iptables CONFIG_IP_NF_MATCH_LIMIT - lựa chọn này không thực sự cần thiết nhưng nó cung cấp khả năng làm thế nào điều khiển số lượng packet trên phút được thoả điều kiện bằng một luật. Ví dụ: -m limit –limit 3/minute. Thành phần này có thể dùng để tránh sự tấn công từ chối dịch vụ. CONFIG_IP_NF_MATCH_MAC – cho phép các packet tương ứng với các địa chỉ vật lý MAC. Mỗi card mạng có một địa chỉ MAC riêng. Chúng ta có thể chặn các packet sử dụng địa chỉ mạng và hầu như chặn các máy tính với địa chỉ MAC vì MAC tương đối ổn định. Chúng ta không dùng lựa chọn này trong rc.Firewall.txt CONFIG_IP_NF_MATCH_MARK – Cho phép dùng đánh dấu một packet thoả điều kiện. CONFIG_IP_NF_MATCH_MULTIPORT – thành phần này cho phép các packet có thể thoả một dãy port đích hoặc port nguồn. CONFIG_IP_NF_MATCH_TOS – lựa chọn này có thể cho phép các packet thoả các giá trị trong TOS. TOS là kiểu của dịch vụ (type of service). TOS cũng có thể là tập hợp các luật trong bảng mangle và theo lệnh tp/tc. CONFIG_IP_NF_MATCH_TCPMSS - lựa chọn này cho phép các packet TCP tương ứng trên trường MSS CONFIG_IP_NF_MATCH_STATE – đây là sự khác biệt lớn nhất so với Ipchains. Với thành phần này chúng ta có thể lọc gói tích cực (stateful) trên các gói. Ví dụ: Nếu có lưu thông hai hướng trên kết nối TCP, packet này được xem như được thiết lập. modul này dùng phổ biến trong rc.Firewall.txt. CONFIG_IP_NF_MATCH_UNCLEAN – thành phần này sẽ thêm vào cho ta những packet IP, TCP,UDP tương ứng mà kiểu của nó không phù hợp hoặc không hợp lệ. Ví dụ chúng ta có thể huỷ các packet này nhưng không biết nó có hợp pháp hay không. Thành phần này vẫn còn đang thí nghiệm, chưa làm việc hoàn toàn trong các trường hợp CONFIG_IP_NF_MATCH_OWNER –lựa chọn này sẽ thêm cho chúng ta khả năng thực hiện trên chủ nhân của một socket. Ví dụ: Cho phép chỉ 1 người dùng root được truy cập Internet. Thành phần này vẫn còn đang thí nghiệm chưa làm việc hoàn toàn cho tất cả mọi người. CONFIG_IP_NF_FILTER- Thành phần này sẽ thêm vào bảng lọc cho phép thực hiện lọc ở tất cả. Trong bảng filter bạn sẽ không thấy INPUT, FORWARD, và OUTPUT chains. Thành phần này sẽ yêu cầu bạn thiết kế để thực hiện lọc các gói nhận và gửi. CONFIG_IP_NF_TARGET_REJECT - Cho phép chúng ta chỉ rõ một thông báo lỗi ICMP được gửi trả lời từ các packet đi vào thay vì huỷ chúng. CONFIG_IP_NF_TARGET_MIRROR - Cho phép các packet bị trả lại người gửi. Ví dụ: Nếu đặt MIRROR đích trên cổng đích trên chuỗi luật OUTPUT và ai đó cố gắn truy cập trên cổng này, chúng ta sẽ gửi trở lại người đó gói tin và cuối cùng chắc chắn người đó sẽ thấy được homepage của họ. CONFIG_IP_NF_NAT- thành phần này cho phép chuyển đổi địa chỉ mạng và truy cập bảng NAT trong iptables, lựa chọn này đòi hỏi nếu muốn làm một port chuyển tiếp hay masquerading. Lựa chọn này không đòi hỏi cho Firewall và masquerading cho mạng cục bộ. CONFIG_IP_NF_TARGET_MASQUERADE - thành phần này thêm hành động MASQUERADE. Lựa chọn này cho phép cấp IP động để gán địa chỉ IP cho giao diện CONFIG_IP_NF_TARGET_REDIRECT - Mục tiêu lựa chọn này để làm việc với các ứng dụng proxy, nói cách khác chúng ta có thể làm trong suốt proxy bằng cách này CONFIG_IP_NF_TARGET_LOG - Hành động này sử dụng cho ghi nhật ký sự kiện (LOG) với các packet do đó có thể biết được điều gì xảy ra packet. Thông tin này có ích cho kiểm tra an toàn, pháp lý và sửa lỗi. CONFIG_IP_NF_TARGET_TCPMSS (Maximum Segment Size)- lựa chọn này được sử dụng để đếm các nhà cung cấp dịch vụ Internet và server mà ngăn chặn sự phân mảnh packet ICMP. kết quả là một số trang web có thể không được đi qua, những mail nhỏ đi qua còn những mail lớn không qua được. CONFIG_IP_NF_COMPAT_IPCHAIN - Lựa chọn này cho phép thêm tích hợp với Ipchains khi chuyển từ Linux 2.2, 2.4 sang 2.6 CONFIG_IP_NF_COMPAT_IPFWADM - Lựa chọn này cho phép khả năng tương thích với Ipfwadm. 3.3 Cài đặt ứng dụng phần người dùng (user-land) Trước hết giải nén packet Iptables ở đây sử dụng packet Iptables 1.2.6a và kernel 2.4. Để mở gói, thông thường dùng bzip2 – cd Iptables – 1.2.6a.tar.bz2 | tar –xvf . gói sẽ được đưa vào thư mục Iptables – 1.2.6a. sau đó, lựa chọn cấu hình và cài đặt modul mở rộng cho kernel bằng cách chạy lệnh make pending-patches KERNEL_DIR=/usr/src/linux/ Biến KERNEL_DIR chỉ tới vị trí của mã nguồn kernel. Thông thường trong /usr/src/linux lệnh trên chỉ trả lời các đường dẫn chắc chắn để vào kernel nhưng có thể thêm vào các đường dẫn khác bằng câu lệnh make most-of-pom KERNEL_DIR=/usr/src/linux/ Câu lệnh trên sẽ hỏi về cách cài đặt các phần của Netfilter được gọi là Patch-0-matic, nhưng vẫn giữ lại các đường dẫn ban đầu. Các đường dẫn mà có thể bị xoá bỏ trong kernel. Chú ý rằng chúng ta có thể hỏi bởi đó là điều mà các lệnh này có thể thực hiện thực sự. Chúng hỏi bạn trước khi bất cứ cái gì bị thay đổi trong kernel source. để cài đặt tất cả trong patch-o-matic chúng ta sẽ thực hiện câu lệnh: make patch-o-matic KERNEL_DIR=/usr/src/linux/ Một vài thao tác thêm vào sẽ phá huỷ những phần khác nếu dùng patch-o-matic Bạn hoàn toàn có thể bỏ qua các bước trên nếu không muốn thêm vào kernel khi đó bạn không cần thực hiện các câu lệnh trên Bạn có thể biên dịch tạo một kernel mới bằng cách dùng các đường dẫn mới được thêm vào ở trên. Cấu hình lại kernel từ các đường dẫn mới chắc chắn không thể thêm từ các lựa chọn cấu hình. Bạn có thể biên dịch các đơn vị sau khi biên dịch của chương trình user-land Iptables nếu dùng nó. Tiếp tục biên dịch ứng dụng user-land Iptables. để biên dịch Iptables bạn đưa ra các câu lệnh đơn giản như là: make KERNEL_DIR=/usr/src/linux/ Để biên dịch chương trình, sau đó dùng lệnh để cài đặt chúng. KERNEL_DIR vị trí nguồn của kernel. make install KERNEL_DIR=/usr/src/linux/ Sử dụng để thay đổi Iptables, bây giờ có thể biên dịch lại hoặc cài đặt lại kernel và các thành phần. 3.4. Cách thức packet qua Firewall. Hình 3.2 Đường đi của packet. * FORWARD packet (chuyển packet): Một packet để cho host khác được gọi là FORWARD packet, đầu tiên nó chuyển qua chain PREOUTING (trước khi định tuyến) trong bảng mangle, tại đây packet có thể bị thay đổi thông số. Sau đó chuyển qua chain PREOUTING trong bảng NAT, đây là nơi nguyên tắc DNAT (Destination Network Addess Translation- chuyển đổi địa chỉ đích) được áp dụng vào. - Đối với packet đi vào máy, nó sẽ qua chain INPUT. Tại chain INPUT, packet có thể được chấp nhận hoặc huỷ bỏ. Tiếp theo packet sẽ được chuyển lên cho các ứng dụng (client/server) xử lí và tiếp theo là được chuyển ra chain OUTPUT. Tại chain OUTPUT, packet có thể bị thay đổi các thông số và bị lọc chấp nhận hay bị huỷ bỏ. - đối với packet forward qua máy, packet sau khi rời chain PREROUTING sẽ qua chain FORWARD trong bảng filter, tại chain forward chỉ những nguyên tắc lọc mới được áp vào (ACCEPT hoặc DENY). - Sau khi packet qua chain FORWARD hoặc chain OUTPUT sẽ được chuyển qua chain POSTROUTING (sau khi định tuyến) trong bảng NAT, trong chain này các nguyên tắc SNAT (source Network Address Tranlation - đổi địa chỉ IP nguồn) được áp vào hoặc MASQUERADE, cuối cùng packet được chuyển ra giao diện bên ngoài. * Send packet (gửi packet): packet được phát sinh trên host cục bộ, đầu tiên được chuyển sang chain OUTPUT của bảng mangle, sau đó chúng chuyển qua chain OUTPUT của bảng NAT, sau đó chuyển qua chain OUTPUT của bảng filter. Khi packet chuyển qua chain này, hệ thống xác định nơi packet được định tuyến, khi đã quyết định được định tuyến packet chuyển qua chain POSTOUTING trong bảng NAT, đây là nơi nguyên tắc SNAT được áp vào, packet chuyển qua giao diện thích hợp. * Receive packet (Nhận packet): packet được chuyển đến host cục bộ, đầu tiên nó được chuyển đến chain PREOUTTING trong bảng mangle, sau đó được chuyển qua chain PREOUTING trong bảng NAT. Đây là nơi nguyên tắc DNAT được áp vào, sau khi nguyên tắc DNAT được áp vào thì định tuyến được quyết định, sau đó packet được chuyển qua chain OUTPUT trong bảng filter, cuối cùng packet được chuyển vào tiến trình hoặc ứng dụng thích hợp. 3.5. Các bảng và chuỗi luật Khi một gói tin đầu tiên tới Firewall, phần cứng sẽ tiếp nhận nó và sau đó chuyển tiến trình điều khiển thiết bị tương ứng trong nhân hệ điều hành. Sau đó, gói tin sẽ bắt đầu đi qua một loạt các bước trong nhân hệ điều hành, trước khi nó được gửi tới ứng dụng cục bộ hoặc là được chuyển tiếp đến máy tính khác hay chịu tác động nào đó của nhân hệ điều hành. Một mặt mạnh của Iptables là ở chỗ nhiều bảng có thể được sử dụng để quyết định “số phận” của một gói tin nào đó, phụ thuộc vào kiểu của gói tin đang được kiểm tra. Và hành động được thực hiện trên gói tin đó. Bảng mặc định, bảng filter, có chứa các chuỗi luật được xây dựng sẵn: INPUT, OUTPUT, và FORWARD. Theo mặc định Iptables chứa hai bảng bổ sung dùng để thực hiện các công việc lọc gói xác định. Bảng NAT và bảng Mangle. Mỗi bảng chứa tập hợp các chuỗi luật mặc định và các hành động. Khi các chuỗi luật được thảo mãn, thì các hành động đã được áp dụng vào gói tin. Các hành động có thể khác nhau tương ứng với mỗi bảng hoặc thậm chí là chuỗi mà nó chiếm giữ. Tuy nhiên, người dùng cũng được phép định nghĩa những chuỗi luật mới trong các bảng. 3.5.1 Bảng Nat chỉ được sử dụng để chuyển đổi địa chỉ tĩnh hoặc động trên những gói tin. Nói cách khác, nó chỉ được dùng để chuyển đổi trường địa chỉ nguồn hay trường địa chỉ đích của gói tin, tuỳ theo luật được chỉ ra. Các gói tin trong một dòng dữ liệu (stream) chỉ đi qua bảng này một lần. giả sử gói đầu tiên của một dòng dữ liệu được cho phép (chỉ có gói đầu tiên trong một dòng dữ liệu sẽ vấp phải chuỗi này). Phần gói còn lại trong dòng dữ liệu sẽ được tự động thay đổi địa chỉ và sẽ phải chịu cùng các tác động như gói đầu tiên. - 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ộ. Để 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

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

  • docxTin13.docx
Tài liệu liên quan