Thứ hai, 06/10/2014 | 00:00 GMT+7

Cách tạo profile AppArmor cho Nginx trên Ubuntu 14.04

Một administrator server tốt sẽ tìm ra các lỗ hổng mới. Khi bạn chạy một server với các cổng mở cho công chúng, bạn nên ám ảnh về tính bảo mật của nó.

Thật không may, ngay cả khi bạn cập nhật tất cả các bản vá bảo mật mới nhất cho các ứng dụng và hệ điều hành của bạn , server của bạn vẫn có thể dễ bị tấn công zero-day: các cuộc tấn công nhắm vào các lỗ hổng không xác định mà không có bất kỳ bản vá nào. AppArmor là một module nhân Linux hoạt động như một hệ thống kiểm soát truy cập bảo vệ server của bạn khỏi các cuộc tấn công như vậy. Mô-đun này đã có sẵn trên Ubuntu theo mặc định kể từ khi Ubuntu 8.04 được phát hành.

Khi AppArmor hoạt động cho một ứng dụng, hệ điều hành cho phép ứng dụng chỉ truy cập vào những file và folder được đề cập trong profile bảo mật của nó. Do đó, với một profile bảo mật được lập kế hoạch tốt, ngay cả khi ứng dụng bị xâm phạm trong một cuộc tấn công, nó sẽ không thể gây hại nhiều.

Hướng dẫn này bao gồm những gì

Trong hướng dẫn này, ta sẽ tạo một profile bảo mật AppArmor đơn giản, là một file văn bản chứa các chi tiết về quyền cho Nginx , một server HTTP phổ biến.

Để chứng minh cách hoạt động của AppArmor, ta sẽ cấu hình Nginx để phục vụ các file tĩnh từ hai folder : / data / www / safe/ data / www / secure , đồng thời cấu hình AppArmor để giới hạn Nginx trong / data / www / safe .

Với cài đặt này, khi AppArmor không hoạt động, user bên ngoài sẽ có thể truy cập file từ cả hai folder . Khi AppArmor hoạt động, user sẽ chỉ có thể truy cập các file trong / data / www / safe .

Yêu cầu

Bạn cần những thứ sau:

  • Server Ubuntu 14.04
  • Một user sudo

Bước một - Cài đặt Nginx

Sử dụng apt-get để cập nhật server của bạn và cài đặt Nginx:

sudo apt-get update sudo apt-get install nginx 

Server Nginx của bạn hiện đã hoạt động. Server mặc định sẽ chạy trên cổng 80. Bạn có thể kiểm tra nó trong trình duyệt bằng cách truy cập địa chỉ IP của Server dưới dạng URL: http: // <server-IP>: 80 . Bạn sẽ thấy trang chào mừng Nginx mặc định.

Trang chào mừng của Nginx

Bước 2: Cấu hình Nginx để cung cấp file tĩnh

Tạo các folder mà từ đó các file tĩnh sẽ được phục vụ.

sudo mkdir -p /data/www/safe sudo mkdir -p /data/www/unsafe 

Thêm file vào folder an toàn bằng nano :

sudo nano /data/www/safe/index.html 

Để file có các nội dung sau:

<html>     <b>Hello! Accessing this file is allowed.</b> </html> 

Tương tự, tạo một file khác trong / data / www / không an toàn có tên index.html , với nội dung sau:

<html>     <b>Hello! Accessing this file is NOT allowed.</b> </html> 

