Bảo vệ máy chủ Linux của bạn là rất quan trọng để bảo vệ dữ liệu của bạn, sở hữu trí tuệ, và thời gian, từ các tin tặc. Người quản trị hệ thống có trách nhiệm bảo mật Linux box. Trong phần đầu tiên của loạt bài an ninh máy chủ Linux, tôi sẽ cung cấp 20 lời khuyên nâng cao để cài đặt mặc định của hệ thống Linux. Danh sách và các mẹo bảo mật nâng cao Các hướng dẫn sau đây giả định rằng bạn đang sử dụng CentOS / RHEL hoặc phân phối Linux dựa trên Ubuntu / Debian. # 1: Mã hóa truyền số liệu Tất cả các dữ liệu được truyền qua mạng được mở để theo dõi. Mã hóa truyền dữ liệu có thể sử dụng với mật khẩu hoặc sử dụng các khóa hay chứng chỉ. Sử dụng scp, ssh, rsync, hoặc sftp để chuyển file. Bạn cũng có thể gắn kết hệ thống tập tin máy chủ từ xa hoặc thư mục home của riêng bạn sử dụng sshfs đặc biệt và công cụ fuse. GnuPG cho phép mã hóa dữ liệu và thông tin liên lạc của bạn, có một hệ thống managment chính linh hoạt cũng như các mô-đun truy cập cho tất cả các loại thư mụ c khóa công khai. Fugu là một frontend đồ họa sử dụng ứng dụng Secure File Transfer (SFTP). SFTP là tương tự như FTP, nhưng không giống như FTP, toàn bộ phiên được mã hóa, có nghĩa là không có mật khẩu được gửi dưới dạng cleartext, và vì thế ít bị của bên thứ ba đánh chặn. Một lựa chọn khác là FileZilla - một phần mền hỗ trợ FTP, FTP trên SSL/TLS (FTPS) và SSH File Transfer Protocol (SFTP). OpenVPN là một giải pháp tiết kiệm chi phí . # 1.1: Tránh sử dụng dịch vụ FTP, Telnet, Rlogin / Rsh Theo hầu hết các cấu hình mạng, tên người dùng, mật khẩu, FTP/Telnet/lệnh rsh và các tập tin chuyển giao có thể được lấy bởi bất cứ ai trên cùng một mạng sử dụng một gói sniffer. Các giải pháp chung cho vấn đề này là sử dụng hoặc OpenSSH, SFTP, hoặc FTPS (FTP trên SSL). Gõ lệnh sau để xóa NIS, rsh và dịch vụ lạc hậu khác: Mã: yum erase inetd xinetd ypserv tftp-server telnet-server rsh-serve # 2: Giảm thiểu phần mềm cài đặt Tránh cài đặt các phần mềm không cần thiết để tránh các lỗ hổng trong phần mềm. Sử dụng trình quản lý gói RPM như yum hay apt-get và/hoặc dpkg để xem xét tất cả các thiết lập cài đặt các gói phần mềm trên hệ thống. Xóa tất cả các gói không mong muốn. Mã: yum list installed yum list packageName yum remove packageName Hoặc: dpkg --list dpkg --info packageName apt-get remove packageName # 3: Một dịch vụ mạng trên mỗi hệ thống hoặc VM Instance Chạy các dịch vụ mạng khác nhau trên các máy chủ riêng biệt hoặc VM Instance. Điều này hạn chế số lượng các dịch vụ khác có thể bị tổn hại. Ví dụ, nếu một kẻ tấn công có thể khai thác thành công một phần mềm như Apache, anh/cô ấy sẽ nhận được quyền truy cập vào toàn bộ máy chủ bao gồm các dịch vụ khác như MySQL, máy chủ e-mail và như vậy. # 4: Giữ Linux Kernel và các phần mền luôn cập nhật Áp dụng các bản vá lỗi bảo mật là một phần quan trọng của việc duy trì máy chủ Linux. Linux cung cấp tất cả các công cụ cần thiết để giữ cho hệ thống của bạn được cập nhật, và cũng cho phép dễ dàng nâng cấp giữa các phiên bản. Tất cả các bản cập nhật bảo mật nên được xem xét và áp dụng càng sớm càng tốt. Một lần nữa, sử dụng trình quản lý gói RPM như yum và/hay apt-get và/hoặc dpkg để cập nhật bảo mật. Mã: yum update Hoặc: Mã: apt-get update && apt-get upgrade # 5: Sử dụng tiện ích an ninh Linux Linux đi kèm với các bản vá lỗi bảo mật khác nhau mà có thể được sử dụng để bảo vệ chống lại các chương trình cấu hình sai hoặc bị tổn thương. Nếu có thể sử dụng SELinux và tiện tích an ninh khác Linux để thực thi các hạn chế trên mạng và các chương trình khác. Ví dụ, SELinux cung cấp một loạt các chính sách bảo mật cho Linux kernel. # 5.1: SELinux Tôi khuyên các bạn nên sử dụng SELinux mà cung cấp một linh hoạt Mandatory Access Control (MAC). Theo tiêu chuẩn Linux Discretionary Access Control (DAC), một ứng dụng hoặc quá trình chạy như một người dùng (UID hoặc SUID) có quyền truy cập đến các đối tượng như các tập tin, socket, và các quá trình khác. Chạy một hạt nhân MAC bảo vệ hệ thống từ các ứng dụng độc hại hoặc thiếu sót mà có thể gây thiệt hại hoặc phá hủy hệ thống. Xem tài liệu Redhat chính thức giải thích cấu hình SELinux. # 6: Chính xác User Account và Strong Password Sử dụng các lệnh useradd/usermod để tạo ra và duy trì tài khoản người dùng. Hãy chắc chắn rằng bạn có một chính sách mật khẩu tốt và mạnh mẽ. Ví dụ, một mật khẩu tốt bao gồm dài ít nhất 8 ký tự và hỗn hợp của bảng chữ cái, số, ký tự đặc biệt, bảng chữ cái trên và dưới, vv Quan trọng nhất chọn một mật khẩu, bạn có thể nhớ. # 6.1: Thời gian mật khẩu Lệnh chage thay đổi số ngày giữa ngày thay đổi mật khẩu và ngày thay đổi mật khẩu cuối cùng. Thông tin này được sử dụng bởi hệ thống để xác định khi nào một người dùng phải thay đổi mật khẩu của mình. Tập tin /etc/login.defs xác định cấu hình trang web cụ thể cho các bộ shadow password bao gồm cấu hình thời gian mật khẩu. Để vô hiệu, hãy nhập: Mã: chage -M 99999 userName Để có được thông tin hết hạn mật khẩu, hãy nhập: Mã: chage -l userName Cuối cùng, bạn cũng có thể chỉnh sửa file /etc/shadow trong các trường sau: Mã: {userName}:{password}:{lastpasswdchanged}:{Minimum_days}:{Maximum_days}:{Warn}:{Inactive}:{Expire}: Tôi khuyên bạn nên dùng lệnh chage thay vì chỉnh sửa /etc/shadow bằng tay: Mã: chage -M 60 -m 7 -W 7 userName # 6.2: Hạn chế sử dụng các mật khẩu trước Bạn có thể ngăn chặn tất cả người dùng sử dụng hoặc sử dụng lại mật khẩu cũ trong Linux. Tham số mô-đun pam_unix có thể được sử dụng để cấu hình số lượng mật khẩu trước đó mà không thể được tái sử dụng. # 6.3: Khóa tài khoản sau khi đăng nhập thất bại Trong Linux, bạn có thể sử dụng lệnh faillog để hiển thị hồ sơ faillog hoặc để thiết lập giới hạn thất bại đăng nhập. Nó cũng có thể được sử dụng để duy trì bộ đếm thất bại và limits.Để thấy nỗ lực đăng nhập thất bại, hãy nhập: Mã: faillog Để mở khóa tài khoản sau khi đăng nhập thất bại, chạy: Mã: faillog -r -u userName Lưu ý: Bạn có thể sử dụng lệnh passwd để khóa và mở khóa tài khoản: Mã: # lock account passwd -l userName # unlock account passwd -u userName # 6.4: Làm sao tôi xác đinh tài khoản nào không có mật khẩu? Gõ lệnh sau đây: Mã: awk -F: '($2 == "") {print}' /etc/shadow Khóa tất cả các tài khoản mật khẩu rỗng: Mã: passwd -l accountName # 6.5: Hãy chắc không có tài khoản Non-Root có UID được thiết lập 0 Chỉ có tài khoản root là có UID 0 và được toàn quyền truy cập vào hệ thống. Gõ lệnh sau đây để hiển thị tất cả các tài khoản với bộ UID 0: Mã: awk -F: '($3 == "0") {print}' /etc/passwd Bạn chỉ cần nhìn thấy một dòng như sau: Mã: root:x:0:0:root:/root:/bin/bash Nếu bạn nhìn thấy dòng khác, xóa chúng hoặc chắc chắn rằng các tài khoản khác được ủy quyền của bạn cho phép sử dụng UID 0. # 7: Vô hiệu đặng nhập root Đừng bao giờ đăng nhập sử dụng user root. Bạn nên sử dụng sudo để thực hiện các lệnh cấp cao và khi cần thiết. sudo không những tăng cường an ninh của hệ thống mà sẽ không chia sẻ mật khẩu root với những người dùng khác và các quản trị viên. sudo cung cấp kiểm toán đơn giản và theo dõi tính năng. # 8: Bảo vệ máy chủ vật lý Bạn phải bảo vệ các máy chủ Linux truy cập giao diện điều khiển vật lý. Cấu hình BIOS và vô hiệu hóa khả năng khởi động từ các thiết bị bên ngoài như đĩa DVD/CD/USB. Thiết lập BIOS và mật khẩu bộ nạp khởi động grub để bảo vệ các thiết lập này. Tất cả các production boxes phải được khóa trong các IDC (Internet Data Center) và tất cả những người phải vượt qua một loại các kiểm tra an ninh trước khi truy cập máy chủ của bạn. # 9: Vô hiệu hoá dịch vụ không mong muốn Vô hiệu hóa tất cả các dịch vụ và daemon không cần thiết (các dịch vụ chạy nền). Bạn cần phải loại bỏ tất cả các dịch vụ không cần thiết từ hệ thống khởi động. Gõ lệnh sau để liệt kê tất cả các dịch vụ được bắt đầu vào lúc khởi động ở mức chạy 3: Mã: chkconfig --list | grep '3:on' Để vô hiệu hóa dịch vụ, hãy nhập: Mã: service serviceName stop chkconfig serviceName off Tìm các cổng mạng lắng nghe Sử dụng lệnh sau để liệt kê tất cả các cổng mở và các chương trình liên quan: Mã: netstat -tulpn Sử dụng iptables để đóng cổng mở hoặc ngăn chặn tất cả các dịch vụ mạng không mong muốn. # 10: Xóa X Windows X Windows trên máy chủ là không cần thiết. Không có lý do để chạy X Windows trên hộp thư riêng của bạn và máy chủ web Apache. Bạn có thể vô hiệu hóa và loại bỏ X Windows để cải thiện bảo mật máy chủ và hiệu suất. Chỉnh sửa /etc/inittab và thiết lập mức chạy đến 3. Cuối cùng, loại bỏ X Windows, hãy nhập: Mã: yum groupremove "X Window System" # 11: Cấu hình Iptables và TCPWrappers Iptables là một chương trình ứng dụng không gian sử dụng mà cho phép bạn cấu hình tường lửa (Netfilter) được cung cấp bởi hạt nhân Linux. Sử dụng tường lửa để lọc các thông tin và chỉ cho phép giao thông cần thiết. Cũng sử dụng TCPWrappers một hệ thống mạng ACL dựa trên máy chủ để lọc truy cập mạng Internet. Bạn có thể ngăn chặn nhiều loại tấn công từ chối dịch vụ với sự giúp đỡ của Iptables. # 12: Linux Kernel /etc/sysctl.conf Hardening Tập tin /etc/sysctl.conf được sử dụng để cấu hình các thông số hạt nhân tại thời gian chạy. Linux đọc và áp dụng cài đặt từ /etc/sysctl.conf vào lúc khởi động. Mẫu /etc/sysctl.conf: Mã: # Turn on execshield kernel.exec-shield=1 kernel.randomize_va_space=1 # Enable IP spoofing protection net.ipv4.conf.all.rp_filter=1 # Disable IP source routing net.ipv4.conf.all.accept_source_route=0 # Ignoring broadcasts request net.ipv4.icmp_echo_ignore_broadcasts=1 net.ipv4.icmp_ignore_bogus_error_messages=1 # Make sure spoofed packets get logged net.ipv4.conf.all.log_martians = 1 # 13: Phân vùng đĩa riêng biệt Tách các tập tin hệ điều hành từ tập tin người dùng có thể sẽ giúp hệ thống tốt hơn và an toàn. Hãy chắc chắn rằng hệ thống tập tin sau đây được đặt trên phân vùng riêng biệt: /usr /home /var and /var/tmp /tmp Tạo phân vùng riêng cho máy chủ Apache và FTP. Chỉnh sửa file /etc/fstab và chắc chắn rằng bạn thêm các tùy chọn cấu hình sau đây: noexec – Không thiết lập thực hiện bất kỳ tập tin nhị phân trên phân vùng này (ngăn chặn thực thi mã nhị phân nhưng cho phép các script). nodev - Không cho phép kí tự hoặc các thiết bị đặc biệt trên phân vùng này (ngăn chặn sử dụng các tập tin thiết bị như bằng zero, sda vv). nosuid - Không thiết lập truy cập SUID/SGID trên phân vùng này (ngăn chặn setuid bit). Mẫu /etc/fstab để hạn chế người dùng truy cập vào /dev/sda5 (ftp máy chủ thư mục gốc): Mã: /dev/sda5 /ftpdata ext3 defaults,nosuid,nodev,noexec 1 2 # 13.1: Disk Quotas Hãy chắc chắc hạn ngạch đĩa được kích hoạt cho tất cả người dùng. Để thực hiện hạn ngạch đĩa, sử dụng các bước sau đây: Kích hoạt tính năng hạn ngạch cho mỗi hệ thống tập tin bằng cách sửa đổi file /etc/fstab. Remount hệ thống tập tin (s). Tạo các tập tin cơ sở dữ liệu hạn ngạch và tạo ra các bảng sử dụng đĩa. Chỉ định chính sách hạn ngạch. Xem hướng dẫn thực hiện hạn ngạch đĩa để biết thêm chi tiết. # 14: Turn Off IPv6 Internet Protocol version 6 (IPv6) cung cấp một lớp Internet mới của giao thức TCP/IP thay thế giao thức Internet phiên bản 4 (IPv4) và cung cấp nhiều lợi ích. Hiện nay không có công cụ nào tốt mà có thể kiểm tra một hệ thống qua mạng cho các vấn đề an ninh IPv6. Hầu hết các distro Linux đã bắt đầu cho phép giao thức IPv6 bằng cách mặc định. Crackers có thể gửi lưu lượng xấu thông qua IPv6 nơi mà hầu hết các quản trị viên thường không theo dõi. Trừ khi cấu hình mạng đòi hỏi nó, vô hiệu hóa IPv6 hoặc cấu hình Linux IPv6 tường lửa. # 15: Vô hiệu hóa SUID không mong muốn và SGID Binaries Tất cả tập tin các bit SUID / SGID kích hoạt có thể được sử dụng sai khi SUID/SGID thực thi có vấn đề về bảo mật hoặc lỗi. Tất cả người dùng cục bộ hoặc từ xa có thể sử dụng tập tin như vậy. Đó là một ý tưởng tốt để tìm tất cả các tập tin như vậy. Sử dụng lệnh find như sau: Mã: #See all set user id files: find / -perm +4000 # See all group id files find / -perm +2000 # Or combine both in a single command find / \( -perm -4000 -o -perm -2000 \) -print find / -path -prune -o -type f -perm +6000 -ls # 15.1: World-Writable Files Bất cứ ai cũng có thể sửa đổi tập tin world-writable kvào một vấn đề an ninh. Sử dụng lệnh sau đây để tìm tất cả các thế giới bit ghi và dính thiết lập các tập tin: Mã: find /dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print Bạn cần phải điều tra từng file báo cáo và thiết lập đúng người dùng và nhóm được phép hoặc loại bỏ nó. # 15.2: Tập tin không sở hữa bởi user Tập tin không thuộc sở hữu của bất kỳ người dùng hoặc nhóm có thể đặt ra một vấn đề an ninh. Chỉ cần tìm thấy chúng với các lệnh sau đây mà không thuộc về một người dùng hợp lệ và một nhóm hợp lệ Mã: find /dir -xdev \( -nouser -o -nogroup \) –print Bạn cần phải điều tra từng file báo cáo và thiết lập đúng người dùng và nhóm được phép hoặc loại bỏ nó. # 16: Use A Centralized Authentication Service Nếu không có một hệ thống chứng thực tập trung, chứng thực dữ liệu người dùng trở nên không phù hợp, có thể dẫn tới thông tin lỗi thời và tài khoản bị lãng quên sẽ đã bị xóa ở vị trí đầu tiên. Một dịch vụ chứng thực tập trung sẽ cho phép bạn duy trì kiểm soát trung ương về dữ liệu tài khoản và xác thực Linux/UNIX. Bạn có thể giữ cho dữ liệu chứng thực đồng bộ giữa các máy chủ. Không sử dụng các dịch vụ NIS cho chứng thực tập trung. Sử dụng OpenLDAP cho khách hàng và máy chủ. # 16.1: Kerberos Kerberos, như một dịch vụ xác thực của bên thứ ba đáng tin cậy bằng cách sử dụng bí mật chia sẻ mật mã theo giả định rằng các gói tin đi dọc theo mạng không an toàn có thể được đọc, chỉnh sửa và chèn vào. Kerberos được xây dựng trên mật mã đối xứng và đòi hỏi một trung tâm phân phối chính. Bạn có thể thực hiện đăng nhập từ xa, sao chép từ xa, sao chép tập tin hệ thống an toàn và công việc có nguy cơ cao một cách an toàn hơn và kiểm soát hơn khi sử dụng Kerberos. # 17: Logging và Auditing Bạn cần phải cấu hình log và auditing để thu thập tất cả những ghi nhận về hacking và cracking. Theo mặc định syslog lưu trữ dữ liệu trong thư mục /var/log/ . Điều này cũng rất hữu ích để tìm ra cách chống lại các cuộc tấn công khác nhau. # 17.1: Giám sát tin nhắn đáng ngờ Log với logwatch/logcheck Đọc các bản ghi của bạn sử dụng logwatch hoặc Logcheck. Những công cụ làm cho cuộc sống đọc nhật ký của bạn dễ dàng hơn. Bạn nhận được báo cáo chi tiết về các log thường trong syslog qua email. Một báo cáo mẫu syslog: Mã: ################### Logwatch 7.3 (03/24/06) #################### Processing Initiated: Fri Oct 30 04:02:03 2009 Date Range Processed: yesterday ( 2009-Oct-29 ) Period is day. Detail Level of Output: 0 Type of Output: unformatted Logfiles for Host: www-52.nixcraft.net.in ################################################################## --------------------- Named Begin ------------------------ **Unmatched Entries** general: info: zone XXXXXX.com/IN: Transfer started.: 3 Time(s) general: info: zone XXXXXX.com/IN: refresh: retry limit for master ttttttttttttttttttt#53 exceeded (source ::#0): 3 Time(s) general: info: zone XXXXXX.com/IN: Transfer started.: 4 Time(s) general: info: zone XXXXXX.com/IN: refresh: retry limit for master ttttttttttttttttttt#53 exceeded (source ::#0): 4 Time(s) ---------------------- Named End ------------------------- --------------------- iptables firewall Begin ------------------------ Logged 87 packets on interface eth0 From 58.y.xxx.ww - 1 packet to tcp(8080) From 59.www.zzz.yyy - 1 packet to tcp(22) From 60.32.nnn.yyy - 2 packets to tcp(45633) From 222.xxx.ttt.zz - 5 packets to tcp(8000,8080,8800) ---------------------- iptables firewall End ------------------------- --------------------- SSHD Begin ----------------------- Users logging in through sshd: root: 123.xxx.ttt.zzz: 6 times ---------------------- SSHD End ------------------------- --------------------- Disk Space Begin ------------------------ Filesystem Size Used Avail Use% Mounted on /dev/sda3 450G 185G 241G 44% / /dev/sda1 99M 35M 60M 37% /boot ---------------------- Disk Space End ------------------------- ###################### Logwatch End ######################### # 17.2: Hệ thống thống kê với auditd Các auditd được cung cấp cho thống kê hệ thống. Đó là trách nhiệm viết hồ sơ thống kê. Trong khi khởi động, các quy tắc trong /etc/audit.rules được đọc bởi daemon này. Bạn có thể mở /etc/audit.rules tập tin và thực hiện thay đổi cũng như thiết lập vị trí tập tin nhật ký và tùy chọn khác. # 18: Bảo mật OpenSSH server Các giao thức SSH được khuyến khích để đăng nhập từ xa và chuyển tập tin từ xa. Tuy nhiên, ssh được mở cho nhiều cuộc tấn công. # 19: Cài đặt và sử dụng hệ thống phát hiện xâm nhập Một hệ thống phát hiện xâm nhập mạng (NIDS) là một hệ thống phát hiện xâm nhập được dùng để phát hiện hoạt động độc hại như tấn công từ chối dịch vụ, cổng quét hoặc thậm chí cố gắng để crack vào máy tính bằng cách giám sát lưu lượng mạng. Nếu có thể cài đặt phần mềm AIDE trước khi hệ thống được kết nối với bất kỳ mạng. AIDE là một hệ thống phát hiện xâm nhập dựa trên máy chủ (HIDS) nó có thể theo dõi và phân tích bên trong của một hệ thống máy tính. Snort là một phần mềm để phát hiện xâm nhập có khả năng thực hiện ghi các gói và phân tích lưu lượng thời gian thực trên các mạng IP. # 20: Bảo vệ tập tin, thư mục và email Linux cung cấp sự bảo vệ tuyệt vời chống lại quyền truy cập dữ liệu trái phép. Quyền tập tin và địa chỉ MAC ngăn chặn truy cập trái phép truy cập dữ liệu. Tuy nhiên, thiết lập cấp phép bởi các Linux là không thích hợp nếu một kẻ tấn công có thể truy cập vật lý vào máy tính và có thể đơn giản di chuyển ổ đĩa cứng của máy tính để hệ thống khác để sao chép và phân tích các dữ liệu nhạy cảm. Bạn có thể dễ dàng bảo vệ các tập tin, và partitons dưới Linux bằng cách sử dụng các công cụ sau đây: Để mã hóa và giải mã tập tin với một mật khẩu, sử dụng lệnh gpg. Linux hoặc mật khẩu bảo vệ tập tin UNIX với openssl và các công cụ khác. Mã hóa thư mục với eCryptfs. TrueCrypt là miễn phí mã nguồn mở phần mềm mã hóa ổ đĩa cho Windows 7 / Vista / XP, Mac OS X và Linux. Mã hóa phân vùng trong Linux cho các thiết bị di động. Thiết lập mã hóa Swap trên Linux. # 20.1: Bảo mật máy chủ Email Bạn có thể sử dụng giấy chứng nhận SSL và khóa gpg để bảo đảm thông tin liên lạc email trên cả máy chủ và máy tính khách hàng.