1.13.1 Giới thiệu về csf. [7]
CSF Firewall (sau này gọi tắt là CSF) là một tường lửa dựa trên iptables, thay vì phải viết từng rules cho iptables, chúng ta có thể khai báo các thông số cần thiết trong file cấu hình CSF và sau đó khởi động CSF, từ những thông số này CSF sẽ tự động sinh ra rules của iptables và áp dụng vào trong iptables. CSF hoạt động dựa trên iptables và tiến trình LFD để quyét các file log để phát hiện các dấu hiệu tấn công bất thường.
Một số chức năng chính của csf: - Chống DoS các loại.
- Chống Scan Port.
- Đưa ra các lời khuyên về việc cấu hình server (VD: Nên nâng cấp MySQL lên bản mới hơn)
- Chống BruteForce Attack vào ftp server, web server, mail server, directadmin, cPanel...
- Chống Syn Flood. - Chống Ping Flood.
- Cho phép ngăn chặn truy cập từ 1 quốc gia nào đó bằng cách chỉ định Country Code chuẫn ISO
- Hỗ trợ IPv6 và IPv4
- Cho phép khóa IP tạm thời và vĩnh viễn ở tầng mạng (An toàn hơn ở tầng ứng dụng ) nên webserver không phải xử lý yêu cầu từ các IP bị cấm nữa.
- Cho phép bạn chuyến hướng yêu cầu từ các IP bị khóa sang 1 file html để thông báo cho người dùng biết IP của họ bị khóa.
1.13.2 Cài đặt csf firewall
- Cài đặt csf trên server sử dụng các tập lệnh:
rm -fv csf.tgz
wget http://www.configserver.com/free/csf.tgz tar -xzf csf.tgz
cd csf
1.13.3 Nguyên tắc hoạt động của csf
Như với hầu hết các iptables cấu hình tường lửa, là ngăn chặn tất cả mọi thứ và sau đó cho phép những kết nối mà người quản trị muốn thông qua. Thực hiện trong iptables bằng cách thả tất cả các kết nối vào và ra khỏi máy chủ trên tất cả giao thức. Sau đó cho phép lưu lượng truy cập vào và ra từ các kết nối hiện hành. Sau đó mở cổng vào và ra cho cả hai giao thức TCP và UDP riêng.
1.13.4 Tùy chọn dòng lệnh csf
Có thể xem các tùy chọn dòng lệnh csf bằng cách sử dụng một trong hai: # man csf
hoặc # csf-h
Các tùy chọn này cho phép bạn dễ dàng và nhanh chóng kiểm soát và xem csf. Tất cả các file cấu hình csf nằm trong / etc / csf và bao gồm:
csf.conf - các tập tin cấu hình chính, nó có ý kiến hữu ích giải thích những gì mỗi tùy chọn nào.
csf.allow - một danh sách của IP và địa chỉ CIDR mà luôn luôn được cho phép thông qua các bức tường lửa.
csf.deny - một danh sách của IP và địa chỉ CIDR mà không bao giờ được cho phép thông qua các bức tường lửa
csf.ignore - một danh sách các IP và địa chỉ CIDR rằng LFD bỏ qua và không không ngăn chặn nếu phát hiện.
csf * bỏ qua -. bỏ qua các tập tin khác nhau mà danh sách các tập tin, người dùng, IP là rằng LFD nên bỏ qua.
Nếu sửa đổi bất kỳ tập tin liệt kê ở trên, cần phải khởi động lại csf để nó có hiệu lực. Nếu sử dụng các tùy chọn dòng lệnh để thêm hoặc từ chối IP địa chỉ, sau đó csf tự động thực hiện điều này cho bạn.
Cả hai csf.allow và csf.deny có thể có ý kiến sau khi các địa chỉ IP được liệt kê. Các ý kiến phải được trên cùng một dòng như địa chỉ IP nếu csf.deny sẽ loại bỏ chúng.
Ví dụ:
# Allow incoming TCP ports
# Allow outgoing TCP ports
TCP_OUT = "20,21,22,25,53,81,110,113,443 " # Allow incoming UDP ports
UDP_IN = "20,21,53"
# Allow outgoing UDP ports
# To allow outgoing traceroute add 33434:33523 to this list UDP_OUT = "20,21,53,113,123"
1.13.5 Giới hạn bảo vệ kết nối
Tùy chọn này sẽ cấu hình iptables để cung cấp bảo vệ khỏi các cuộc tấn công DOS với cổng cụ thể. Nó cũng có thể được sử dụng như một cách để chỉ đơn giản là hạn chế sử dụng tài nguyên của địa chỉ IP cho dịch vụ máy chủ cụ thể. Tùy chọn này giới hạn số lượng mới kết nối đồng thời mỗi địa chỉ IP có thể được thực hiện cho cổng cụ thể. Tính năng này không hoạt động trên các máy chủ mà không có các mô-đun iptables xt_connlimit nạp.
Cú pháp cho các thiết lập CONNLIMIT:
CONNLIMIT là một danh sách phân cách bằng dấu phẩy của cổng, giới hạn. Vì vậy, cài đặt CONNLIMIT = "22; 5,80; 20" có nghĩa là:
1. Chỉ cho phép lên đến 5 kết nối mới đồng thời đến cổng 22 cho mỗi địa chỉ IP. 2. Chỉ cho phép lên đến 20 kết nối mới đồng thời đến cổng 80 địa chỉ IP.
Lưu ý: các kết nối hiện tại không được bao gồm trong các số, chỉ gói SYN mới, tức là kết nối mới.
Run / etc / csf / csftest.pl để kiểm tra xem tùy chọn này sẽ hoạt động trên máy chủ.
1.13.6 Cổng chống tràn
Tùy chọn này sẽ cấu hình iptables để cung cấp bảo vệ khỏi các cuộc tấn công DOS với cổng cụ thể. Tùy chọn này giới hạn số lượng kết nối cho mỗi khoảng thời gian rằng các kết nối mới có thể được thực hiện cho cổng cụ thể. Tính năng này không hoạt động trên các máy chủ mà không có các mô-đun iptables ipt_recent nạp.
Bởi ipt_recent mặc định theo dõi chỉ có 100 địa chỉ IP mới. IP theo dõi địa chỉ có thể được xem trong / proc / net / ipt_recent / * có số lượng cổng là tên tập tin.
PORTFLOOD là một danh sách phân cách bằng dấu phẩy: cổng; giao thức; số kết nối; thời gian (s).
Vì vậy, cài đặt PORTFLOOD = "22;tcp;5;300,80;tcp;20;5" có nghĩa là:
1. Nếu có nhiều hơn 5 kết nối đến cổng TCP 22 trong vòng 300 giây, sau đó chặn địa chỉ IP từ cổng 22 cho ít nhất 300 giây sau khi nhìn thấy gói tin cuối cùng, tức là phải có một "yên tĩnh" thời gian 300 giây trước khi số kết nối tăng lên.
2. Nếu có nhiều hơn 20 kết nối đến cổng TCP 80 trong vòng 5 giây, sau đó chặn địa chỉ IP từ cổng 80 cho ít nhất 5 giây sau khi gói tin cuối cùng là nhìn thấy, tức là phải có một "yên tĩnh" trong thời gian 5 giây trước khi số kết nối tăng lên.
Thêm thông tin về các mô-đun ipt_recent có thể được tìm thấy ở người đàn ông iptables trang và http://snowman.net/projects/ipt_recent/
Lưu ý: địa chỉ IP bị chặn không xuất hiện trong bất kỳ chuỗi iptables khi sử dụng mô-đun này. Bạn phải thao tác các tập tin / proc / net / ipt_recent / * theo các tài liệu hướng dẫn mô đun để xem và loại bỏ địa chỉ IP hiện đang bị chặn nếu các khối chưa hết hạn.
1.14 Cài đặt Mod Security
Hình 3.16: Mô hình tổng quan của ModSecurity
Các khả năng của Mod Security
Request filtering: Tất cả các request gửi đến web server đều được phân tích và cản lọc (filter) trước khi chúng được đưa đến các modules khác để xử lý
Understanding of the HTTP protocol: ModSecurity là một tường lửa ứng dụng nên nó có khả năng hiểu được giao thức HTTP. ModSecurity có khả năng cản lọc dựa trên các thông tin ở HTTP Header hay có thể xem xét đến từng thông số hay cookies của các request...vv
POST payload analysis: Ngoài việc cản lọc dựa trên HTTP Header, ModSecurity có thể dựa trên nội dung (payload) của POST requests.
Audit logging: Mọi requests đều có thể được ghi lại (bao gồm cả POST) để người quản trị có thể theo dõi nếu cần.
HTTPS filtering: ModSecurity có thể phân tích HTTPS.
Compressed content filtering: ModSecurity sẽ phân tích sau khi đã giải nén các các dữ liệu được yêu cầu.
Hình 3.17: Quá trình xử lý các request của Apache và ModSecurity
1. Phase Request Header: Rule được đặt tại đây sẽ được thực hiện ngay say khi Apache đọc request header, lúc này phần request body vẫn chưa được đọc.
2. Phase Request Body: Đây là thời điểm các thông tin chức năng chung đưa vào vào được phân tích và xem xét, các rule mang tính ứng dụng hướng kết nối (application-oriented) thường được đặt ở đây. Ở thời điểm này, Server đã nhận đủ các thông số của request và phần request body đã được đọc. Modsecurity hỗ trợ ba loại mã hoá request body
+ application/x-www-form-urlencoded: Dùng để truyền form dữ liệu + multipart/form-data: Dùng để truyền file
+ text/xml: Dùng để phân tích dữ liệu XML
3. Phase Response Header: Đây là thời điểm ngay sau khi phần response header được gửi trả về cho client. Chúng ta đặt rule ở đây nếu muốn giám sát quá trình sau khi phần response được gửi đi.
4. Phase Response Body: Đây là thời điểm chúng ta muốn kiểm tra những dữ liệu HTML gửi trả về.
5. Phase logging: Là thời điểm các hoạt động log được thực hiện, các rules đặt ở đây sẽ định rõ việc log sẽ như thế nào, nó sẽ kiểm tra các error message log của Apache. Đây cũng là thời điểm cuối cùng để chúng ta chặn các kết nối không mong muốn, kiểm tra các response header mà chúng ta không thể kiểm tra ở phase 3 và phase 4.
1.15 Kết luận chương 3
Chương này đã trình bày những bảo mật mà hệ thống moodle đã có và đưa ra một số phương pháp bảo vệ và nâng cao hiệu quả cho hệ thống Elearning. Đảm bảo an toàn cho hệ thống khi xảy ra sự cố.
CHƯƠNG 4: TRIỂN KHAI MÔ HÌNH BẢO MẬT HỆ THỐNG ELEARNING CHO TRƯỜNG ĐẠI HỌC ĐIỆN LỰC
1.16 Khái quát về Trường Đại học Điện lực
Trường Đại học Điện lực: - Số lượng sinh viên: 17.761 - Số lượng phòng học: 51 - Số giảng viên: 449
Tổng số lượng sinh viên tham gia khóa học Elearning, tính đến:
- Học kì 2 năm học 2012-2013: khoảng 2000 sinh viên với 1 môn học. - Học kì 1 năm học 2013-2014: trên 3000 sinh viên với 4 môn học.
- Dự kiến đến học kì 2 năm học 2013-2014 có hơn 4000 sinh viên tham gia với 2 môn học.
Như vậy hệ thống E-learning ngày càng được đưa vào giảng dạy với số lượng môn học và sinh viên tham gia tăng lên qua các năm học.
Ngoài ra trên hệ thống E-learning còn lưu trữ rất nhiều thông tin quan trọng như: các bài học, thông tin cá nhân của người học, câu hỏi thi, bài kiểm tra, các kết quả đúng/sai của sinh viên đều phải được lưu trữ tùy vào mục đích của người quản trị, các thành viên đều không thể tự sửa đổi được.
Với những yêu cầu như trên đòi hỏi phải có hệ thống máy chủ đủ lớn để đáp ứng được nhu cầu học tập và giảng dạy.
1.17 Các yêu cầu về cơ sở hạ tầng1.17.1 Phần cứng 1.17.1 Phần cứng
Theo yêu cầu của moodle đưa ra là:
+ Ổ đĩa trống: tối thiểu là 5Gb.
Sao lưu: cần thêm 1 máy nữa để sao lưu khi chiếc máy kia gặp vấn đề.
+ RAM: Tối thiểu là 256Mb. Quy luật chung của Moodle có thể hỗ trợ 10-20 người truy cập đồng thời cho mỗi 1Gb RAM. Nhưng điều này sẽ thay đổi tùy thuộc vào phần cứng cụ thể và kết hợp phần mềm sử dụng.
Dựa vào áp dụng thực tế thu được như sau:
+ Máy tính server tại Khoa CNTT có cấu hình: Chip Intel Xeon E5520 - 2.27GHz, RAM 4Gb, ổ cứng 250Gb thì đáp ứng được cho khoảng 100-200 người dùng cùng truy cập đồng thời.
+ Máy tính hiện tại đang chạy web elearning của trường Đại học Điện lực có cấu hình như sau: chip Intel Xeon E3-1220 4 nhân, tốc độ xử lý 3.1GHz, RAM 16Gb, ổ cứng 320Gb đáp ứng được cho khoảng 1000 sinh viên cùng truy cập đồng thời. Nhưng đây là hosting thuê của nước ngoài, sử dụng 1 máy tính, không có máy thứ 2 để sao lưu dữ liệu. Khi chiếc máy đó bị tấn công hoặc gặp rủi ro phần cứng hệ thống sẽ bị treo, không hoạt động được đến khi sửa chữa xong. Như vậy sẽ ảnh hưởng rất nhiều đến việc học tập.
Trong thời gian 1 năm đưa hệ thống E-learning vào giảng dạy tại trường hệ thống đã từng bị tấn công và treo nhiều lần do:
+ Lần thứ nhất hệ thống bị treo là do khi mới đưa vào sử dụng chiếc máy server chỉ có 4Gb RAM có thể đáp ứng cho 200-250 người dùng cùng truy cập đồng thời. Trong khi đó hệ thống có trên 2000 user ( khoảng 400 người dùng cùng truy cập đồng thời ).
+ Lần thứ 2 hệ thống đã nâng cấp lên 16Gb RAM nhưng vẫn bị treo là do khi đó hệ thống có trên 1000 người dùng cùng truy cập đồng thời trong khi hệ thống chỉ có thể đáp ứng được cho 800-900 người dùng truy cập đồng thời
+ Ngoài ra còn 1 số lần hệ thống bị tấn công nhưng đều đã được khắc phục ngay sau đó.
Như vậy các yêu cầu về phần cứng ảnh hưởng rất nhiều đến hoạt động cũng như quá trình vận hành của hệ thống.
Các lỗi mà phần cứng thường xảy ra:
+ Server bị quá tải do thiếu RAM.
+ Server bị quá tải do tốc độ xử lý của CPU không đảm bảo.
+ Tốc độ truy xuất dữ liệu của HDD không đáp ứng nhu cầu đọc / ghi của dữ liệu. (Thông thường xảy ra trên các ổ SATA 7200rpm hoặc HDD sắp hỏng).
1.17.2 Phần mềm
Moodle được phát triển chủ yếu trong Linux sử dụng Apache, MySQL và PHP (đôi khi nó cũng được biết đến như là nền tảng LAMP).
Các yêu cầu đối với Moodle như sau:
Phần mềm Web server: Sử dụng Apach trên web server mà có hỗ trợ PHP, hoặc IIS trên nền Windows.
Ngôn ngữ PHP (phiên bản 4.1.0 hoặc mới hơn). PHP 5 được hỗ trợ cho phiên bản Moodle 1.4.
Một cơ sở dữ liệu làm việc trên server: MySQL hoặc PostgreSQL.
1.18 Kết quả thực nghiệm1.18.1 Bảo mật với csf 1.18.1 Bảo mật với csf
Chúng ta dùng câu lệnh để kiểm tra kết nối đến server thông qua số cổng: netstat -n | grep :80 |wc –l
Câu lệnh trên kiểm tra số kết nối trên cổng 80.
Hình 4.1: Hệ thống khi ổn định
Khi chưa có truy cập hay sự tấn công nào thì số kết nối đến các cổng ở mức rất thấp.
Hình 4.2: Hệ thống khi bị tấn công.
Khi số lượng truy cập tăng lên một cách nhanh chóng thì chứng tỏ hệ thống đang bị tấn công. Ở đây hệ thống đang bị tấn công qua port 80 và port 8088. Khi đó chúng ta vào các website đặt trên những port này sẽ chậm hơn so với bình thường.
1.18.2 Cài đặt HAProxy và Keepalived
Sau khi cài đặt HAProxy và Keepalived thì IP ảo được tạo ra sẽ lắng nghe 2 IP của 2 server.
Hình 4.3: Cài đặt HAProxy và Keepalived
Khi cả 2 server cùng hoạt động bình thường thì bằng cả 3 IP đều trỏ về cùng website.
Khi server thứ nhất gặp sự cố thì hệ thống vẫn hoạt động bình thường:
Hình 4.5: Khi server thứ nhất gặp sự cố
Khi server thứ hai gặp sự cố thì hệ thống vẫn hoạt động bình thường:
1.18.3 Đồng bộ cơ sở dữ liệu
Khi đã đồng bộ cơ sỡ dữ liệu trên 2 chiếc máy server, khi truy nhập vào cơ sở dữ liệu trên 2 chiếc máy là giống nhau.
Hình 4.7: Cơ sở dữ liệu trên server thứ nhất
- Tạo thêm bảng Môn học trên server thứ nhất:
Hình 4.9: Tạo thêm cơ sở dữ liệu trên server thứ nhất
- Trên server thứ 2 đã được cập nhật thêm bảng Môn học. - Tiến hành xóa bảng Môn học trên server thứ 2:
Hình 4.11: Cập nhật lại cơ sở dữ liệu trên server thứ nhất
1.18.4 Đồng bộ hóa dữ liệu giữa hai Server
Nội dung website và các thư mục trên cả 2 server đều giống nhau:
Hình 4.12: Nội dung website trên server thứ nhất
Hình 4.14: Các file – tệp trên 2 server khi đã đồng bộ
Hình 4.16: Nội dung website trên server thứ 2 bị thay đổi