Bảo mật DirectAdmin

Tác giả NetworkEngineer, T.Sáu 04, 2020, 10:43:16 SÁNG

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Bảo mật DirectAdmin


1. Giới thiệu.

Trách nhiệm cuối cùng của người quản trị máy chủ là đảm bảo hệ thống của anh ta được an toàn. Đây là một số mẹo bảo mật cơ bản có thể được thực hiện để giúp bảo vệ hệ thống của bạn. Đây không phải là hướng dẫn cuối cùng về bảo mật máy chủ, người quản trị máy chủ phải siêng năng, mà là một số gợi ý để bắt đầu bảo mật máy chủ của bạn.

2. Phân quyền các phân vùng.


Khi cài đặt, cách dễ nhất là mount phân vùng /tmp của bạn với các tùy chọn noexec, nosuidmount phân vùng /home với tùy chọn nosuid . Điều này được thực hiện trong /etc/fstab của bạn và yêu cầu các đường dẫn đó tồn tại dưới dạng phân vùng và không chỉ là thư mục con của /. Nếu bạn không chắc chắn, hãy chạy thử lệnh sau:

Mã nguồn [Chọn]
mount
Để có được một danh sách các phân vùng của bạn và các tùy chọn mount hiện tại của chúng. Sử dụng google để biết thêm thông tin về các tùy chọn mount kết này. Hãy cẩn thận khi chỉnh sửa /etc/fstab, vì bất kỳ lỗi nào cũng có thể ngăn hệ thống của bạn khởi động. Lưu ý rằng bạn không được có "nosuid, noexec" cho phân vùng / hoặc /usr, vì các phân vùng đó có các quyền hệ thống suid bình thường (su, passwd, v.v.).

3. Tắt hẳn các hàm nguy hiểm của PHP.
 

Sau khi hệ thống được cài đặt, một ý tưởng tốt là thêm PHP function nguy hiểm vào danh sách disable_functions. Điều này ngăn các tập lệnh php chạy các hàm "thô" có thể được sử dụng để thực thi các chương trình trên hệ thống của bạn. Lưu ý rằng một số tập lệnh php thực sự yêu cầu các hàm này hoạt động một cách hợp pháp, vì vậy nếu tập lệnh của bạn không chạy sau khi bật chức năng này, hãy chỉnh sửa php.ini để xóa các hàm cần thiết khỏi danh sách và khởi động lại apache. Để thêm tính năng disable_functions với các tùy chỉnh, gõ lệnh như sau, sau đó khởi động lại apache:

Mã nguồn [Chọn]
cd /usr/local/directadmin/custombuild
./build update
./build secure_php

4. Cập nhật hệ thống thường xuyên.

Cập nhật thường xuyên các dịch vụ hệ thống, thư viện và tập lệnh. Điều quan trọng là giữ cho hệ thống của bạn được cập nhật sau khi cài đặt. Đây là trách nhiệm của người quản trị máy chủ. Có một số công cụ và tùy chọn có sẵn để giúp người quản trị thực hiện việc này. Đối với các thư viện hệ thống như openssl và các mục hệ thống cấp thấp khác, phần còn lại để người quản trị thực hiện theo cách anh ta muốn, thông thường các hệ thống gói như yum hoặc apt-get có thể làm điều này cho bạn. Đối với các dịch vụ và tập lệnh mà DirectAdmin cài đặt, bạn có thể sử dụng tập lệnh custombuild. Một lệnh cập nhật điển hình với custombuild là:

Mã nguồn [Chọn]
cd /usr/local/directadmin/custombuild
./build update
./build all d

Lưu ý rằng trong thư mục custombuild là một tập tin có tên là "Options.conf". Trong tập tin này là danh sách tất cả các tùy chọn bạn có liên quan đến những gì custombuild sẽ làm. Về cập nhật, đảm bảo bạn đã bật clean_old_webapps=yes. Thao tác này sẽ xóa tất cả các tập lệnh khỏi /var/www/html, sau khi cập nhật, bạn thực hiện một tập lệnh mới. Các tùy chọn cũng có các tùy chọn cron để kiểm tra cập nhật hàng đêm hoặc thậm chí cài đặt các tùy chọn này hàng đêm. Tôi khuyên bạn nên kiểm tra cron hàng đêm, và sau đó một người quản trị thực hiện tiến hành cập nhật sau khi anh ta nhận được thông báo.

Để bật thông báo hàng đêm, hãy thay thế các tùy chọn in đậm sau bằng thông tin liên quan của bạn:

Mã nguồn [Chọn]
#Cron settings
cron=yes
cron_frequency=weekly
[email protected]
notifications=yes
da_autoupdate=yes
updates=no
webapps_updates=yes

Sau đó gõ lệnh sau:

Mã nguồn [Chọn]
./build cron
Đây là các cài đặt để nhận thông báo hàng đêm cho các bản cập nhật, nhưng nó sẽ không cập nhật cho bạn. Sau khi nhận được thông báo trong hộp thư đến của bạn, bạn sẽ chạy phần sau từ thư mục custombuild:

