Bước đầu tiên trong việc bảo mật cho bất kỳ hệ thống nào, Linux hay Windows, là phải đảm bảo rằng hệ thống đó nằm ở vị trí an toàn như trung tâm dữ liệu (data center), trung tâm điều hành mạng (network operation center) nhằm ngăn chặn hacker truy cập vật lý (physical access) tới hệ thống. Bước kế tiếp bạn phải đề ra chính sách mật khẩu (password policy) chặt chẽ. Hiển nhiên, bạn đừng để lộ tên tài khoản người dùng và mật khẩu cho kẻ xấu biết được. Ngoài ra, các quản trị viên cũng cần đảm bảo rằng các tài khoản trên hệ thống của mình không có tài khoản nào có mật khẩu rỗng (null password). Deny all (hay Whitelisting) là một trong những chính sách tốt nhằm bảo vệ hệ thống trước nguy cơ tấn công mạng. Theo đó thì ban đầu tất cả các người dùng bên ngoài đều bị cấm truy cập vào hệ thống. Sau đó, người quản trị sẽ cấp quyền truy cập xác đáng cho từng người dùng thật sự đáng tin cậy. Các này giúp đảm bảo rằng người dùng không thể truy cập tới các file mà họ không được phép truy cập. Trong Linux, thực hiện lệnh sau để áp dụng chính sách deny all:
# cat “ALL:ALL” >> /etc/hosts.deny
Một cách hay khác nữa để bảo vệ Linux server là loại bỏ các phần mềm và dịch vụ không cần thiết. Đồng thời, đảm bảo rằng hệ thống luôn được cập nhật mới và đầy đủ các bản vá lỗi. Các quản trị viên cũng nên thường xuyên kiểm tra log hệ thống để phát hiện sớm nhất các dấu hiệu bất thường mà có thể dẫn đến hệ thống bị tấn công và phá hoại. Dưới đây là toàn bộ các bước còn lại để tăng cường an ninh cho Linux server Lựa chọn và cài đặt hệ điều hành - Sử dụng một phiên bản Linux (Distro) nổi tiếng.
- Phân vùng ổ cứng: đặt các file của hệ điều hành trên một phân vùng tách biệt với chương trình, dữ liệu cá nhân của người dùng.
- Sau khi hoàn tất việc cài đặt hệ điều hành, áp dụng tất cả các bản quan trọng cho hệ điều hành.
- Kích hoạt và cấu hình cho Iptables.
- Cài đặt một hệ thống phát hiện xâm nhập cho host (HIDS).
- Không cài đặt bất kỳ các ứng dụng hoặc dịch vụ dư thừa nào.
- Đặt mật khẩu bảo vệ cho bootloader (GRUB, LILO…).
- Đặt mật khẩu cho chế độ single-user nếu cần
Bảo vệ hệ thống file
- Tìm kiếm các file và thư mục có quyền hạn truy cập chưa phù hợp, và sửa hết các lỗi mà bạn tìm ra. Các điểm quan trọng nhất là:
- Các file thực thi và các thư mục được gán quyền ghi cho group hoặc other. - Các thư mục home của người dùng được gán quyền ghi cho group hoặc other.
- Sử dụng các tùy chọn khi mount các filesytem (như nosuid, nodev, noexec).
- Mã hóa các dữ liệu quan trọng, nhạy cảm có trên hệ thống.
Cấu hình cho các phần mềm, dịch vụ
- Loại bỏ hoặc tắt tất cả các dịch vụ không cần thiết. Các dịch vụ được khởi chạy theo vài cách khác nhau: thiết lập trong /etc/inittab, từ các script khởi động, hoặc bởi inetd.
- Chỉ sử dụng các phiên bản phần mềm an toàn. Không phải lúc nào phiên bản mới nhất cũng hoạt động ổn định và không chứa lỗi.
- Nếu có thể, chạy các tiến trình cho các dịch vụ máy chủ (như httpd, named, dhcpd,…) với quyền của một tài khoản đặc biệt được tạo riêng cho mục đích chạy các dịch vụ đó thay vì chạy tất cả các dịch vụ này với quyền root.
- Khi có thể, sử dụng chroot để chạy các dịch vụ máy chủ bên trong một cây thư mục được cách ly.
- Xác lập số lượng tối đa instance cho các dịch vụ nếu có thể.
- Kiểm soát truy cập và ghi nhận lại hoạt động (log) của tất cả các dịch vụ. Cài đặt TCP Wrappers nếu cần. Cấm tất cả các truy cập từ bên ngoài vào hệ thống (file /etc/hosts.deny), sau đó chỉ cấp quyền truy cập xác đáng cho các người dùng tin cậy (file /etc/hosts.allow).
- Kiểm soát truy cập ở cấp người dùng cho mỗi dịch vụ. Ví dụ, cron và at cho phép bạn giới hạn lại những người dùng nào có thể sử dụng chúng.
- Bảo mật cho tất cả các dịch vụ, bất kể hiện tại chúng có can hệ tới vấn đề bảo mật hay không (ví dụ, dịch vụ in ấn).
Bảo mật cho tài khoản root
- Đặt mật khẩu mạnh cho root, và có kế hoạch thay đổi mật khẩu định kỳ.
- Giới hạn những tài khoản được sử dụng lệnh su.
- Sử dụng sudo để cấp cho các người dùng thông thường đặc quyền root bị giới hạn khi cần.
- Ngoại trừ giao tiếp console, còn lại bạn không nên đăng nhập trưc tiếp với root từ xa.
Quy định về độ phức tạp và thời hạn hết hiệu lực của mật khẩu
- Thiết lập các file sẽ được tạo ra mặc định cho từng người dùng hoặc cho toàn bộ các tài khoản trong /etc/skel
- Đảm bảo rằng các tài khoản hệ thống đặc biệt (operator, bin, daemon, httpd,…) không thể được sử dụng để đăng nhập vào hệ thống bằng cách khóa mật khẩu hoặc gán non-login shell (/bin/false, /bin/nologin) cho chúng.
- Loại bỏ các tài khoản mặc định được tạo sẵn nhưng không cần thiết để sử dụng.
Bảo mật cho chứng thực từ xa
- Vô hiệu hóa /etc/hosts.equiv và .rhosts vì chúng cho phép chứng thực cho một máy ở xa mà không cần mật khẩu.
- Sử dụng ssh thay cho rlogin, rsh, telnet, ftp, rcp… để đăng nhập quản lý máy tính từ xa.
Luôn thực hiện giám sát hoạt động của hệ thống
- Cấu hình syslog. Gửi và sao chép các thông báo syslog tới máy chủ quản lý syslog tập trung.
- Kích hoạt process accounting.
- Cài đặt Tripwire, cấu hình cho nó, và thu thập các dữ liệu. Ghi mảng dữ liệu này vào thiết bị lưu trữ bên ngoài để phân tích sau, rồi xóa bỏ mảng dữ liệu đó khỏi hệ thống. Cuối cùng, cấu hình Tripwire chạy thường trú cùng hệ thống.
- Thiết kế và triển khai kế hoạch giám sát thông tin log liên quan tới các sự kiện bảo mật.
Các hoạt động khác cần thực hiện
- Xóa file mã nguồn (source code) còn xót lại của kernel và các gói phần mềm khác khỏi hệ thống.
- Cấu hình ACL (access control list) trên router…
- Luôn kiểm tra các bản cập nhật bảo mật cho các phần mềm được cài đặt và sử dụng trên hệ thống.