1. Trang chủ
  2. » Tất cả

20 cách giúp tăng cường bảo mật cho linux server

15 621 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề 20 cách giúp tăng cường bảo mật cho linux server
Thể loại bài viết
Định dạng
Số trang 15
Dung lượng 153,44 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

20 cách giúp tăng cường bảo mật cho Linux server – Phần 1Bảo mật cho máy chủ Linux của bạn là điều hết sức quan trọng để bảo vệ dữ liệu, các sở hữu trí tuệ, và cả thời gian, tiền bạc khỏ

Trang 1

20 cách giúp tăng cường bảo mật cho Linux server – Phần 1

Bảo mật cho máy chủ Linux của bạn là điều hết sức quan trọng để bảo vệ dữ liệu, các sở hữu trí tuệ, và cả thời gian, tiền bạc khỏi “bàn tay đen” của các hacker Người quản trị hệ thống chịu trách nhiệm chính cho việc bảo mật trên máy chủ Linux Trong phần đầu tiên của loạt bài viết về bảo mật Linux server, tôi sẽ cung cấp cho các bạn 20 thủ thuật giúp tăng cường an ninh cho Linux server

#1: Mã hóa dữ liệu được truyền đi

Tất cả các dữ liệu gửi qua môi trường mạng đều có nguy cơ bị hacker tóm được (sniff) ngay trên đường truyền Vì vậy, bất cứ khi nào có thể bạn nên mã hóa dữ liệu được truyền đi với thuật toán mã hóa và mật khẩu đủ mạnh hay sử dụng các chứng thư số (certificate)

1. Sử dụng các chương trình scp, ssh, rsync hoặc sftp để truyền file qua mạng Với 2

công cụ fuse và sshfs, bạn cũng có thể mount các file system nằm trên server ở xa

(remote server file system) một cách an toàn thông qua SSH

2. GnuPG giúp mã hóa dữ liệu và tạo chữ ký số cho file, thêm vào đó là tính năng quản lý khóa mã hóa tiện lợi

3. Fugu là một frontend có giao diện đồ họa cho SFTP SFTP cũng giống với FTP, chỉ khác là SFTP sẽ mã hóa toàn bộ phiên làm việc, có nghĩa rằng cả mật khẩu và các dữ liệu khác sẽ được mã hóa trước khi gửi đi Và như vậy dù cho hacker có tóm được dữ liệu đó cũng không thể nào đọc được thông tin đã được mã hóa bởi SFTP Một tùy chọn khác là FileZilla – chương trình client chạy trên nhiều nền

Trang 2

tảng như Linux, Windows… (cross-platform), hỗ trợ các giao thức như FTP, FTPS (FTP over SSL/TSL), SFTP (SSH FTP)…

4. OpenVPN chương trình SSL/VPN nhẹ nhàng, hiệu quả

5. Lighttpd SSL (Secure Server Layer) Https <= xem thêm cách cài đặt và cấu hình

6. Apache SSL (Secure Server Layer) Https (mod_ssl) <= xem thêm cách cài đặt và cấu hình

#1.1: Tránh sử dụng FTP, Telnet, và Rlogin / Rsh

Bất kỳ ai nằm trên cùng một mạng với bạn đều có thể sử dụng một trình bắt gói tin (packet sniffer) để tóm lấy các thông tin (như thông số cấu hình mạng, username,

password, câu lệnh, file…) chưa được mã hóa được gửi bởi các chương trình như FTP, Telnet, Rlogin/Rsh Giải pháp chung cho vấn đề này là chuyển sang sử dụng các chương trình như OpenSSH , SFTP, hoặc FTPS Đối với Fedora/CentOS/RHEL, gõ câu lệnh sau

để xóa bỏ NIS, rsh và các dịch vụ lỗi thời khác:

# yum erase inetd xinetd ypserv tftp-server telnet-server rsh-serve

#2: Giảm tối thiểu các gói phần mềm được cài đặt

Bạn có thật sự cần cài đặt hết tất cả các loại web service (Apache, IIS…) không? Hãy tránh cài đặt các gói phần mềm không cần thiết để tránh nguy cơ lỗ hổng ẩn chứa trong