Mã nguồn [Chọn]
./build update_versions
Để cập nhật chỉ những mục yêu cầu cập nhật. Lưu ý rằng thực hiện "./build all d" có thể đơn giản hơn, nhưng mất nhiều thời gian hơn để chạy. Nếu bạn muốn có "./build update_versions" được chạy tự động, hãy thay đổi updates=no trở thành updates=yes. Chỉ cần lưu ý rằng người quản trị máy chủ vẫn được yêu cầu phải nhận thức đầy đủ về hệ thống và trạng thái nếu anh ta chọn yes cho tùy chọn này. Tùy chọn webapps_updates chỉ áp dụng khi updates=no được sử dụng. Nó vẫn ở đó cho phép cập nhật các tập lệnh php trong /var/www/html, trong khi không ảnh hưởng đến các dịch vụ được biên dịch. Cấu hình webapps_updates=yes nếu Updates = no và bạn muốn có các bản cập nhật tự động của các tập lệnh webapps với tùy chọn cron. Nếu updates=yes, thì giá trị webapps_updates không thành vấn đề. Tương tự, sử dụng da_autoupdate = yes với Updates = no, sẽ cập nhật DA khi cron được bật.

5. Bật SafeMode và Open_Basedir.


Nếu bạn đang chạy php ở chế độ "CLI", thì việc bật cả PHP SafeMode Open_Basedir là điều khôn ngoan. Safemode là một hình thức nội bộ của disable_functions, mà nó cũng thực hiện việc kiểm tra thêm một chút. Xem tài liệu về Safemode để biết thêm thông tin về điều này. Open_Basedir, được bật theo mặc định, để nói với PHP không cho phép các tập lệnh truy cập các tập tin bên ngoài danh sách đường dẫn đã được cấu hình. 

Để kiểm soát SafeMode Open_Basedir trên hệ thống PHP CLI của bạn (mặc định), hãy truy cập:
Mã nguồn [Chọn]
Admin Level -> Php Safemode Config
6. Bật suPHP.


suPHP là một tùy chọn mà một số người quản trị thích, một số khác thì không. Những gì suPHP (PHP CGI) làm là chạy các tập lệnh PHP với tư cách là người dùng hệ thống của tài khoản, chứ không phải là người dùng "apache". Điều này giải quyết nhiều vấn đề như quyền/quyền sở hữu khi tập lệnh php cho phép tải lên các tập tin. Nó cũng cho phép người quản trị theo dõi các tập lệnh giả mạo dễ dàng hơn vì nó không chạy như một người dùng chung. Một lợi ích khác của suPHP là bạn có thể chỉnh sửa các tập lệnh PHP của mình thành 700 thay vì 755. Điều này giúp chúng an toàn hơn trong trường hợp bạn lưu trữ mật khẩu trong tập lệnh của mình. Những hạn chế đối với suPhp bao gồm hiệu suất chậm một chút do có thêm một vài vòng nhảy để có PHP chạy bằng quyền từng người dùng thay vì "apache". Ngoài ra, các mục trong điểm 4. ở trên không có tác dụng vì suPHP không theo dõi các cờ PHP của Virtualhost. Tất cả các cài đặt phải được thực hiện trong các tập tin php.ini. Lưu ý rằng bạn có thể có các tập tin php.ini cho mỗi người dùng để cho phép cài đặt theo người dùng, hãy xem liên kết này. http://help.directadmin.com/item.php?id=183

Để bật suPHP, các bạn hãy xem hướng dẫn này http://help.directadmin.com/item.php?id=197

7. Tắt kết nối từ xa đến MySQL Server.
 
Nếu bạn không có kế hoạch thực hiện bất kỳ quyền truy cập từ xa nào vào MySQL Server, thì thiết lập MySQL Server để chỉ nghe trên 127.0.0.1 sẽ là một ý tưởng hay. Lưu ý bạn sẽ phải ghi nhớ điều này nếu người dùng của bạn bắt đầu hỏi bạn tại sao họ không thể kết nối với MySQL Server từ một địa điểm từ xa. Để đặt MySQL Server chỉ liên kết với 127.0.0.1, hãy thêm phần sau vào phần [mysqld] trong /etc/my.cnf của bạn, sau đó khởi động lại mysqld:

Mã nguồn [Chọn]
bind-address = 127.0.0.1
8. Sử dụng mod_security.

Một tùy chọn lọc cho apache mod_security. Đây không phải là một phần trong cài đặt của chúng tôi, nhưng mod_security là bộ lọc của apache để kiểm tra tất cả các yêu cầu http được gửi bởi máy khách để đảm bảo chúng hợp lệ. Lưu ý rằng nếu không được thiết lập chính xác, nó có thể phá vỡ frontpage hoặc các tập lệnh PHP khác thường có yêu cầu URL dài, vì vậy việc thiết lập và kiểm tra đúng sẽ rất quan trọng. Kiểm tra diễn đàn của chúng tôi để được hướng dẫn về điều này, nó không nằm trong sự hỗ trợ của chúng tôi.


