NHANWEB

20 việc nên làm để bảo mật Apache

Apache security, bảo mật ApacheApache security, bảo mật Apache

Apache security, bảo mật Apache

Nếu bạn đang sở hữu một VPS hoặc một Dedicated Server thì danh sách dưới đây là 20 việc bạn nên làm để bảo mật Apache của mình tốt hơn. Mình cũng nói thêm là không có gì là an toàn tuyệt đối nên không có chuyện bạn thực hiện xong nghĩa là bạn có thể “chấp hết cả thế giới” nha.

Ngoài ra, một số đề xuất dưới đây có thể ảnh hưởng đến hiệu suất làm việc của Apache cũng như gây xung đột với những gói cài đặt của bạn. Bạn cần đọc kĩ và cân nhắc.

Cập nhật latest security patche

Cái này thì bất cứ bài viết về bảo mật nào cũng khuyến khích và cũng đưa lên đầu tiên vì tính quan trọng của nó nên mình không nói nhiều nữa. Chẳng có gì quan trọng hơn việc cập nhật bản vá lỗi thường xuyên để đảm bảo hệ thống của mình an toàn.

Apache, máy chủ hay software, mã nguồn mở nào cũng vậy thôi.

Dấu Apache Version và các thông tin khác

Theo mặc định, nhiều Apache sẽ cung cấp các thông tin như phiên bản Apache, hệ điều hành, các phần mềm đang chạy trên Apache đó và phiên bản tương ứng của nó. Đây là một trong những thông tin được lợi dụng nhiều nhất để khai thác.

Thêm dòng sau vào httpd.conf của bạn:

[code] ServerSignature Off
ServerTokens Prod
[/code] – ServerSignature sẽ cung cấp các thông tin dưới mỗi trang được tạo ra bởi Apache như 404, directory…
ServerTokens sẽ chỉ thị những gì Apache sẽ đặt lên trên header. Bằng cách chỉ thị lệnh trên, bạn sẽ chỉ cho phép hiển thị trên header thông tin như sau: [code]Server: Apache
[/code]

Nếu bạn muốn thay đổi luôn, bạn có thể thay đổi cả mã nguồn hoặc sử dụng mod_security bằng cách đọc tiếp phần bên dưới.

Chỉ định apache chạy dưới quyền user hoặc group

Mặc định, apache sẽ chạy dưới quyền nobody. Giả sử cả server mail và server apache của bạn đều chạy cùng quyền này sẽ có thể gây ra cuộc tấn công qua lại với nhau.

[code] User apache
Group apache
[/code]

Đảm bảo các tệp tin ở root không thể sử dụng

[code] <Directory />
Order Deny,Allow
Deny from all
Options None
AllowOverride None
</Directory>
<Directory /web>
Order Allow,Deny
Allow from all
</Directory>
[/code]

Các lựa chọn Options NoneAllowOverride None sẽ đảm bảo tắt tất cả các tùy chọn và ghi đè cho máy chủ. Bạn có thể sử dụng cấu hình này cho từng thư mục theo nhu cầu của mình.

Turn off directory browsing

Đảm bảo danh sách trong thư mục bị tắt để không thể list được bằng Option None hoặc là -Indexes
[code]Options -Indexes
[/code]

Turn off server side includes

Set Options thành None hoặc -Includes:
[code]Options -Includes
[/code]

Turn off CGI execution

Set Options thành None hoặc -ExecCGI:

[code]Options -ExecCGI
[/code]

Không cho chạy Options -FollowSymLinks

Set Options thành None hoặc -FollowSymLinks:

[code]Options -FollowSymLinks
[/code]

Turning off multiple Options

Cách đơn giản nhất là set tất cả các Option về None:
[code]Options None[/code]

Hoặc bạn có thể set từng option như sau:

[code]Options -ExecCGI -FollowSymLinks -Indexes[/code]

Turn off support for .htaccess files

Phát này sẽ làm cho .htaccess file không thể bị sửa theo cách thông thường.
[code] AllowOverride None
[/code]

Nếu bạn muốn Overrides không thể được tải về, bạn có thể thay đổi tên của nó thành .httpdoverride và sau đó block việc tải về/thay đổi tất cả những file bắt đầu bằng .ht như sau:

[code]AccessFileName .httpdoverride
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>[/code]

Run mod_security

mod_security là một mod cực hay được viết bởi Ivan Ristic. Mình làm biếng dịch nên để nguyên mẫu một số tính năng mà có thể bạn sẽ quan tâm:

Tắt các module không cần thiết

Apache thường đi kèm với một số module được cài đặt sẵn, bạn cần đọc document của apache để biết được những module nào được cài đặt và kích hoạt sẵn. Nhiều trong số đó có thể không cần thiết cho bạn.

Để tắt các module này, hãy vào httpd.conf và tìm các dòng có LoadModule ở đầu và thêm trước nó dấu #. Để tìm các module đang chạy, gõ lệnh:

[code]grep LoadModule httpd.conf[/code]

Đây là một vài module mà có thể bạn không cần xài tới: mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex.

Chắc chắn rằng chỉ quyền root mới đọc được apache’s config và binaries

Giả sử apache được cài đặt ở /usr/local/apache thì lệnh chownchmod sẽ giúp bạn phân quyền:
[code]chown -R root:root /usr/local/apache
chmod -R o-rwx /usr/local/apache[/code]

Timeout thấp

Thời giam timeout mặc định của Apache là 300 giây. Chúng ta có thể cấu hình lại để giảm thiểu nguy cơ bị tấn công:
[code]Timeout 45[/code]

Giới hạn large requests

Apache cho phép bạn giới hạn kích thước của một request. Điều này có thể giúp bạn giảm thiểu mức độ thiệt hại của một cuộc tấn công từ chối dịch vụ. Theo mặc định, LimitRequestBody được cấu hình unlimited. Nếu muốn giới hạn lại còn 1MB bạn có thể cấu hình như sau:
[code]LimitRequestBody 1048576[/code]

Một vài giới hạn khác mà bạn có thể muốn cấu hình như LimitRequestFields, LimitRequestFieldSizeLimitRequestLine. Một vài thứ bạn không cần phải cấu hình, hãy đọc thêm document để lựa chọn cấu hình phù hợp.

Giới hạn size của XML Body

[code]LimitXMLRequestBody 10485760[/code]

Giới hạn truy cập đồng thời

Apache có thể giúp bạn cấu hình số lượng request được yêu cầu vào một thời điểm. Bạn có thể sử dụng MaxClients để giới hạn số lượng request gửi lên. Điều này phụ thuộc vào phần cứng, vùng nhớ (RAM).

Ngoài ra còn có một số lựa chọn khác quan trọng như MaxSpareServers, MaxRequestsPerChild, và trên Apache2ThreadsPerChild, ServerLimit, and MaxSpareThreads là những thông số mà có thể bạn cần quan tâm và cấu hình tùy theo phần cứng của mình.

Hạn chế IP truy cập

Bạn có thể chặn 1 dải IP truy cập(176.16.x.x) bằng cách sử dụng .htaccess như sau:

[code]Order Deny,Allow
Deny from all
Allow from 176.16.0.0/16[/code]

Hoặc chặn 1 IP cụ thể:

[code]Order Deny,Allow
Deny from all
Allow from 127.0.0.1[/code]

Mình cũng có viết 1 bài về vấn đề chặn IP từ rất lâu rồi, bạn có thể đọc lại tại đây.

Thiết lập KeepAlive

Tài liệu của Apache cho biết thiết lập HTTP Keep Alive có thể giúp cải thiện hiệu xuất người dùng lên đến 50%. HTTP Keep Alive được bật mặc định và bạn nên để chúng bật bình thường. Bạn có thể thay đổi MaxKeepAliveRequests lên 100 và KeepAliveTimeout lên 15 nếu muốn.

Hãy nghiên cứu thêm log file của mình để lựa chọn cấu hình phù hợp.

Chạy Apache trong môi trường Chroot

chroot cho phép chạy apache trong môi trường riêng biệt (tương tự như sandbox) – điều này giúp ngăn cản ảnh hưởng từ một ứng dụng khác và ngược lại.

Có thể việc này khá khó khăn vì nó đòi hỏi thư viện hỗ trợ.

Điều may mắn là mod_security mà mình đã đề cập ở trên có hỗ trợ chroot. Điều này làm cho việc cấu hình đơn giản hơn rất nhiều lần.

[code]SecChrootDir /chroot/apache[/code]

Cảm ơn

Mình tổng hợp được rất nhiều thông tin và bài viết về bảo mật Apache trước khi viết bài này nên có thể nói nguồn bài viết là sưu tầm. Ngoài ra, một số kiến thực bảo mật Apache mà mình đã viết ở trên còn được tìm thấy trong cuốn sách Apache Security. Nếu bạn nào quan tâm có thể mua về đọc – giá khá rẻ.

Exit mobile version