các phần mềm đó bị khai thác Sử dụng các trình quản lý gói như yum, rpm, apt-get,

dpkg… để xem tất cả các gói đã cài trên hệ thống Sau đó, xóa bỏ các gói không cần thiết.

Đối với Redhat-based Distro

# yum list installed

# yum list packageName

# yum remove packageName

Hoặc với Debian-based Distro

Trang 3

# dpkg –list

# dpkg –info packageName

# apt-get remove packageName

#3: Mỗi dịch vụ mạng chạy trên một hệ thống thực (hoặc máy ảo) riêng biệt

Nếu có thể, bạn nên chạy các dịch vụ mạng khác nhau trên các server tách biệt nhau Điều này giúp giảm thiểu rủi ro các dịch vụ sẽ bị “chết chùm” khi chúng nằm trên cùng một server Ví dụ, nếu một hacker có thể khai thác thành công một lỗ hổng của phần mềm như Apache, hắn sẽ có toàn quyền truy cập vào server và gây ảnh hưởng cho các dịch vụ khác như MySQL, e-mail nằm trên cùng server với Apache Xem thêm cách cài đặt và cấu hình môi trường ảo hóa trên Linux:

• Install and Setup XEN Virtualization Software on CentOS Linux 5

• How To Setup OpenVZ under RHEL / CentOS Linux

#4: Cập nhật đầy đủ và thường xuyên cho Linux kernel và các phần mềm khác

Trang 4

Áp dụng các bản vá bảo mật là một công việc quan trọng trong kế hoạch bảo trì Linux sever Linux cung cấp tất cả các công cụ cần thiết để đảm bảo hệ thống của bạn luôn được cập nhật, đồng thời giúp nâng cấp dễ dàng giữa các phiên bản Bạn nên kiểm duyệt

và áp dụng tất cả các bản cập nhật ngay khi có thể Một lần nữa, sử dụng yum, apt-get…

để thực hiện việc cập nhật này

# yum update

hoặc

# apt-get update && apt-get upgrade

Bạn có thể cấu hình cho Red hat / CentOS / Fedora để nhận thông báo về các bản cập nhật mới qua email (xem thêm update notification via email), dưới Debian / Ubuntu có thể sử dụng apticron Một tùy chọn khác để cài đặt tất cả các bản cập nhật là sử dụng cron (xem thêm all security updates )

#5: Sử dụng Linux Security Extensions

Có nhiều công cụ giúp bảo vệ Linux trước các lỗi bảo mật như cấu hình hệ thống lỏng lẻo, tạo kẽ hở cho kẻ xâm nhập, các chương trình bị tấn công… Nếu có thể, bạn nên sử dụng SELinux và các security extension khác để quản lý chặt chẽ các chương trình và mạng (xem thêm SELinux and other Linux security) Ví dụ, SELinux cung cấp khá nhiều các chính sách bảo mật khác nhau dành cho Linux kernel

#5.1: SELinux

Khuyến khích các bạn sử dụng cơ chế Mandatory Access Control (MAC) mà SELinux cung cấp Còn theo cơ chế DAC (Discretionary Access Control), một ứng dụng hoặc tiến

trình được khởi chạy bởi người dùng nào đó thì ứng dụng này có các quyền hạn trên các đối tượng (file, socket,…) giống với quyền hạn của người dùng đã khởi chạy nó Việc chạy MAC giúp bảo vệ hệ thống khỏi bị phá hoại bởi các chương trình độc hại hoặc chứa lỗi Giải thích chi tiết cấu hình cho SELinux có trong kho tài liệu chính thức của Redhat Xem thêm:

20 cách giúp tăng cường bảo mật cho Linux server – Phần 1

Trang 5

20 cách giúp tăng cường bảo mật cho Linux server – Phần 2

20 cách giúp tăng cường bảo mật cho Linux server – Phần 3

20 cách giúp tăng cường bảo mật cho Linux server – Phần 2

• 2 Comments

Tiếp theo phần 1 của loạt bài viết về bảo mật cho Linux server Ở phần 2 này, tôi xin giới thiệu tới các bạn 5 cách nữa để tăng cường an ninh cho máy chủ chạy Linux