9. Sử dụng tường lửa CSF.

Một tường lửa luôn là một ý tưởng tốt. Nhiều người thích sử dụng CSF hoặc các tập lệnh block_ip.

10. Cấu hình thư mục người dùng User's domains directory.

Đặt thư mục tên miền của người dùng để chặn những người dùng khác trên hệ thống, hãy xem tại trang này:  http://help.directadmin.com/item.php?id=254

11. Cấu hình DNS Server.   
 
Thiết lập named.conf của bạn để không cho phép đệ quy. Điều này nên được thực hiện theo mặc định ngay bây giờ, nhưng dù sao hãy kiểm tra với hướng dẫn này http://help.directadmin.com/item.php?id=115

12. Cấu hình chính sách mật khẩu khó.

Để ngăn người dùng sử dụng các mật khẩu yếu bằng cách bật tính năng bắt buộc sử dụng mật khẩu khó như theo sau http://www.directadmin.com/features.php?id=910

13. Ngăn ngừa tạo Subdomain với người dùng khác.

Ngăn người dùng tạo tên miền phụ thuộc về người dùng khác với tùy chọn này http://www.directadmin.com/features.php?id=925

14. Cài đặt SSL.

Nếu bạn đang sử dụng DirectAdmin với SSL , bạn nên buộc tất cả các kết nối SSL sử dụng TLS thay vì các giao thức SSL cũ hơn.

15. Cấu hình quyền thực thi Perl Binary.
 
Để thêm một lớp bảo mật khác với các quyền của Perl Binary, sử dụng một mẹo tương tự như bước 9, các bạn hãy chạy như sau:

Mã nguồn [Chọn]
chgrp apache /usr/bin/perl /usr/bin/wget /usr/local/bin/wget /usr/local/bin/curl /usr/bin/curl /usr/bin/python
chmod 705 /usr/bin/perl /usr/bin/wget /usr/local/bin/wget /usr/local/bin/curl /usr/bin/curl /usr/bin/python
   
Điều này sẽ làm là nói với hệ thống rằng bất kỳ người dùng nào trong nhóm "apache" không được phép thực thi /usr/bin/perl. Nếu bạn đã thực hiện bước 9 về lý thuyết, bạn có thể sử dụng "access" thay vì "apache" cho giá trị chgrp, để ngăn tài khoản hệ thống khác chạy nó, nhưng apache là chính. Kỹ thuật này cũng có thể được áp dụng cho các nhị phân khác, như wget, fetch, v.v. bất cứ điều gì bạn không muốn người dùng "apache" chạy. Hãy nhớ rằng việc sử dụng suPhp (bước 5 ) về cơ bản sẽ phủ nhận vấn đề này vì các tập lệnh PHP chạy như người dùng. Lưu ý rằng đây là một lớp bảo mật khác, vì vậy dù sao việc sử dụng nó sẽ không ảnh hưởng gì, trong trường hợp khai thác apache xảy ra độc lập hoàn toàn với php. Không chặn nhóm apache chạy /usr/bin/perl nếu bạn đang sử dụng mod_ruid2.

16. Ngăn chặn tấn công Brute Force.

Tấn công Brute Force phổ biến hơn, vì vậy tốt nhất không nên đăng nhập SSH trực tiếp cho các tài khoản phổ biến như root hoặc admin. Nói chung, an toàn khi sử dụng người dùng "su" ẩn trước, sau đó đăng nhập vào root hoặc các tài khoản khác sau khi được kết nối. Vô hiệu hóa bất kỳ tài khoản nào (root, admin, v.v.) không cần truy cập trực tiếp bằng cách chỉnh sửa /etc/ssh/sshd_config. Luôn kiểm tra các thay đổi trước khi đăng xuất khác, bạn có thể tự khóa mình từ việc cấu hình sai.


Ngoài ra, DirectAdmin có hệ thống phát hiện tấn công Brute Force cho các dịch vụ, cũng như chương trình chặn địa chỉ IP cho chính DirectAdmin.
Các bạn hãy xem thêm thông tin về điều đó tại đây: http://help.directadmin.com/item.php?id=404

17. Cấu hình Secure SMTP, IMAP, POP3.

Buộc đăng nhập Email để sử dụng kết nối an toàn với SSL: http://www.directadmin.com/forum/showthread.php?t=43500

18. Tắt truy cập vào UserDir trên Apache.

Vô hiệu hóa quyền truy cập vào 1.2.3.4 /~username, (UserDir trên apache):

Mã nguồn [Chọn]
cd /usr/local/directadmin/custombuild
./build set userdir_access no
./build rewrite_confs


Đối với cài đặt CustomBuild 2.0 mặc định với apache, mod_phpmod_ruid2, hãy bắt đầu với các bước: 2, 3, 8, 11, 13, 15 = 8 , 17, (tùy chọn # 1)

Các bước khác có thể được bật theo mặc định hoặc ít hơn áp dụng vào những ngày này cũng như có thể sử dụng công nghệ cũ hơn. Hãy đọc qua từng cái để kiểm tra.