Đăng ký Đăng nhập
Trang chủ Bảo mật trong linux ...

Tài liệu Bảo mật trong linux

.DOC
21
1
53

Mô tả:

Bộ Công Thương Trường Đại Học Công Nghiệp Hà Nội Khoa Công nghệ thông tin  Báo cáo bài tập lớn Môn: Hệ Điều Hành Đề tài : Bảo mật trong Linux Lớp:KHMT1-K3 Giáo viên hướng dẫn Nhóm 3 : Thầy Nguyễn Thanh Hải Hà Nội 1 Mục lục 1. Quan điểm về bảo mật……………………………………………….. 4 2. Các bước ban đầu trong việc thiết kế một hệ thống an ninh……… 6 2.1 Ngắt kết nối tới các mạng không mong muốn……………………. 6 2.2 Bảy điều không bao giờ nên làm để bảo mật hệ thống…………... 7 2.2.1 Không bao giờ sử dụng những mật khẩu đơn giản hoặc dễ đoán.. 7 2.2.2 Không sử dụng tài khoản gốc trừ khi thật cần…………………… 7 2.2.3 Không được chia sẻ các mật khẩu của bạn……………………… 8 2.2.4 Đừng tin tưởng một cách mù quáng những file nhị phân mà được đưa cho bạn…………………………………………………………. 8 2.2.5 Đừng bỏ qua các file log…………………………………………. 9 2.2.6 Đừng để hệ thống của bạn không được cập nhật………………… 9 2.2.7 Đừng quên về bảo mật vật lí……………………………………... 9 3. Cấu hình TCP Wrapper……………………………………………... 9 3.1 Sử dụng TCP Wrapper với inetd………………………………….. 10 3.2 Sử dụng TCP Wrapper với xinetd………………………………… 10 3.3 /etc/hosts.allow và /etc/hosts.deny…………………………………. 10 4. Tường lửa: Lọc IP của các gói tin…………………………………... 12 4.1 Netfilter cơ bản……………………………………………………... 13 4.2 Phát triển các bộ qui tắc lọc IP……………………………………. 17 4.3 Quản lí lọc IP và các file kịch bản………………………………… 18 4.4 Cấu hình ví dụ với netfilter………………………………………... 18 4.4.1 Ví dụ lọc IP đơn giản……………………………………………..... 18 4.4.2 Giao thức lọc IP để bảo vệ toàn bộ mạng máy tính…………………. 21 2 Lời nói đầu Hệ điều hành Linux đang phát triển rất mạnh trên thế giới, các ưu điểm mà hệ điều hành này mang lại là vô cùng to lớn, tuy nhiên ở Việt Nam hệ điều hành này vẫn chưa được nhiều người biết đến và sử dụng một cách thành thạo như các hệ điều hành khác (Windows là một hệ điều hành rất nổi tiếng mà phần lớn máy tính ở Việt Nam được cài đặt và sử dụng). Nhằm tìm hiểu sâu hơn về hệ điều hành này, nhóm Sinh viên chúng em quyết định chọn hệ điều hành Linux làm đề tài cho bài tập lớn môn Hệ điều hành, và sẽ đi tìm hiểu chi tiết về hệ thống bảo mật của nó. Ngày nay vấn đề an ninh mạng cũng đang là một trong những vấn đề nóng trong lĩnh vực Công nghệ thông tin, tìm hiểu những khái niệm cơ bản, những phương pháp đảm bảo an ninh cho hệ thống máy tính là một đòi hỏi đối với sinh viên ngành Công nghệ thông tin. Để hoàn thành bài tập lớn chúng em đã tham khảo rất nhiều tài liệu về hệ điều hành Linux trong đó chủ yếu là ở tài liệu mà thầy đã cung cấp (Running Linux, 4th Edition). Vì thời gian làm bài tập lớn của chúng em có phần hơi hạn hẹp do đó kết quả vẫn còn nhiều thiết sót. 3 BẢO MẬT CƠ BẢN TRONG LINUX Trong phần này chúng ta sẽ thảo luận về hệ thống bảo mật cơ bản của Linux. Bảo mật là một chủ đề luôn luôn quan trọng, đặc biệt với sự gia tăng sử dụng của các hệ thống mạng kết nối cố định mà dễ bị tổn thương do bị tấn công từ xa trong khi không được giám sát Rất nhiều kĩ thuật tốt nhất là đơn giản nhất, thường bị thực tiễn bỏ qua, chúng ta sẽ khám phá chúng trước. Sau đó sẽ chuyển sang một vài chủ đề ít rõ ràng hơn, và chúng ta sẽ kết thúc bằng một cuộc thảo luận ngắn về một chủ đề khá phức tạp trong bảo mật mạng. Chúng ta cũng sẽ thảo luận một vài hướng dẫn về tường lửa để bảo vệ các quá trình cài đặt đơn giản chống lại các cuộc tấn công mạng. 1. Quan điểm về hệ thống bảo mật Có một quan điểm đúng đắn, công bằng về một hệ thống bảo mật đôi khi là rất khó. Phương tiện hướng tới các câu chuyện giật gân liên quan tới các hệ thống bảo mật, đặc biệt khi chúng bao gồm các công ty hoặc các viện nghiên cứu nỗi tiếng. Mặt khác, quản lí bảo mật có thể là một thách thức về mặt kĩ thuật và là một công việc tốn khá nhiều thời gian. Rất nhiều người dùng Internet giữ cách nhìn rằng hệ thống của họ giữ những dữ liệu không có giá trị, bảo mật không nhiều. Số khác nỗ lực thật nhiều để bảo vệ hệ thống của họ khỏi việc sử dụng trái phép. Dù bạn nằm ở nhóm nào bạn cũng nên nhận thức rằng luôn có một sự rủi ro, nguy hiểm mà bạn sẽ trở thành nạn nhân của một cuộc tấn công bảo mật. Có rất nhiều lí do, chẳng hạn như tại sao ai đó thích tấn công vào hệ thống bảo mật của bạn. Giá trị của dữ liệu trên hệ thống của bạn chỉ là một trong số đó, chúng ta sẽ thảo luận về những cái khác tiếp theo trong những phần sau. Hệ thống bảo mật truyền thống tập trung vào các hệ thống có thể truy cập thông qua một thiết bị cuối được kết nối hoặc một kết nối trực tiếp. Trong lĩnh vực này nguy hiểm lớn nhất một cách tiêu biểu đến từ bên trong tổ chức sở hữu hệ thống, và dạng bảo mật tốt nhất là bảo vệ mức vật lí, nơi mà các console, các thiết bị cuối và host ở trong những "phòng" bị khóa. Thậm chí khi hệ thống máy tính được khởi động và kết nối vào mạng, truy cập vẫn rất hạn chế. Các mạng đang sử dụng thường đắt để truy cập, hoặc bị đóng mà không cho phép các kết nối tới host từ bất kì nơi nào. Sự phổ biến của Internet đã làm tăng một làn sóng mới về bảo mật liên quan tới mạng. Một máy tính kết nối Internet mở ra khả năng lạm dụng của hàng vạn host trên toàn thế giới. Trên Internet, một số lượng có nhiều các dạng hành vi khó gần, gây khó khăn cho các nhà quản trị hệ thống. Vì thế chúng ta sẽ đề cập đến chúng, đó là:  Denial of service (DoS) (Từ chối dịch vụ) Loại tấn công này làm giảm hoặc phá vỡ một dịch vụ trên hệ thống.  Intrusion (Xâm nhập) Loại tấn công này truy cập vào hệ thống bằng cách đoán các mật khẩu hoặc vạch trần các dịch vụ (service). Một khi kẻ xâm nhập đã truy cập được vào hệ thống, chúng có thể phá hỏng hoặc ăn cắp dữ liệu hay sử dụng hệ thống đích để tiến hành các cuộc tấn công khác trên một host khác. 4  Snooping (Rình mò) Loại tấn công này bao gồm việc chặn dữ liệu của các người dùng khác và nghe ngóng mật khẩu hoặc các thông tin nhạy cảm khác. Đôi khi loại tấn công này cũng bao gồm việc sửa đổi dữ liệu. Snooping thường bao gồm việc nghe trộm trên các kết nối mạng, nhưng cũng có thể được thực hiện bằng cách vạch trần một hệ thống để chặn thư viện hoặc các lời gọi hệ thống mà mang các thông tin nhạy cảm (thông tin cá nhân, mật khẩu hay thông tin tín dụng...)  Viruses, worms, and Trojan Horses (Virus, sâu và Trojan Horses) Những loại tấn công này mỗi loại đều dựa vào một hành động của người sử dụng hoặc hệ thống để chạy các chương trình được cung cấp bởi kẻ tấn công. Các chương trình có thể được nhận trong một thư điện tử, hoặc từ một website, hay thậm chí ở trong một vài chương trình nhìn bề ngoài tưởng như vô hại được nhận ở đâu đó trên Internet và được cài vào máy cục bộ. Một cách chung, DoS tấn công chủ yếu bằng việc tự tạo ra một số lượng lớn các yêu cầu (request) bất thường tới một dịch vụ được cung cấp bởi một hệ thống. Sự tấn công ồ ạt của hành động này có thể làm hệ thống host dốc hết bộ nhớ, sức mạnh tính toán hay băng thông mạng. Và kết quả, các yêu cầu xa hơn khác tới hệ thống bị từ chối, hoặc làm giảm hiệu suất của hệ thống xuống một mức không thể sử dụng được. Để cuộc tấn công có thể thực hiện được, kẻ tấn công phải tấn công một dịch vụ được thiết kết nghèo nàn hoặc có khả năng tự tạo ra một số lượng các yêu cầu (request) vượt quá khả năng của một dịch vụ có thể đáp ứng. Một dạng quỉ quyệt của tấn công DoS là DDoS, từ chối dịch vụ phân tán. Trong dạng tấn công này, một số lượng lớn các máy tính làm nguyên nhân tạo ra các yêu cầu tới một dịch vụ. Điều này làm tăng sự nguy hại của một cuộc tấn công DoS theo hai hướng: bằng cách chôn vùi đích tấn công với một lượng lớn các yêu cầu, và bằng cách ẩn thủ phạm đằng sau hàng ngàn người tham gia không có ý thức. Bằng việc sử dụng một lượng lớn các máy chủ từ đó tiến hành một cuộc tấn công cũng làm cho tấn công DDoS trở nên khó khăn để điều khiển hơn rất nhiều và không thể cứu chữa một khi nó đã xảy ra. Thậm chí những người mà không có liên quan gì với trạng thái của dữ liệu của họ cũng nên bảo vệ chính họ khỏi dạng tấn công này, để giảm thiểu tối đa mức nguy hiểm của việc trở thành kẻ tòng phạm không có ý thức trong một cuộc tấn công DDoS chống lại một ai đó khác. Dạng thứ hai của tấn công, đôi khi được gọi là cracking, là một trong những dạng mà hầu hết mọi người đều tiếp xúc trong vấn đề bảo mật. Các công ty và các tổ chức thường lưu trữ các thông tin nhạy cảm của họ trên một hệ thống máy tính có thể được nối mạng và truy cập với nhau. Một ví dụ chúng nhất liên quan tới một người dùng Internet trung bình là lưu trữ thông tin chi tiết của thẻ tín dụng bởi các website. Nơi mà khuyến khích các cá nhân không lương thiện cố truy cập và ăn cắp sử dụng sai mục đích, lạm dụng loại thông tin nhạy cảm này. Đôi khi các biện pháp mà được sử dụng để chống lại các truy cập bất hợp pháp hoặc làm sập các dịch vụ rất tài tình, khéo léo, nếu hợp đạo đức. Thiết kế một cơ chế xâm nhập thường yêu cầu một sự hiểu biết vững chắc về hệ thống đích để khám phá ra lỗ hổng. Thường thường, một khi một cơ chế xâm nhập đã được khám phá ra, nó được 5 đóng gói trong dạng của một cái được gọi là rootkit, một tập hợp các chương trình hoặc kịch bản mà bất kì ai sở hữu chỉ với một chút hiểu biết cơ bản cũng có thể sử dụng để khai thác một lỗ hổng bảo mật. Khoảng rộng lớn chính yếu của các kẻ xâm nhập là được chạy bởi một "script kiddies" mà sử dụng những bộ xâm nhập được đóng gói trước mà không cần bất kì hiểu biết thực tế hệ thống mà chúng tấn công. Chúng ta sẽ thảo luận những cách khác nhau để bảo vệ hệ thống trong phần này. 2. Các bước ban đầu trong việc thiết lập một hệ thống an ninh Có một vài thứ rất cơ bản mà bạn có thể làm để bảo vệ một hệ thống Linux tránh khỏi hầu hết các rủi ro an ninh cơ bản. Tất nhiên, phụ thuộc vào việc bạn cấu hình, cách thức mà bạn sẽ sử dụng hệ thống của bạn..., chúng có thể rắc rối hơn việc cài đặt đơn giản được mô tả ở dưới đây. Trong phần này chúng ta sẽ khám phá một cách ngắn gọn cơ chế cơ bản để bảo vệ một hệ thống Linux khỏi hầu hết các cuộc tấn công thông thường - đây là một trong những cách tiếp cận cơ bản mà tách giả thấy được trong khi cài cho một chiếc máy mới. 2.1. Ngắt kết nối tới các mạng không mong muốn Bước đầu tiên trong việc bảo mật cho một hệ thống Linux là ngắt kết nối hay vô hiệu hóa tất cả các mạng ma và các dịch vụ mà bạn không cần. Một cách cơ bản, bất kì cổng mạng nào mà hệ thống đang chờ kết nối đều có thể nguy hiểm, bởi vì đó có thể là một sự khai thác bảo mật dựa vào một mạng ma sử dụng cổng đó. Cách nhanh nhất để tìm ra những cổng nào được mở là sử dụng netstat -an, được chỉ ra dưới đây (tuy nhiên chúng ta sẽ bỏ đi một vài dòng): # netstat -an Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:7120 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN Ở đây chúng ta thấy rằng hệ thống này đang nghe ngóng cho những kết nối trên cổng 7120, 6000 và 22. Nhìn vào /etc/services, hoặc sử dụng -p với lệnh netstat, có thể thường tiết lộ mạng ma nào đang giao tiếp với những cổng đó. Trong trường hợp này nó là X font server, X Window System server và ssh. Nếu bạn nhìn thấy rất nhiều những cổng khác mở - cho những thứ như telnetd, sendmail...hãy tự hỏi bạn xem liệu bạn có thực sự cần những deamons đó chạy không. Qua thời gian, những vấn đề bảo mật sẽ càng bộc lộ, và trừ phi bạn có nhiều kinh nghiệm trong việc theo dõi tất cả những cập nhật bảo mật, nếu không hệ thống của bạn có thể bị tổn thương từ những cuộc tấn công. Bởi vậy, telnetd, ftpd, và rshd tất cả bao gồm gửi các mật khẩu thông qua mạng Internet cho việc chứng thực, một giải pháp tốt hơn là sử dụng sshd, nó mã hóa dữ liệu và sử dụng một cơ chế chứng thực mạnh hơn. Thậm chí nếu bạn chưa bảo giờ sử dụng telnetd thì để nó chạy trên hệ thống của bạn không phải là một ý kiến hay trong trường hợp một ai đó cố tìm một cách phá vỡ nó. Ngắt các dịch vụ thường phải chỉnh sửa các file cấu hình tương ứng cho bản phân phối của bạn và khởi động lại hệ thống. Trên các hệ thống Red Hat, ví dụ, nhiều deamons được bắt đầu bằng các kịch bản trong thư mục /etc/rc.d/init.d. 6 Đổi tên hoặc gỡ bỏ những file kịch bản đó có thể ngăn chặn deamons tương ứng từ lúc khởi động. Những deamon khácđược khởi động bởi inetd hoặc xinetd trong việc trả lời các kết nối mạng; sửa những cấu hình của những hệ thống đó có thể giới hạn tập hợp các daemon chạy trên hệ thống của bạn. Nếu bạn thực sự cần một dịch vụ chạy trên máy của bạn (chẳng hạn như X server), hãy tìm những cách để ngăn chặn các kết nối tới dịch vụ đó từ những máy chủ không mong muốn, chẳng hạn, sẽ là an toàn nhất để cho phép kết nối ssh chỉ từ những máy chủ tin tưởng, chẳng hạn chỉ từ những máy trong mạng nội bộ của bạn. Trong trường hợp của X server và X font server, cái mà chạy trên nhiều máy Linux, thường không có lí do để cho phép các kết nối tới những daemon từ bất kì thứ gì ngoài chính mạng cục bộ. Lọc các kết nối tới những daemon có thể được thực hiện bởi TCP wrapper hoặc IP filtering, chúng ta sẽ mô tả trong phần sau. 2.2. Bảy điều không bao giờ nên làm để bảo mật hệ thống Phần này sẽ tổng kết lại các lỗi bảo mật phổ biến nhất (Không phải thực sự chỉ có 7, nhưng đó là những lỗi đủ xứng đáng nằm trong top). Một cách kiên định tránh tất cả những lỗi này là công việc khó. 2.2.1. Không bao giờ sử dụng những mật khẩu đơn giản hoặc dễ đoán Không bao giờ sử dụng một mật khẩu mà giống (hoặc có liên quan tới) ID của bạn, hoặc tên, sinh nhật, tên công ty, hay tên của con cún của bạn. Nếu bạn là một người yêu thích ô tô đừng bao giờ sử dụng tên kiểu xe hoặc biển số đăng kí xe ô tô của bạn. Nếu bạn yêu thích động vật cũng đừng bao giờ đặt mật khẩu là tên đăng kí của động vật đó - từ đó bạn rút ra ý tưởng. Luôn đảm bảo rằng mật khẩu của bạn không phải là những từ ngữ đơn giản mà có thể tìm thấy trong từ điển. Mật khẩu tốt nhất là những câu vô lý. Một thói quen tốt là sử dụng một mật khẩu dựa trên một qui tắc đơn giản mà bạn có thể nhớ. Ví dụ, bạn có thể chọn một qui tắc giống như: kí tự cuối cùng của mỗi từ trong cụm từ “Mary had a little lamb, its fleece was white as snow," do đó mật khẩu của bạn sẽ là "ydaebsesesw". Một kĩ thuật chúng khác là sử dụng số và hệ thống dấu chấm câu trong mật khẩu. Thực vậy vì có một vài chương trình mật khẩu yêu cầu điều này. Một sự kết hợp của hai kĩ thuật sẽ là tốt hơn. 2.2.2. Không sử dụng tài khoản gốc trừ khi thật cần Một trong những lí do mà nhiều hệ điều hành (chẳng hạn Windows) có thể bị tổn thương do những cuộc tấn công qua virus email và điều này giống như việc thiếu một hệ thống quyền toàn diện. Trong những hệ thống như vậy, bất kì người dùng nào có quyền truy cập vào bất kì file nào, chạy bất kì chương trình nào hoặc cấu hình lại theo bất kì cách nào. Bởi vì một người dùng có thể dễ dàng chạy một chương trình nên có thể gây nguy hại cho hệ thống. Trái lại, mô hình bảo mật của Linux giới hạn một khoảng rộng các tác vụ được phân quyền, chẳng hạn như cài một phần mềm mới hay chỉnh sửa bất kì file cấu hình nào thành người sử dụng gốc (root user) . Không được sử dụng tài khoản gốc cho mọi thứ! Nếu làm vậy bạn sẽ bỏ đi một trong những phần mạnh nhất để chống lại virus và "Trojan Horse. Luôn sử dụng một tài khoản thường (normal user) và sử dụng lệnh su hoặc lệnh sudo để tạm thời đạt được truy cập gốc khi bạn cần thực hiện một tác vụ được phân quyền. Ngoài 7 ra có một lợi ích nữa trong việc giới hạn việc sử dụng của tài khoản gốc: logging (ghi lại các sự kiện của hệ thống dựa trên các hành vi của người dùng hoặc hành vi của các thành phần trong hệ thống). Lênh su và lệnh sudo viết những thông điệp tới file log của hệ thống khi chúng được yêu cầu, trong khi thực thi lênh su và lệnh sudo có đề cập đến ID của người sử dụng. Điều này rất có ích cho việc theo dõi các quyền gốc đã được sử dụng và bởi ai. 2.2.3. Không được chia sẻ các mật khẩu của bạn Không được nói cho bất kì ai mật khẩu của bạn, không bao giờ. Điều này có nghĩa là bạn không nên viết mật khẩu của bạn trên bất kì sticky nào được dán trên màn hình của bạn hoặc trong nhập kí của bạn được để ở ngăn kéo trên cùng. Nếu bạn muốn cho phép ai đó tạm thời truy cập tới hệ thống của bạn, hãy tạo một tài khoản tạm cho họ sử dụng. Điều này cho phép bạn thuận tiện theo dõi những gì họ làm, và bạn có thể dễ dàng xóa chúng đi sau khi xong việc. Nếu bạn thực sự tin tưởng ai đó với tài khoản gốc của bạn hãy sử dụng lệnh sudo, lệnh mà cho phép bạn đưa các người sử dụng gốc truy cập mà không tiết lộ mật khẩu gốc. 2.2.4. Đừng tin tưởng một cách mù quáng những file nhị phân mà được đưa cho bạn Trong khi rất là thuận tiện để tải về và cài đặt những file nhị phân trên máy của bạn, bạn nên luôn đặt câu hỏi bạn tin tưởng bao nhiêu vào những file nhị phân đó trước khi chạy chúng. Nếu bạn đang cài gói phần mềm mà được download trực tiếp từ sites chính thức hoặc một site phát triển những file nhị phân đó, bạn có thể hoàn toàn tin tưởng rằng phần mềm đó là an toàn. Nếu bạn lấy chúng từ một site ánh xạ site không chính thức, bạn cần xem xét bạn tin tưởng bao nhiêu vào người quản trị của site. Rất có thể rằng một ai đó đang phân phối một bản đã được sửa đổi của phần mềm với một cửa sau mà sẽ cho phép ai đó được phép truy cập vào máy tính của bạn. Ví dụ tổ chức Debian đang phát triển một cách thức cho việc phê chuẩn một gói phần mềm để xác nhận rằng nó chưa bao giờ được sửa đổi. Các bản phân phối khác được đảm bảo để chấp nhận các kĩ thuật tương tực để bảo vệ tính toàn vẹn của gói phần mềm thuộc sở hữu của họ. Nếu bạn muốn cài và chạy một chương trình mà đã được đưa cho bạn dưới dạng nhị phân, có một vài thứ mà bạn có thể làm để giảm tối thiểu nguy hiểm. Không may mắn, không có kĩ thuật nào là dễ dàng nếu bạn là một người mới làm quen trong môi trường Linux. Đầu tiên, luôn chạy những chương trình không tin tưởng dưới một tài khoản không phải tài khoản gốc. trừ phi chương trinh đặc biệt yêu cầu những quyền của người dùng gốc để thực hiện. Điều này sẽ chứa các thiệt hại mà chương trình có thể làm, ảnh hưởng chỉ tới các file và các thư mục của người sử dụng đó. Nếu bạn muốn nhận một vài ý tưởng về những gì chương trình có thể làm trước khi bạn chạy nó,bạn có thể chạy một đoạn chương trình và lấy ra các chuỗi. Nó sẽ chỉ ra cho bạn tất cả các chuỗi mà được code cứng vào trong chương trình. Bạn nên tìm kiếm xem có bất kì tham chiếu nào tới file hoặc thư mục nào đó không, chẳng hạn etc/passwd, /bin/login, etc. Nếu bạn nhìn thấy một tham chiếu tới một file quan trọng, bạn nên tự hỏi mình xem liệu đó có phải là mục đích củchương trình trong câu hỏi. Nếu không hãy coi chừng. Nếu bạn thiên về kĩ thuật, bạn có thể xem 8 xét lần đầu tiên chạy chương trình và xem nó đang làm gì,sử dụng một chương trình theo dõi chẳng hạn như strace hoặc Itrace, cái mà sẽ hiển thị hệ các lời gọi và thư viện hệ thống mà chương trình đang gọi. Nhìn vào cá tham chiếu tới các file hệ thống hoặc các hoạt động mạng khác thường trong traces 2.2.5. Đừng bỏ qua các file log Các file log trong hệ thống của bạn là những người bạn tốt của bạn, và chúng có thể nói cho bạn biết rất nhiều về những gì đã xảy ra trong hệ thống của bạn. Bạn có thể tìm thông tin về chúng mỗi khi các kết nối mạng được yêu cầu tới hệ thống của bạn, ai đã sử dụng tài khoản gốc, và ai cố gắng đăng nhập bị sai. Bạn nên kiểm tra file log một cách định kì và để biết điều gì là bình thường, và hữu ích hơn cái gì là không bình thường. Nếu bạn nhìn thấy một vài thứ khác thường, hãy nghiên cứu tỉ mỉ. 2.2.6. Đừng để hệ thống của bạn không được cập nhật Hãy luôn giữ phần mềm trong hệ thống của bạn được cập nhật, điều này giúp đảm bảo rằng tất cả các lỗi bảo mật được sửa chữa và áp dụng. Hầu hết các bản phân phối Linux cung cấp một tập hợp các gói mà chỉ sửa chữa các lỗi bảo mật, bởi vậy bạn không phải lo lắng về kết quả, chẳng hạn file cấu hình và những đặc điểm thay đổi để giữ hệ thống của bạn được bảo mật. Bạn nên theo dõi những sự cập nhật này. 2.2.7. Đừng quên về bảo mật vật lí Hầu hết các lỗ thủng bảo mật được thực hiện bởi những người bên trong tổ chức chạy hệ thống đích. Tất cả các cấu hình an ninh cho phần mềm trong thế giới sẽ chẳng là gì nếu ai đó có thể bật máy tính và boot từ một đĩa mềm chứa code lợi dụng tấn công. Nếu máy của bạn sử dụng một BIOS hoặc hệ thống thông báo rằng cho phép thứ tự thiết bị boot đã được cấu hình hãy thiết lập boot từ đĩa mềm và đĩa CD sau đĩa cứng. Nếu BIOS của bạn cung cấp hỗ trợ đặt mật khẩu bạn hãy cấu hình để sử dụng nó. Nếu bạn có thể khóa case của máy lại hãy làm như vậy. Nếu bạn có thể giữ máy trong một vùng an toàn về mặt vật lí chẳng hạn trong một căn phòng được khóa, như vậy sẽ rất tốt. 3. Cấu hình TCP Wrapper Như chúng ta đã biết sự kết nối máy tính của bạn với một hệ thống mạng lớn càng làm tăng sự nguy hiểm bị tấn công. Sự phán đoán chung không thuộc phương thức nào, nó là thời gian đợi đóng lại ở an ninh mạng cơ sỏ. bây giờ chúng ta thảo luận về việc làm giảm sự nguy hiểm không mong muốn khi truy cập mạng, sử dụng công cụ trình bao bọc cấu hình TCP. Cơ chế wrap này hiện hữu như một dịch vụ( giống như dịch vụ mail), một chương trình nối mạng mà nối với nó và từ chối từ các địa chỉ trái phép. Nó là cách đơn giản để thêm dịch vụ điều khiển truy cập, nó không thể tự sáng tạo mà hầu hết dùng chung với chương trình inet hoặc xinetd deamons(chương trình của UNIX , sử dụng trong nền sau mà người sủ dụng không biết đến sự có mặt của nó). TCP Wrapper gần giống với một đội bảo vệ, “bạn phải tìm một lối vào rộng hơn.” Khi bạn tới gần một khu vực(chuẩn bị đăng nhập), đội bảo vệ sẽ có thể hỏi tên và địa chỉ của bạn. Đội bảo vệ tra cứu danh sách khách( gues), nếu bạn được cho phép, đội bảo vệ sẽ dẹp sang một bên và cho bạn đăng nhập hệ thống. khi một kết nối mạng được bảo vệ bởi TCP 9 Wrapper thì Wrapper sẽ là vật đầu tiên bảo vệ nó. Wrapper sẽ kiểm tra nguồn gốc của sự nối mạng sử dụng máy chủ và địa chỉ sau đó sẽ kiểm tra nó có trong danh sách cho phép đăng nhập không. Nếu tên và địa chỉ của máy trạm đó khớp với trong danh sách thì Wrapper sẽ dẹp sang một bên và chính thức cho phép máy trạm đăng nhập hệ thống. Đó là hai cách mà bạn có thể sử dụng Linux cấu hình và phân phối. Nếu bạn sử dụng Inetd để quản lý( kiểm tra xem file /etc/inetd.conf có đang tồn tại không), TCP Wrapper sẽ thực hiện bổ sung lời gọi chương trình đặc biệt tcpd. Nếu bạn sử dụng xinted(kiểm tra thư viện /etc/xinetd.d ), xinetd sẽ luôn luôn sử dụng TCP Wrapper ngay lập tức. Và sau đây, chúng ta sẽ nghiên cứu chúng cụ thể. 3.1. Sử dụng TCP Wrapper với inetd Nếu bạn sử dụng inet daemon để khởi chạy dịch vụ mạng, nó có thể phải hiệu chỉnh file /etc/inetd.conf của bạn để chạy TCP Wrapper. Hãy sử dụng lệnh finger daemon kiểm tra xem người dùng nào đó có đang sủ dụng internet hay không, nó sẽ cho thông tin về người sủ dụng đó về tên và địa chỉ, ví dụ: in.fingerd. ngôn ngữ cơ sỏ thay thế việc sử dụng infinger daemon, inetd sủ dụng tcpd daemon để thay thế. Tcpd thực hiện TCP wrapper và sau đó chạy in.fingerd tại nơi mà sự kết nối được chấp nhận. TCP wrapper yêu cầu thay đổi rất đơn giản file /etc/inetd.conf. Với lệnh finger daemon, bạn cần có một danh sách các file ví dụ như sau: # /etc/in.fingerd finger daemon finger streamtcp nowaitroot /usr/sbin/in.fingerd in.fingerd Đó là lí do lệnh tcpd được sử dụng để thay thế lệnh in.fingerd. Tên đầy đủ của lệnh finger daemon được khóa với tcpd như một đối số, và tcpd sử dụng đối số đó và khởi tạo lệnh thực sau khi nó được xác nhận là đã được cho phép đăng nhập. Bạn nên tạo sự thay đổi này cho các chương trình daemon mà bạn muốn bảo vệ. Trên hầu hết các hệ thống Linux, bạn có thể tìm thấy tcpd tự định cấu hình, nên sự thay đổi đó không là cần thiết. 3.2. Sử dụng TCP Wrapper với xinetd Xinetd được sử dụng để thay thế cho inetd vì vài sự phân phối (ví dụ như Red hat) là một điển hình. Trong hầu hết các trường hợp thì xinetd có xây dựng hỗ trợ cho TCP Wrapper, tất cả các thứ để bạn thay đổi cấu hình tập tin TCP Wrapper(/etc/hosts.allow and /etc/hosts.deny) cũng được mô tả trong phần tiếp. Nếu tự bạn đã cài xinetd thì được chắc chắn sự hỗ trợ cho TCP Wrapper. 3.3. /etc/hosts.allow và /etc/hosts.deny TCP Wrapper sử dụng hai file cấu hình /etc/hosts.allow và /etc/hosts.deny. Đây là những file được sử dụng để chỉ định những quy tắc truy cập cho các mạng daemon được bảo vệ bởi TCP Wrapper. Khi TCP Wrapper được gọi, nó thu được địa chỉ IP của máy chủ kết nối và cố gắng tìm ra tên máy chủ sử dụng tìm kiếm hệ thống tên miền. Tiếp theo nó tra cứu file etc/hosts.allow để xem máy chủ này có được cho phép đăng nhập hay không để sử dụng dịch vụ. Nếu khớp, sự đăng nhập được cho phép và lệnh daemon về mạng thực 1 sự được gọi. Nếu không khớp với trong file /etc/hosts.allow file, /etc/hosts.deny sẽ được đem ra tra cứu. Nếu khớp thì sự kết nối sẽ kết thúc, nếu không khớp, nó sẽ được tìm trong các file khác và sự truy cập cứ cho là tạm ổn. Đây là kĩ thuật đơn giản để kiểm soát hầu hết các truy cập. Cú pháp của hosts.allow và hosts.deny là khá đơn giản. Một vài file bao gồm các quy tắc cài đặt. Mỗi quy tắc chung trên một đường nhưng có thể bị tách thành nhiều đường sử dụng một dấu vạch chéo ngược ở cuối dòng. Ví dụ form của một câu lệnh như sau. daemon_list : client_list : shell_command daemon_list là một danh sách ngăn cách bởi dấu phẩy của daemon để…lệnh được sử dụng. Những lệnh daemon được dùng với danh nghĩa như là tên cở sở lệnh. Đó là những lệnh tồn tại để phục vụ những yêu cầu của dịch vụ. client_list là một danh sách tên máy chủ hoặc địa chỉ IP (Internet protocol) để so sánh xem có khớp không. shell_command là tùy chọn và chỉ rõ lệnh nào được chạy khi đã so khớp. daemon_list và client_list có thể cho phép bạn khớp với số của những lệnh daemon hoặc máy chủ bên ngoài có tên rõ ràng. Thêm vào đó, bạn có thể sử dụng một số các dấu hiệu chứng tỏ trước đó để dễ dàng đọc và xây dựng . Chúng ta có thể vào trang quản lý host_access. Với một file hosts.deny trông như sau: # /etc/hosts.deny ALL: ALL Dòng đầu tiên là lời chú thích, dòng tiếp theo là biên dịch :” truy cập từ chối yêu cầu tới tất cả các dịch vụ từ các máy chủ.”Nếu /etc/hosts.allow là rỗng thì quy tắc này sẽ đóng truy cập đến mọi thứ từ tất cả các máy chủ trên Internet, bao gồm cả máy chủ địa phương. Chúng ta có thể thay đổi đơn giản file như sau: # /etc/hosts.deny ALL: ALL EXCEPT localhost Nó được ngầm định như là một quy tắc an toàn. Bạn nên nhớ tham khảo quy tắc /etc/hosts.allow trước /etc/hosts.deny vì thêm quy tắc hosts.allow chúng ta có thể ghi đè lên những cài đặt ngầm định trong hosts.deny. ví dụ như,ta có thể hình dung là chúng ta có thể cho phép mỗi máy chủ trên Internet truy cập daemon finger(lệnh cho biết thông tin ai đang truy cập Internet), muốn làm được như vậy ta cần thêm một quy tắc như sau: # /etc/host.allow In.fingerd: ALL Thông thường có thể sử dụng TCP Wrapper để hạn chế các cài đặt truy cập dịch vụ của các máy chủ. Máy chủ có thể hướng dẫn sử dụng địa chỉ IP hoặc tên máy chủ hoặc ví dụ cụ thể về một địa chỉ IP, hostname nào đó. Ví dụ, lệnh daemon finger có thể chỉ từ một trong các máy chủ. Trong trường hợp này file hosts.allow sẽ được sửa như sau: 1 # /etc/hosts.allow In.fingerd: spagetti.vpasta.com, v.pizza.com, 192.168.1 Trong ví dụ trên ta vừa cho phép yêu cầu FTP( truyền tập tin) từ máy chủ có tên là: spaghetti.vpasta.com hoặc miền v.pizza.com hoặc từ bất kì máy nào có tên bắt đầu dạng: 192.168.1. Việc so khớp các quy tắc trong hosts.allow và hosts.deny là rất quan trọng, sự có mặt và vị trí của dấu chấm cũng rất quan trọng. Một dạng bắt đầu từ một dấu chấm được giả định là tên của miền được xác định bởi hệ thống. còn dạng có dấu chấm ở cuối là chỉ rõ dạng địa chỉ IP. Đó là các cách xác định các nhóm máy chủ thuộc miền và các kiểu địa chỉ IP cụ thể. Các cài đặt các kiểu cấu hình có thể nằm trong trang quản lý host_access. 4. Tường lửa: Lọc IP của các gói tin Trong lúc TCP wrappers có thể được sử dụng dể giới hạn tập hợp của máy chủ,nó có thể thiết lập kết nối sự phục vụ đến một máy nào dó,trong nhiều trường hợp nó được đưa vào sử dụng để kiểm soát nhiều hơn các gói thông tin,khi đó nó có thể thâm nhập vào một hệ thống đã được xác định.Ngoài ra,trong trường hợp dó TCP wrappers chỉ làm việc với những cấu hình dã được định sẵn inetd hoặc xinetd;có một số dịch vụ(ví dụ như sshd trên một vài hệ thống) là "độc lập" và được cung cấp quyền kiểm soát những tính nang truy xuất dữ liệu. Vẫn còn những dịch vụ khác không có quyền thực thi kiểm soát cho chính mình,nhung nó cần thiết để cung cấp các mức độ bảo vệ khác nhau nếu chúng ta muốn kiểm soát soát kết nối được tạo thành từ những dịch vụ đó. Ngày nay đó sẽ là điều đáng được ghi nhớ cho những ai sử dụng Internet để bảo vệ chính mình chống lại các mối de dọa tấn công từ trên mạng dựa trên việc sử dụng kĩ thuật đượcc gọi là IP filtering(bộ lọc IP).IP filtering bao gồm nhân kiểm tra mỗi gói tin đuợc truyên hay nhận trên mạng và quyết định xem liệu có cho gói tin này di qua hay không hoặc sửa lỗi nó trước khi cho nó di qua.IP filtering thường được gọi là "firewalling",bởi vì nó lọc các packet đến hoặc đi trên máy tính của bạn mà bạn đang xây dựng một "firewall" giữa hệ thống và phần còn lại của Internet. IP filtering sẽ bảo vệ máy tính của bạn chống lại sự tấn công của virus và Trojan Horse và các lỗi ứng dụng, nhung nó có thể bảo vệ máy tính của bạn khỏi nhiều mối de dọa từ trên mạng,ví dụ nhu tấn công bằng DOS hay giả mạo IP của bạn.Ngoài ra IP filtering cũng cung cấp một lớp khác để bạn có thể kiểm soát hoặc ngăn chặn những người sử dụng mà bạn không mong muốn đang truy cập vào hệ thống của bạn. Ðể tạo một IP filtering làm việc,chúng ta cần biết packet nào cho phép và packet nào không được phép.Thông thường,sự chọn lựa ra một packet là dựa vào phần mô tả của packet header,bao gồm cả các thông tin khác ví dụ như nguồn và đích của địa chỉ IP,các kiểu giao thức (TCP,UDP...),và số hiệu cổng nguồn và số hiệu cổng đích.những dịch vụ mạng khác nhau sử dụng các giao thức và số hiệu cổng khác nhau. Ðôi khi việc kiểm tra packet header không đủ khả năng để hoàn thành một nhiệm vụ,nhưng chúng ta cần kiểm tra và làm sáng tỏ dữ liệu mang theo trong giới hạn một packet.Ki thuật này thường đượcc gọi là "stateful inspection" bởi lẽ một packet được xem xét trong ngữ cảnh của một network connection hon là sự cô lập.Ví dụ,chúng ta có thể cho phép nhũng nguời sử dụng đi sâu vào our network để sử dụng FTP servers bên ngoài mạng. FTP 1 là một giao thức phức tạp sử dụng một kết nối TCP để gọi lệnh tới server.Một cách đáng tiếc là FTP không có được sự ủy nhiệm của một số hiệu cổng đến dữ liệu hiện thời,nhung client va server phải đàm phán về số hiêu cổng đang sử dụng chuyển cho phiên lệnh. IP filtering được thi hành bởi nhân Linux,cái mà chứa code để kiểm tra mỗi gói nhân và mỗi gói chuyển,áp dụng các quy tắc lọc để quyết định sự t?n t?i của packet.Những quy tắc đã được định cấu hình sử dụng một user-space, công cụ cấu hình đó được chấp nhận từ những dòng lệnh đơn filter đã định sẵn,đó là việc được sử dụng các quy tắc bởi nhân. Có ba thế hệ IP filtering dựa vào kernel trong Linux, và mỗi loại có cơ chế cấu hình của riêng nó. Thế hệ đầu tiên được gọi là ipfw (cho IP firewall) và cung cấp khả năng lọc cơ bản nhưng có một chút không mềm dẻo,linh hoạt và không đủ cho những cấu hình phức tạp. ipfw hiếm khi được sử dụng ngày nay. Thế hệ thứ hai của IP filtering được gọi là IP chain; cải tiến lớn trên ipfw, và vẫn thường được sử dụng trong ngày nay. Thế hệ cuối cùng của việc filtering được gọi là netfilter/iptables. netfilter là thành phần nhân và iptables là công cụ cấu hình không gian người dùng (user/space); những thuật ngữ đó thường được sử dụng cùng với nhau một cách liên hợp, có thể thay thế cho nhau. netfilter không chỉ mềm dẻo hơn, dễ cấu hình hớn mà còn có khả năng mở rộng hơn. Trong phần sau chúng ta sẽ mô tả netfilter và một vài cấu hình đơn giản như những ví dụ. 4.1. Netfilter cơ bản Netfilter được thực hiện trong nhân Linux 2.4.0 và các phiên bản mới hơn. Công cụ chính cho việc thao tác và hiển thị các bảng lọc được gọi là iptables và được bao gồm trong tất cả các bản phân phối Linux hiện tại. Lệnh iptables cho phép cấu hình một tập hợp lớn và phức tạp các firewall rules và do đó có một lượng lớn các tùy chọn dòng lệnh. Chúng ta sẽ nói về những cái chung nhất ở đây. Iptables manager cung cấp một sự giải thích đầy đủ. Để thêm sự thích thú cả bạn, hãy nhìn vào một đoạn lệnh sau: iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT Lệnh này cài một IP filtering rule mà chấp nhận các kết nối mới tới cổng TCP 22 (dịch vụ ssh) trên hệ thống máy cục bộ. Nó cũng sử dụng một module mở rộng được gọi là state để tăng hiệu quả của hoạt động theo dõi các kết nối. Trên những trang sau chúng ta sẽ giải thích làm thế nào tất cả những thứ này hoạt động. Một khái niệm quan trọng trong netfilter là notion of a chain, cái mà bao gồm một danh sách các qui tắc mà được áp dụng để gói khi chúng đi vào, đi ra hoặc đi ngang qua các hệ thống. Mặc định nhân định nghĩa ba chain, nhưng administrator có thể chỉ ra những chain qui tắc mới và liên kết chúng lại với các chain trước đó. Ba chain được định nghĩa sẵn là: INPUT Chain này áp dụng tới các gói tin mà được nhận và đích tới là hệ thống máy cục bộ, OUTPUT 1 Chain này áp dụng tới các gói tin mà được chuyển qua bởi hệ thống máy cụ bộ. FORWARD Chain này áp dụng mỗi khi một gói tin được định hướng từ một giao diện mạng tới những cái khác thông qua hệ thống này. Nó được sử dụng mỗi khi hệ thống đóng vai trò như một bộ định tuyến (router) cho một gói tin hoặc như là một gateway, và được áp dụng tới những gói tin mà hoặc bắt đầu từ hoặc được đích đến hệt thống này. Mỗi qui tắc trong một chain cung cấp một tập hợp các nguyên tắc mà chỉ ra gói tin nào trùng khớp với qui tắc, và một hành động mà được thực hiện trên những gói tin mà được khớp. Các hành động mà có thể được thực hiện trên một gói tin bao gồm chấp nhận gói (cho phép nó hoặc được nhận hoặc được chuyển) hủy gói tin (đơn giản là từ chối nhận hoặc chuyển) hoặc chuyển gói tin sang chain khác (sau này sẽ hữu ích khi xây dựng chain do người dùng định nghĩa, cái mà cho phép những qui tắc lọc gói phức tạp được xây dựng một cách có cấp bậc) Một gói tin đi ngang qua mỗi qui tắc trong chain cho tới khi nó được chấp nhận, hủy hoặc chạm tới phần cuối của chain. Nếu nó chạm tới phần cuối của chain, hành động mặc định sẽ được thực hiện để quyết định "số phận" của gói tin. Hành động mặc định có thể được cấu hình để hoặc là chấp nhận hoặc bỏ qua tất cả các gói tin. Netfilter của Linux hỗ trợ một số lượng các tùy chọn rất hay khác mà bạn có thể làm trong việc gạo filtering rules. Một trong những thuận lợi chính của netfilter là nó rất mềm dẻo. Nó có khả năng phát triển các extension (các mở rộng thêm) mà mở rộng cách thức netfilter hoạt động. Một vài ví dụ về điều khiển các hành động đối với những gói tin phức tạp là: Packet logging Bạn có thể tạo ra các qui tắc mà không làm gì hơn là log một bản mô tả về việc khớp các gói tin bởi vậy nó có thể chụp lại để được phân tích sau đó. Điều này rất có ích cho việc dò tìm các cuộc tấn công và cho việc thử nghiệm một cấu hình lọc Stateful inspection netfilter bao gồm một tập hợp các module trợ giúp mà có thể thực hiện kiểm tra kết nối tốt hơn, chẳng hạn như quản lí các kết nối FTP, như đã được mô tả trước đây. Network Address Translation Network Address Translation (NAT), cũng được gọi là IP masquerading (giả mạo IP), cung cấp một cách thức cho việc viết lại địa chỉ IP và số hiệu cổng của một gói tin mà chúng được chuyển qua một chain. NAT thường được sử dụng để cho phép hệ thống trên những mạng cá nhân sử dụng một kết nối tới Internet với một địa chỉ IP duy nhất. NAT là một chủ đề phức tạp mà chúng ta không thảo luận sâu, nhưng một ví dụ đơn giản được cung cấp ở phia sau của phần này. Bạn có thể tìm hiểu thêm về NAT trong cuốn NAT HOWTO hoặc Network Administrator Guide (của nhà xuất bản O'Reilly) 1 Packet and byte accounting netfilter cung cấp các bộ đếm mà cho phép bạn đo bao nhiêu băng thông mạng mà điều khiễn mỗi qui tắc, và một vài hệ thống tính toán IP được dựa trên những thống kê này. Những bộ đếm đó và có thể nhìn thấy được khi bạn sử dụng iptables để liệt kê tập hợp các qui tắc trong một chế độ chi tiết; chúng ta sẽ giải thích các trong ví dụ bên dưới. Sử dụng lệnh iptables: Lệnh iptables được sử dụng để tạo ra các thay đổi tới các chain netfilter và các tập hợp các rule. Bạn có thể tạo ra một chain mới, xóa các chain, liệt kê các qui tắc trong một chain, flush chain (gỡ bỏ tất cả các qui tắc khỏi một chain) và xác định hành động mặc định cho một chain. iptables cũng cho phép bạn chèn, thêm, xóa và thay thế các qui tắc trong một chain. Lệnh iptables có một số lượng lớn các tham số và tùy chọn dòng lệnh, nhưng khi bạn dùng nó rất ít lần, cú pháp trở nên hoàn toàn dễ hiểu. Trong phần này chúng ta chỉ khám phá cách sử dụng chung nhất của iptables, bởi vậy một vài tham số và tùy chọn có thể bỏ qua trong phần thảo luận của chúng ta. Đặc biệt, chúng ta không thảo luận về các chain do người dùng định nghĩa ở đây. Bảng sau liệt kê tổng kết về các tham số của lệnh iptables mà hoạt động trên các chain, và bảng sau nữa tổng kết các hành động trên các qui tắc riêng lẻ. Bảng 1.các hoạt động của iptables trên các chain Tham số Mô tả -L chain Liệt kê các qui tắc trong một chain hoặc tất cả các chain -F chain Xóa các qui tắc trong một chain hoặc tất cả các chain -Z chain Đưa bộ đếm byte trở về không -P chain Thiết lập hành động mặc định trên một chain thành action action Bảng 2. các hoạt động của iptables trên các qui tắc -A chain Gắn một qui tắc vào một chain rulespecificatio n D chain Xóa một qui tắc với rule number từ một chain rulenum -R chain Thay thế rule number rulenum trong chain bằng rulenum rulespecification rulespecificatio n -I chain rulenum Chèn một qui tắc vào một chain rulespecificatio n 1 Mỗi qui tắc lọc bao gồm các tham số mà mô tả gói tin nào khớp với qui tắc. Các tham số chung nhất được tổng kết trong bảng sau. Sử dụng một dấu chấm tham trước mỗi tham số sẽ đảo ngược chúng. Ví dụ, tham số -dport 80 có nghĩa là khớp cổng đích 80; trong khi tham số -dport !80 có nghĩa là khớp bất kì cổng đích nào ngoại trừ cổng 80 Bảng 3. các tham số của lệnh iptables Tham số Khớp -p ! protocol Giao thức gói. Thiết lập hợp lệ là tcp, udp, icmp, or all. -s ! Địa chỉ nguồn của gói,chỉ ra hostname hoặc địa chỉ IP source/mas k -d ! Địa chỉ đích của gói. Sử dụng cùng cú pháp với địa chỉ source/mas nguồn k - sport ! port Cổng nguồn của gói. Chỉ ra một hằng số hiệu cổng cho một dịch vụ - dport ! port Cổng đích của gói. Sử dụng cùng cú pháp với cổng nguồn -i ! interface Giao diện mạng nơi mà gói được nhận -o ! Địa chỉ mạng nơi mà gói được gửi interface Một số lượng các tùy chọn quan trọng được sử dụng khi bạn tạo các tập hơp qui tắc được tổng kết trong bảng sau: Bảng 4. những tùy chọn quan trọng của iptables Tùy chọn Mô tả -v Hữu ích khi liệt kê các qui tắc với –L -n Hiển thị địa chỉ IP trong dạng số -m module Tải iptable module ngoài với tên module Ngoài ra để chỉ ra các tham số khớp, mỗi qui tắc netfilter phải chỉ ra một vài hành động để lấy mỗi gói tin khớp với qui tắc. Một cách tổng quát, một qui tắc chỉ ra rằng một gói nên được chấp nhận hoặc bị từ chối, như được mô tả tiếp theo. Nếu không có hành động nào được chỉ ra cho một qui tắc, gói tin và bộ đếm byte (byte counter) cho qui tắc đó sẽ được tăng lên và gói được chuyển sang qui tắc tiếp theo trong chain. Điều này cho phép một qui tắc chỉ được sử dụng cho mục đích tính toán mà thôi. Để chỉ ra một hành động cho một qui tắc hãy sử dụng cú pháp sau: -j target 1 Ở đây, -d đại diện cho "jump", có nghĩa là nếu một gói tin khớp qui tắc này, processing sẽ jump (nhảy) tới hành động được đặt tên là target. Target có thể là một trong những: ACCEPT Cho phép gói này được chuyển hay nhận DROP Bỏ qua gói tin QUEUE Pass the packet to a userspace program for processing. Chuyển gói tin vào một không gian của người sử dụng chờ được xử lí RETURN Nếu được sử dụng với một chain do người dùng định nghĩa sẽ làm gói tin được chuyển tới chain đã gọi nó. Nếu được sử dụng với một chain có sẵn, sẽ làm gói tin nhảy tới phần cuối của chain (ở đó nó sẽ chạy một hành động mặc định của chain cho gói tin này) Khi sử dụng tùy chọn -j, target có thể cũng được đặt teencuar một chain do người dùng chỉ ra, cái mà sẽ cho phép người dùng định nghĩa một "subchain" (chain con) của các qui tắc mà sẽ xử lí gói tin này. Như được mô tả trước đây, target RETURN được sử dụng sẽ làm gói tin được chuyển trở lại chain đã gọi nó. 4.2. Phát triển các bộ qui tắc lọc IP Thông thường, phần khó nhất của việc thực hiện IP firewall là quyết định xem bạn thực sự muốn làm gì. Bạn có muốn cho phép các kết nối đi có được tự do hay không? Bạn có muốn cho phép các gói ICMP hay không? Dịch vụ UDP nào bạn muốn? Loại logging nào bạn muốn dùng?Một trong những thách thức của việc xây dựng các qui tắc lọc IP là hầu hết mọi người không phải đã quen thuộc với các khái niệm địa chỉ, giao thức, số hiệu cổng. Thay vào đó chúng ta thường nghĩ tới các khái niệm về ứng dụng và người dùng cuối. Để xây dựng các qui tắc lojg, chúng ta phải có khả năng dịch những yêu cầu mức cao thành chi tiết ở mức thấp với những thao tác lọc Làm thế nào các dịch vụ mà bạn đang quản lí với IP filtering thực sự làm việc. Đầu tiên và trước tiên, rất là quan trọng để biết liệu một dịch vụ nào sử dụng TCP hoặc UDP, và những số hiệu cổng nào mà nó sử dụng. File etc/services có thể thường xuyên cung cấp về những gì bạn cần biết. Ví dụ, tìm kiếm cho smtp trong các tường của file này tcp/25, cái mà sẽ chỉ ra rằng giao thức SMTP sử dụng TCP cổng 25. Tương tự, tìm kiếm cho DNS trả về hai giá trị, một cho udp/53 và một cái khác cho tcp/53; điều này có nghĩa rằng dịch vụ sử dụng cổng 53 nhưng hoặc sử dụng giao thức TCP hoặc UDP Một vài giao thức chẳng hạn FTP, có hai entry liên quan tới nhau nhưng khác nhau trong /ect/services. Như được mô tả trong phần trước, FTP sử dụng một cổngcho phần lệnh (tcp/21) và một cổng khác cho việc truyền dữ liệu (tcp/20). Không may thay, FTP client và server được tự do sử dụng những cổng khác nhau cho việc truyền dữ liệu. Bởi vậy, FTP đã trở thành một mối phiền nhỏ nhỏ trong việc tạo các filtering rules. May thay, netfilter cung cấp một vài giải pháp với một đặc điểm được gọi là connection tracking (theo dõi kết nối), cùng với một module trợ giúp đặc biệt hiểu về dịch vụ FTP. Bởi vì điều này, sẽ chỉ cần thiết tạo ra một qui tắc cho phần lệnh FTP, và netfilter sẽ tự 1 động theo dõi và "trông coi" phần chuyển dữ liệu cho bạn. Chúng ta giải thích điều này trong ví dụ của phần sau Nếu /etc/services không cung cấp đủ thông tin, bạn có thể cần đọc tài liệu RFC liên quan, nó sẽ chỉ rõ giao thức được sử dụng bởi dịch vụ. Thường thường, bạn không cần biết nhiều về một dịch vụ hơn những giao thức và cổng mà nó sử dụng, cái mà thường dễ tìm thấy trong các tài liệu RFC. 4.3. Quản lí lọc IP và các file kịch bản Quy tắc lọc được lưu trữ và được sử dụng bởi nhân trong nhiều trường hợp chẳng hạn như định tuyến các entry: khi hệ thống khởi động lại, quy tắc lọc IP phải được cấu hình lại. Để đảm bảo rằng một cấu hình tường lửa được phục hồi khi khởi động lại hệ thống, bạn nên để các lệnh IPtables trong một file kịch bản cái mà được tự động chạy vào thời điểm hệ thống khởi động. Gói phần mềm Iptables đóng gói hai chương trình iptables-save và iptables-restore, chúng lần lượt được lưu cấu hình hiện tại của netfilter tới một file và phục hồi nó từ file đó. Nhũng công cụ này làm đơn giản hóa quá trình quản lý cấu hình tường lửa. Mỗi bản phân phối của linux có một các quản lý cấu hình tường lửa khác nhau. Red hat(version 7.0 và sau đó). Đầu tiên cấu hình các quy tắc lọc IP của bạn sử dụng các lệnh iptables thích hợp. sau đó chạy dòng lệnh sau: /sbin/service iptables save Dòng lệnh trên làm cho các quy tắc lọc được lưu vào /etc/sysconfig/iptables, nó được tự động đọc ở thời điểm hệ thống khởi động. Debian Cài đặt quy tắc iptables như sau: 1. Chỉnh sửa file /etc/default/iptables và đặt enable_iptables_initd=true. 2. Bạn phải tự cấu hình cho iptables sử dụng các lệnh iptables. 3. Gọi file /etc/init.d/iptables save_active để lưu cấu hình bạn vừa cài đặt. Ở thời điểm hệ thống khởi động, cấu hình được lưu sẽ được tự động khôi phục lại. 4.4. SuSE Linux Để đơn giản, mặc dù không linh hoạt, cấu hình chạy yast2 và chọn cấu hình tường lửa module Security&Users -> Firewall. Nếu không: 1. Sửa /etc/sysconfig/SuSEfirewall2. 2. Nếu cần thiết, vào file /etc/sysconfig/scripts/SuSEfirewall2- custom và tùy chỉnh theo ý mình. Điều này yêu cầu một sự hiểu biết sâu hơn về tường lửa hoạt động như thế nào trong linux. 3. Khởi động tường lửa bởi lời gọi /sbin/SuSEfirewall2 start. Cấu hình ví dụ với netfilter 4.4.1. Ví dụ lọc IP đơn giản 1 Ở đây chúng ta sẽ mô tả cách sử dụng cơ bản các bộ lọc IP, tương tự như chúng ta sử dụng TCP wrappers đã mô tả trong phần trước.Ở đây chúng ta muốn in ra màn hình các gói tin từ tất cả các máy chủ trên Internet, trừ các gói tin đích cho lệnh finger daemon từ một tập nhỏ các máy chủ.Trong khi TCP wrappers có thể được sử dụng để thực hiện cùng một chức năng, lọc IP có thể được sử dụng để in ra màn hình rất nhiều loại khác nhau của các gói tin (ví dụ, ICMP các gói “ping”), và thường là cần thiết để bảo vệ các dịch vụ mà không được quản lý bởi TCP wrappers. . Không giống như TCP wrappers,các qui tắc iptables không thể sử dụng tên máy chủ để xác định nguồn gốc hoặc các điểm đến của một gói tin ,mà bạn phải sử dụng địa chỉ IP khi xác định quy tắc.Khi quay trở về tìm tên máy chủ không phải là một cách an toàn hoàn toàn để nhận dạng một gói tin.(Đó có thể là sự lừa đảo hệ thống tên miền,làm cho nó hiện ra như là một địa chỉ IP của một máy chủ khác nhau). Trong hai ví dụ dưới đây, chúng ta sử dụng các địa chỉ IP thay vì tên máy chủ, mà có thể được thu được bằng cách sử dụng một công cụ như là nslookup. Ví dụ 1. Ví dụ ipchains đơn giản: # Nạp mô-đun kết nối theo dõi nếu chúng không được biên soạn vào trong. Modprobe ip conntrack Modprobe ip conntrack ftp #Thiết lập mặc định với chính sách giảm chuỗi đầu vào. Iptables –p input drop #Chấp nhận những gói tin thuộc về một kết nối có sẵn. # –A INPUT được sử dụng để nối với chuỗi đầu vào. # –m state sử dụng mô-đun kiểm tra trạng thái. modprobe ip_conntrack # Chấp nhận tất cả các gói tin trở lại từ các thiết bị ghép nối,trong vùng của máy chủ. “-i lo” xác định việc trở lại của các thiết bị ghép nối. iptables -A INPUT -i lo -j ACCEPT #Chấp nhận kết nối mới thu được, và các gói tin thuộc kết nối hiện tại đến cổng 22 (ssh). iptables -A INPUT -m state --state NEW -m tcp -p tcp \ --dport 22 -j ACCEPT # Chấp nhận kết nối mới thu được từ ftp 192.168.1/24 iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 192.168.1/24 \ --dport 21 -j ACCEPT #Chấp nhận kết nối mới thu được từ ftp spaghetti.vpizza.com có địa chỉ IP 10.21.2.4 iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 10.21.2.4 \ --dport 21 -j ACCEPT #Chấp nhận kết nối mới thu được từ ftp *.vpizza.com Nó có hai mạng kết nối mang 172.18.1.0 và 172.25.3.0 iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 172.18.1/24 \ 1 --dport 21 -j ACCEPT iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 172.25.3/24 \ --dport 21 -j ACCEPT Các quy tắc cụ thể chấp nhận tất cả các gói tin thuộc về một kết nối có sẵn.Đây là điều cần thiết trong trường hợp của FTP, trong đó có phục vụ của máy khách và điều chỉnh thay thế cho các cổng kết nối truyền dữ liệu.Những mô-đun theo dõi kết nối (chỉ định với trạng thái –m trong các quy tắc) bảo đảm rằng các kết nối truyền dữ liệu có thể được chấp nhận. 4.4.2. Giao thức lọc IP để bảo vệ toàn bộ mạng máy tính Những ví dụ trước đó đã chứng tỏ lọc IP trên một máy chủ. Phần này, chúng ta nói về trường hợp một mạng lưới các máy (chẳng hạn như tất cả các máy trong một nhà hoặc văn phòng nhỏ) được kết nối vào Internet thông qua một cổng của máy tính.Chúng ta có thể viết các quy tắc lọc để lọc lượng truy cập giữa mạng Internet và mạng nội bộ. Trong trường hợp này, chúng ta sẽ quy định trên cả chain INPUT và FORWARD. Dữ liệu được sử dụng để lọc các gói tin đích cho các máy chủ này, trong khi FORWARD được sử dụng cho các gói tin được chuyển tiếp của các cổng ra (ví dụ, các gói tin đích cho mạng nội bộ hoặc Internet).Ở đây, chúng ta giả định rằng các cổng ra, máy sử dụng giao diện ppp0 để giao tiếp với Internet. Ví dụ 2: Sử dụng lưới lọc đẻ bảo vệ một mạng IP #Nạp mô-đun kết nối theo dõi nếu chúng không được lập vào trong chương trình chính modprobe ip_conntrack modprobe ip_conntrack_ftp #Thiết lập mặc định về nguyên tắc đầu vào và chuỗi chuyển tiếp để Drop iptables -P INPUT DROP iptables -P FORWARD DROP #Chấp nhận tất cả các gói tin trở lại từ các thiết bị kết nối iptables -A INPUT -i lo -j ACCEPT #Tạo các ứng dụng mới do người dùng xác định.Điều này sẽ chứa chuỗi quy định liên quan đến cả INPUT va FORWARD.do đó phải nhóm chúng lại với nhau trên một chuỗi đơn. iptables -N allowfwdi #Chấp nhận các gói tin thuộc vào một kết nối hiện tại. #Lưu ý rằng quy định này (và các quy định sau) được đặt do người dùng xác định iptables -A allowfwdin -m state --state ESTABLISHED,RELATED -j ACCEPT #CHẤP NHẬN yêu cầu kết nối mới từ máy tính trong mạng nội bộ.Điều này cho phép các máy trên mạng nội bộ thiết lập các kết nối vào Internet,nhưng đó không phải là phương pháp xoay vòng.Lưu ý việc sử dụng các '-i! ppp0 'để xác định các gói tin đến từ các thiết bị ghép nối khác hơn là ppp0. iptables -A allowfwdin -m state --state NEW -i ! ppp0 -j ACCEPT #Chấp nhận kết nối mới thu được đến cổng 22 (ssh). 2
- Xem thêm -

Tài liệu liên quan