Xem thêm:

20 cách giúp tăng cường bảo mật cho Linux server – Phần 1

20 cách giúp tăng cường bảo mật cho Linux server – Phần 2

20 cách giúp tăng cường bảo mật cho Linux server – Phần 3

#6: Quản lý tài khoản người dùng và chính sách mật khẩu mạnh

Sử dụng lệnh useradd/usermod để tạo và quản lý các tài khoản người dùng Hãy đảm bảo rằng bạn áp dụng chính sách mật khẩu mạnh Ví dụ, một mật khẩu mạnh bao gồm ít nhất

8 ký tự và kết hợp cả chữ cái, chữ số, ký tự đặc biệt, chữ hoa, chữ thường… Nhưng hầu hết mọi người đều chọn một mật khẩu dễ ghi nhớ Điều này tạo cơ hội để hacker sử dụng các công cụ như John the ripperđể dò tìm các mật khẩu yếu trên server của bạn Cấu hình file pam_cracklib.so để thực thi chính sách mật khẩu mà bạn mong muốn

Trang 6

#6.1: Thời gian tồn tại của mật khẩu (password aging)

Lệnh chage cho phép thay đổi số ngày giữa các lần thay đổi mật khẩu và ngày thay đổi mật khẩu lần cuối Dựa vào 2 thông tin này, hệ thống sẽ xác định xem khi xem nào người dùng cần thay đổi mật khẩu của họ File /etc/login.defs cũng bao gồm cấu hình password aging

Để vô hiệu hóa password aging, tức là mật khẩu sẽ không bao giờ hết hạn, bạn gõ lệnh sau:

# chage -M 99999 userName

Để xem thông tin về thời gian mãn hạn của mật khẩu, gõ:

# chage -l userName

Cuối cùng, bạn cũng có thể chỉnh sửa file /etc/shadow file theo sự giải thích về các trường dưới đây:

{userName}:{password}:{lastpasswdchanged}:{Minimum_days}:{Maximum_days}: {Warn}:{Inactive}:{Expire}:

1. Minimum_days: Số ngày tối thiểu để thay đổi mật khẩu Tức là, trước khi người dùng được phép thay đổi mật khẩu của họ thì mật khẩu phải tồn tại ít nhất trong

Mininum_days ngày.

2. Maximum_days: Số ngày tối đa mà mật khẩu còn hiệu lực Tức là, sau khi mật

khẩu đã tồn tại trong Maximum_days ngày, người dùng bắt buộc phải thay đổi mật

khẩu của họ

3. Warn : Số ngày trước khi mật khẩu hết hạn mà người dùng sẽ nhận được cảnh báo rằng mật khẩu của họ cần phải được thay đổi

Trang 7

4. Expire : Số ngày kể từ ngày 01/01/1970 tài khoản sẽ bị khóa

Khuyên cáo bạn nên sử dụng lệnh chage thay vì tự tay chỉnh sửa file /etc/shadow

Xem thêm

• Linux: Force Users To Change Their Passwords Upon First Login

• Linux turn On / Off password expiration / aging

• Lock the user password

• Search for all account without password and lock them

• Use Linux groups to enhance security

#6.2: Hạn chế sử dụng lại các mật khẩu trước đó

Trong Linux, bạn có thể ngăn chặn tất cả các người dùng sử dụng lại các mật khẩu cũ, đã từng sử dụng trước đó Tham số remember của module pam_unixcho biết số lượng các mật khẩu trước đó sẽ không được sử dụng lại

#6.3: Khóa tài khoản sau một số lần đăng nhập thất bại

Dưới Linux, bạn có thể sử dụng lệnh faillog để hiển thị các bản ghi hoặc để thiết lập giới hạn số lần đăng nhập thất bại

Để mở khóa cho tài khoản sau khi tài khoản này bị khóa sau 1 số lần đăng nhập thất bại, gõ:

# faillog -r -u userName //–reset = -r

Lưu ý: bạn có thể sử dụng lệnh passwd để khóa hoặc mở khóa tài khoản

Trang 8

# passwd -l userName //khóa tài khoản