Tệp cấu hình của Nginx được đặt tại /etc/nginx/nginx.conf . Chỉnh sửa file này để tạo một server mới lắng nghe trên cổng 8080 và phục vụ các file từ / data / www . Bỏ qua các dòng chú thích, sau khi chỉnh sửa, file của bạn sẽ giống như file được hiển thị bên dưới. Bạn cần thêm dấu thăng để comment include /etc/nginx/sites-enabled/*; hàng. Bạn cũng cần thêm toàn bộ khối server được hiển thị bằng màu đỏ bên dưới:

user www-data; worker_processes 4; pid /run/nginx.pid;  events {     worker_connections 768; }  http {     sendfile on;     tcp_nopush on;     tcp_nodelay on;     keepalive_timeout 65;     types_hash_max_size 2048;      include /etc/nginx/mime.types;     default_type application/octet-stream;      access_log /var/log/nginx/access.log;     error_log /var/log/nginx/error.log;      gzip on;     gzip_disable "msie6";      include /etc/nginx/conf.d/*.conf;      server {         listen 8080;         location / {                  root /data/www;         }     } } 

Lưu các thay đổi và tải cấu hình mới bằng cách chạy lệnh sau:

sudo nginx -s reload 

Đến đây, vì AppArmor vẫn chưa được bật cho Nginx, bạn có thể truy cập cả http: // <server-IP>: 8080 / safe / index.htmlhttp: // <server-IP>: 8080 / không an toàn / index.html . Trang an toàn trông như thế này:

Trang an toàn

Cấu hình Nginx hiện đã hoàn tất.

Bước ba - Kiểm tra cấu hình AppArmor hiện có

Ubuntu 14.04 đi kèm với một số cấu hình AppArmor được tải sẵn. Cài đặt thêm chúng bằng lệnh này:

sudo apt-get install apparmor-profiles 

Liệt kê tất cả các cấu hình có sẵn bằng cách chạy lệnh này:

sudo apparmor_status 

Bạn sẽ thấy khá nhiều profile . Một số sẽ ở chế độ thực thi và một số ở chế độ khiếu nại . Khi profile của ứng dụng ở chế độ khiếu nại , AppArmor sẽ ghi lại các hoạt động của ứng dụng mà không hạn chế nó theo bất kỳ cách nào.

Khi có thứ gì đó để ghi log , bạn sẽ tìm thấy các file log cho server Nginx trong folder / var / log / nginx .

AppArmor hạn chế những gì một ứng dụng chỉ có thể làm khi profile của nó ở chế độ thực thi .

Bạn cũng sẽ nhận thấy rằng không có profile nào cho server Nginx. Ta sẽ tạo một trong bước tiếp theo.

Bước 4 - Tạo profile AppArmor mới cho Nginx

Cài đặt apparmor-utils . Đây là tập hợp các tiện ích giúp bạn quản lý AppArmor.

sudo apt-get install apparmor-utils 

Đến đây bạn đã sẵn sàng để bắt đầu lập profile các hoạt động của Nginx. Sử dụng lệnh aa-autodep để tạo một cấu hình trống mới. Hồ sơ sẽ được tạo trong /etc/apparmor.d .

cd /etc/apparmor.d/ sudo aa-autodep nginx 

Khi profile được tạo, hãy sử dụng aa-phàn nàn để đặt profile ở chế độ khiếu nại.

sudo aa-complain nginx 

Khởi động lại Nginx.

sudo service nginx restart 

Mở trình duyệt và truy cập http: // <server-IP>: 8080 / safe / index.html . Điều này sẽ kích hoạt các mục nhập bình thường để truy cập trang web an toàn xuất hiện trong log Nginx của bạn.

Quay lại terminal . Bây giờ ta sẽ sử dụng trình AppArmor để xem qua log Nginx và phê duyệt hoặc từ chối từng hành động mà nó tìm thấy ở đó.

sudo aa-logprof 

Lệnh này quét các file log và cập nhật profile AppArmor Nginx. Bạn sẽ được yêu cầu nhiều lần để cho phép hoặc từ chối một khả năng. Giả sử server của bạn hiện không bị tấn công, bạn có thể nhấn A mọi lúc, vì tất cả các khả năng được yêu cầu là cần thiết để Nginx hoạt động bình thường. Cuối cùng, khi được yêu cầu lưu các thay đổi, hãy nhấn S.

Quy trình chung này để kích hoạt AppArmor cho một ứng dụng mới như sau:

  • Tạo một profile trống mới cho ứng dụng
  • Đặt nó vào chế độ phàn nàn
  • Thực hiện các thao tác bình thường với ứng dụng để các mục nhập thích hợp được thêm vào log
  • Chạy tiện ích AppArmor để xem qua log và phê duyệt hoặc từ chối các hành động ứng dụng khác nhau

Bước 5: Chỉnh sửa profile AppArmor Nginx

Đối với Nginx cụ thể, bạn cần thực hiện một số thay đổi đối với file được tạo tự động để file hoạt động bình thường. Mở file /etc/apparmor.d/usr.sbin.nginx để chỉnh sửa.

sudo nano /etc/apparmor.d/usr.sbin.nginx 

Bạn nên thực hiện ít nhất những thay đổi sau:

  • Thêm dòng #include <abstractions/apache2-common> - vâng, dấu thăng là có chủ đích
  • Thêm dòng định mức khả năng
  • Thêm dòng cài đặt khả năng
  • Cập nhật dòng / data / www / safe / để bao gồm toàn bộ folder bằng dấu hoa thị (*)
  • Thêm dòng từ chối / dữ liệu / www / không an toàn / * r , bao gồm cả dấu phẩy
  • Đảm bảo Nginx có thể ghi vào log lỗi bằng cách đặt w cho /var/log/nginx/error.log

Apache2-common bao gồm cho phép Nginx nghe trên nhiều cổng khác nhau. Các dòng khả năng mới cho phép Nginx bắt đầu các quy trình mới. Luật từ chối cho phép ta chặn Nginx truy cập vào folder / data / www / secure / .

Một profile hoạt động trông như thế này:

#include <tunables/global>  /usr/sbin/nginx {   #include <abstractions/apache2-common>   #include <abstractions/base>   #include <abstractions/nis>    capability dac_override,   capability dac_read_search,   capability net_bind_service,   capability setgid,   capability setuid,    /data/www/safe/* r,   deny /data/www/unsafe/* r,   /etc/group r,   /etc/nginx/conf.d/ r,   /etc/nginx/mime.types r,   /etc/nginx/nginx.conf r,   /etc/nsswitch.conf r,   /etc/passwd r,   /etc/ssl/openssl.cnf r,   /run/nginx.pid rw,   /usr/sbin/nginx mr,   /var/log/nginx/access.log w,   /var/log/nginx/error.log w, } 

Hồ sơ của bạn có thể trông hơi khác một chút, vì nó được tạo dựa trên file log của bạn. Tùy thuộc vào bạn cho dù bạn muốn nghiên cứu và cập nhật các thông số riêng lẻ hay sao chép file này bán buôn, với những lưu ý thông thường về việc xem xét môi trường server của bạn . Các quyền của AppArmor có thể khó thực hiện đúng, vì vậy bạn có thể sử dụng file ví dụ này và các file được tạo tự động của bạn làm điểm bắt đầu, nhưng hãy chuẩn bị để thực hiện một số khắc phục sự cố.

Hồ sơ AppArmor Nginx đã sẵn sàng. Sử dụng aa-cưỡng chế để đặt profile ở chế độ thực thi.

sudo aa-enforce nginx 

Bạn nên reload tất cả các cấu hình và khởi động lại Nginx đảm bảo rằng các thay đổi mới nhất có hiệu lực. Nhập nội dung sau:

sudo /etc/init.d/apparmor reload sudo service nginx restart 

Nếu bạn gặp lỗi ở bất kỳ giai đoạn nào trong số này, hãy đọc lỗi, kiểm tra kỹ các file cấu hình của bạn và kiểm tra / var / log / syslog để chỉ cho bạn đúng hướng.

Kiểm tra trạng thái của AppArmor:

sudo apparmor_status 

Bạn sẽ thấy các tiến trình Nginx đang chạy ở chế độ thực thi.

Quay lại trình duyệt và truy cập http: // <server-IP>: 8080 / safe / index.html . Bạn có thể xem trang. Sau đó truy cập http: // <server-IP>: 8080 / secure / index.html . Bạn sẽ thấy một trang lỗi như hình bên dưới. Điều này chứng tỏ rằng profile của ta đang hoạt động như mong đợi.

Lỗi bị cấm

Xử lý sự cố

Nếu server Nginx của bạn không khởi động được sau khi bạn thực thi cấu hình, thì có khả năng là cấu hình đó không bao gồm quyền mà Nginx cần. Bạn nên kiểm tra:

  • Văn bản lỗi
  • var / log / syslog
  • /var/log/nginx/error.log

Sau đó, bạn sẽ phải sửa đổi profile của bạn dựa trên những lỗi đó.

Ví dụ: nếu bạn quên bao gồm các phần tóm tắt / apache2-common trong profile , bạn sẽ thấy lỗi như:

[emerg] 3611#0: socket() 0.0.0.0:8080 failed (13: Permission denied) 

Trong trường hợp thực tế, việc truy cập profile AppArmor hữu ích cho một ứng dụng mới bao gồm nhiều thử nghiệm và sai sót, đồng thời cũng khá tốn thời gian.

Kết luận

Với hướng dẫn này, bạn đã học cách tạo profile AppArmor từ đầu. Trong một tình huống thực tế, bạn cần thực hiện theo một quy trình nghiêm ngặt hơn trước khi bật AppArmor cho một ứng dụng lớn.

Đầu tiên, kích hoạt chế độ khiếu nại bằng lệnh aa-phàn nàn . Sau đó, administrator hệ thống thường đợi vài ngày trước khi chạy lệnh aa-logprof để hệ thống có thời gian ghi log các hành động phổ biến hơn cho ứng dụng. Bạn nên làm tương tự nếu bạn định tạo một profile sẽ được sử dụng trong các hệ thống production .


Tags:

Các tin liên quan

Cách cấu hình Nginx với SSL làm Reverse Proxy cho Jenkins
2014-09-23
Cách thiết lập nhiều trang web WordPress với Nginx trên Ubuntu 14.04
2014-08-21
Cách cài đặt và bảo mật phpMyAdmin với Nginx trên server Ubuntu 14.04
2014-08-06
Cách cài đặt và bảo mật phpMyAdmin với Nginx trên server CentOS 7
2014-08-06
Cách cài đặt Nginx trên CentOS 7
2014-07-22
Cách tạo chứng chỉ ECC trên Nginx cho Debian 7
2014-07-21
Cách thiết lập cân bằng tải Nginx với kết thúc SSL
2014-07-17
Cách cài đặt Laravel với web server Nginx trên Ubuntu 14.04
2014-06-24
Cách cài đặt gpEasy CMS với NGINX và PHP5-FPM trên Debian 7
2014-06-03
Cách sử dụng Nginx làm Giám đốc lưu lượng toàn cầu trên Debian hoặc Ubuntu
2014-05-30