# passwd -u userName //mở khóa tài khoản

#6.4: Xác định các tài khoản sử dụng mật khẩu rỗng Bạn gõ lệnh sau:

# awk -F: ‘($2 == “”) {print}’ /etc/shadow

Khóa tài khoản có mật khẩu rỗng

# passwd -l accountName

#6.5: Đảm bảo rằng không có người dùng thông thường nào có UID = 0

Chỉ có tài khoản root có UID =0 với quyền hạn cao nhất để truy cập vào hệ thống Gõ lệnh sau để hiển thị tất cả các tài khoản với UID = 0

# awk -F: ‘($3 == “0″) {print}’ /etc/passwd

Bạn sẽ thấy ít nhất 1 dòng tương ứng với tài khoản root như sau:

root:x:0:0:root:/root:/bin/bash

Trường thứ 3 cho biết giá trị UID Nếu có thêm các tài khoản khác có UID =0, hãy đổi lại UID cho những tài khoản này sử dụng lệnh sau:

# usermod –u new_UID userName

#7: Đừng bao giờ đăng nhập với root

Trang 9

Hạn chế tối đa đăng nhập với tài khoản root! Thay vào đó, bạn nên sử dụng sudo để thực thi các lệnh với quyền root khi cần thiết mà không cần phải cung cấp mật khẩu của root Ngoài ra, sudo cũng cung cấp các tính năng auditing và tracking giúp bạn biết được người dùng đã chạy những lệnh sudo nào

#8: Bảo mật vật lý cho server

Cấu hình lại BIOS và vô hiệu hóa việc khởi động từ các thiết bị ngoại vi như

DVD/CD/USB Bạn cũng nên đặt mật khẩu bảo vệ cho GRUB Những máy chủ quan trọng cần được khóa cẩn thận trong các IDC (Internet Data Center) và tất cả mọi người phải trải qua các bước kiểm tra an ninh trước khi truy cập vào server của bạn Xem thêm:

• 9 Tips To Protect Linux Servers Physical Console Access

#9: Tắt hết các dịch vụ không cần thiết

Bạn cần loại bỏ tất cả các dịch vụ (service hoặc daemon) không cần thiết khỏi quá trình khởi động của hệ thống Điều này giúp gia tăng tốc độ hoạt động cũng như sự ổn định của hệ thống và quan trọng hơn là giúp server giảm thiểu được nguy cơ bị tấn công bề mặt (surface attack) vào các dịch vụ ẩn chứa lỗ hổng Sử dụng lệnh chkconfig để liệt kê tất cả các dịch vụ được khởi chạy cùng hệ thống ở runlevel 3

# chkconfig –list | grep ’3:on’

Để tắt một dịch vụ nào đó, gõ:

# service serviceName stop

Hoặc

# chkconfig serviceName off

#9.1: Tìm các cổng dịch vụ (port) đang mở trên server

Trang 10

Sử dụng lệnh sau để liệt kê tất cả các port đang mở và các chương trình sử dụng các port đó

netstat -tulpn

hoặc

nmap -sT -O localhost

nmap -sT -O server.example.com

Sử dụng iptables để đóng các port đang mở hoặc sử dụng 2 lệnh service và chkconfig ở trên để tắt các dịch vụ mạng không cần thiết

#9.2: Xem thêm

• update-rc.d like command on Redhat Enterprise / CentOS Linux

• Ubuntu / Debian Linux: Services Configuration Tool to Start / Stop System

Services

• Get Detailed Information About Particular IP

#10: Gỡ bỏ X Windows

Thành phần đồ họa X Windows thật không cần thiết chạy trên Linux server! Không có lý

do nào lại chạy X Windows trên Mail server hoặc Apache web server của bạn Bạn có thể loại bỏ hoàn toàn X Windows để nâng cao hiệu suất hoạt động và bảo mật cho server theo các bước sau:

- Chỉnh sửa file /etc/inittab để thiết lập cho Linux khởi chạy ở runlevel 3

- Xóa X Windows system bằng lệnh yum

# yum groupremove “X Window System”

20 cách giúp tăng cường bảo mật cho Linux server – Phần 3

Trang 11

Chúng ta sẽ tiếp tục cùng tìm hiểu thêm 5 cách trong phẩn 3 này

để bảo mật cho Linux server

Xem thêm:

20 cách giúp tăng cường bảo mật cho Linux server – Phần 1

20 cách giúp tăng cường bảo mật cho Linux server – Phần 2

20 cách giúp tăng cường bảo mật cho Linux server – Phần 3

#11: Cấu hình cho Iptables và TCPWrappers

Iptables là một chương trình hoạt động ở user space (hay userland, user mode – vùng bộ nhớ dành cho các chương trình người dùng, trái với kernel space – vùng bộ nhớ dành riêng cho các chương trình hệ thống như hệ điều hành, driver,…) Iptables cho phép bạn cấu hình tính năng firewall (Netfilter) được cung cấp bởi Linux kernel Bạn sử dụng firewall để cản lọc các gói tin đi vào và đi ra từ máy tính hoặc hệ thống mạng của bạn

Bên cạnh đó, TCPWrappers – một hệ thống kiểm soát truy cập mạng cho host (host-based networking ACL system) cho phép bạn lọc các yêu cầu kết nối ra mạng ngoài (ví

dụ, Internet) Bạn có thể ngăn chặn nhiều cuộc tấn công từ chối dịch vụ với sự trợ giúp của Iptables Xem thêm:

• Lighttpd Traffic Shaping: Throttle Connections Per Single IP (Rate Limit)

• How to: Linux Iptables block common attack

• psad: Linux Detect And Block Port Scan Attacks In Real Time

#12: Bảo vệ Linux Kernel với /etc/sysctl.conf

Trang 12

File /etc/sysctl.conf được sử dụng để cấu hình các tham số cho kernel tại thời điểm kernel

được thực thi Linux đọc và áp dụng các thiết lập trong file này tại quá trình khởi động Dưới đây là nội dung mẫu của file /etc/sysctl.conf

# 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: Chia tách các phân vùng ổ cứng

Tách biệt các file của hệ điều hành khỏi các chương trình, dữ liệu cá nhân của người dùng Hay nói cách khác, đặt các loại dữ liệu này trên các phân vùng khác nhau, sẽ giúp

hệ thống chạy ổn định và an toàn hơn Đảm bảo rằng các hệ thống file (filesystem) dưới đây được gắn (mount) trên các phân vùng riêng rẽ:

• /usr

• /home

• /var và /var/tmp

• /tmp

Trang 13

Tạo thêm các phân vùng tách biệt cho Apache và FTP server Chỉnh sửa file /etc/fstab và chắc rằng bạn đã thêm vào các tùy chọn cấu hình sau:

1. noexec – Không gán quyền thực thi (execute) cho các file nhị phân (binary) trên phân vùng này Điều này sẽ ngăn cản việc thực thi file binary nhưng cho phép chạy các script

2. nodev – Không cho phép (hoặc diễn dịch) các thiết bị kiểu character hoặc thiết bị kiểu block trên phân vùng này

3. nosuid – Các SUID/SGID sẽ mất hiệu lực trên phân vùng này

Chú thích:

- character device: thiết bị cho phép đọc/ghi 0 hoặc nhiều byte thành từng luồng

(stream) có kích thước không cố định Ví dụ; TTY, bàn phím…

- block device: thiết bị cho phép đọc/ghi lên nó một khối các byte có kích thước cố

định Ví dụ: ổ cứng, ổ flash…

Ví dụ, một dòng mẫu trong file /etc/fstab dưới đây sẽ giới hạn việc truy cập của người dùng trên phân vùng /dev/sda5 (thư mục gốc trên FPT server):

/dev/sda5 /ftpdata ext3 defaults,nosuid,nodev,noexec 1 2

#13.1: Hạn ngạch ổ đĩa (Disk Quotas)

Hãy chắc rằng Disk Quota được kích hoạt cho tất cả người dùng Để triển khai Disk quotas, bạn làm theo các bước sau:

1. Kích hoạt quotas trên các filesytem bằng cách chỉnh sửa file /etc/fstab

2. Mount lại các filesystem đó

Ngày đăng: 14/12/2021, 16:38

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w